CRM 2011多个实体的一个插件

时间:2013-04-26 16:09:08

标签: c# generics dynamics-crm-2011

我正在编写一个基本上执行相同功能的插件 - 比如,在状态发生变化时创建一个任务。功能需要在2个实体上发生。

除了设置实体类型字段(选项集)之外,每个步骤都完全相同。这设置为EntityAEntityB,具体取决于触发插件的实体。

我现有的代码执行以下操作

new_entitya entityA = (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity && context.PrimaryEntityName == "new_entitya")
                                    ? ((Entity)context.InputParameters["Target"]).ToEntity<new_entitya>()
                                    : null;

现在,有没有办法可以根据PrimaryEntityName的值设置.ToEntity调用的值,而不是编写new_entitya或new_entityb?

2 个答案:

答案 0 :(得分:2)

为什么选择投球?您只需检查实体名称并应用您需要的任何属性。

var newTask = new Entity("Task");
newTask.Attributes.Add("subject", "foo");
// etc etc for other common properties
if (context.PrimaryEntityName.Equals("new_entitya"))
{
    newTask.Attributes.Add("new_optionset", valueA);
}
else
{
    newTask.Attributes.Add("new_optionset", valueB);
}

我认为缺点是你必须在插件中维护选项集值,但如果它只是两个值,那么这似乎不是一个巨大的开销。

答案 1 :(得分:0)

请参阅此post。基本上,您必须根据传入的类型动态构建通用方法。