反馈已提交

网络繁忙

活动日程信息更新至企业微信日程

  • 文档创建者:Wendy123456
  • 历史版本:16
  • 最近更新:Wendy123456 于 2023-09-25
  • 1. 概述

    1.1 应用场景

    用户有些日程信息是通过 FR 填报到数据库或者保存到简道云中,原始信息可能会被其他部门进行增删改操作,因此用户希望将日程数据在企业微信中记录,方便在活动开始前对相关的同学做到自动提醒。

    1.2 实现思路

    50.png

    准备工作:

    1)将简道云或线下收集的日程信息,保存到数据库中,为后续更新到企业微信日程做准备。

    2)应用在调用日程接口前,需要先获得日程的使用权限,本文示例是通过「自建应用」调用日程接口。

    3)通过 创建日历接口 创建一个全新的日历,且记下该日程的 cal_id 参数,在调用日程相关接口时会用到该参数。

    FineDataLink 定时任务实现思路:

    1)调用 日程 相关接口时,需要用到 access_token 参数,因此通过 调用 access_token 接口,获取 access_token 值。

    2)将保存到数据库中的日程信息整合到一张表中,作为来源表;通过 获取日历下的日程列表 接口,获取日程详细信息,作为目标表;比对来源表和目标表的数据:

    • 新增日程数据:输出某些字段作为参数,这些参数可拼接为 创建日程 接口的 body 数据。

    • 修改日程数据:输出到 changed 表。

    • 删除日程数据:输出到 deleted 表。

    3)拼接 创建日程 接口的 body 信息,输出为参数,调用 创建日程 接口,新增日程信息。

    4)通过 deleted 表中的日程名称字段,从 获取日历下的日程列表 接口信息中过滤出要删除的日程信息,将 schedule_id 字段输出为参数,调用 删除日程参与者 接口,删除日程。

    5)将 changed 表中的日程名称字段输出为参数,从 获取日历下的日程列表 接口信息中过滤出要修改的日程信息,再与 changed 表数据进行关联,生成 更新日程 接口的 Body 数据,并作为参数输出;调用 更新日程 接口,修改日程。

    2. 操作步骤

    2.1 准备工作

    2.1.1 将日程信息落库

    将简道云或线下收集的日程信息,保存到数据库中,为后续更新到企业微信日程做准备。

    2.1.2 配置可使用日程的应用

    注:具体介绍请参见 日程

    应用在调用日程接口前,需要先获得日程的使用权限;需要通过应用调用日程接口,本文示例是通过「自建应用」调用日程接口。

    1)应用在调用日程接口前,需要先获得日程的使用权限。进入企业微信管理后台,点击「应用管理」,新增一个自建应用,本文示例新增自建应用「帆软微信集成」。如下图所示:

    14.png

    2)进入自建应用「帆软微信集成」,设置API接收,具体设置介绍请参见:回调配置。如下图所示:

    15.png

    3)点击「协作>日程」,将自建应用「帆软微信集成」添加到可调用接口的应用中。如下图所示:

    16.png

    2.1.3 获取 access_token 准备

    调用 日程 相关接口时,我们需要用到 access_token ,获取 access_token 前,需要先获取 corpsecret 参数值、corpid 参数值

    1)进入 2.1.2 节创建的自建应用「帆软微信集成」,可查看 corpsecret 参数值。如下图所示:

    17.png

    2)corpid 参数值获取请参见:术语说明-corpid

    2.1.4 通过接口创建日程

    注:需要调用 创建日历 接口来创建日历,手动创建的日历,日程相关接口无法识别。

    我们需要在企业微信中创建一个日历来保存线下日程信息。

    日历创建成功后,会返回该日历的 ID : cal_id 参数,我们需要记住该参数值,后续调用相关日程接口时,需要用到。

    1)需要先获取 access_token 参数。在 postman 中获取 access_token ,corpid、corpsecret 参数值获取请参见本文 2.1.3 节内容。如下图所示:

    1695277420696382.png

    2)在 postman 中需要调用 创建日历接口 来创建日历。如下图所示:

    1695267720917839.png

    点击 send 后,结果如下图所示,获取到 cal_id 参数。如下图所示:

    1695267804557966.png

    可以看到,企业微信中,创建了名为文档测试的日程。如下图所示:

    1695275712920724.png

    2.2 获取企业微信 token

    调用日程相关接口时,会用到 access_token 值,所以我们需要先获取 access_token 。

    1695361542762552.png

    1)新建定时任务,拖入「数据转换」节点,进入「数据转换」节点。

    2)新增「API 输入」算子,调用 access_token 接口,corpid、corpsecret 参数值获取请参见本文 2.1.3 节内容。如下图所示:

    1695277587895429.png

    点击「数据预览」,如下图所示:

    24.png

    3)新增「参数输出」算子,将 access_token 值作为参数输出。如下图所示:

    注:建议配置默认值,方便后续节点查看效果;点击右侧「参数预览」,将参数值复制到默认值中即可,默认值不会影响实际运行结果。

    1695277732369356.png

    4)点击右上角「保存」按钮。

    2.3 获取数据比对结果

    52.png

    拖入「数据转换」节点,进入「数据转换」节点。

    2.3.1 读取来源表数据

    2.1.1 节的日程信息可能存在多张表中,可以用「Spark SQL」算子进行处理,关联到一张数据库表中。

    本文示例直接用处理好的表数据进行模拟。

    1)读取来源表数据。如下图所示:

    26.png

    2)来源表数据中,日程时间字段为日期格式(yyyy-mm-dd),需要转化为时间戳格式,且需要新增列。如下图所示:

    注:DB表输入 需点击生成。

    select * from (SELECT *,unix_timestamp(CONCAT(DB表输入.`time` ," 08:00:00"))  as starttime , 
      unix_timestamp(CONCAT(DB表输入.`time` ," 18:00:00"))  as endtime ,
      "wcbhjAYTCgwefdg4-rtwesq1fpW3qUuinhjuOg" as cal_id ,
      replace(replace(CONCAT("活动描述:",`act_describe`,";活动申请人:",`name` ,";面向产品:" ,`act_product`,";活动时间:",`time`  ),'"',""),"\n","") 
      as act_body  FROM  DB表输入
    )

    53.png

    新增列
    说明备注
    starttime

    将线下日程中的 time 字段与 08:00:00 拼接起来,并转化为时间戳格式,代表日程开始时间

    调用 创建日程 接口时,接口的 body 值需要用到该字段
    endtime

    将线下日程中的 time 字段与 18:00:00 拼接起来,并转化为时间戳格式,代表日程结束时间

    cal_id值为日历ID,详情请参见本文 2.1.4 节内容
    act_body拼接多个字段后的值

    2.3.2 读取目标表数据

    需要获取日历下的日程列表,作为目标表。

    1)拖入「API 输入」算子,调用 获取日历下的日程列表 接口,Body 中填写 cal_id 参数值,该参数获取请参见本文 2.1.4 节内容。如下图所示:

    1695279335453425.png

    2)添加「数据过滤」算子,过滤条件设置为 status 属于 0,过滤出日程状态正常数据。

    3)拖入「字段设置」算子,删除schedule_id、attendees、description字段。

    2.3.4 标记出增删改数据

    1)拖入「数据比对」算子,标记出增删改数据。如下图所示:

    1695279899760045.png

    1695280090139588.png

    2)点击「数据预览」,如下图所示:

    注:本示例为展示效果,使用 创建日程 接口,新增了几个日程。

    1695280184278562.png

    2.3.5 比对结果输出

    使用 数据分发 功能,将标记为新增、修改、删除的数据进行处理并分别存放,便于后续更新日程信息。

    1695280497869924.png

    右键点击「数据比对」算子,点击「数据分发」,设置界面如下图所示:

    1695280769101308.png

    1)将新增数据输出为参数。「参数输出」算子设置如下:

    注:建议为参数设置默认值,方便后续节点查看效果。

    新增参数
    具体设置对应「数据比对」节点预览时的具体列
    fdltype第 1 列、所有行、数值型分割fdl_comparison_type 
    actname第 4 列、所有行、数值型分割actname
    describe第 18 列、所有行、数值型分割act_body
    user第 8 列、所有行、数值型分割get_name
    city第 10 列、所有行、数值型分割city
    starttime第 15 列、所有行、数值型分割starttime
    endtime第 16 列、所有行、数值型分割endtime
    calid第 17 列、所有行、数值型分割cal_id

    2)将删除数据输出到 deleted 表,写入方式为「追加写入数据」。如下图所示:

    注:任务第一次运行成功后,需要修改该节点,目标表改为已存在表 deleted ,写入方式改为「清空目标表,再写入数据」;保证 deleted 表中保存的为当次任务执行时要删除的数据

    1695281407956612.png

    3)将修改数据输出到 changed 表,写入方式为「追加写入数据」。

    注:任务第一次运行成功后,需要修改该节点,目标表改为已存在表 changed ,写入方式改为「清空目标表,再写入数据」;保证 changed 表中保存的为当次任务执行时要修改的数据

    4)点击右上角「保存」按钮。

    2.4 新增日程信息

    需要调用 创建日程 接口,调用该接口时需要输入 body 内容,所以调用接口前,我们需要准备好 body 内容。

    1695364699562155.png

    新增「循环容器」节点,「循环容器」节点中拖入「数据转换」节点。「循环容器」节点设置如下图所示:

    1695281892128768.png

    2.4.1 生成 Body 数据并输出为参数

    新增日程需要调用 创建日程 接口,调用接口时需要输入 Body 信息。

    我们需要将 2.3.5 节新增数据输出的参数,拼接并生成 JSON(接口的 Body 值),然后输出为参数供后续 创建日程 接口使用。

    1)拖入「Spark SQL」算子,SQL 语句如下图所示:

    select '${starttime}' as starttime ,
      '${endtime}' as endtime,
      '${describe}' as describe ,
      '${actname}' as actname,
      '${user}' as user ,
      '${calid}' as calid,
      '${city}' as city,
      "1" as is_remind,
      "3600" as remind_before_event_secs,
      "0" as is_repeat

    37.png

    2)拖入JSON生成算子,生成 JSON(生成 创建日程 接口的 Body 数据)。如下图所示:

    1695283258968926.png

    3)拖入「参数输出」算子,新增参数 body ,值为:第一列、所有行、数值型分割。

    4)点击右上角「保存」按钮。

    2.4.2 新增日程

    「循环容器」节点中再拖入「数据转换」节点,进入「数据转换」节点。

    1)拖入「API输入」算子,调用 创建日程接口 ,Body 中值为参数 body(本文 2.4.1节生成的参数)。

    1695285624157405.png

    若之前参数节点/算子都设置了默认值,点击「数据预览」,如下图所示:

    1695285787105951.png

    2)拖入「参数输出」算子,新增参数 a ,值为第一行、第一列、数值型分割(该步骤只是为了「API输入」算子后能有个后置算子,使「数据转换」节点不报错)。

    3)点击右上角「保存」按钮。

    2.5 删除日程

    调用 删除日程参与者 接口时,body 内容中需要输入 schedule_id 字段信息,所以调用该接口前,我们需要获取 schedule_id 字段。

    1695366369404801.png

    2.5.1 删除日程的名称作为参数输出

    1695366688975637.png

    1)「循环容器」节点后接「数据转换」节点,进入「数据转换」节点。

    2)拖入「DB表输入」算子读取 2.3.5 节的 deleted 表数据。

    3)拖入「参数输出」算子,新增参数 deleted ,值为第四列、所有行、数值型分割,点击右上角「保存」按钮。deleted 参数值为活动名称 act_name 。

    41.png

    2.5.2 获取 schedule_id 并作为参数输出

    1695366849346159.png

    1)再拖入「数据转换」节点,进入「数据转换」节点。拖入「API 输入」算子,调用 获取日历下的日程列表 接口,Body 中填写 cal_id 参数值,具体步骤请参见本文 2.3.2 节内容。

    2)添加「数据过滤」算子,过滤条件设置为 status 属于 0 且 summary 属于 ${deleted},过滤出需要删除的日程信息。如下图所示:

    1695288021483907.png

    3)拖入「参数输出」算子,新增参数 schedule_id ,值为日程信息的 schedule_id 值。如下图所示:

    1695288200456079.png

    4)点击右上角「保存」按钮。

    2.5.3 删除日程信息

    1)拖入「循环容器」节点,「循环容器」节点中拖入「数据转换」节点。「循环容器」设置界面中,循环方式选择遍历循环,勾选 schedule_id 参数。进入「数据转换」节点。

    2)拖入「API输入」算子,调用 删除日程参与者 接口,删除日程。

    1695288651543236.png

    3)拖入「参数输出」算子,新增参数 1 ,值为第一列、所有行、数值型分割(该步骤只是为了「API输入」算子后能有个后置算子,使「数据转换」节点不报错)。

    4)点击右上角「保存」按钮。

    2.6 更新日程

    1695367369103541.png

    2.6.1 更新日程的名称作为参数输出

    步骤与 2.5 节类似。

    1)「循环容器」节点后接「数据转换」节点,进入「数据转换」节点。

    2)拖入「DB表输入」算子读取 2.3.5 节的 changed 表数据。

    3)拖入「参数输出」算子,新增参数 actname ,值为第四列、所有行、数值型分割,点击右上角「保存」按钮。actname 参数值为活动名称 act_name 。

    4)点击右上角「保存」按钮。

    2.6.2 生成更新日程接口的 body 数据

    1695367552956313.png

    1)再拖入「数据转换」节点,进入「数据转换」节点。

    2)拖入「API输入」算子,调用 获取日历下的日程列表 接口,获取日程信息。步骤请参见本文 2.3.2 节内容。

    3)拖入「数据过滤」算子,过滤出 status 属于 0 且 summary 属于 ${actname} 的数据,即过滤出需要更新的有效日程数据。

    4)拖入「字段设置」算子,删除 description、start_time、end_time 字段,

    5)拖入「DB表输入」算子,读取 changed 表数据。

    6)拖入「数据关联」算子,将「字段设置」与「DB表输入」关联起来。如下图所示:

    1695348214137563.png

    7)更新日程需要调用 更新日程 接口,调用接口时需要输入 Body 信息。

    我们需要将日程更新数据,使用「JSON 生成」算子生成 JSON(接口的 Body 值),然后输出为参数供后续 更新日程 接口使用。

    拖入「JSON 生成」算子,将日程更新数据生成 JSON 语句。如下图所示:

    1695349283774882.png

    拖入「参数输出」算子,新增参数 body,值为第一列、所有行、数值型分割,建议设置默认值。

    8)点击右上角「保存」按钮。

    2.6.3 调用更新日程接口

    1)拖入「循环容器」节点,「循环容器」节点中拖入「数据转换」节点。「循环容器」设置界面中,循环方式选择遍历循环,勾选 body 参数。进入「数据转换」节点。

    2)拖入「API输入」算子,调用 更新日程 接口。如下图所示:

    1695349967820297.png

    3)拖入「参数输出」算子,新增参数1,值为:第一列、所有行。数值型分割。

    4)点击右上角「保存」按钮。

    2.7 效果查看

    最终效果如下图所示:

    1695632496543860.png





    附件列表


    主题: 数据开发-定时任务
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持