【问题标题】:microsoft dynamics crm - SQL changesmicrosoft dynamics crm - SQL 更改
【发布时间】:2015-02-21 00:28:34
【问题描述】:

您好,我正面临一项任务,需要我(或不?)直接在 CRM SQL DB 上进行一些小改动。

情况: 1) 两个实体之间存在 N:1 关系,已更改为 N:N。 2)对于每个实体,我需要将相关的东西从以前的关系移动到新的关系。

对于活动实体,这没有问题,因为客户不关心更改字段“ModifiedOn”、“ModifiedBy”和“ClosedOn”,但对于非活动(例如已关闭的事件),他想迁移相关实体,但不改变这三个字段。因为所有这些事件都已关闭/不活动,所以我不能只调用“AssociateRequest”,我需要重新打开案例、关联、再次关闭它。这当然会改变这些领域。

有没有办法通过 API 而不是直接在 SQL 上做到这一点?如果没有 - 这可能是一个问题吗?

【问题讨论】:

  • Microsoft 不支持基于 N:1 关系通过 SQL 创建 N:N 关系。然而,过去它是解决您的问题的一种简单而快速的方法。我当然建议先在测试环境中进行此更改以进行验证。
  • 关系已创建,并且活动实体已通过 CRM API 关联。我想要对不活动的东西做的是重新打开案例,将它们与这些实体相关联并通过 API 再次关闭。我想直接在 SQL 中编写的唯一内容是字段“ModifiedOn”、“ModifiedBy”和“ClosedOn”(事件实体)的值。所以你是说这样做应该没问题?当然会先在测试环境上做测试
  • 您可以将表元数据字段存储在临时表中,运行 API 操作,然后在 CRM 中恢复这些字段。这应该不会导致任何问题。

标签: dynamics-crm-2011


【解决方案1】:

如果你已经有了改变Relationship的机制,只需要修改记录CreatedOn、CreatedBy、ModifiedOn和ModifiedBy...你应该可以使用late bound code来做到这一点:

Entity YourTargetEntity= new Entity("YourTargetEntity");
YourTargetEntity["createdon"] = new DateTime(2015,01,01); // or whatever the date you want
YourTargetEntity["overriddencreatedon"] = new DateTime(2015,01,01); // or whatever the date you want
YourTargetEntity["createdby"] = new EntityReference("systemuser", new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"));
TargetEntity["modifiedby"] = new EntityReference("systemuser", new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"));
TargetEntity["modifiedon"] = new DateTime(2015,01,01); // or whatever the date you want
_service.Update(YourTargetEntity);

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多