业务模型 ======== 案例1 - 合同起止日校验 ---------------------- 需求 ^^^^ 有业务模型contract_model如下 - 只有一张主表contract_info和一张子表contract_data; - 两表通过contract_id关联 - contract_info有合同起始日和合同终止日两个字段 .. panels:: :container: container pb-1 img-auto-width :column: col-lg-12 p-0 :body: p-0 .. image:: ../images/eg_bizmodel_case1_contract_model.png 基于业务模型搭建业务明细表contract_tbl .. panels:: :container: container pb-1 img-auto-width :column: col-lg-12 p-0 :body: p-0 .. image:: ../images/eg_bizmodel_case1_contract_tbl.png 通过python校验合同终止日必须晚于合同起始日,并在校验不通过的时候阻止保存,并弹框提示用户 **“合同终止日必须晚于合同起始日”** 。 解决方案 ^^^^^^^^ - 由于在校验不通过时需要阻止保存,需要配置Python逻辑在业务模型 **保存前** - 弹框提示可由Python返回值定义,具体参考 :ref:`how_to_write_return` 代码 ^^^^ .. code-block:: 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 效果展示 ^^^^^^^^ 输入错误数据并且保存,效果如下: .. panels:: :container: container pb-1 img-auto-width :column: col-lg-12 p-0 :body: p-0 .. image:: ../images/eg_bizmodel_case1_result.png 案例2 - 合同保存时同步维度 -------------------------- 需求 ^^^^ 明细表保存后,需要将用户录入的合同作为维度成员加入contract维度中。其中,合同编号为维度成员编码,合同名称为维度成员的中文描述,合同起始日和合同结束日分别为维度的ud1和ud2。注意需要处理一下保存维度时的异常,如果在保存维度成员过程中报错,则需弹框提醒用户“contract维度成员生成失败,请重新保存或联系系统管理员查看。” 解决方案 ^^^^^^^^ - 为确保加入维度的合同数据有效,需要配置Python逻辑在业务模型 **保存后** - 维度的更新等操作可以使用DeepFOS SDK提供的 :ref:`Dimension` - 弹框提示可有Python返回值定义,具体参考 :ref:`how_to_write_return` 代码 ^^^^ .. code-block:: 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 效果展示 ^^^^^^^^ 明细表填入数据,点击保存 .. panels:: :container: container pb-1 img-auto-width :column: col-lg-12 p-0 :body: p-0 .. image:: ../images/eg_bizmodel_case2_contract_tbl.png 打开contract维度,应当能够看到维度已经成功更新 .. panels:: :container: container pb-1 img-auto-width :column: col-lg-12 p-0 :body: p-0 .. image:: ../images/eg_bizmodel_case2_dimsync.png