Разработка
25
Июн
0

CRM и RSS

Давным-давно, в далекой-далекой галактике корпорация Microsoft выпустила акселератор Notifications 🙂 Этот акселератор позволял самым обычным юзверам подписываться на RSS-ленты, данные для которых формировались на основе представлений. И тем самым быть в курсе последний событий в CRM системе 🙂 А если объединить его с некоторыми бесплатными RSS-читалками (например, Feedreader), то можете получить почти полноценную систему уведомлений 🙂 Но самое главное заключается в том, то что формат RSS является открытым (и весьма распространенным), что позволяет Вам создавать свои собственные RSS-ленты и оформлять их как Вам вздумается. Рассмотрим небольшой такой пример…

Задача: создать RSS-ленту, в которую включить все Контакты CRM-системы!

  • Откройте Visual Studio и создайте новый web-сайт: File — New — Web Site. В открывшемся диалоговом окне укажите место расположения, а в качестве языка выберите C#. Ок;
  • Подключите SDK’ашные сборки;
  • На странице Default.aspx.cs добавьте такой код:
    using System;
    using System.Web.UI;
    using System.Xml;
    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;
    using Microsoft.Crm.Sdk.Query;
    using System.Net;
    using System.Text;
    
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //string UserId = Request["uid"];
            //if (String.IsNullOrEmpty(UserId)) return;
    
            // Настраиваем CRM Service
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.AuthenticationType = 0; //AD
            token.OrganizationName = "superfirma";
            // Выполняем запрос в контексте какого-либо юзвера
            //token.CallerId = new Guid(UserId);
    
            CrmService crmService = new CrmService();
            crmService.CrmAuthenticationTokenValue = token;
            crmService.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
    
            // Очищаем ответ (страницы)
            Response.Clear();
            Response.ContentType = "text/xml";
    
            XmlTextWriter xtwFeed = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
            xtwFeed.WriteStartDocument();
    
            // Создаем корневой элемент RSS
            xtwFeed.WriteStartElement("rss");
            xtwFeed.WriteAttributeString("version", "2.0");
    
            // Создаем новую ленту
            xtwFeed.WriteStartElement("channel");
            xtwFeed.WriteElementString("title", "Новые Контакты");
            xtwFeed.WriteElementString("link", "http://win-n22hj23d1b1/superfirma/loader.aspx");
            xtwFeed.WriteElementString("ttl", "5");
            xtwFeed.WriteElementString("description", "Microsoft Dynamics CRM");
            xtwFeed.WriteElementString("copyright", "Copyright Microsoft");
    
            // Создаем объект запроса QueryExpression
            QueryExpression query = new QueryExpression();
            query.EntityName = EntityName.contact.ToString();
    
            // Указываем какие поля необходимо вернуть
            ColumnSet cols = new ColumnSet();
            cols.AddColumn("fullname");
            cols.AddColumn("firstname");
            cols.AddColumn("lastname");
            cols.AddColumn("middlename");
            cols.AddColumn("emailaddress1");
            cols.AddColumn("telephone1");
            cols.AddColumn("createdon");
            cols.AddColumn("contactid");
            cols.AddColumn("createdby");
            query.ColumnSet = cols;
    
            // Выполняем запрос в CRM
            RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
            retrieve.Query = query;
    
            RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse)crmService.Execute(retrieve);
            BusinessEntityCollection contacts = retrieved.BusinessEntityCollection;
    
            // Просматриваем полученный результат
            foreach (contact contact in contacts.BusinessEntities)
            {
                // Формируем основное содержимое
                string content = null;
                content += "<table>";
                content += "<tr><td style='background-color: #9ACD32'>Имя</td><td>" + contact.firstname + "</td></tr>";
                content += "<tr><td style='background-color: #9ACD32'>Фамилия</td><td><b>" + contact.lastname + "</b></td></tr>";
                content += "<tr><td style='background-color: #9ACD32'>Отчество</td><td>" + contact.middlename + "</td></tr>";
                content += "<tr><td style='background-color: #9ACD32'>Должность</td><td>" + contact.jobtitle + "</td></tr>";
                content += "<tr><td style='background-color: #9ACD32'>Телефон</td><td>" + contact.telephone1 + "</td></tr>";
                content += "<tr><td style='background-color: #9ACD32'>E-mail</td><td>" + contact.emailaddress1 + "</td></tr>";
                content += "</table>";
                
                // Создаем одно сообщение RSS-ленты
                xtwFeed.WriteStartElement("item");
                xtwFeed.WriteElementString("title", contact.fullname);
                xtwFeed.WriteElementString("description", content);
                xtwFeed.WriteElementString("link", "http://win-n22hj23d1b1/superfirma/sfa/conts/edit.aspx?id=" + contact.contactid.Value.ToString());
                xtwFeed.WriteElementString("pubDate", contact.createdon.UserTime.ToString());
                xtwFeed.WriteElementString("author", contact.createdby.name);
                //xtwFeed.WriteElementString("category", "category1");
                xtwFeed.WriteEndElement();
            }
    
            // Закрвыаем все теги
            xtwFeed.WriteEndElement();
            xtwFeed.WriteEndElement();
            xtwFeed.WriteEndDocument();
            xtwFeed.Flush();
            xtwFeed.Close();
            Response.End();
        }
    }
    

    Логика работы такова:

    • Подключаемся к CRM Service’у;
    • Создаем узел-заголовок для всего документа и для новой RSS-ленты;
    • Затем запрашиваем в CRM все Контакты;
    • Просматриваем все полученные Контакты и формируем из них сообщения RSS-ленты;
    • Закрываем теги заголовка документа и RSS-ленты.
  • На страницу web.config поместите следующий код:
    <?xml version="1.0"?>
    <configuration>
      <appSettings/>
      <connectionStrings/>
      <system.web>
        <httpModules>
          <add name="MapOrg" type="Microsoft.Crm.MapOrgEngine, Microsoft.Crm, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
          <add name="CrmAuthentication" type="Microsoft.Crm.Authentication.AuthenticationEngine, Microsoft.Crm, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </httpModules>
        <identity impersonate="true"/>
        <compilation debug="true">
          <assemblies>
            <add assembly="Microsoft.Crm.Sdk, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="Microsoft.Crm.SdkTypeProxy, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </assemblies>
        </compilation>
      </system.web>
    </configuration>
    
  • Публикуем сайт: в VS перейдите Build — Publish Web Site и укажите путь к папке <сайт CRM>\ISV\rss (ее Вам нужно предварительно создать);
  • На этом все. Открываем страницу http://<сервер CRM>/isv/rss/default.aspx в браузере и смотрим на новенькую RSS-ленту 🙂




Комментарии (0)

*

code