Используя Dynamics 365, я делаю много прыжков, чтобы получить то, что мне нужно.
В основном для создания контакта у меня есть плагин, который десериализует объект Entity в XML и затем отправляет этот XML в webhook.
Webhook делает некоторые вещи с другой системой и возвращает идентификатор. Этот идентификатор затем возвращается плагину.
Я установил атрибут, который я хочу установить в плагине, таким образом:
var response = webClient.UploadString(serviceUrl, serializedStr);
postMessageImage["po_ContactCRPID"] = response.ToString();
Никаких ошибок не происходит, контакт создается, но в поле, которое меня интересует, не отображается значение в CRM.
Я не могу использовать обычную функцию webhook в D365 при пост-создании, потому что публикуемый JSON не позволяет вам сериализовать обратно к объекту, чтобы затем иметь возможность красиво извлекать значения и затем вставлять их в другие системы в серверной части. поэтому я стараюсь использовать как можно больше строго типизированных классов.
Есть идеи, как этого добиться? В конвейере после операции я хочу иметь возможность установить свойство для объекта контакта (который имеет настраиваемые поля) на основе значения, возвращаемого некоторым веб-сервисом, чтобы CRM мог создать контакт с установленным мною значением.
Это код моего плагина:
if (context.PostEntityImages.Contains("CreateContactImage") && context.PostEntityImages["CreateContactImage"] is Entity)
{
tracingService.Trace("AccountSync: CreateContactImage.");
Entity postMessageImage = (Entity)context.PostEntityImages["CreateContactImage"];
using (var client = new WebClient())
{
var webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
var code = "CodeFromPlugin";
var serviceUrl = this.CRPSyncServiceUrl + "?code=" + code;
var entitySeri = new EntitySerializer();
var serializedStr = entitySeri.SerializeObject(postMessageImage);
try
{
// upload the data using Post mehtod
//var response = webClient.UploadData(serviceUrl, entityBytes);
var response = webClient.UploadString(serviceUrl, serializedStr);
postMessageImage["po_ContactCRPID"] = response.ToString();
postMessageImage.Attributes["po_ContactCRPID"] = response.ToString();
tracingService.Trace("Set postMessageImage po_ContactCRPID to: {0}", response.ToString());
}
catch (Exception ex)
{
tracingService.Trace("WebEX Error: {0}", ex.ToString());
throw;
}
}
}