【问题标题】:Lookup fields and comparison查找字段和比较
【发布时间】:2011-12-19 18:36:25
【问题描述】:

我正在完成一个插件,但有一个小问题。 我正在尝试使用带有 if 的查找字段。

当我尝试使用 == operator 时,没有任何反应。使用Equals() method,我得到一个异常说object is not instantiated...我做错了什么?

插件在创建记录时执行。

EntityReference modeleContrat = (EntityReference)target.Attributes["new_modeldecontrat"];

    throw new InvalidPluginExecutionException(modeleContrat.Name);

    if (modeleContrat.Name == ("Contrat d'unité"))
    {

【问题讨论】:

  • 使用上面的代码,if 永远不会被评估,因为你事先抛出了一个异常。这是正确的代码吗?
  • 嗨,克里斯,抛出的异常只是一个测试。

标签: c# plugins dynamics-crm-2011


【解决方案1】:

我假设您输入问题的代码被您用来以某种方式进行测试,因为它目前由于异常而无法运行。

您收到的错误Object not Instantiated 与锡上所说的完全一样,您的modeleContrat 变量中没有任何值。

所以代码应该更具防御性,像这样:

EntityReference modeleContrat = (EntityReference)target.Attributes["new_modeldecontrat"];

if(modeleContrat != null && modeleContrat.Name == ("Contrat d'unité"))
{
    //Do Stuff
}

至于modeleContrat 没有被实例化。由于您的插件在 Pre-Create 上运行并且您正在从 Target 检索属性,我假设您在某处将输入参数从插件上下文中取出来检索它。

这很好,但是Target 将只包含在正在保存的记录上设置的属性。如果不设置在记录上,则为空。

【讨论】:

  • 嗨,克里斯,刚刚解决了!我不明白对象没有被实例化的事实,因为查找字段是根据另一个实体默认设置的。尝试恢复名称时出现异常,但尝试恢复 id 时却没有...
  • 很高兴你把它修好了 :) 当有一些启动时,插件可能很难调试
【解决方案2】:

我假设“无”意味着您期望执行的逻辑没有。在这种情况下,if 语句等于 false。

【讨论】:

  • 其实没有,即使语句等于false,也应该更新一些字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2018-06-24
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
相关资源
最近更新 更多