使用Dynamics 365,我做了很多跳圈来完成我需要做的事情。
基本上,对于create contact,我有一个插件,它将Entity对象反序列化为XML,然后将该XML发布到一个webhook。webhook对另一个系统做了一些事情,并得到了一个ID,然后这个ID被返回给插件。
我已经设置了我想要在插件中设置此ID的属性:
var response = webClient.UploadString(serviceUrl, serializedStr);
postMessageImage["po_ContactCRPID"] = response.ToString();
没有错误发生,联系人确实被创建了,但我感兴趣的更新字段在CRM中没有显示值。
我不能在post创建时使用D365中的常规webhook函数,因为发布的JSON不允许您序列化回对象,然后能够很好地提取值,然后插入到后端的其他系统中,因此我尝试使用尽可能多的强类型类。
对于如何实现这一点有什么想法吗?在post操作管道上,我希望能够基于从某个web服务返回的值在contact对象(具有自定义字段)上设置属性,以便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;
}
}
}
发布于 2018-09-04 06:13:34
在异步创建后插件中,您将在刚创建的联系人的目标中拥有EntityId。
从webhook响应中获取ID,然后组成一个新的联系人对象,设置属性& service.Update
将保存它。
Entity contact = new Entity(“contact”);
contact.Id = target.Id;
contact[“webhook_Idfield”] = ID;
service.Update(contact);
https://stackoverflow.com/questions/52154953
复制相似问题