如何使用JavaScript和n:m关系链接两个记录

时间:2011-09-09 07:36:50

标签: javascript dynamics-crm crm dynamics-crm-2011

我在两个实体之间有多对多的关系。我知道Dynamics CRM在数据库中为它创建了一个交叉表。我知道如何使用来自该自动创建实体的fetch命令检索记录。

但现在我想使用JavaScript动态地向该表添加新记录。这可能吗?

我尝试为此类型创建新记录,但后来出现以下错误。

  

create方法不支持[“relationship_entity_name”]类型的实体。

1 个答案:

答案 0 :(得分:9)

JavaScript SDK在这一点上并不是最清晰的,但它的基础是SDK不允许直接插入到交叉表中。它只允许调用Associate方法。以下是两个TechNet链接,可能会引导您朝着正确的方向前进。

此外,Avanade在公开提供CRM JavaScript library (updated to reference archive.org)方面做得非常出色,其中包括Associate辅助方法。

最后,一些示例代码:

function AssociateEntities(moniker1, moniker2, relationshipName) {
    var xml;
    var resultXml;

    xml = "<Execute xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>";
    xml += "<Request xsi:type='AssociateEntitiesRequest'>";
    xml += "<Moniker1><Id xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>" + moniker1[0].id + "</Id>";
    xml += "<Name xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>" + moniker1[0].entityType + "</Name></Moniker1>";
    xml += "<Moniker2><Id xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>" + moniker2[0].id + "</Id>";
    xml += "<Name xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>" + moniker2[0].entityType + "</Name></Moniker2>";
    xml += "<RelationshipName>" + relationshipName + "</RelationshipName>";
    xml += "</Request></Execute>";

    resultXml = CallCrmService(xml, "Execute");

    if (resultXml) {
        return "success";
    }
    else {
        return null;
    }
}