Python插件 - 如何通过单据保存时把单据体上的数据赋值到基础资料【SQL方式更新】
[python插件代码,如何通过采购入库单保存时把单据体上的仓库、仓位赋值到基础资料的仓库、仓库](https://wenku.my7c.com/questions/476714464754828288?productLineId=1)
对于次回答提供了解决思路,但是没完全解决一直在私信交流,决定开篇文章分享功能
# 重点
- 要查看 e.DataEntitys 的数据包结构 因为了解了结构才能更顺利的取值避免多次取值失败
- 通过 ==raise NameError(JsonConvert.SerializeObject(obj));== 获取数据包结构
![获取JSON结构.webp](/download/01002127709e165049429e3fde56a2a3376b.webp)
- **修改完基础资料一定要清除缓存**
- **修改完基础资料一定要清除缓存**
- **修改完基础资料一定要清除缓存**
- 重要的事情说三遍
# 部署
![1691578113144.webp](/download/01005b26938d408f4240b5a58403ac9dcc3f.webp)
# 代码块
``` python
import clr
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Newtonsoft.Json")
clr.AddReference("Kingdee.BOS.ServiceHelper")
from Kingdee.BOS.Util import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.Metadata.FormElement import *
from Kingdee.BOS.App.Data import *
from System import *
from System.Linq import *
from System.Text import *
from Newtonsoft.Json import *
from Newtonsoft.Json.Linq import *
from Kingdee.BOS.ServiceHelper import *
def AfterExecuteOperationTransaction(e):
obj = e.DataEntitys;
_FEntity=obj[0]["InStockEntry"] #获取单据明细表
#raise NameError(JsonConvert.SerializeObject(obj)); #用于查看数据结构 方便取值使用
for item in _FEntity :
MaterialId_Id= item["MaterialId_Id"];#物料标识
StockId_Id = item["StockId_Id"];#仓库标识
StockLocId_Id = item["StockLocId_Id"]; #仓位标识
if StockId_Id is not None:
#更新基础资料
_UpdateSql="/*dialect*/ UPDATE t_BD_MaterialStock set FSTOCKID = {0},FSTOCKPLACEID = {1} where FMATERIALID = {2}".format(StockId_Id,StockLocId_Id,MaterialId_Id);
DBUtils.Execute(this.Context,_UpdateSql);
ClearCache(MaterialId_Id);#清除缓存资料
def ClearCache(ID):
#缓存清理
FORMID="BD_MATERIAL";#基础资料的表单ID
completaMetadata = MetaDataServiceHelper.Load(this.Context,FORMID);
pkList = [-1];
pkList[0] = ID;
BusinessDataServiceHelper.ClearCache(this.Context, completaMetadata.BusinessInfo.GetDynamicObjectType(), pkList);
CacheUtil.ClearCache(this.Context.DBId + FORMID, "BOS_QuickBaseDataCache");
```
# 结果
## 更新前数据
![更新前.webp](/download/010026b96ca4fc7f44cf8884921eefa6adbb.webp)
## 更新后
![更新后.webp](/download/010026c15b96a3a146f8acba70543f7e70f2.webp)
## 客户端显示
![更新后UI展示.webp](/download/010069086a1f6f604e70aa9cdf73ed95fd8d.webp)
谢谢,这样做可以把企业个性化需求实现简化了,内部IT可以去处理了,也减少找第三方去开发的费用支出。
这个插件在“审核”操作上可以用么
牛逼的功能
非常给力的技术,使用ok
Python插件 - 如何通过单据保存时把单据体上的数据赋值到基础资料【SQL方式更新】
[python插件代码,如何通过采购入库单保存时把单据体上的仓库、仓位赋值到基础资料的仓库、仓库](https://wenku.my7c.com/questions/476714...
点击下载文档
本文2024-09-16 17:13:51发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14370.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章