SAP B1 9.3 Service Layer OTSH自定义字段不返回及entity属性配置问询
SAP B1 9.3 Service Layer 不返回OTSH表自定义字段的配置方案
操作无效的核心原因
- 直接在OTSH表手动新增数据库列的操作,未同步到SAP B1的元数据层,Service Layer仅识别通过官方工具注册的字段
- 常规的服务重启、站点更新操作不会强制重载B1的全局字段元数据缓存
落地配置步骤
1. 修正自定义字段创建方式
- 禁止直接在数据库表中手动新增列,必须通过SAP B1客户端的用户字段管理工具注册字段:
- 登录目标公司账套的SAP B1客户端
- 进入
工具 > 自定义工具 > 用户字段管理 - 选择对应业务对象(OTSH对应服务调用表头实体),在节点下新增2个自定义字段
- 系统会自动完成元数据注册、权限映射,无需手动修改数据库结构
- 若已经手动在OTSH加了列,需要先删除手动添加的列,再通过上述流程重新创建字段,避免字段冲突
2. 开启Service Layer的自定义字段暴露开关
- 进入SAP B1客户端
管理 > 系统初始化 > 常规设置 > 服务层标签页 - 勾选暴露用户定义字段到Service Layer选项,保存设置后触发元数据变更
3. 强制刷新Service Layer元数据缓存
之前仅对Service Layer执行更新/重启无效,是因为缓存未被清空,正确操作:
- 打开IIS管理器,找到Service Layer对应的应用池,执行停止操作
- 进入Service Layer默认安装路径
C:\Program Files\SAP\SAP Business One ServerTools\Service Layer,删除根目录下的cache缓存文件夹 - 重新启动对应应用池,Service Layer启动时会自动从B1数据库拉取最新的字段元数据
4. 调用接口时的返回配置
- Service Layer中自定义字段的固定返回格式为
U_你定义的字段名,调用时如果使用$select参数,需要显式将这两个U_字段加入选择列表,否则默认返回集不会携带自定义字段,示例调用:https://<SL服务地址>:<端口>/b1s/v1/ServiceCalls?$select=DocNum,CardCode,U_CustomField1,U_CustomField2 - 可通过访问元数据接口验证字段同步状态:调用
https://<SL服务地址>:<端口>/b1s/v1/$metadata,在返回的XML中查找ServiceCall实体下是否存在对应的U_字段,存在则说明元数据同步完成
版本兼容注意事项
- SAP B1 9.3版本的Service Layer对自定义字段的支持,最低需要服务端安装PL08及以上补丁,若补丁版本过低,需要先升级服务端补丁包后再重复上述步骤
- 确认接口调用时连接的公司账套,和你创建自定义字段的账套为同一数据库,避免跨账套调用导致字段缺失
内容的提问来源于stack exchange,提问作者Ana Santos
相关产品推荐
相关产品推荐

