【发布时间】:2018-11-01 20:25:27
【问题描述】:
我正在同步执行一个插件 postOperation。
我使用IOrganizationService.Create 创建了一个实体。这可行,我得到一个 GUID,我可以看到记录存在于 CRM 中。
在此之后,我尝试使用相同的 IOrganizationService 和 create 调用返回的 GUID 检索相同的记录:
public void Execute(IServiceProvider serviceProvider)
{
ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
tracer.Trace("context is " + context.InputParameters["Target"]);
context.OutputParameters["Message"] = "in plugin";
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
{
/* some other processing here
.
.
*/
Guid polId = service.Create(policy);
Entity polEntity = service.Retrieve("new_customEntiry", polId, new ColumnSet(true));
但polEntity.Id 为空。 polEntity["someattribute"] 也是 null 。
为什么检索调用不起作用?我错过了什么?
【问题讨论】:
-
你能发布
serviceFactory.CreateOrganizationService方法体吗? -
我不明白,你为什么要从数据库中检索它,而你刚刚创建它并且你已经拥有关于策略对象中记录的所有数据。什么是额外的??
-
当你有一个包含 Guid 和所有其他信息的对象时,我同意@ArunVinoth,你不需要再次获取它。还要检查这里,你确定你使用的是正确的实体名称???在您获取之前,请尝试添加对 Guid.Empty 的 Guid polId 的检查。
Entity polEntity = service.Retrieve("new_customEntiry", polId, new ColumnSet(true)); -
我想用这个实体更新一些其他记录中的查找字段。在此之前,我正在检查 create 方法返回的 guid 是否为 null(代码未包含在本文中)。更新调用导致以下错误:异常详细信息:错误代码:0x80040217 消息:带有 Id = a902fd34-f5dd-e811-a998-000d3a37d203 的 new_customEntity 不存在 @AnkUser
-
@dynamicallyCRM 我正在使用 Microsoft.Xrm.sdk 库
标签: c# plugins dynamics-crm dynamics-365