致拓工具库功能和使用手册   牧语  开发文档

zTool 配置型文档


1.表间数据关联

从一个表单或者流程页面,自动加载其它表单或者流程的明细数据,自动填充到当前页面指定组件内

前言

两个准备工作,整个应用仅仅配置一次。上线前请切换生产地址,通过数据源配置方案仅修改一次即可

效果

demo 页面

  1. 场景:通过下拉条件关联目标单据值
  2. 方案:支持多条件查询,支持查询后数据过滤,支持查询和明细赋值默认值:将src设置为空
  3. 进阶:可实现一表查询更新多明细;多个明细来自多个数据源;主表更新主表:兼容一些当前页面需要公式或者数据联动情况【若需要作为联动条件,需要修复】;明细加载主表数据

参数

案例

打开页面的 js 功能,复制如下代码,按需选择

//---------------------- common ----------------------//

// 致拓工具库: 库地址存储于 dp 在数据页面全局共享, dp 在页面加载后才有值
function loadAliworkSDK(ctx = window.LeGao.getContext()) {
  const src = ctx.dp.getValue("ZTOOL_LIB");
  const script = document.createElement('script');
  script.setAttribute('type', 'text/javascript');
  script.setAttribute("src", src);
  document.body.appendChild(script);
  script.onload = () => _zToolOnload(ctx);
}

//---------------------- private ----------------------//

// 加载即调用方法请在此处进行调用
async function _zToolOnload(ctx) {
  zTool.aliworkInitParams()
  // 效验操作组权限:提交态
  if (zTool._checkSubmitEnv()) { }
}

//【3.红色都是需要匹配的】明细查询和赋值
async function _queryAndUpdateCompData(ctx) {
  //【3.1.多条件查询】表单查询条件:src 来源表条件组件Id,cur 当前表条件组件ID,def 默认值优先级低于来源表数据
  const conditions = [{
    src: "textField_kfnjmfq2",
    cur: "selectField_kfnjp1cu",
    def: ""
  }];
  const resList = await zTool._queryFormOrProcess(ctx, { formId: "FORM-JHYJNJSVPXGLZXSE43HQV9M8XE7U2UHXM00JKB3", /** 数据来源表Id */ conditions, compId_tip: "selectField_kfnjp1cu", /** 非必填:报错的提示到输入框,可阻断提交 */ })
  //【3.2.1.多明细更新】明细组件Id映射表: src 来源明细表内组件ID,cur 当前明细表内组件ID,def 默认值优先级低于来源表数据
  const props1 = [{
    // 名称
    src: "textField_kfnjmfq4",
    cur: "selectField_kkny9ed5",
  },];
  zTool._updateCompDetailFromDetail(ctx, { resList, props: props1, compId_detail_src: "tableField_kfnjmfq3", /** 来源表明细组件Id */ compId_detail_cur: "tableField_kfnjmfq3" /** 当前明细的compId */ }, { funcFilter: null, /** 过滤方法条件:detail => detail["textField_kfnjmfq4"] == "条件" */ })
  //【3.2.2.多明细更新】明细组件Id映射表: src 来源明细表内组件ID,cur 当前明细表内组件ID,def 默认值优先级低于来源表数据
  const props2 = [{
    // 名称
    src: "textField_kfnjmfq4",
    cur: "textField_kknt6uqk",
  },];
  zTool._updateCompDetailFromDetail(ctx, { resList, props: props2, compId_detail_src: "tableField_kfnjmfq3", /** 来源表明细组件Id */ compId_detail_cur: "tableField_kknt6uqo" /** 当前明细的compId */ }, { funcFilter: null, /** 过滤方法条件:detail => detail["compId"] == "条件" */ })
  //【3.3.主表更新】组件Id映射表: src 来源表内组件ID,cur 当前表内组件ID,def 默认值优先级低于来源表数据
  const mains1 = [{
    // 主表赋值1
    src: "textField_kfnjmfq2",
    cur: "textField_kkoslg5n",
  },];
  zTool._updateCompMainFromMain(ctx, { resList, mains: mains1 })

  //【3.4.明细加载主表】组件Id映射表: src 来源表内组件ID,cur 当前表内明细组件ID,def 默认值优先级低于来源表数据
  const mains2 = [{
    // 主表赋值1
    src: "textField_kfnjmfq2",
    cur: "textField_kkou7cb4",
  },];
  zTool._updateCompDetailFromMain(ctx, { resList, props: mains2, compId_detail_cur: "tableField_kkou7cb3" /** 当前明细的compId */ }, { funcFilter: null, /** 过滤方法条件:main => main["compId"] == "条件" */ })
}

