我正在尝试从这里了解插件示例。 有这样的条件:
// The InputParameters collection contains all the data passed in the message request.
if (context.InputParameters.Contains("Target") &&
context.InputParameters["Target"] is Entity)
一般而言,不仅仅是针对此示例,我应该基于哪些先验知识来决定访问特定财产?我怎么知道测试
InputParameters
是否包含 "Target"
键(我想我不应该猜到它)?
我可以根据什么知道询问
"Target"
映射值是否是 Entity
类型,而不是其他类型?
我找到了 2 年前的 this 帖子,并且我找到了 this 网页,上面写着(重点是我的):
在插件中, context.InputParameters 和 context.OutputParameters 取决于消息和您要处理的阶段 注册插件。例如,“目标”存在于 创建和更新消息的输入参数,但不是 设置状态消息。另外,OutputParameters仅存在于Post阶段, 并且不在预阶段。 没有单一的文档来源 提供完整的输入参数和输出参数集 通过消息和阶段。
从我的搜索来看,单一来源仍然不存在,但也许可以使用 Dynamics Online 平台在“设置”菜单深处的某个位置找到可能的值?任何来源都会很棒。
我知道这是一个已经得到解答的“老”问题,但我认为这可能会有所帮助。我构建了一个小网页,其中包含带有所有输入/输出参数的所有消息。您可以从这里访问它:
执行此操作的最佳实践是使用强类型方法。例如,如果您想知道 CreateRequest 上有哪些属性可用,您可以这样做:
var createReq = new CreateRequest() { Parameters = context.InputParameters };
createReq.Target; // Has type Entity
查看解释此方法的完整博客文章:提示:正确处理插件输入参数
原答案:
这取决于我们正在讨论的请求。请参阅 MSDN 上的了解传递给插件的数据上下文。
作为示例,请看一下 CreateRequest。的一项财产 CreateRequest被命名为Target,其类型为Entity。这是 当前由平台运营的实体。要访问 您将使用名称“Target”作为实体的数据 输入参数集合。您还需要投射返回的 实例。
请注意,并非所有请求都包含类型为 Target 的属性 实体,因此您必须查看每个请求或响应。例如, DeleteRequest 有一个 Target 属性,但其类型是 EntityReference。
总结:查看实际请求,例如 CreateRequest。
2011 年,有人实际上根据消息类型生成了类型化属性。 有点整洁:https://xrmpalmer.wordpress.com/2013/05/27/crm2011-plugin-inputparameter-and-outputparameter-helper/
它会显示您希望每条消息都可以使用参数。
\用于将来的搜索 开关(stepAttribute.Message) { 案例“创建”: image.MessagePropertyName = "Id"; 休息; 案例“设置状态”: 案例“SetStateDynamicEntity”: image.MessagePropertyName = "EntityMoniker"; 休息; 案例“发送”: 案例“DeliverIncoming”: 案例“DeliverPromote”: image.MessagePropertyName = "电子邮件 ID"; 休息; 默认: image.MessagePropertyName = "目标"; 休息; }