我正在尝试了解here中的插件示例。 有这种情况:
// 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取决于您的消息和阶段 注册插件。例如,“目标”存在于 用于创建和更新消息的InputParameters,但不是 SetState消息。此外,OutputParameters仅存在于Post阶段, 而不是在Pre阶段。 没有单一的文档来源 它提供了完整的InputParameters和OutputParameters 通过消息和阶段。
从我的搜索中,单个来源仍然不存在,但也许可以使用动态在线平台找到可能的值,在设置菜单的深处,也许?任何来源都会很棒。
答案 0 :(得分:6)
我知道这是一个已经回答的“旧”问题,但我认为这可能会有所帮助。我已经构建了一个小网页,其中包含所有带有所有输入/输出参数的消息。您可以从here:
访问它答案 1 :(得分:2)
这样做的最佳做法是使用强类型方法。例如,如果您想知道CreateRequest上哪些属性可用,您可以这样做:
var createReq = new CreateRequest() { Parameters = context.InputParameters };
createReq.Target; // Has type Entity
查看解释此方法的完整博客文章:Tip: Proper handling of Plugin InputParameters
原始答案:
这取决于我们正在谈论的请求。请参阅MSDN上的Understand the data context passed to a plug-in。
举个例子,看看CreateRequest。一个属性 CreateRequest名为Target,其类型为Entity。这是 当前由平台操作的实体。访问 您将使用名称“Target”作为关键字的实体数据 输入参数集合。你还需要施放返回的 实例
请注意,并非所有请求都包含类型的Target属性 实体,因此您必须查看每个请求或响应。例如, DeleteRequest具有Target属性,但其类型为EntityReference。
总结:查看实际请求,例如CreateRequest。
答案 2 :(得分:2)
2011年,有人实际根据消息类型生成了类型化属性。有点整洁:https://xrmpalmer.wordpress.com/2013/05/27/crm2011-plugin-inputparameter-and-outputparameter-helper/
它会显示您希望每条消息都有参数。