пятница, 1 января 2010 г.

Плагин для копирования примечаний и файлов из интереса в контакт/компанию при конвертации интереса

Мне дали задание написать плагин, который при конвертации интереса в контакт все файлы-вложения и примечания скопирует в полученный контакт. Далее код плагина, который выполняет это:



using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk.Query;

namespace LeadConversionPlugin
{
public class ContactCreationHandler : IPlugin
{
#region IPlugin Members

public void Execute(IPluginExecutionContext context)
{
if (context.MessageName == MessageName.Create &&
context.InputParameters.Contains("Target") &&
context.InputParameters["Target"] is DynamicEntity)
{
DynamicEntity entity = (DynamicEntity)context.InputParameters["Target"];

//Проверка, что в сущность в контексте - это контакт
if (entity.Name != EntityName.contact.ToString())
return;

//Проверка, что контакт - создан при помощи
//конвертации из интереса
if (!entity.Properties.Contains("originatingleadid"))
return;

//Запоминаем идентификатор интереса - источника
Guid leadid = ((Lookup)entity["originatingleadid"]).Value;

//Идентификатор контакта, который получится после конвертации
Guid contactid = (Guid)context.OutputParameters["Id"];

ICrmService crmservice = context.CreateCrmService(true);

//Строим запрос для получения всех вложений -
//примечаний и файлов-вложений
QueryByAttribute query = new QueryByAttribute();
query.ColumnSet = new AllColumns();
query.EntityName = EntityName.annotation.ToString();

query.Attributes = new string[] { "objectid" };
query.Values = new object[] { leadid };

RetrieveMultipleRequest request = new RetrieveMultipleRequest();
request.Query = query;
request.ReturnDynamicEntities = false;

RetrieveMultipleResponse response = (RetrieveMultipleResponse)crmservice.Execute(request);

foreach (annotation note in response.BusinessEntityCollection.BusinessEntities)
{
//Просто обнуляем свойство
note.annotationid = null;

//Изменяем ссылку annotation с интереса на контакт который будет создан
note.objectid = new Lookup(EntityName.contact.ToString(), contactid);
note.objecttypecode = new EntityNameReference(EntityName.contact.ToString());

//Создаём запись
crmservice.Create(note);
}
}
}

#endregion IPlugin Members
}
}


Далее необходимо выполнить подпись сборки (застронгнеймить), собрать библиотеку с плагином и выполнить её регистрацию в CRM. Для регистрации данного шага можете воспользоваться следующим скриншотом:

Комментариев нет:

Отправить комментарий