业务模型¶
案例1 - 合同起止日校验¶
需求¶
有业务模型contract_model如下
只有一张主表contract_info和一张子表contract_data;
两表通过contract_id关联
contract_info有合同起始日和合同终止日两个字段
基于业务模型搭建业务明细表contract_tbl
通过python校验合同终止日必须晚于合同起始日,并在校验不通过的时候阻止保存,并弹框提示用户 “合同终止日必须晚于合同起始日” 。
解决方案¶
由于在校验不通过时需要阻止保存,需要配置Python逻辑在业务模型 保存前
弹框提示可由Python返回值定义,具体参考 返回结果如何影响前端展示(弹窗效果)
代码¶
import pandas as pd
def main(p1, p2):
rtn = {
"success": True,
"errors": [],
"warnings": []
}
js = p2['saveParam']['formInfoJson']
# 获取合同起止日,转化为日期类型
start_date = pd.to_datetime(js['start_date']['value'])
end_date = pd.to_datetime(js['end_date']['value'])
# 判断日期大小
if end_date < start_date:
rtn['success'] = False
rtn['errors'].append({
"description": "合同终止日必须晚于合同起始日"
})
return rtn
效果展示¶
输入错误数据并且保存,效果如下:
案例2 - 合同保存时同步维度¶
需求¶
明细表保存后,需要将用户录入的合同作为维度成员加入contract维度中。其中,合同编号为维度成员编码,合同名称为维度成员的中文描述,合同起始日和合同结束日分别为维度的ud1和ud2。注意需要处理一下保存维度时的异常,如果在保存维度成员过程中报错,则需弹框提醒用户“contract维度成员生成失败,请重新保存或联系系统管理员查看。”
解决方案¶
为确保加入维度的合同数据有效,需要配置Python逻辑在业务模型 保存后
维度的更新等操作可以使用DeepFOS SDK提供的 Dimension
弹框提示可有Python返回值定义,具体参考 返回结果如何影响前端展示(弹窗效果)
代码¶
from deepfos.element.dimension import Dimension, DimMember
def main(p1, p2):
rtn = {
"success": True,
"errors": [],
"warnings": []
}
js = p2['saveParam']['formInfoJson']
# 获取合同的相关参数
contract_id = js['contract_id']
contract_name = js['contract_name']['value']
start_date = js['start_date']['value']
end_date = js['end_date']['value']
# 使用维度名实例化维度对象
dim = Dimension('contract')
# 增加维度成员
dim.add_member(DimMember(
name=contract_id,
multilingual={'zh-cn': contract_name},
ud1=start_date,
ud2=end_date
))
# 保存维度以及错误处理
try:
dim.save()
except Exception as e:
# 打印错误以便通过日志分析具体报错
print(e)
rtn['success'] = False
rtn['errors'].append({
"description": "contract维度成员生成失败,请重新保存或联系系统管理员查看。"
})
return rtn
效果展示¶
明细表填入数据,点击保存
打开contract维度,应当能够看到维度已经成功更新