轻易云ETL转换及API配置详解:金蝶付款单推送钉钉群

  • 轻易云集成顾问-卢剑航

金蝶云星空数据集成到轻易云集成平台技术案例:金蝶付款单转钉钉群消息

在企业财务管理中,无论是报销单据处理还是付款记录的追踪,及时准确的数据传递至关重要。本次我们将分享一个具体的系统对接集成案例,展示如何通过轻易云数据集成平台,将金蝶云星空中的付款单信息实时推送到钉钉群,实现自动化消息通知。

确保数据不漏单与分页限流处理

首先,我们需要确保从金蝶云星空获取数据时,不会有任何未捕获的付款记录。因此,在调用executeBillQuery接口时,我们实现了定时抓取机制,并结合分页查询来确保每一条数据都被完整采集。此外,为了应对可能存在的接口访问频率限制,我们设计了一套限流策略,通过控制API请求速率来保障稳定性。

// 示例代码:调用executeBillQuery并处理分页、限流
String executeBillQueryUrl = "https://api.kingdee.com/executeBillQuery";
Map<String, Object> params = new HashMap<>();
params.put("pageNum", pageNum);
params.put("pageSize", pageSize);
HttpResponse response = HttpClient.call(executeBillQueryUrl, params);

if (response.getStatusCode() == 429) {
    // 限流逻辑处理
    Thread.sleep(RETRY_DELAY_MILLIS); 
    continue;
}
// 解析返回结果并存储或进一步处理...

数据格式转换与映射

当获取到原始的数据后,需要进行一定程度的格式转换。为了让这些数据能够无缝匹配轻易云DingTalkRobotDetail接口所需的数据结构,我们利用自定义映射规则,对字段名称和类型进行了适配。同时,对于日期时间等特定格式,也采取了相应的转换措施。

// Example JSON payload for DingTalkRobotDetail API
{
   "msgtype": "text",
   "text": {
       "content": "[支付提醒] 已支付: ${amount} 元, 收款人: ${receiver}"
   },
   "at": {
       "isAtAll": false
   }
}

异常处理中继与错误重试机制

在整个流程运行过程中,不可避免地会遇到各种异常情况,如网络波动或者第三方服务故障。在这种情况下,我们实现了一套健壮的异常处理中继与错误重试机制。当某一环节发生错误时,可自动记录日志,并尝试重新执行失败操作,以最大程度保证系统整体可靠性。

