Dynamics crm 如何知道在Dynamics CRM插件上下文中哪些InputParameters值是可能的?

Dynamics crm 如何知道在Dynamics CRM插件上下文中哪些InputParameters值是可能的?,dynamics-crm,dynamics-crm-online,dynamics-crm-2016,Dynamics Crm,Dynamics Crm Online,Dynamics Crm 2016,我试图从中理解插件示例。 有这样一个条件: // The InputParameters collection contains all the data passed in the message request. if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 总

我试图从中理解插件示例。 有这样一个条件:

// 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”
映射值是否为
实体类型,而不是其他类型

我找到了两年前的帖子,我找到了一个网页,上面写着(重点是我的):

在插件中,context.InputParameters和 context.OutputParameters取决于消息和您选择的阶段 在上注册插件。例如,“Target”出现在 用于创建和更新消息的InputParameters,但不用于 设置状态消息。此外,OutputParameters仅存在于后期, 而不是在前期阶段没有单一的文档来源 它提供了一整套InputParameters和OutputParameters 按消息和阶段


从我的搜索中,一个单一的来源仍然不存在,但也许可以使用Dynamics Online平台在设置菜单的深处找到可能的值,也许?任何源代码都很好。

这样做的最佳实践是使用强类型方法。例如,如果您想知道CreateRequest上有哪些属性可用,您可以执行以下操作:

var createReq = new CreateRequest() { Parameters = context.InputParameters };
createReq.Target; // Has type Entity
请看解释此方法的完整博客帖子:


原始答复:

这取决于我们讨论的是哪一个请求。请参阅MSDN上的

作为一个例子,看一下CreateRequest。财产之一 CreateRequest命名为Target,类型为Entity。这是 平台当前正在操作的实体。访问 您将使用名称“Target”作为 输入参数集合。您还需要对返回的 例如

请注意,并非所有请求都包含类型为的目标属性 实体,所以您必须查看每个请求或响应。例如 DeleteRequest具有目标属性,但其类型为EntityReference


总结:看看实际的请求,例如。

在2011年,有人根据消息类型实际生成了类型化属性。有点整洁:

这将显示您希望每条消息都有参数。

我知道这是一个已经回答过的“老”问题,但我认为这可能会有所帮助。我已经构建了一个小网页,其中包含所有带有所有输入/输出参数的消息。您可以从以下位置访问它:


那么,如果
“Target”
CreateRequest
的唯一相关属性(即持有对实体的引用),那么为什么需要
if
条件呢?如果省略它会发生什么?我看不出需要if(context.InputParameters.Contains(“目标”)部分。CreateRequest应该始终在其InputParameters中包含目标。我认为
if(context.InputParameters.Contains(“目标”)部分
部分是为了防止在为多个请求类型注册相同的代码时出错。例如,如果您在
检索
创建
上注册插件,但希望发生不同的事情,您可以(潜在地)为这两个操作编写一个插件谢谢,那太好了。如果我们能将此应用于Dynamics 2016……几乎没有什么变化@Helterskeleter,如果你有一个prem版本,你可以运行相同的SQL脚本生成2016版本。我知道,但我有在线版本。我知道我有点晚了,但我做到了:@Fede那真是太好了!