【二开案例】【Python】操作服务插件发送系统广播消息和普通消息原创
37人赞赏了该文章
746次浏览
未经作者许可,禁止转载编辑于2023年12月04日 16:33:57
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.K3.MFG.App") clr.AddReference("Kingdee.K3.Core") clr.AddReference("Kingdee.K3.MFG.Contracts") clr.AddReference("Kingdee.BOS.ServiceHelper") clr.AddReference("Kingdee.BOS.Workflow.Models") clr.AddReference("Kingdee.BOS.OrmEngine") clr.AddReference("Kingdee.BOS.DataEntity") clr.AddReference("Newtonsoft.Json") from System import * from System.Data import * from System.Collections.Generic import List as GList from System.ComponentModel import * from Kingdee.BOS import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Bill import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Newtonsoft.Json import * from Kingdee.BOS.Core.Bill.PlugIn import * from Kingdee.BOS.Core.Bill.PlugIn.Args import * from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * from Kingdee.BOS.Core.Msg import * from Kingdee.BOS.Orm.Drivers import * from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.Workflow.Models.WindowRemind import * from Kingdee.BOS.Resource import * def OnPreparePropertys(e): e.FieldKeys.Add("FCreatorID") def EndOperationTransaction(e): receiverIds = GList[object]() # 接受人ID集合 for dataEntitys in e.DataEntitys: creatorId = dataEntitys["CreatorId"] # 单据创建人 if len(receiverIds) > 0: formId = "PLN_FORECAST" # 关联单据的FormID billId = 125385 # 需要打开的单据内码 title = "新消息通知" # 消息标题 message = "你有信息消息,请查收!" # 消息内容 senderId = 16394 # 消息发送人ID # 发送广播信息 SendBroadCastMessage(this.Context, message, receiverIds ) # 发送普通消息 SendMessage(this.Context, formId, billId, title, message, senderId , receiverIds ) ### 发送广播消息 def SendBroadCastMessage(ctx, message, receiverIds): businessInfo = FormMetaDataCache.GetCachedFormMetaData(ctx, "BAS_BROADCASTMSG").BusinessInfo dataType = businessInfo.GetDynamicObjectType() receiverField = businessInfo.GetField("FReceiver") dataObject = DynamicObject(dataType) dataObject["FCREATEDATE"] = DateTime.Now # 创建时间 dataObject["FTITLE"] = LocaleValue("你有新的消息") # 广播标题 dataObject["FCONTENT"] = str.Format("{0}(可在普通消息列表查看详情)", message) # 广播内容 dataObject["FCreatorId_Id"] = 16394 # 广播发布者 dataObject["FSendType"] = 1 # 发送类型 1 - 单发 2 - 多发 dataObject["FIsSendBroadcast"] = True # 是否内部消息 dataObject["FFailureTime"] = DateTime.Now.AddHours(1) # 失效时间 FieldSetValue(ctx, receiverField, dataObject, receiverIds) # 接受人设置 BusinessDataServiceHelper.Save(ctx, dataObject) ### 发送普通消息 def SendMessage(ctx, formId, billId, title, content, senderId, receiverIds): businessInfo = FormMetaDataCache.GetCachedFormMetaData(ctx, "WF_MessageSendBill").BusinessInfo receiverField = businessInfo.GetField("FRECEIVERS") dataType = businessInfo.GetDynamicObjectType() dataObject = DynamicObject(dataType) dataObject["TYPE"] = str(MsgType.CommonMessage) # 销售类别 dataObject["SENDERID_Id"] = senderId # 发送者 FieldSetValue(ctx, receiverField, dataObject, receiverIds) # 接受人设置 dataObject["Title"] = title # 消息标题 dataObject["Content"] = content # 消息内容 dataObject["ObjectTypeId_Id"] = str(formId) # 单据FORMID,用于打开单据 dataObject["KeyValue"] = str(billId) # 单据内码 dataObject["CREATETIME"] = DateTime.Now # 创建时间 msgSend = MessageSend(obj=dataObject) msgSend.KeyValue = str(billId) SMSServiceHelper.SendMessage(ctx=ctx, msgSendInfo=msgSend, outboxToo=True) ### 多选基础资料字段赋值 def FieldSetValue(ctx, field, dataObject, pkValues): mulBaseDataEntitySet = field.GetFieldValue(dataObject) if mulBaseDataEntitySet is None: mulBaseDataEntitySet = DynamicObjectCollection(field.RefEntityDynamicObjectType, dataObject) field.RefEntityDynamicProperty.SetValue(dataObject, mulBaseDataEntitySet) mulBaseDataEntitySet.Clear() baseDataObjects = BusinessDataServiceHelper.LoadFromCache(ctx=ctx, pkArray=pkValues, type=field.RefFormDynamicObjectType) for baseDataObject in baseDataObjects: mulBaseDataEntity = DynamicObject(field.RefEntityDynamicObjectType) mulBaseDataEntitySet.Add(mulBaseDataEntity) field.RefIDDynamicProperty.SetValue(mulBaseDataEntity, baseDataObject[0]) field.DynamicProperty.SetValue(mulBaseDataEntity, baseDataObject)
注: 请自行检查需要引入的库,论坛中也有少大拿有关C#的实现,在此就不做实现了
赞 37
37人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读