Разработка
18
Апр
0

Добавление Примечаний в Электронную почту

Хранение в исходном виде первичных документов – обычное дело для бухучета, юриспруденции и т.д. И часто эти исходные документы необходимо предоставлять в почтовой переписке. Помимо самой карточки (в MS CRM) полезная информация также может храниться и в Примечаниях, которые с помощью стандартного функционала Вы не сможете поместить в Электронную почту. Поэтому рассмотрим как с помощью кастомного бизнес-процесса вставить в почтовое сообщение все комментарии прикрепленные к записи…

  • Создайте В Visual Studio проект нового кастомного Бизнес-процесса;
  • Добавьте в него сборки из SDK и подпишите;
  • Замените его код таким:
    using System;
    using System.Workflow.ComponentModel;
    using System.Workflow.Activities;
    using System.Web.Services.Protocols;
    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;
    using Microsoft.Crm.Sdk.Query;
    using Microsoft.Crm.Workflow;
    using System.Collections;
    using System.Text;
    
    namespace ActivityLibrary4
    {
        // Задаем имя шага и имя группы в которую он будет входить
        [CrmWorkflowActivity("Добавление Примечаний")]
        public partial class FormatNotes : SequenceActivity
        {
            protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
            {
                try
                {
                    // Получаем Crm Service через контекст плагина
                    IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
                    IWorkflowContext ctx = contextService.Context;
                    ICrmService service = ctx.CreateCrmService();
    
                    // Формируем запрос для получения всех Примечаний текущей записи
                    QueryByAttribute query = new QueryByAttribute();
                    query.EntityName = "annotation";
                    query.ColumnSet = new ColumnSet(new String[] { "subject", "notetext", "createdby", "createdon" });
    
                    query.Attributes = new String[] { "objectid" };
                    query.Values = new Object[] { ctx.PrimaryEntityId };
                    query.Orders = new ArrayList();
                    query.Orders.Add(new OrderExpression("createdon", OrderType.Descending));
    
                    RetrieveMultipleRequest request = new RetrieveMultipleRequest();
                    request.Query = query;
    
                    // Отправляем запрос в CRM
                    RetrieveMultipleResponse returnedNotes = (RetrieveMultipleResponse)service.Execute(request);
                    BusinessEntityCollection notes = returnedNotes.BusinessEntityCollection;
                    
                    /* Формируем строку включающую в себя все примечания */
                    
                    // Сначала добавляем заголовок
                    StringBuilder results = new StringBuilder();
                    results.Append("<b>Примечания:</b><br><br>");
    
                    // Просматриваем каждое из возвращенных запросом Примечаний и...
                    foreach (annotation note in notes.BusinessEntities)
                    {
                        // ...добавляем в них перенос строки (в формате HTML) для заголовка 
                        results.Append(string.Format("{0}<br>", note.subject));
                        // ...и основного текста
                        results.Append(string.Format("{0}<br><br>", note.notetext));
                    }
    
                    // Передаем результирующую строку в выходной параметр
                    this.FormattedNotes = results.ToString();
                    
                    return base.Execute(executionContext);
                }
                catch (SoapException ex)
                {
                    throw new Exception(ex.Detail.InnerText);
                }
            }
    
            // Динамический выходной параметр для сформированных Примечаний
            public static DependencyProperty FormattedNotesProperty = DependencyProperty.Register("FormattedNotes", typeof(string), typeof(FormatNotes));
            [CrmOutput("Formatted Notes")]
            public string FormattedNotes
            {
                get { return (string)base.GetValue(FormattedNotesProperty); }
                set { base.SetValue(FormattedNotesProperty, value); }
            }
        }
    }
    
  • Скомпилируйте проект и зарегистрируйте его сборку в Plug-in Registration Tool;
  • Откройте MS CRM и создайте новый бизнес-процесс (в этом примере в качестве объекта будет использоваться Интерес, но Вы можете выбрать любой друго);
  • Добавьте новый шаг Добавление Примечаний (кастомный, который мы только что создали);
  • Добавьте шаг Отправить сообщение. В диалоговом окне настройки параметров электронного сообщения добавьте в тело сообщения (помимо самого сообщения) выходной параметр шага Добавление примечаний (Formatted Notes);
  • Опубликуйте Бизнес-процесс и выполните его в отношении какой-либо записи у которой есть примечания. Когда он выполнится – идите смотреть электронную почту связанную с этой записью 🙂




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

*

code