//---------------------- event ----------------------//

// 【1.将事件绑定到页面】页面节点加载渲染完毕
export function didMount(ctx) {
  // 加载致拓工具库: dp & 初始化
  loadAliworkSDK(ctx)
}

//---------------------- event ----------------------//

// 【2.将事件绑定到查询条件】当查询条件发生变更
export function onContractChange(ctx) {
  // 匹配查询和赋值
  _queryAndUpdateCompData(ctx)
}

2.服务变更流程

服务可执行宜搭公有云接口文档所有服务,也可调用后台开发提供的接口服务

前言

若是单据页面,可直接提供高级公式执行更新操作。流程单据不支持高级公式,可通过服务来完成。变更发起者可以是流程也可以是单据

demo 页面,目前以流程实例更新为案例

配置

从接口参数可知,我们更新实例是需要 实例 Id:processInstanceId 的,因此需要一个中间表将 ID 存储起来

数据引用,审批过滤:通过数据联动过滤审批状态,下拉框数据过滤审批状态;将实例 ID 字段通过中间表编号关联到出实例 ID 进行储存,配置服务都需要通过实例 ID 进行操作

// 用于明细更新后返回:兼容用户不修改情况下操作
zTool._assembleDetailForKeyValue(ctx, "", "textareaField_kis8c0n5", details)

// 用于明细内组件变更:兼容用户修改同步明细数据
zTool._assembleDetailForKeyValue(ctx, "tableField_kfnjmfq3", "textareaField_kis8c0n5")
  1. 在流程完成节点配置服务:在同意节点执行服务操作,选择关联操作,选择第三方服务,此处会下拉出现在宜搭平配置的服务的名称列表,选择对应的服务,会出现配置好的参数列表,左侧显示名称为服务配置中文名称

    1. userId:#{LOGINUSER}    ➜ 取当前登录人;
    2. 应用秘钥:在应用设置 ➜ 应用数据 ➜ 应用秘钥
    3. 应用编码:在应用设置 ➜ 应用数据 ➜ 应用编码
    4. 实例 ID:输入 # 号键后,会弹出当前页面所有字段选项,选择实例 ID 组件即可
    5. 更新表单数据:{"原始表组件ID":"#{当前表组件ID}","原始表组件ID":"#{当前表组件ID}"},一一对应,多个按照格式添加即可
    6. 更新表单数据【明细处理】:格式和 5 一致,区别是当前明细组件 ID 不使用,使用格式化后的多行文本框的值,尤其要注意:多行文本框不要添加不要引号,被转义后服务会失败,正确格式:"原始明细组件ID": #{多行文本框ID}
  2. 服务可查询执行日志:

    1. 日志地址:https://aliwork.com/alibaba/web/APP_TYPE/query/invoke/queryRecord.json%3FpageNo=1&pageSize=10 ,将 APP_TYPE 替换为需要查询的应用 Id 即可
    2. 查询方式:查询的应用是当前页面登录的企业宜搭账号,若不匹配会报无此应用
  3.                    补充:
    1. 若需要更新的数据大,可使用 json 格式化,完成后复制到 更新表单数据
    2. 操作建议:先配置更新一个主表字段,跑通流程,再测试多个字段,最后再单独测试明细数据

update 2021-02-03 w3