如何通过Dynamics Xrm Web API实现单次Upsert操作?
在PCF中用Xrm WebAPI实现单次Upsert操作
你可以直接使用Xrm WebAPI的Upsert请求来实现「记录存在则更新,不存在则创建」的单次请求逻辑,无需分两次调用查询+创建/更新。
核心实现方式
通过Xrm.WebApi.online.execute方法发送UpsertRequest,该请求会基于你指定的**备选键(Alternate Key)**判断目标记录是否存在:
- 匹配到对应备选键的记录时,执行更新操作
- 未匹配到记录时,执行创建操作
代码示例
假设你要操作的实体是account,且已为该实体配置了名为accountnumber的备选键,示例代码如下:
// 构造Upsert请求 const upsertRequest = { getMetadata: function () { return { boundParameter: null, parameterTypes: { "target": { "typeName": "account", "structuralProperty": 5 // EntityType } }, operationType: 4, // Upsert操作类型标识 operationName: "Upsert" }; }, target: { "@odata.type": "Microsoft.Dynamics.CRM.account", accountnumber: "ACC-001", // 用于匹配记录的备选键 name: "更新后的客户名称", telephone1: "1234567890" } }; // 执行Upsert请求 Xrm.WebApi.online.execute(upsertRequest).then( function success(result) { if (result.ok) { if (result.status === 201) { console.log("记录已创建"); // 可通过result.json()获取新创建记录的信息 } else if (result.status === 204) { console.log("记录已更新"); } } }, function error(error) { console.error("Upsert失败:", error); } );
关键注意事项
- 必须提前为目标实体配置备选键:Upsert请求依赖备选键识别记录,无法使用主键(GUID)做判断
- 状态码区分操作结果:创建成功返回
201 Created,更新成功返回204 No Content - 请求参数要求:
target对象中必须包含备选键字段,以及需要创建/更新的其他实体属性
内容的提问来源于stack exchange,提问作者TheIntern
相关产品推荐
相关产品推荐

