业务模型¶
案例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维度,应当能够看到维度已经成功更新
