- 因宜搭部门组件不会直接返回该部门下的成员,可通过「宜搭连接器」调用钉钉接口返回部门成员;
- 根据获取到的成员Id结合宜搭官方连接器获取该员工的当月的考勤天数
- 实现效果:
- 【获取部门下员工】调用钉钉开放平台接口,需要保证该接口已经在钉钉开放平台开通权限;接口权限开通可参考文档:https://open.dingtalk.com/document/isvapp/address-book-permissions
- 获取该接口的身份验证参数,可参考:https://open.dingtalk.com/document/orgapp/obtain-orgapp-token
宜搭自定义连接器使用参考:https://docs.aliwork.com/docs/yida_support/wtwabe/zevvr1/_1/zbq17y
可以通过以下步骤实现该功能:
1、宜搭连接器工厂创建自定义连接器,调用获取钉钉成员的接口
钉钉接口文档参考:https://open.dingtalk.com/document/isvapp/queries-the-complete-information-of-a-department-user
连接器配置,可按照以下步骤:
可先在连接器工厂发起测试,身份验证「新增账号」-参数按照获取身份验证的方式拿到appKey及密钥
2、宜搭数据源调用连接器
宜搭数据源处调连接器使用参考:https://docs.aliwork.com/docs/yida_support/wtwabe/zevvr1/_2/gtkly9/stbfik#ZUnMw
3、【获取员工考勤】 如何获取每月开始/结束时间,可参考宜搭API:https://docs.aliwork.com/docs/developer/api/yidaAPI#thisutilsgetdatetimerangewhen-type
宜搭数据源处直接调用宜搭官方连接器
如下图:
4、部门组件添加回调事件
参考代码:export async function onChange(ctx) { const inputs = JSON.stringify({ "body": { "cursor": "0", "size": "10", "dept_id": ctx.value[0].value } }) try { const res = await this.dataSourceMap.getdeptMember.load({ //获取部门成员 inputs: inputs }) const { list } = res.result if (list.length == 0) { return; } const promises = list.map(async (item) => { const inputsT = JSON.stringify({ "from_date": this.utils.getDateTimeRange(new Date, 'month')[0], "to_date": this.utils.getDateTimeRange(new Date, 'month')[1], "userid": [item.userid] }) try { const result = await this.dataSourceMap.getWorkDays.load({ //获取考勤天数 inputs: inputsT }) const newResult = JSON.parse(result) return { name: item.name, userid: item.userid, should_work_value: newResult.should_work_value,//应出勤天数 workDay: newResult.work_value,//实际出勤天数 } } catch (error) { console.log(error) return null; } }) const arr = await Promise.all(promises); const filteredArr = arr.filter((item) => item !== null); const memberArr = filteredArr.map((item) => { return { "employeeField_lp6jxb0a": [{ label: item.name, value: item.userid }], "numberField_lp95pxxq": item.workDay, "numberField_lp95pxxr": item.should_work_value } }) this.$('tableField_lp6jxb09').setValue(memberArr) } catch (error) { console.log(error) } }