D365通过OData API创建库存移动日记账触发字段必填报错
问题根因
报错提示的必须填写字段'Journal'不是指实体或底层表存在名为Journal的物理字段,是系统校验时抛出的字段标签提示,实际对应InventJournalTable表的JournalId(日记账编号)字段。
触发报错的核心原因是:你调用接口传入的日记账名称(JournalNameId)没有绑定有效的自动编号规则,系统在写入InventJournalTable记录时无法自动生成日记账编号,导致validateWrite校验失败。
你之前用InventoryCountingJournalHeaders创建盘点日记账能成功,是因为当时传入的盘点类日记账名称提前配置好了正确的编号序列,系统可以自动生成JournalId,不会触发该校验。
常见触发场景包括:
- 传入的
JournalNameId对应的日记账类型不是「移动」(Movement),和库存移动日记账实体不匹配 - 对应日记账名称配置中,编号序列栏位留空,或关联的编号序列已停用、作用域不匹配当前操作的法人
- 关联的编号序列设置为手动编号,但请求中没有主动传入
JournalId值
解决方案
按以下步骤排查修复即可,不需要自定义扩展实体:
- 前端校验日记账名称配置
进入D365 FO路径:库存管理 > 设置 > 日记账名称 > 库存,找到接口请求中使用的JournalNameId对应记录,确认两项配置:- 日记账类型 必须选择
移动 - 编号序列 栏位必须绑定已激活、作用域匹配当前法人、可用的编号序列,禁止留空
- 日记账类型 必须选择
- 调整接口请求参数
不需要在请求中传递名为Journal的字段,该字段不属于InventInventoryMovementJournalHeaderEntity的公开属性,强行传递反而会触发OData字段不存在错误。
自动编号场景下,仅需传对必填的JournalNameId即可,可选传Description等业务字段;如果对应编号序列设置为手动编号,则额外传JournalId字段传入自定义的日记账编号。
正确的请求示例如下:POST [你的D365环境域名]/data/InventoryMovementJournalHeaders Content-Type: application/json Authorization: Bearer [你的有效AAD访问令牌] { "JournalNameId": "IMV", // 替换为你配置完成的移动类日记账名称ID "Description": "OData API批量创建的库存移动日记账" } - 验证结果
配置正确的前提下,上述请求会返回201 Created状态码,响应体中会携带系统自动生成的JournalId值,后续可以用这个ID继续调用日记账行实体创建行记录。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

