CRM在线插件无法以与调试时相同的方式执行

时间:2015-12-07 22:12:15

标签: dynamics-crm dynamics-crm-online

我刚刚为crm在线编写插件,现在遇到了一个奇怪的问题。

当我通过调试器运行插件时,我得到了预期的结果,但是当我让插件自行运行时,它无法按预期运行。

在这个插件中,我正在收听新队列的创建事件,我正在检查队列是否是电子邮件。到目前为止,所有内容都按预期运行,但是在收到电子邮件后,我会检查电子邮件是否有附件,以及当事情开始出现偏差时。通过调试器,我可以看到附件文件,但是就其本身而言,插件无法找到附件。这对我来说非常奇怪,因为我可以看到队列中的电子邮件,并且肯定有附件。

导致这种情况发生的原因,为什么会发生,这是一个常见问题?

1 个答案:

答案 0 :(得分:2)

有点猜测。

有一个时间问题,当你进行调试时,由于你人为地减慢了应用程序的速度而导致计时问题不明显。

我猜你的插件是同步的,事情就是这样发生的。

执行中

  1. 已创建电子邮件。
  2. 线程开始向电子邮件添加附件。
  3. 您的插件已运行,但未找到任何附件。
  4. 线程添加附件和完成。
  5. 在调试中

    1. 已创建电子邮件。
    2. 线程开始向电子邮件添加附件。
    3. 你的插件运行,然后转到断点。
    4. 线程添加附件和完成。
    5. 您检查该属性并找到附件。
    6. 鉴于电子邮件和电子邮件附件是单独的数据库表,这似乎是一个很好的呼声,CRM可能会分别创建两个创建调用。

      测试这一理论的方法

      1. 让你的插件异步。
      2. 在您的代码中添加Thread.Sleep(不超过2分钟,一分钟就可以了)。
      3. 找一个注册插件的地方或步骤。
      4. 在电子邮件附件中添加一个插件,该插件会抛出异常以查看发生的事情。
      5. 如果我的理论证明是真的,最好的解决办法是找到另一种注册插件的方法。