try {
    // 调用发送消息API DingTalkRobotDetail 并捕捉可能异常。
    HttpResponse response = Http
![数据集成平台API接口配置](https://pic.qeasy.cloud/D21.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是关键的第一步。本文将深入探讨如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取付款单数据,并进行初步加工。

#### 接口配置与调用

首先,我们需要配置和调用金蝶云星空的`executeBillQuery`接口。根据提供的元数据配置,以下是具体的请求参数和方法:

- **API**: `executeBillQuery`
- **Method**: `POST`
- **Effect**: `QUERY`
- **FormId**: `AP_PAYBILL`

请求体中的字段主要包括付款单相关的信息,如单据编号、状态、创建人、审批人等。以下是部分关键字段及其描述:

```json
[
  {"field":"FPAYBILLENTRY_FEntryID","label":"FPAYBILLENTRY_FEntryID","type":"string","describe":"111","value":"FPAYBILLENTRY_FEntryID"},
  {"field":"FID","label":"FID","type":"string","describe":"111","value":"FID"},
  {"field":"FBillNo","label":"FBillNo","type":"string","describe":"111","value":"FBillNo"},
  {"field":"FDOCUMENTSTATUS","label":"FDOCUMENTSTATUS","type":"string","describe":"111","value":"FDOCUMENTSTATUS"},
  {"field":"FCreatorId","label":"FCreatorId","type":"string","describe":"111","value":"FCreatorId"},
  {"field":"FAPPROVERID","label":"FAPPROVERID","type":"string","describe":"111","value":"FAPPROVERID"}
]

此外,还需要配置分页参数和过滤条件,以确保查询结果符合业务需求。例如:

[
  {"field": "Limit", "label": "Limit", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
  {"field": "StartRow", "label": "StartRow", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
  {"field": "FilterString", "label": "FilterString", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", 
   "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FDOCUMENTSTATUS='C'"}
]

数据清洗与转换

在成功获取到付款单数据后,下一步是对数据进行清洗和转换。这一步骤至关重要,因为它决定了后续数据处理和分析的准确性。

  1. 字段映射与重命名:根据业务需求,对原始字段进行映射和重命名。例如,将FBillNo映射为付款单号,将FDOCUMENTSTATUS映射为单据状态等。
  2. 数据类型转换:确保所有字段的数据类型符合预期。例如,将日期字符串转换为标准日期格式,将金额字段转换为数值类型等。
  3. 过滤无效数据:移除不符合业务规则的数据记录。例如,过滤掉未审批通过或已作废的付款单。

以下是一个简单的数据清洗示例:

def clean_data(raw_data):
    cleaned_data = []
    for record in raw_data:
        if record['FDOCUMENTSTATUS'] == 'C':  # 仅保留已审批通过的记录
            cleaned_record = {
                '付款单号': record['FBillNo'],
                '单据状态': record['FDOCUMENTSTATUS'],
                '创建人': record['FCreatorId'],
                '审批人': record['FAPPROVERID'],
                '创建日期': parse_date(record['FCreateDate']),
                '总金额': float(record['FPAYTOTALAMOUNTFOR_H'])
            }
            cleaned_data.append(cleaned_record)
    return cleaned_data

数据写入与通知

经过清洗和转换后的数据,可以进一步写入目标系统或触发相应的业务流程。在本案例中,我们将处理后的付款单信息发送到钉钉群,以便相关人员及时了解付款情况。

  1. 构建消息内容:根据清洗后的数据构建消息内容。例如:
def build_message(cleaned_data):
    messages = []
    for record in cleaned_data:
        message = f"付款单号: {record['付款单号']}\n" \
                  f"单据状态: {record['单据状态']}\n" \
                  f"创建人: {record['创建人']}\n" \
                  f"审批人: {record['审批人']}\n" \
                  f"总金额: {record['总金额']}元\n"
        messages.append(message)
    return messages
  1. 发送消息到钉钉群:利用钉钉API将消息发送到指定群组。
import requests

def send_to_dingtalk(messages, webhook_url):
    headers = {'Content-Type': 'application/json'}
    for message in messages:
        payload = {
            'msgtype': 'text',
            'text': {
                'content': message
            }
        }
        response = requests.post(webhook_url, json=payload, headers=headers)
        if response.status_code != 200:
            print(f"Failed to send message: {response.text}")

# 示例调用
webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN'
messages = build_message(cleaned_data)
send_to_dingtalk(messages, webhook_url)

通过上述步骤,我们实现了从金蝶云星空获取付款单数据、进行清洗和转换,并最终将处理后的信息发送到钉钉群。这个过程不仅提高了数据处理效率,还确保了信息传递的及时性和准确性。 如何对接企业微信API接口

轻易云数据集成平台ETL转换及API接口配置技术案例

在本案例中,我们将详细探讨如何使用轻易云数据集成平台,将金蝶付款单的数据进行ETL转换,并通过API接口写入钉钉群消息。我们将深入解析元数据配置,展示如何通过配置实现数据的无缝对接。

数据请求与清洗

首先,我们需要从金蝶系统中获取付款单的数据。这一步骤包括数据的请求与清洗,确保数据在进入ETL过程之前是干净且结构化的。假设我们已经完成了这一步,接下来我们重点关注数据的转换与写入。

数据转换与写入

在数据转换阶段,我们需要将金蝶系统中的付款单数据转换为钉钉群消息API能够接收的格式。以下是具体的元数据配置:

{
  "api": "DingTalkRobotDetail",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field": "access_token", "label": "access_token", "type": "string", "describe": "111", "value": "56768984b88f512e47aaa10ad65861639fa047a670198f08607bc898390e2e77"},
    {"field": "name", "label": "name", "type": "string", "describe": "111", "value": "付款单审核通知"},
    {"field": "lessee_name", "label": "lessee_name", "type": "string", "describe": "111"},
    {"field": "number", "label": "number", "type": "string", "describe": "111", 
      “value”: “{FBillNo}”},
    {"field": “response_at”, “label”: “response_at”, “type”: “string”, “describe”: “111”, 
      “value”: “_function UNIX_TIMESTAMP('{{FDATE|datetime}}')”},
    {"field":"problem","label":"problem","type":"string","describe":"111","value":"{FBillNo}{FCONTACTUNIT_name} 已付款{FPAYTOTALAMOUNTFOR_H}"},
    {"field":"solution","label":"solution","type":"string","describe":"111","value":"{solution}"},
    {"field":"id","label":"id","type":"string","describe":"111"}
  ]
}

元数据配置解析

  1. API Endpoint: DingTalkRobotDetail

    • 这是目标平台钉钉群消息的API接口名称。
  2. HTTP Method: POST

    • 我们使用POST方法将数据发送到钉钉群消息接口。
  3. ID Check: true

    • 确保每次请求都有唯一标识,以避免重复发送。
  4. Request Fields:

    • access_token: 用于认证和授权,确保请求合法。
    • name: 消息名称,这里固定为“付款单审核通知”。
    • lessee_name: 租户名称,从源系统中获取。
    • number: 付款单号,对应金蝶系统中的FBillNo字段。
    • response_at: 响应时间,通过函数UNIX_TIMESTAMP将日期时间格式化。
    • problem: 问题描述,结合多个字段生成详细信息,如“{FBillNo}{FCONTACTUNIT_name} 已付款{FPAYTOTALAMOUNTFOR_H}”。
    • solution: 解决方案,从源系统中获取或预定义。
    • id: 唯一标识符,用于跟踪和管理消息。

数据映射与转换

在轻易云平台中,我们可以利用内置的函数和模板语言进行字段映射和转换。例如:

  • 日期时间格式化: 使用UNIX_TIMESTAMP('{{FDATE|datetime}}')将日期时间字段转换为Unix时间戳格式,便于目标系统处理。
  • 字符串拼接: 在problem字段中,通过拼接多个源字段(如FBillNo, FCONTACTUNIT_name, FPAYTOTALAMOUNTFOR_H)生成完整的问题描述。

数据写入

完成上述配置后,轻易云平台会自动将处理好的数据通过POST请求发送到钉钉群消息接口。每个字段的数据都经过精确映射和转换,确保目标平台能够正确接收和处理这些信息。

通过以上步骤,我们成功地实现了从金蝶付款单到钉钉群消息的数据集成。轻易云数据集成平台提供了强大的ETL功能和灵活的元数据配置,使得复杂的数据集成任务变得简单高效。 企业微信与ERP系统接口开发配置

更多系统对接方案