Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VSTO C#] Creare un pulsante visibile nel ribbon che carica un form all'interno del form di outlook (2007-2013)
Forum - C# / VB.NET - [VSTO C#] Creare un pulsante visibile nel ribbon che carica un form all'interno del form di outlook (2007-2013)

Avatar
criscap85 (Normal User)
Pro


Messaggi: 99
Iscritto: 29/01/2012

Segnala al moderatore
Postato alle 18:36
Domenica, 11/11/2012
Salve dato che mi avete chiuso il vecchio topic e questo ne terrò conto.....
vorrei ottenere una guida o degli esempi su questo mio nuovo problema. Allora sono partito dalla seguente guida:

http://blogs.msdn.com/b/mcsuksoldev/archive/2010/07/12/bui ...


per creare un pulsante nel ribbon. E fin qui ci sono arrivato. Ora vorrei che quando si preme in una qualsiasi parte o sezione di outlook carichi un form però all'interno dell'interfaccia di outlook quindi che sostituisce il tutto (visione email etc...) e che carichi però la tabella dei contatti che si trova nella cartella pubblica e condivisa denominata "Contatti". La tabella è una datagrid view che contiene i seguenti campi:

Nome e Cognome

Società

Telefono 1

Telefono 2

Telefono 3

Telefono 4

I primi due campi sono in formato testo e non modificabile. I 4 campi riferiti al telefono sono invece dei pulsanti che se clicco uno di essi in base alle cordinate in cui si trovano o agli id (è da vedere) invia la stringa contenuta nel pulsante ossia il numero di telefono ad una funzione che io ho creato per chiamare all'esterno mediante la libreria TAPI.

Sono lieto di ringraziarvi per qualsiasi soluzione che mi forniate. Anche frammenti di codice.

Io vi posto il mio al momento quello per caricare i contatti nella datagridview:


