You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:05:23