我是CRM的新手。我创建了两个实体:订单和产品。在订单实体上有查找产品实体的字段。我尝试从产品到查找字段获取productquantity并将其粘贴到订单实体中的字段。这是我试过的代码:
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity entity = (Entity)context.InputParameters["Target"];
if (entity.Attributes.Contains("new_productname"))
{
Entity productreference = service.Retrieve("new_callistyproduct", ((EntityReference)entity["new_productname"]).Id, new ColumnSet(true));
if (productreference.Attributes.Contains("new_productquantity"))
{
if (entity.Attributes.Contains("new_numberofproduct"))
entity["new_numberofproduct"] = productreference.GetAttributeValue<Decimal>("new_productquantity");
else
entity.Attributes.Add("new_numberofproduct", productreference.GetAttributeValue<Decimal>("new_productquantity"));
}
}
}
每当我创建新记录时,我希望此插件工作。所以我将此插件注册为预创建事件。但是,当我尝试创建一个记录。此插件无法从productquantity字段中检索值。 所以,我试图将此插件作为Pre-Update事件运行。在我之前创建的记录中,我将查找值从产品A更改为产品B.并且其工作,插件从产品B检索产品数量值。
问题是,如果我想要这个插件也适用于预创建事件,我该怎么办?
由于
答案 0 :(得分:1)
如果您想更新目标实体,让CRM为您执行更新,则必须在预创建或预更新中注册您的插件。如果要对Post事件执行操作,则需要使用IOrganizationService调用Update,只需更新Target即可。您还需要确保不创建无限循环,其中更新触发插件,该插件执行另一个触发相同插件的更新,执行另一个更新......等等。