如何通过Dynamics 365 Web API为Webhook注册SdkMessageProcessingStep
解决Dynamics Web API注册SdkMessageProcessingStep关联ServiceEndpoint的问题
我来帮你搞定这个问题——你已经成功创建了ServiceEndpoint,但在关联SdkMessageProcessingStep时踩了Web API实体绑定的坑,这是很常见的误区,我给你梳理正确的做法:
核心问题:实体关联的正确语法
Dynamics Web API中,关联单值导航属性(比如EventHandler关联serviceendpoint、SdkMessage关联sdkmessages实体)必须使用@odata.bind注解,而不是你之前尝试的直接传ID或@id字段。这就是你收到“不支持非开放类型中的无类型值”错误的原因。
正确的SdkMessageProcessingStep创建请求
请求URL
POST [Your CRM URL]/api/data/v9.0/sdkmessageprocessingsteps
请求Headers
确保包含这些必要的头信息:
Content-Type: application/json OData-MaxVersion: 4.0 OData-Version: 4.0 Authorization: Bearer [Your Access Token]
正确的请求体
把你之前的参数改成@odata.bind的绑定格式,示例如下:
{ "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" }
关键细节说明
@odata.bind格式:每个关联属性的格式是[导航属性名]@odata.bind,值为目标实体的相对URL(包含实体集名称和ID)。比如EventHandler对应serviceendpoints实体集,所以绑定路径是/serviceendpoints(你的ServiceEndpoint ID)。- 验证ID正确性:
SdkMessage的ID9ebdbb1b-ea3e-db11-86a7-000a3a5473e8是标准的Create消息ID,没问题;SdkMessageFilter的IDc2c5bb1b-ea3e-db11-86a7-000a3a5473e8对应联系人实体的Create消息过滤,如果你要绑定账户实体的Create/Update,需要替换成对应的SdkMessageFilter ID(可以通过Web API查询sdkmessagefilters实体获取)。
- Stage参数:你用的
40是PostOperation阶段,如果需要在记录创建/更新前触发(比如数据校验),可以改成20(PreOperation)。
为什么之前的方式失败?
- 直接传
eventhandlerid等字段:Web API中,导航属性对应的ID字段是只读的,不能直接赋值,必须通过@odata.bind来关联实体。 - 使用
@id字段:这个语法不是Dynamics Web API支持的关联方式,只有@odata.bind才是官方认可的单值实体绑定方法。
按照这个格式发送请求,就能成功创建关联到ServiceEndpoint的SdkMessageProcessingStep了。
内容的提问来源于stack exchange,提问作者fdrz
相关产品推荐
相关产品推荐

