首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在创建实体时,设置来自外部源的属性值以使其持续存在

在创建实体时,设置来自外部源的属性值以使其持续存在
EN

Stack Overflow用户
提问于 2018-09-04 02:51:41
回答 1查看 473关注 0票数 2

使用Dynamics 365,我做了很多跳圈来完成我需要做的事情。

基本上,对于create contact,我有一个插件,它将Entity对象反序列化为XML,然后将该XML发布到一个webhook。webhook对另一个系统做了一些事情,并得到了一个ID,然后这个ID被返回给插件。

我已经设置了我想要在插件中设置此ID的属性:

代码语言:javascript
复制
 var response = webClient.UploadString(serviceUrl, serializedStr);
                            postMessageImage["po_ContactCRPID"] = response.ToString();

没有错误发生,联系人确实被创建了,但我感兴趣的更新字段在CRM中没有显示值。

我不能在post创建时使用D365中的常规webhook函数,因为发布的JSON不允许您序列化回对象,然后能够很好地提取值,然后插入到后端的其他系统中,因此我尝试使用尽可能多的强类型类。

对于如何实现这一点有什么想法吗?在post操作管道上,我希望能够基于从某个web服务返回的值在contact对象(具有自定义字段)上设置属性,以便CRM可以使用我设置的值创建联系人。

这是我的插件代码:

代码语言:javascript
复制
 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;
                        }
                    }

                }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 06:13:34

在异步创建后插件中,您将在刚创建的联系人的目标中拥有EntityId。

从webhook响应中获取ID,然后组成一个新的联系人对象,设置属性& service.Update将保存它。

代码语言:javascript
复制
Entity contact = new Entity(“contact”);
contact.Id = target.Id;
contact[“webhook_Idfield”] = ID;
service.Update(contact);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52154953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档