Codice sorgente - presumibilmente C++

  1. #region Direttive o Riferimenti all'assembly
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using Outlook = Microsoft.Office.Interop.Outlook;
  11. using System.Reflection;
  12. using System.Diagnostics;
  13. using System.Net;
  14. using System.Linq;
  15. using cris85LibreriaClientOutlook;
  16. using Proshot.UtilityLib.CommonDialogs;
  17.  
  18. #endregion
  19.  
  20.  
  21.  
  22. namespace OutlookInteropSample
  23. {
  24.     public partial class MainForm : Form
  25.     {
  26.        
  27.         private ToolTip contactToolTip = new ToolTip();
  28.         private Outlook.MAPIFolder oContactsFolder = null;
  29.  
  30.         public MainForm()
  31.         {
  32.             InitializeComponent();
  33.         }
  34.  
  35.         private void buttonGetContacts_Click(object sender, EventArgs e)
  36.         {
  37.             Outlook.Application oApp = new Outlook.Application();
  38.             Outlook.NameSpace oNS = oApp.GetNamespace("MAPI");
  39.  
  40.             oContactsFolder = oNS.PickFolder();
  41.  
  42.          
  43.  
  44.             //GetFolderFromID("000000001A447390AA6611CD9BC800AA002FC45A0300D4985F464F07654AA9CA8D6B785E166E000000004E3B0000", Type.Missing);
  45.             getContacts(oContactsFolder);
  46.  
  47.             oApp = null;
  48.             oNS = null;
  49.         }
  50.  
  51.        
  52.         private void getContacts(Outlook.MAPIFolder oContacts)
  53.         {
  54.             //Redemption.SafeContactItem rContact = new Redemption.SafeContactItem();
  55.             try
  56.             {
  57.                 string filter = "[MessageClass] = \"IPM.Contact\"";
  58.                 Outlook.Items oContactItems = oContacts.Items.Restrict(filter);
  59.                 int i;
  60.                 int numRiga = 0;
  61.                 DataGridViewButtonColumn telefono1 = new DataGridViewButtonColumn();
  62.  
  63.                 telefono1.FlatStyle = FlatStyle.System;
  64.                 telefono1.UseColumnTextForButtonValue = false;
  65.                 telefono1.HeaderText = "Telefono (Ufficio)";
  66.                 telefono1.Name = "Button";
  67.                 telefono1.Text = "";
  68.                 telefono1.Width = 150;
  69.  
  70.  
  71.  
  72.                 DataGridViewButtonColumn telefono2 = new DataGridViewButtonColumn();
  73.  
  74.                 telefono2.FlatStyle = FlatStyle.System;
  75.                 telefono2.UseColumnTextForButtonValue = false;
  76.                 telefono2.HeaderText = "Telefono (Abitazione)";
  77.                 telefono2.Name = "Button";
  78.                 telefono2.Text = "";
  79.                 telefono2.Width = 150;
  80.  
  81.  
  82.  
  83.                 DataGridViewButtonColumn telefono3 = new DataGridViewButtonColumn();
  84.  
  85.                 telefono3.FlatStyle = FlatStyle.System;
  86.                 telefono3.UseColumnTextForButtonValue = false;
  87.                 telefono3.HeaderText = "Fax (Ufficio)";
  88.                 telefono3.Name = "Button";
  89.                 telefono3.Text = "";
  90.                 telefono3.Width = 150;
  91.  
  92.  
  93.  
  94.                 DataGridViewButtonColumn telefono4 = new DataGridViewButtonColumn();
  95.  
  96.                 telefono4.FlatStyle = FlatStyle.System;
  97.                 telefono4.UseColumnTextForButtonValue = false;
  98.                 telefono4.HeaderText = "Cellulare";
  99.                 telefono4.Name = "Button";
  100.                 telefono4.Text = "";
  101.                 telefono4.Width = 150;
  102.  
  103.                 dataGridView1.Columns.Add(telefono1);
  104.                 dataGridView1.Columns.Add(telefono2);
  105.                 dataGridView1.Columns.Add(telefono3);
  106.                 dataGridView1.Columns.Add(telefono4);
  107.  
  108.                 foreach (Outlook.ContactItem oContact in oContactItems)
  109.                 {
  110.                     try
  111.                     {
  112.                         i = dataGridView1.Rows.Add(new DataGridViewRow());
  113.  
  114.                         DataGridViewCell nomecognome = new DataGridViewTextBoxCell();
  115.                         DataGridViewCell societa = new DataGridViewTextBoxCell();
  116.  
  117.                         nomecognome.Value = oContact.FirstName + " " + oContact.LastName;
  118.                         societa.Value = oContact.CompanyName;
  119.  
  120.                         dataGridView1.Rows[i].Cells["colonna1"] = nomecognome;
  121.  
  122.                         dataGridView1.Rows[i].Cells["colonna2"] = societa;
  123.  
  124.                         dataGridView1[2, numRiga].Value = oContact.BusinessTelephoneNumber;
  125.  
  126.                         dataGridView1[3, i].Value = oContact.BusinessFaxNumber;
  127.  
  128.                         dataGridView1[4, i].Value = oContact.HomeTelephoneNumber;
  129.  
  130.                         dataGridView1[5, i].Value = oContact.MobileTelephoneNumber;
  131.  
  132.                         numRiga++;
  133.  
  134.                     }
  135.                     catch (Exception ex)
  136.                     {
  137.                         Debug.WriteLine(ex.ToString());
  138.                     }
  139.                 }
  140.  
  141.                 oContactItems = null;
  142.             }
  143.             catch (Exception ex)
  144.             {
  145.                 Debug.WriteLine(ex.ToString(), this.Name);
  146.             }
  147.             finally
  148.             {
  149.                
  150.             }
  151.  
  152.         }
  153.  
  154.         private string getContactInfo(ListViewItem contact)
  155.         {
  156.             //Redemption.SafeContactItem rContact = new Redemption.SafeContactItem();
  157.             Outlook.ContactItem oContact = (Outlook.ContactItem)contact.Tag;
  158.             //rContact.Item = oContact;
  159.  
  160.             StringBuilder sb = new StringBuilder();
  161.  
  162.             if (oContact.LastNameAndFirstName != null && oContact.LastNameAndFirstName.Length > 0) sb.AppendLine("Nome e Cognome: " + oContact.LastNameAndFirstName);
  163.             if (oContact.CompanyName != null && oContact.CompanyName.Length > 0) sb.AppendLine("Società: " + oContact.CompanyName);
  164.             if (oContact.BusinessTelephoneNumber != null && oContact.BusinessTelephoneNumber.Length > 0) sb.AppendLine("Telefono 1: " + oContact.BusinessTelephoneNumber);
  165.             if (oContact.OtherTelephoneNumber != null && oContact.OtherTelephoneNumber.Length > 0) sb.AppendLine("Telefono 2: " + oContact.OtherTelephoneNumber);
  166.             if (oContact.PagerNumber != null && oContact.PagerNumber.Length > 0) sb.AppendLine("Telefono 3: " + oContact.PagerNumber);
  167.             if (oContact.MobileTelephoneNumber != null && oContact.MobileTelephoneNumber.Length > 0) sb.AppendLine("Telefono 4: " + oContact.MobileTelephoneNumber);
  168.  
  169.             //rContact = null;
  170.             oContact = null;
  171.  
  172.             return sb.ToString();
  173.         }
  174.  
  175.         private void listViewContacts_MouseLeave(object sender, EventArgs e)
  176.         {
  177.             contactToolTip.Active = false;
  178.         }
  179.  
  180.         private void listViewContacts_DoubleClick(object sender, EventArgs e)
  181.         {
  182.             ListViewItem activeItem = ((ListView)sender).SelectedItems[0];
  183.             if (activeItem != null)
  184.             {
  185.                 Outlook.ContactItem oContact = (Outlook.ContactItem)activeItem.Tag;
  186.                 EditContact editBox = new EditContact(oContact);
  187.                 oContact = null;
  188.                 if (editBox.ShowDialog() == DialogResult.OK)
  189.                 {
  190.                     getContacts(oContactsFolder);
  191.                 }
  192.             }
  193.         }
  194.  
  195.         private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
  196.         {
  197.             if (e.Control is Button)
  198.             {
  199.                 Button btn = e.Control as Button;
  200.                 btn.Click += new EventHandler(chiamaNumeroCliccato);
  201.             }
  202.         }
  203.  
  204.         void chiamaNumeroCliccato(object sender, EventArgs e)
  205.         {
  206.             int col = this.dataGridView1.CurrentCell.ColumnIndex;
  207.             int row = this.dataGridView1.CurrentCell.RowIndex;
  208.             MessageBox.Show("Button in Cell[" +
  209.                 col.ToString() + "," +
  210.                 row.ToString() + "] has been clicked");
  211.         }
  212.  
  213.         private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  214.         {
  215.             if (e.ColumnIndex >= 2)
  216.             {
  217.                 string numero = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
  218.                 MessageBox.Show("Numero da chiamare : " + numero);
  219.  
  220.  
  221.                 //////// inserire la funzione di chiamata ////////////
  222.             }
  223.            
  224.         }
  225.  
  226.  
  227.  
  228.        
  229.     }
  230. }



Tenete conto che carico la cartella dei contatti pubblici tramite un'id che io ho scoperto e che forse sarà memorizzato nel database. Ma un'alternativa c'è? Cioè se la mia cartella si chianma "CONTATTI DITTE" come faccio a raggiungerla direttamente senza usare la "oNS.PickFolder();"?

Spero che questo topic possa avere una soluzione o un pò di esempi di codice per riuscire a fare quello che ho richiesto e non una strafottenza e chiusura del topic stesso.

Grazie


NBM!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:47
Domenica, 11/11/2012
Testo quotato

Postato originariamente da criscap85:

ne terrò conto.....

una strafottenza e chiusura del topic stesso.




Parti male


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
criscap85 (Normal User)
Pro


Messaggi: 99
Iscritto: 29/01/2012

Segnala al moderatore
Postato alle 20:08
Domenica, 11/11/2012
Beh hai ragione....pero mi basterebbe che ne so tipo : non so farlo oppure non si può fare....

Ultima modifica effettuata da criscap85 il 12/11/2012 alle 8:24


NBM!
PM Quote