【问题标题】:MS Dynamics return GUID for creating a record but the record is missingMS Dynamics 返回用于创建记录的 GUID,但记录丢失
【发布时间】:2014-03-06 20:09:35
【问题描述】:

我们使用第三方 MS Dynamics 托管,并使用 Dynamics API Web 服务“CrmService”向他们发送数据。

当我们调用“Create”方法时,它看起来好像调用成功了,因为 Dynamics 服务器将 GUID 返回给调用者。查看下面的 CrmService 代码告诉我,如果没有错误,这正是我应该得到的。

但是,Dynamics 中缺少记录本身。记录无处可寻。所以问题是:

1) 关于我获得 GUID 的记录可能会发生什么的任何理论(外星人除外)?

2) 考虑到我无法访问动态服务器本身,我会如何调试这样的事情?

3) 托管服务应该执行哪些好的故障排除步骤来调试此问题(您检查了吗?还是这个?等等)?

public System.Guid Create(BusinessEntity entity) {
    object[] results = this.Invoke("Create", new object[] {
        entity});
        return ((System.Guid)(results[0]));
}

【问题讨论】:

  • 您要创建什么类型的实体?除了外星人之外,最常见的问题是安全限制阻止您“看到”记录。您不需要访问服务器本身,因为您可以像创建记录一样查询记录。您的目标是哪个版本的 MS CRM?
  • 感谢您修复格式问题 Filburt。版本是 CRM 4.0 (4.0.7333.2155)。我应该提到我可以通过 sql server management studio 访问 CRM DB。我正在查看记录应该在的表格。但事实并非如此。然而我有一个 GUID。 Dynamics 中是否有 API 日志可供我告诉托管人员查看?
  • 我不得不承认,我对 CRM 4.0 及其 SDK 的了解不够深入,无法提供很多有用的建议(但对 2011 年非常了解),但通常最后的故障排除方法是询问您的托管服务用于在 CRM 中打开跟踪以捕获在处理新创建的记录期间可能发生的任何错误。
  • 如果您从 CRM 获取 Guid 则创建的记录,如果您不填充 Guid,则它是由 SQL Server 生成的,这意味着 CREATE 调用必须完成。你能解释一下代码吗?它看起来有点不寻常。我期待像Guid results = service.Create(businessEntity); 这样的东西。也许您可以发布构成Invoke 方法的底层代码。
  • 我们有超过 1 个环境,相信我,有时我们会连接到第一个环境并创建记录并在第二个环境 crm/sql 数据库中搜索该记录。我认为这是问题

标签: api dynamics-crm microsoft-dynamics


【解决方案1】:

我知道两个可能的原因:

场景 1

有趣的是,您“正在使用第三方 MS Dynamics 托管”。这可能意味着您正在与其他租户(CRM 组织数据库)共享 CRM 服务器。在这些环境中,如果插件没有被设计为线程安全的,就会出现问题。

我见过实际上会混淆并发处理请求的数据的插件。这些错误的来源可以是例如是自动编号插件产品,由同一部署中的多个租户共享。自动编号插件通常在创建记录时触发。您的记录最终进入另一个数据库并非不可能。

场景 2

您的系统中有一个工作流程,该工作流程通过创建您的记录删除您的记录来触发(直接或间接)。异步插件实际上也可能是一个嫌疑犯。

异步进程在原始事务范围之外运行,因此您的代码不一定要知道它。

【讨论】:

  • 谢谢。很有道理。有什么我会第一时间更新的。
  • 我们开始工作了。托管服务提供商通过创建从我们的环境到他们的环境的隧道,从“互联网”模型切换到 AD 模型。我这边没有任何问题。因此,即使他们没有解释为什么我在记录丢失时获得 GUID,但我只能假设(没有任何确凿证据)Henk 的场景是根本原因。再次感谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多