价目表分发操作记录日志
@[TOC](目录)
### 背景
当前系统采购价目表分发和取消分发操作无法记录上机操作日志,虽然分发操作勾选了记录操作日志选项。平台默认不会自动处理该操作的日志,业务领域也未特殊处理该操作的日志,只提供了分发查询,但无法记录到每次分发的操作日志,对此有部分客户提出了该需求。在标准产品未处理之前,可通过注册python脚本二开实现。
分发操作和取消分发操作会弹出一个动态表单,客户对动态表单单选或多选分发组织进行分发,需要不仅仅是记录某价目表进行了分发操作,同样需要记录具体分发给了哪些组织。由于操作插件无法记录日志,只能在表单插件中进行记录。对此需要注册两个插件,一个表单插件的,一个列表插件的
### python脚本
#### 表单插件
```python
import clr
clr.AddReference("mscorlib")
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Newtonsoft.Json')
from Kingdee.BOS import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Util import *
from System import *
from System.Collections.Generic import *
from System.Data import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.DataEntity import *
from Kingdee.BOS.Core.Log import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Newtonsoft.Json import JsonConvert
from Newtonsoft.Json.Linq import *
def AfterDoOperation(e):
if e.Operation.Operation == "Issue":
if e.OperationResult.IsSuccess == True:
billNumber = this.View.Model.GetValue("FNumber",0)
issueOrgList = e.OperationResult.FuncResult
if issueOrgList != None and len(issueOrgList) > 0:
sqlOrg = "SELECT FORGID,FNAME FROM T_ORG_ORGANIZATIONS_L WHERE FLOCALEID = 2052 AND FORGID IN ({0})".format(",".join(str(o) for o in issueOrgList))
readerOrg = DBUtils.ExecuteReader(this.Context, sqlOrg)
orgName = List[String]()
while readerOrg.Read():
orgName.Add(readerOrg["FNAME"].ToString())
readerOrg.Close()
orgNameStr = ",".join(str(o) for o in orgName)
if len(orgName)>0:
log = LogObject()
msg1 = "采购价目表“{0}”分发到这些组织:{1}".format(billNumber, orgNameStr)
log.Description = msg1
msg2 = "分发"
log.OperateName = msg2
log.ObjectTypeId = "PUR_PriceCategory"
log.SubSystemId = "20"
log.Environment = OperatingEnvironment.BizOperate
LogServiceHelper.WriteLog(this.Context, log)
if e.Operation.Operation == "CancelIssue":
if e.OperationResult.IsSuccess == True:
billNumber = this.View.Model.GetValue("FNumber",0)
issueOrgList = e.OperationResult.FuncResult
if issueOrgList != None and len(issueOrgList) > 0:
sqlOrg = "SELECT FORGID,FNAME FROM T_ORG_ORGANIZATIONS_L WHERE FLOCALEID = 2052 AND FORGID IN ({0})".format(",".join(str(o) for o in issueOrgList))
readerOrg = DBUtils.ExecuteReader(this.Context, sqlOrg)
orgName = List[String]()
while readerOrg.Read():
orgName.Add(readerOrg["FNAME"].ToString())
readerOrg.Close()
orgNameStr = ",".join(str(o) for o in orgName)
if len(orgName)>0:
log = LogObject()
msg1 = "采购价目表“{0}”取消分发到这些组织:{1}".format(billNumber, orgNameStr)
log.Description = msg1
msg2 = "取消分发"
log.OperateName = msg2
log.ObjectTypeId = "PUR_PriceCategory"
log.SubSystemId = "20"
log.Environment = OperatingEnvironment.BizOperate
LogServiceHelper.WriteLog(this.Context, log)
```
#### 列表插件
```python
import clr
clr.AddReference("mscorlib")
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Newtonsoft.Json')
from Kingdee.BOS import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Util import *
from System import *
from System.Collections.Generic import *
from System.Data import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.DataEntity import *
from Kingdee.BOS.Core.Log import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Newtonsoft.Json import JsonConvert
from Newtonsoft.Json.Linq import *
def AfterDoOperation(e):
if e.Operation.Operation == "Issue":
if e.OperationResult.IsSuccess == True:
lstFids = this.ListView.SelectedRowsInfo.GetPrimaryKeyValues()
issueOrgList = e.OperationResult.FuncResult
if issueOrgList != None and len(issueOrgList) > 0:
sqlOrg = "SELECT FORGID,FNAME FROM T_ORG_ORGANIZATIONS_L WHERE FLOCALEID = 2052 AND FORGID IN ({0})".format(",".join(str(o) for o in issueOrgList))
readerOrg = DBUtils.ExecuteReader(this.Context, sqlOrg)
orgName = List[String]()
while readerOrg.Read():
orgName.Add(readerOrg["FNAME"].ToString())
readerOrg.Close()
orgNameStr = ",".join(str(o) for o in orgName)
if len(orgName)>0 and len(lstFids) > 0:
priceNumber = "SELECT FID,FNUMBER FROM T_PUR_PRICELIST WHERE 1=1 AND FID IN ({0})".format(",".join(str(o) for o in lstFids))
readerPr = DBUtils.ExecuteReader(this.Context, priceNumber)
prNumber = []
while readerPr.Read():
prNumber.Add(readerPr["FNUMBER"].ToString())
readerPr.Close()
prNumberStr = "”,“".join(str(o) for o in prNumber)
if len(prNumber) > 0 and len(orgName)>0:
log = LogObject()
msg1 = "采购价目表“{0}”分发到这些组织:{1}".format(prNumberStr, orgNameStr)
log.Description = msg1
msg2 = "分发"
log.OperateName = msg2
log.ObjectTypeId = "PUR_PriceCategory"
log.SubSystemId = "20"
log.Environment = OperatingEnvironment.BizOperate
LogServiceHelper.WriteLog(this.Context, log)
if e.Operation.Operation == "CancelIssue":
if e.OperationResult.IsSuccess == True:
lstFids = this.ListView.SelectedRowsInfo.GetPrimaryKeyValues()
issueOrgList = e.OperationResult.FuncResult
if issueOrgList != None and len(issueOrgList) > 0:
sqlOrg = "SELECT FORGID,FNAME FROM T_ORG_ORGANIZATIONS_L WHERE FLOCALEID = 2052 AND FORGID IN ({0})".format(",".join(str(o) for o in issueOrgList))
readerOrg = DBUtils.ExecuteReader(this.Context, sqlOrg)
orgName = List[String]()
while readerOrg.Read():
orgName.Add(readerOrg["FNAME"].ToString())
readerOrg.Close()
orgNameStr = ",".join(str(o) for o in orgName)
if len(orgName)>0 and len(lstFids) > 0:
priceNumber = "SELECT FID,FNUMBER FROM T_PUR_PRICELIST WHERE 1=1 AND FID IN ({0})".format(",".join(str(o) for o in lstFids))
readerPr = DBUtils.ExecuteReader(this.Context, priceNumber)
prNumber = []
while readerPr.Read():
prNumber.Add(readerPr["FNUMBER"].ToString())
readerPr.Close()
prNumberStr = "”,“".join(str(o) for o in prNumber)
if len(prNumber) > 0 and len(orgName)>0:
log = LogObject()
msg1 = "采购价目表“{0}”取消分发到这些组织:{1}".format(prNumberStr, orgNameStr)
log.Description = msg1
msg2 = "取消分发"
log.OperateName = msg2
log.ObjectTypeId = "PUR_PriceCategory"
log.SubSystemId = "20"
log.Environment = OperatingEnvironment.BizOperate
LogServiceHelper.WriteLog(this.Context, log)
```
### 说明
1. 脚本注册保存时报Kingdee.BOS.App组件未定义可以忽略
2. 注册后未生效可观察下页面是否报错,再找下应用后台日志是否有关于IronPython的异常
3. 如果提示==ascii==相关的报错,说明当前环境不支持该脚本使用中文,暂未有好方法可以解决。需要将上述脚本中的所有中文字符改为英文字符
**其他更多文章入口:**[https://wenku.my7c.com/link/s/lbRPP](https://wenku.my7c.com/link/s/lbRPP)
价目表分发操作记录日志
@[TOC](目录)### 背景当前系统采购价目表分发和取消分发操作无法记录上机操作日志,虽然分发操作勾选了记录操作日志选项。平台默认不会自...
点击下载文档
本文2024-09-16 19:01:24发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-25905.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章