1. A单据生效后将数据回写至B单据
1.1. 简介
智元平台的后端脚本功能,支持在单据提交,审批、生效等流程动作发生时,触发自定义的j脚本(开发同事根据业务需要编写),可以实现包括数据库的增删改查等功能,常用的功能包括数据回写,数据校验,自定义数据表新增数据等cud功能。
1.1.1. 回写
A 单生效后,将某些数据回写到B单据,A单据弃审后,将B单据恢复到上一张A 单据的数据。,通过智元平台脚本来解决系统单据回写问题,本教程将介绍如果通过智元平台来单据回写问题。
1.1.2. 流程图
A单据生效后自动回写B单据
1.2. 案例实现
1.2.1. 流程图
信息价更新单回写至采购入库单
1.2.2. 单据生效回写
信息价更新单生效后将更新价格回写至采购入库单的参考价格
效果展示
1、新增采购入库单,保存。
2、新建信息价更新单,并录入更新价格,保存提交。
3、信息价更新单生效后,运行脚本将信息价更新单的更新价格赋值给采购入库单的参考价格,
功能实现
1.在智元平台,字段与对象->新增【信息价更新单】
2.在智元平台,字段与对象->【采购入库单】下新增字段:参考价格
3.在智元平台,字段与对象->【信息价更新单】-> 后端脚本, 新建后端脚本,如下图
4.testUpdate 脚本内容如下
// 查询当前信息价更新单数据
const result = await graphql(`{
CsXinXiJiaGengXinDan(criteriaStr:"id='${objectId}'"){
id
csGengXinJiaGe
csGongYingShang
csGengXinRiQi
csCaiGouRuKu
}
}`);
if (result.status != 'success') {
return { status: 'error', message: 'message: `查询当前单据价格, ${JSON.stringify(result)} ' };
}
// 获取信息价更新单数据
const csXinXiJiaGengXinDan = result.data.CsXinXiJiaGengXinDan[0];
//获取更新价格
let csGengXinJiaGe = csXinXiJiaGengXinDan.csGengXinJiaGe;
//获取采购入库单id
let id = csXinXiJiaGengXinDan.csCaiGouRuKu;
//获取供应商
let csGongYingShang = csXinXiJiaGengXinDan.csGongYingShang;
if (csGengXinJiaGe && csGongYingShang && id) {
// 根据采购入库单查询采购入库单明细
var ap = await graphql(`{
PurReceipt(criteriaStr:"id = '${id}'"){
id
vendorId
purReceiptItems{
id
originPrice
}
}`);
if (ap.status != 'success') {
return ap;
}
// 获取采购入库单数据
const pc = ap.data.PurReceipt[0];
for (let j = 0; j < pc.purReceiptItems.length; j++) {
// 如果供应商相同
if (pc.vendorId == csGongYingShang) {
// 组装更新的数据
var aupdatePurComparisonDto = {
id: id,
purReceiptItems: [ //子表字段名
{
id: pc.purReceiptItems[j].id,
csCanKaoJiaGe: csGengXinJiaGe /参考价格
}
]
}
// 更新采购入库单明细错草考价格
var back = await update('PurReceipt', aupdatePurComparisonDto, true);
if (back.status != 'success') {
return { status: "error", message: "回写价格失败" + back.message };
}
}
}
}
5.设置工作流,生效后触发,脚本出错后重试
1.2.3. 单据弃审回写
信息价更新单弃审后将更新价格回写至采购入库单的参考价格
效果展示
1.多张信息价更新单对应一张采购入库单
2.当信息价更新单弃审查
3.查询关联该采购入库单的所有生效的信息价更新单中时间最晚的一张,将该张信息价更新单的更新价格更新到关联的采购入库单的参考价格
功能实现
1.在智元平台,字段与对象->【信息价更新单】-> 后端脚本, 新建后端脚本,如下图
2.back 脚本内容如下
// 查询当前信息价更新单关联的采购库单的id
const result = await graphql(`{
CsXinXiJiaGengXinDan(criteriaStr:"id='${objectId}'"){
id
csCaiGouRuKu
}
}`);
// 获取采购入库单
const t = result.data.CsXinXiJiaGengXinDan[0];
//获取采购入库单id
let id = t.csCaiGouRuKu;
// 根据采购入库单id 查询关联的所有信息价更新单中时间最晚的一张
const result1 = await graphql(`{
CsXinXiJiaGengXinDan(criteriaStr:"csCaiGouRuKu='${id}' and billStatus = 'BillStatus.effective' order by csGengXinRiQi desc"){
id
csGengXinJiaGe
csGongYingShang
csGengXinRiQi
csCaiGouRuKu
}
}`);
if (result1.data.CsXinXiJiaGengXinDan.length >= 1){
// 获取 获取采购入库单
const csCaiGouRuKuDan = result1.data.CsXinXiJiaGengXinDan[0];
//获取更新价格
let csGengXinJiaGe = csCaiGouRuKuDan.csGengXinJiaGe;
//获取供应商
let csGongYingShang = csCaiGouRuKuDan.csGongYingShang;
if (csGengXinJiaGe && csGongYingShang && id) {
// 查询采购入库单的供应商,采购入库单明细
var ap = await graphql(`{
PurReceipt(criteriaStr:"id = '${id}'"){
id
vendorId
purReceiptItems{
id
originAmount
}
}
}`);
// 获取采购入库单
const pc = ap.data.PurReceipt[0];
for (let j = 0; j < pc.purReceiptItems.length; j++) {
// 供应商相同
if (pc.vendorId == csGongYingShang) {
// 构建更新采购入库单的数据
var aupdatePurComparisonDto = {
id: id,
purReceiptItems: [ // 子表字段名
{
id: pc.purReceiptItems[j].id,
csCanKaoJiaGe: csGengXinJiaGe //要修改的字段名和字段值
}
]
}
//更新采购入库单
var back = await update('PurReceipt', aupdatePurComparisonDto, true);
}
}
}
}
3.设置工作流,生效后触发,脚本出错后重试