我已根据多个字段编写了一个C#插件,用于更新父记录。 在这里,我试图根据子实体中更新的值计算父实体中的总值,子实体中包含rate和units字段。所以基本上,总=率*单位。代码构建正常,但是当在dynamic crm中创建一个新表单时,它会导致业务流程错误:插件中的意外异常(执行):Parentchild1.parentchildpluginSystem.Collections.Generic.KeyNotFoundException:字典中没有给定的键
这是我的代码:
命名空间Parentchild1 { public class parentchildplugin:IPlugin { 私人实体abcevent_parent;
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the execution context from the service provider.
IPluginExecutionContext context =
(IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// Get a reference to the Organization service.
IOrganizationServiceFactory factory =
(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(context.UserId);
if (context.InputParameters != null)
{
//entity = (Entity)context.InputParameters["Target"];
//Instead of getting entity from Target, we use the Image
Entity entity = context.PostEntityImages["PostImage"];
Money rate = (Money)entity.Attributes["abcevent_rate"];
int unit = (int)entity.Attributes["abcevent_unit"];
// EntityReference parent = (EntityReference)entity.Attributes["abcevent_parentid"];
//Multiply
// Money total = new Money(rate.Value * units);
//Set the update entity
Entity parententity = new Entity("abcevent_parent");
//parententity.Id = parent.Id;
//parententity.Attributes["abcevent_total"] = total;
// abcevent_parentid = Guid IOrganizationservice.Create(Entity parentid);
Guid parentGuid = service.Create(abcevent_parent);
EntityReference parent = (EntityReference)entity.Attributes["abcevent_parentid"];
Money total = new Money(rate.Value * unit);
//Update
//service.Update(parententity);
}
答案 0 :(得分:0)
你要求的问题:
字典中没有给定的密钥。
这是因为如果您尝试获取类似
的属性,则一个键不在列表中 int number = (int)entity.Attributes["random_attribute"]
这会引发错误,因为random_attribute不在上下文中。
你必须确保属性在上下文中......最好的做法就是要求包含:
if (entity.Contains("random_attribute"))
通过这种方式,您可以安全地访问该属性。
另一个原因可能是Image,请确保它在上下文中。