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

问题描述 投票:0回答:2

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

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

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

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

javascript dynamics-crm crm dynamics-crm-2011
2个回答
9
投票

JavaScript SDK 在这一点上并不是最清楚的,但基本原理是 SDK 不允许直接插入相交表。它只允许调用

Associate
方法。下面是两个 TechNet 链接,可能会引导您走向正确的方向。

此外,埃维诺在制作 CRM JavaScript 库(已更新以参考 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;
    }
}

0
投票

我最近使用 Xrm.WebApi 做到了这一点。您不能将 createRecord 用于多对多链接实体,这是如何做到的。

async function createAssociation(associationName, primaryEntityName, primaryId, relatedEntities) {
    var manyToManyAssociateRequest = {
        getMetadata: () => ({
            boundParameter: null,
            parameterTypes: {},
            operationType: 2,
            operationName: "Associate"
        }),
        relationship: associationName,
    target: {
        entityType: primaryEntityName,
        id: primaryId
    }}
    
    manyToManyAssociateRequest.relatedEntities = relatedEntities
        
    return await Xrm.WebApi.online.execute(manyToManyAssociateRequest)
}

//driversToAssign is the return array from a standard Dynamics Lookup that contains the id for a driver.
var simpleDriverArray = driversToAssign.map(driver=>{return {entityType: "new_driver", id:driver.id}})
var res = await createAssociation("new_induction_new_driver", "new_induction", inductionId, simpleDriverArray)
console.log(res) //This is a 204 - no content response
© www.soinside.com 2019 - 2024. All rights reserved.