Где воздух гор - там тишина снегов, молчание камней и дремлет сила

Программирование Windows

MS VSTO 2007/Infusionsoft API /MS Outlook 2007 – интеграция

2018-03-09 05:17:23






Существует такой программный продукт как  Infusionsoft  - автоматизированная система маркетинга. Желающие могут больше узнать прямо на сайте компании: http://www.infusionsoft.com/  Как и любой крупный  проект использующий данные пользователей, Infusionsoft  имеет собсвтенный API, используя который можно получить доступ к некоторым его функциям с использованием XMLRPC. Мы совестим данное API  с VSTO 2007 и создадим приложение, интегрированное в InfusionSoft и MSOutlook.

В начале необходимо скачать с сайта http://www.cookcomputing.com/blog/archives/installing-current-release-of-xml-rpc-net-from-nuget библиотеку XML-RPC.NET и установить ее с помощью  «Package Manager Console» в  Visual Studio .Для этого запускаем консоль и вводим такой код:
>install-package xmlrpcnet -Version 2.5.0
После запускаем в  VisualStudio (c заранее установленным пакетом VSTO 2007 )  и создаем проект типа «OutlookAddIn».Сразу добавляем посредством  «AddReference»  ссылку на «CookComputing.XmlRpc» и помещаем новое пространство имен в наш исходник.
Затем редактируем стандартный код:
 
1.     В начале создаем объекты, создающие новую кнопу в меню MSOutlook 2007
 
        Office.CommandBar menubar;
        Office.CommandBarPopup cmdBarControl;
        Office.CommandBarButton menuCommand;
 
2.     Там же размещаем переменную типа string для ключа доступа к InfusionSoftAPI и описываем реализацию интерфейса XmlRpc с методам, котоые возможно будут здесь  использоваться:
 
        string key = "12qqwqssad12123234343434";
      
        [XmlRpcUrl("https://mach2.infusionsoft.com:443/api/xmlrpc")]
        public interface iFace : IXmlRpcProxy
        {
            [XmlRpcMethod("ContactService.add")]
            int Add(string key, XmlRpcStruct map);
 
            [XmlRpcMethod("ContactService.addToGroup")]
            bool AddGrp(string key, int conID, int grpID);
 
            [XmlRpcMethod("ContactService.addToCampaign")]
            bool AddCamp(string key, int conID, int campID);
 
        }
 
 
3.     Затем в стандартном методе ThisAddIn_Startup описываем реализацию нового пункта меню  и его обработчик.Здесь создается новый пункт,который добавляется в MSOutlook.
 
            menubar = Application.ActiveExplorer().CommandBars.ActiveMenuBar;
            cmdBarControl = (Office.CommandBarPopup)menubar.Controls.Add (Office.MsoControlType.msoControlPopup, missing, missing,menubar.Controls.Count, true);
            if (cmdBarControl != null) {
           cmdBarControl.Caption ="InfusionSoft Contact";
           menuCommand = (Office.CommandBarButton)cmdBarControl.Controls.Add(Office.MsoControlType.msoControlButton, missing, missing, missing,true);
           menuCommand.Caption ="Add contact To InfusionSoft";
           menuCommand.Tag = DateTime.Now.ToString();
           menuCommand.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(menuCommand_Click);    
        }
 
4.     На конец, прописываем тело метода обработчика пункта меню:
           void menuCommand_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault) {
         
     
Первым мы созздаем ссылку на метод интерфейса  и его структуру данных:
 
 
                iFace proxy = XmlRpcProxyGen.Create();
                XmlRpcStruct conDat = new XmlRpcStruct();
 
Затем  получаем экземпляр объекта текущей адрессной книги  MSOutlook
 
                Outlook.AddressLists list = Application.Session.AddressLists as Outlook.AddressLists;
               
Запускаем  цикл, для получения списка контактов из адрессной книги и тут же вызываем метод Add () из InfusionSoftAPI, помещающий  данные пользователя  в собственно  InfusionSoft:
 
               foreach (Outlook.ContactItem contacts in list )  {
               
                conDat.Add("FirstName", contacts.FirstName.ToString());
                conDat.Add("LastName", contacts.LastName.ToString());
                conDat.Add("Email", contacts.Email1Address.ToString());      
 
 
И под конец,информируем об этом пользователя сообщением.
 
                  Outlook.Application outLk = new Microsoft.Office.Interop.Outlook.Application();
                  Outlook.MailItem Email = outLk.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as Outlook.MailItem;
                  Email.Subject = "You just added to  Infusionsoft";
                  Email.To = contacts.Email1Address.ToString();
                  Email.HTMLBody = "You just added to  Infusionsoft.Thank you";
                  Email.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
                  Email.Send();
               }
         }
 
 
На это все, ничего сложного, далее полный исходный код программы.
 
 
using System;
using System.Windows.Forms;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using CookComputing.XmlRpc;
 
namespace InfusionssoftContact
{
    public partial class ThisAddIn
 
    {
 
        Office.CommandBar menubar;
        Office.CommandBarPopup cmdBarControl;
        Office.CommandBarButton menuCommand;
        string key = "12qqwqssad12123234343434";
      
        [XmlRpcUrl("https://mach2.infusionsoft.com:443/api/xmlrpc")]
        public interface iFace : IXmlRpcProxy
        {
            [XmlRpcMethod("ContactService.add")]
            int Add(string key, XmlRpcStruct map);
 
            [XmlRpcMethod("ContactService.addToGroup")]
            bool AddGrp(string key, int conID, int grpID);
 
            [XmlRpcMethod("ContactService.addToCampaign")]
            bool AddCamp(string key, int conID, int campID);
 
        }
 
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
 
            menubar = Application.ActiveExplorer().CommandBars.ActiveMenuBar;
            cmdBarControl = (Office.CommandBarPopup)menubar.Controls.Add (Office.MsoControlType.msoControlPopup, missing, missing,menubar.Controls.Count, true);
            if (cmdBarControl != null) {
           cmdBarControl.Caption ="InfusionSoft Contact";
           menuCommand = (Office.CommandBarButton)cmdBarControl.Controls.Add(Office.MsoControlType.msoControlButton, missing, missing, missing,true);
           menuCommand.Caption ="Add contact To InfusionSoft";
           menuCommand.Tag = DateTime.Now.ToString();
           menuCommand.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(menuCommand_Click);    
        }
        }
 
         void menuCommand_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault) {
          
                iFace proxy = XmlRpcProxyGen.Create();
                XmlRpcStruct conDat = new XmlRpcStruct();
                Outlook.AddressLists list = Application.Session.AddressLists as Outlook.AddressLists;
               
 
               foreach (Outlook.ContactItem contacts in list )  {
                
                conDat.Add("FirstName", contacts.FirstName.ToString());
                conDat.Add("LastName", contacts.LastName.ToString());
                conDat.Add("Email", contacts.Email1Address.ToString());      
 
                  Outlook.Application outLk = new Microsoft.Office.Interop.Outlook.Application();
                  Outlook.MailItem Email = outLk.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as Outlook.MailItem;
                  Email.Subject = "You just added to  Infusionsoft";
                  Email.To = contacts.Email1Address.ToString();
                  Email.HTMLBody = "You just added to  Infusionsoft.Thank you";
                  Email.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
                  Email.Send();
               }
 
         }
    

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
 
        #region VSTO generated code
 
        ///
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        ///

        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
 
        #endregion
    }
}
 

Здесь нет комментариев


Новый комментарий:
























Яндекс.Метрика