CRM 在线插件无法像调试时那样执行

CRM online plugin fails to execute the same way as when debugged

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

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

在这个插件中,我正在监听新 queueitems 的创建事件,我正在检查 queueitm 是否是一封电子邮件。到目前为止,一切都如预期的那样 运行ning,但是当收到一封电子邮件后,我检查电子邮件是否有附件,这是事情开始偏离的时候。通过调试器我可以看到附件文件,但插件本身找不到附件。这对我来说很奇怪,因为我可以在队列中看到电子邮件并且那里肯定有附件。

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

有点猜测。

存在计时问题,当您调试时该计时问题并不明显,因为您人为地减慢了应用程序的速度。

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

执行中

  1. 已创建电子邮件。
  2. 线程开始向电子邮件添加附件。
  3. 您的插件运行,但未找到附件。
  4. 线程添加附件并完成。

调试中

  1. 已创建电子邮件。
  2. 线程开始向电子邮件添加附件。
  3. 您的插件运行,并进入断点。
  4. 线程添加附件并完成。
  5. 您检查 属性 并找到附件。

鉴于电子邮件和电子邮件附件是单独的数据库表,这似乎是个好消息,CRM 可能会分别进行这两个创建调用。

检验这个理论的方法

  1. 让你的插件异步。
  2. 在您的代码中添加一个 Thread.Sleep(不要超过 2 分钟,一分钟应该没问题)。
  3. 寻找另一个地方或步骤来注册您的插件。
  4. 在创建电子邮件附件时添加一个插件,它会抛出异常以查看事情发生的顺序。

如果我的理论被证明是正确的,最好的解决办法可能是找到另一种方式来注册您的插件。