
@[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: