前言

金蝶云星空标准产品自带的消息推送功能无法在单据撤销时发送消息通知,只能在保存等其他操作触发消息通知,并且触发成功后,消息只能发送至金蝶客户端和云之家消息平台内,无法发送至办公沟通软件,恰好飞书有多种接口支持通过webhook的形式将消息发送给相关人员,可以对功能进行实现。

操作步骤

1.在金蝶BOS协同开发平台,打开单据,操作列表内找到相关操作,在服务插件内注册一个新的python插件,经复制代码。

image.png

示例代码:

# -*- coding: utf-8 -*-
import clr
import sys
#添加对cloud插件开发的常用组件的引用
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.ServiceHelper')
clr.AddReference('Newtonsoft.Json')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from System.Net import *
from System.Text import *
from System.IO import *
#from System.String import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Newtonsoft.Json.Linq import *


sys.setdefaultencoding('utf-8')
def OnPreparePropertys(e):
    e.FieldKeys.Add("FBillTypeID");
    # e.FieldKeys.Add("FProviderContactId");#这里使用的是字段标识,后面从数据包取值用的是绑定实体属性
    e.FieldKeys.Add("F_RNCV_Wly");#采购员基础资料
    # e.FieldKeys.Add("PurchaseOrgId")#采购组织基础资料
    # e.FieldKeys.Add("SupplierId")#供应商基础资料
def EndOperationTransaction(e):
    #这里获取单据数据包方式和前面一样
    #print(e.DataEntitys);

    for billObj in e.DataEntitys:
         billId=billObj["Id"];#单据ID
         billNo=billObj["F_RNCV_BillNo"];#单据编号
        wlyObj = billObj["F_RNCV_Wly"];#物流员基础资料
         wly_name = ("{0}").format(wlyObj["Name"]);#采购员姓名
         msgdata = '{\"billno\":\"'+billNo+'\",\"wly\":\"'+wly_name+'\",\"time\":\"'+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+'\"}'
         webRequest=HttpPost(msgdata,'飞书机器人webhook地址')
def ValidateResult(responseText):
    s=('{0}').format(responseText);
    # if (s.find("response_error:")>=0):
    #     failText = s.TrimStart("response_error:".ToCharArray()) + "发送消息失败,请自行联系相关人员,避免发货出现问题!";
    #     return failText;
    return s;
def HttpPost(Content, Url):
    httpRequest = HttpWebRequest.Create(Url);
    httpRequest.Method = "POST";
    httpRequest.ContentType = "application/json";
    httpRequest.Timeout = 1000 * 60 * 10;
    reqStream = httpRequest.GetRequestStream();
    sContent = Content;
    bytes = Encoding.UTF8.GetBytes(sContent);
    reqStream.Write(bytes, 0, bytes.Length);
    reqStream.Flush();
    repStream = httpRequest.GetResponse().GetResponseStream();
    reader = StreamReader(repStream);
    return ValidateResult(reader.ReadToEnd());

2.前往飞书机器人助手,新增机器人应用,配置好相关信息,新增消息推送流程,开始由webhook触发,添加传参,{"billno":"", "wly":"", "time":"" },分别为单据编号、物流员姓名和操作时间,后面添加并行分支节点和发送消息节点,每个节点条件为物流员参数等于某个人时,即给该人员发送飞书消息提醒,相关图示如下:

image.png

image.png

image.png

最终效果

image.png

最后修改:2023 年 09 月 30 日
如果觉得我的文章对你有用,请随意赞赏