如何通过Dynamics 365 Web API为Webhook注册SdkMessageProcessingStep
如何通过Dynamics Web API为ServiceEndpoint注册SdkMessageProcessingStep
我之前刚好解决过一模一样的问题,你的核心问题出在关联实体的引用格式上——Dynamics 365 Web API对于关联已存在实体的场景,不支持直接传ID字符串,也不支持用@id的格式,必须用@odata.bind的绑定语法来指定关联关系。
先分析你遇到的两个错误:
- 第一个错误是直接传递
sdkmessageid等字符串ID:Web API期望的是关联实体的绑定引用,而不是原始ID值,所以会抛出格式验证错误。 - 第二个错误用了
EventHandler{"@id": "..."}的格式:Dynamics Web API不支持这种非结构化的对象引用,必须遵循它特有的@odata.bind规则。
正确的请求体格式
你需要修改POST请求到/api/data/v9.0/sdkmessageprocessingsteps的请求体,使用[导航属性名]@odata.bind的格式来关联ServiceEndpoint、SdkMessage和SdkMessageFilter。示例如下:
{ "name": "Test for Step Creation", "stage": 40, "rank": 1, "eventhandler@odata.bind": "/serviceendpoints(04e08d50-e63b-eb11-a813-000d3a0a7552)", "sdkmessage@odata.bind": "/sdkmessages(9ebdbb1b-ea3e-db11-86a7-000a3a5473e8)", "sdkmessagefilter@odata.bind": "/sdkmessagefilters(c2c5bb1b-ea3e-db11-86a7-000a3a5473e8)", "supporteddeployment": 0, "description": "TEST FOR STEP CREATION #1" }
关键说明:
eventhandler@odata.bind:关联你已经创建好的ServiceEndpoint,值是该实体的相对URL(包含ID)。这里的eventhandler是SdkMessageProcessingStep实体关联ServiceEndpoint的导航属性名称(对应字段eventhandlerid)。sdkmessage@odata.bind:关联触发事件的SdkMessage,你用的ID对应Create消息,如果需要监听更新事件,要替换成Update消息的对应ID。sdkmessagefilter@odata.bind:关联实体过滤器,你提供的ID对应联系人(contact)实体,如果要给账户(account)注册Webhook,需要替换成账户对应的SdkMessageFilter ID。
额外注意事项:
- 确保请求头包含
Content-Type: application/json,并且携带有效的身份验证Token(Bearer Token)。 - 如果需要同时监听创建和更新事件,需要分别创建两个SdkMessageProcessingStep,分别关联Create和Update对应的SdkMessage ID。
内容的提问来源于stack exchange,提问作者fdrz
相关产品推荐
相关产品推荐

