
【场景】webapi 值更新和实体服务的区别,如果没有搞清楚更新逻辑,那么很容易会导致单据数据丢失
【省流结论】
webapi本质上就是模拟前端录入,只要你传了对应字段,其效果就等同于一次前端请求。
只要json中包含对应字段,就会触发值更新事件;
json中包含对应字段,且对应字段的值有变更,才会触发实体服务规则
【前置背景】
[BOS.常见问题.值更新和实体服务 针对值没有变化时的区别](https://vip.kingdee.com/article/584392729446979584)
【值更新和实体服务规则 效果演示】
(0)值更新事件,不管值是否变更,都会执行
录屏中分别为四步,json如下:
```json
-- 0 新建保存单据,有组织和物料;
"Model": {
"FID": 0,
"FBillNo": "testbill 101",
"FOrgId_DataChanged": {
"FNumber": "101"
},
"FMaterial_DataChanged": {
"FNUMBER": "1.01.001"
}
}
-- 1 使用内码和组织修改,物料被清空;(修改组织,触发值更新)
"Model": {
"FID": 100028,
"FOrgId_DataChanged": {
"FNumber": "102"
}
}
-- 2 补充录入物料;
"Model": {
"FID": 100028,
"FOrgId_DataChanged": {
"FNumber": "102"
},
"FMaterial_DataChanged": {
"FNUMBER": "0.0000.01"
}
}
-- 3 使用内码和组织修改,其中组织不变,物料被清空;(组织不变,触发值更新)
"Model": {
"FID": 100028,
"FOrgId_DataChanged": {
"FNumber": "102"
}
}
```

(1)实体服务规则,只有值变化时才会执行
```json
-- 0 新建保存单据,有组织和物料;
"Model": {
"FID": 0,
"FBillNo": "testbill 202",
"FOrgId_EntityService": {