更新时间:2023-11-02 GMT+08:00
分享

企业微信数据结构转换SparkPackERP数据结构执行动作

  1. 同上步骤1
  2. 选择执行动作-创建执行动作,类型选择函数:

    基本信息中执行动作名称为“微信-SAP数据转换”;

    配置输入中选择创建函数如下图;

    给函数命名,配置入参出参如下:

    输入函数内容如下:

    /**
     *
     * mssiAuthData参数样例
     * {
     *      "header":{}, // 连接器认证header参数
     *      "path": {}, // 连接器认证path参数
     *      "query":{}, // 连接器认证query参数
     *      "body":{}, // 连接器认证body参数
     *      "host":"https://demo.com // API主机地址
     * }
     *
     */
    //对输入数据做转码处理
    function extractEventData(event, name) {
        let data = event[name]
        if (event.isBase64Encoded && data) {
            data = new Buffer(data, 'base64').toString()
        }
        return data ? JSON.parse(data) : {}
    }
    let handlerWxData = (o, a) => {
        let obj = { ...o }
        let arr = [...a]
        arr.forEach(item => {
            if (item['control'] != 'Table') {
                obj[item['title'][0]['text']] = item['title'][0]['text'] == "草稿单号" ? parseInt(item['value']['text']) : item['value']['text']
            } else {
                obj['itemList'] = item['value']['children'].map(good => {
                    let res = {}
                    good['list'].forEach(key => {
                        res[key['title'][0]['text']] = key['value']['text']
                    })
                    return res
                })
            }
        })
        let pass = []
        let fail = []
        let marks = []
        let maxTime = 0
        obj['sp_record'].forEach(item => {
            item['details'].forEach(sp => {
                if (sp['sp_status'] == 2) {
                    pass.push(sp['approver']['userid'])
                } else if (sp['sp_status'] == 3) {
                    fail.push(sp['approver']['userid'])
                }
                if (sp['speech'].length > 0) marks.push(`${sp['approver']['userid']}:${sp['speech']}`)
                maxTime = Math.max(maxTime, sp['sptime'])
            })
        })
        obj['pass'] = pass.join(' ')
        obj['fail'] = fail.join(' ')
        obj['marks'] = marks.join('   ')
        obj['spTime'] = new Date(maxTime * 1000).toLocaleString()
        return obj
    }
    /**
     * 函数是方法的入口
     * @param {*} event  执行事件(event), 包含用户定义的函数参数以及所选择的的连接器认证相关参数
     * @param {*} context  Runtime提供的函数执行上下文
     * @returns
     */
    exports.handler = async function (event, context) {
        const inputData = extractEventData(event, 'body') // 用户定义的函数参数数据
        return handlerWxData(inputData.info, inputData.info.apply_data.contents)
    }

  3. 保存。

相关文档