
# 企业微信数据结构转换华为云成长型企业数字化转型包ERP数据结构执行动作
1. 同上步骤1
2. 选择执行动作-创建执行动作，类型选择函数： 
   基本信息中执行动作名称为"微信-SAP数据转换"；
   ![](https://support.huaweicloud.com/bestpractice-sparkpack/zh-cn_image_0000001744381073.png)
   配置输入中选择创建函数如下图；
   ![](https://support.huaweicloud.com/bestpractice-sparkpack/zh-cn_image_0000001744461389.png)
   给函数命名,配置入参出参如下：
   ![](https://support.huaweicloud.com/bestpractice-sparkpack/zh-cn_image_0000001744382645.png)
   输入函数内容如下：
   ```
   /**
    *
    * 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. 保存。
 
