文档中心合并合并2.5顾问使用手册六、各环节的配置说明8.合并流程控制8.2合并流程控制页面配置

8.2合并流程控制页面配置

之前已经讲了如何去新建一个合并流程模型元素,本章节讲解基于合并流程模型搭建使用侧的合并流程页面。

我们可以在UX中,选择【合并流程控制】控件,这样我们可以看到合并流程的可视化工作台了。

新建UX元素,选择【控件栏】-【财务】-【合并流程控制】,拖入到画布

我们可以编辑维度选择器的属性,如维度的选择范围,默认值等;

同时可以配置合并流程表格字段的显隐

也可以调整合并流程整个画布的样式

UX合并流程控件继承了UX通用控件的灵活属性,可以在按钮上实现添加事件等操作;

  • 点击初始化,依据标准逻辑执行法人实体的初始化状态,可以理解为对应pov合并流程账期的打开


【**流程开启说明】**
  • 系统开启会初始化所有#root下有效成员,如系统未展示请检查开启对应entity是否激活。

  • 父级是“#root”,即parent = #root 的成员始终有效,不管激活表是否维护

:是否激活概念可参考多版本实体维初版设计文档


  • 点击查询,可以展示当前查询的公司IDescendant范围的所有实体流程控制状态


【查询说明】
  • 背景pov确定好后,系统将查询IDescendant(${本次查询成员},0,1)并绘制实体的树形结构

  • 查询会考虑有效边,即激活实体表中我们已维护的父对子在指定pov下是否有效

  • 系统会根据编辑态动作鉴权,如果连「查询」权限也没有,对应数据都会展示NoAccess,合并动作会根据分配的权限展示或隐藏

  • 如查询的实体未开启,所有合并动作包括审批是无法操作的,包括合并计算、阶段审批等,对应数据都会展示NotStarted

  • 阶段信息展示编辑态开启的校验类型列,在执行查询时会按编辑态合并校验配置进行动态查询校验,具体校验逻辑可参考4.4审批动作执行-合并校验


按流程单元点击合并动作按钮,系统将按配置的PY脚本进行合并计算、折算、贡献(抵消)等合并计算。

  • 合并动作流程

    1. 鉴权

    2. 校验

    3. 执行具体逻辑

    4. 记录日志

  • 合并计算状态的流转

  • 调用PY的参数为合并流程组件与PY约定,不支持进行调整


调用逻辑为UX根据unit_id + parent调用java接口,java找了对应的pov参数调用Python

Copy
{
	"parent": "",
	"period": "6",
	"year": "2023",
	"scenario": "Actual",
	"version": "Working",
	"entity": "BX310000_C",
	"unitId": "231312",
	"consolUnitContribution": {
		"elementName": "test_1",
		"elementType": "SML",
		"folderId": 0,
		"path": "SML2_1",
		"serverName": "data-table-mysql-server1-0",
		"tableName": "ddicbk009_t_contribution_4w2md"
	},
	"consolUnit": {
		"elementName": "test_1",
		"elementType": "SML",
		"folderId": 0,
		"path": "SML2_1",
		"serverName": "data-table-mysql-server1-0",
		"tableName": "ddicbk009_t_contribution_4w2md"
	},
	"consolProcessElement": {
		"elementName": "test_1",
		"elementType": "SML",
		"folderId": 0,
		"notEmpty": True,
		"path": "SML2_1",
		"serverName": "domain-model3-0"

	},
	"jobId": "string"
}
  • 合并的调度不做详细说明

我们在进行合并动作计算时,都会先根据编辑态的合并动作权限进行鉴权,具备权限的用户/用户组才可进行具体操作

合并动作我们在配置中已经发现配置了如下这些策略,

  • 单体(base实体对应的流程单元)不允许【合并】及【强制合并】;

  • 无父级信息的实体(父级为#root或不带父级信息的实体),不允许【折算】及【贡献】;

  • 合并实体对应的流程单元,不允许【计算】

ℹ️合并动作上预置了些合并场景常见的校验策略:

点击 【折算】时,同单元计算状态必须为已完成

点击【贡献(抵消)】时,同单元计算状态折算状态必须为已完成

~~点击【强制合并】时,同单元的【计算状态】必须为~~~~已完成~~


点击**【任意合并计算】**按钮时,系统会检测当前任务与正在进行的合并操作任务,并对用户做相应提醒。

PS:20240411新增加下级合并节点相关提醒

基于财务模型搭建的电子表格在保存后可配置回调合并流程重置逻辑,重置所有「合并计算」状态为「数据变更」,重置范围:

  • year+period+scenario+version+entity 维度背景下的所有流程单元

  • entity为「父点子」或「实体」,都回写 实体(子) 的信息,不考虑parent信息

  • 除了每个被重置的单元自身外,每个单元向上所有实体单元的计算状态、折算状态、贡献状态,均会被重置


两种财务模型入库方法(技术相关):
  • python_sdk财务模型元素保存—cube.save()

    • 可配置是否回调,参数callback:默认True

财务模型 — DeepFOS

  • DeepCube—submit_calc()

    • 直接提交数据库clickhouse,不走财务模型故不会走回调逻辑

⚠️如直接在py里保存财务模型数据,且不想回调重置状态,需使用cube.save(),且callback设置为False


审批动作执行的主要逻辑是根据编辑视图的配置,分阶段将进度修改至目标进度。

动作流程

Copy
1. 鉴权
2. 校验
3. 自定义逻辑
4. 执行具体审批状态流转
5. 记录日志
  • 合并校验的预置逻辑,即通过校验配置的pov去查询合并财务模型的每个合并单元,取到的多行数据聚合计算

    • 未校验:所有校验值均为空(null)

    • 异常:至少1个有值,且存在校验值 != 0

    • 正常:至少1个有值,且所有校验值 == 0

    • 如果校验没有启用,或者部分如折算没有启用,对应的校验值

      视为「未校验」

  • 合并校验是在「查询」动作时进行动态校验,

案例

在合并流程配置中,我们配置了【阶段一】的合并校验规则,如下图所示,系统将会校验所有如下pov的单元格的每个值。

我们可以拉取动态表看到,对应pov组合下的单元格有值且不为0

因为我们打开了阶段1的计算和折算校验,故此时,我们在使用视图查询对应pov的流程单元,它的阶段状态为校验失败

上一节我们讲解了合并校验的逻辑,校验看板帮助我们更好地呈现校验结果,实现在合并流程使用视图通过点击「校验状态」查看具体校验明细,我们可以在合并流程控件UX添加弹窗的方式来展示校验看板


新增的合并流程控件默认会配置上合并流程校验弹窗控件,历史的合并流程UX如需增加校验看板,可按以下配置:

a.首先我们在合并流程UX控件的编辑态,添加「弹窗」控件

b.我们在弹窗中添加我们的合并校验看板,合并校验看板的数据来源可以选择合并流程控制模型或者财务模型数据源,我们此处选择「合并流程控制模型」,并选择对应的合并流程元素


c.我们点击合并校验看板,并在「模型入参」处编辑表达式

Copy
{
  phase: $components.consol_process_table_X1Xc.clickedCol?.parent?.config?.key,
  unitId: $components.consol_process_table_X1Xc.clickedRow?.unitId,
  validateMode: $components.consol_process_table_X1Xc.clickedCol?.key,
  expectedName: $components.consol_process_table_X1Xc.clickedRow?.expectedName,
}

⚠️表达式中实际流程控制表格对象(consol_process_table_xxxxx)要替换成实际流程控制表格的编码

d.最后我们在流程控制表格的「事件」中,点击校验状态列添加「打开弹窗」配置,「目标控件」选择之前配置的合并校验看板弹窗

回到使用视图,点击校验状态,效果图如下:

如果我们需要查看历史操作记录,合并流程使用视图提供了弹窗展示历史记录功能,我们可以在合并流程UX控件添加弹窗的方式来展示流程历史看板,分为「审批历史」和「计算历史」:

  • 审批历史:点击审批进度列,查看审批记录

  • 计算历史:点击计算状态列,查看合并计算记录


⚠️新增的合并流程控件默认会配置上合并流程历史弹窗控件,历史的合并流程UX如需增加历史看板,以审批历史为例,可按以下步骤配置:

a.首先我们在合并流程UX控件的编辑态,添加「弹窗」控件

b.我们在弹窗中添加我们的合并历史看板,并选择对应的「合并流程控制模型

c.我们点击合并历史看板,并在「模型入参」处编辑表达式

Copy
({
  phase: $components.consol_process_table_OhU7.clickedCol?.parent?.config?.key,
  unitId: $components.consol_process_table_OhU7.clickedRow?.unitId
})
Copy
({
  parent: $components.consol_process_table_2BVk.clickedRow?.parentName,
  unitId: $components.consol_process_table_2BVk.clickedRow?.unitId
})

⚠️表达式中实际流程控制表格对象(consol_process_table_xxxxx)要替换成实际流程控制表格的编码

d.最后我们在流程控制表格的「事件」中,点击审批进度列添加「打开弹窗」配置,「目标控件」选择之前配置的合并历史看板弹窗

回到使用视图,点击审批状态,效果图如下:

我们在进行动作审批时,都会先根据编辑态的审批动作权限进行鉴权,具备权限的用户/用户组才可进行具体操作

原则1:合并的业务场景,即上级严重依赖下级的数据,因此审批控制,上级的进度不能超过下级

原则2:所有前进类审批,均需要鉴别同单元下的”计算校验状态”为“校验通过


1、前进类审批,需要同时满足以下条件:

  • 作业状态需要空闲

  • 同单元的「计算/合并的业务状态」 为“已计算

  • 同单元的计算校验状态为“校验通过”(合并校验开启的状态下)

  • 前进的目标进度 不超过(≤) 任意下****级实体单元的进度

2、后退类审批

  • 后退的目标进度 不小于(>) 任意上级实体单元的进度

在编辑态,我们已展现了如何在审批动作上配置PY脚本或者是工作流(可配置cube锁数、系统通知、记录日志的编排逻辑,相比py可管理可修改),为了告诉大家如何使用,本次我们展示两个自定义逻辑的使用场景


自定义场景:具体可参考demo案例

场景1:假设我们需要做合并流程提交自定义校验,在合并流程审批提交按钮上,我们来配置自定义PY校验逻辑

场景2:在合并流程的审批动作上,我们需要a.对cub锁数,b.同时对相关人员进行通知


场景1.

a.首先我们已经在合并流程编辑态合并动作-「提交」动作上选择了自定义前置逻辑「PY脚本」

b.Python这里我们写自定义逻辑返回结果,告诉合并流程我们的校验结果是成功还是失败,返参格式参考如下:

Copy
{
  "is_success": True,  
  # 布尔值,表示业务逻辑运行成功失败
  "notification": {
    "success": {
      "title": "成功标题",
      "description": "成功文案"
    },
    "info": {
      "title": "提示标题",
      "description": "提示文案"
    },
    "warning": {
      "title": "警告标题",
      "description": "警告文案"
    }
  }
}
Copy
{
  "is_success": False,  
  # 布尔值,表示业务逻辑运行成功失败
  "notification": {
    "info": {
      "title": "提示标题",
      "description": "提示文案"
    },
    "warning": {
      "title": "警告标题",
      "description": "警告文案"
    },
    "error": {
      "title": "错误标题",
      "description": "错误文案"
    }
  }
}

c.自定义PY校验的使用效果

场景2

a.根据需求,我们已经创建了工作流,包含功能:

  • 对财务模型/业务模型锁数

  • 并通知相关父级公司人员合并流程的审批通过

b.我们在合并流程编辑态合并动作-「审批」动作上选择自定义前置逻辑「工作流」,并选择之前创建的工作流

c.在审批动作之后,我们对cub进行了锁数,同时进行了站内消息的推送

其他

Copy
{
  "year": "2022",
  "period": "12",
  "scenario": "Actual",
  "version": "Working",
  "entity":"AC",
  "parent":"MC",
  "unit_id":"2022_12_Actual_Working_AC",
  "action_code": "approve01",
  #操作范围:self-实体本身,idescendant-实体本身和后代,ichildren-实体本身和子代
  "scope""idescendant",
  "origin_state":"state_2",
  "target_state": "state_5"
  "origin_num":"2",
  "target_num": "5"
  "batch_entities": [
    "AC",
    "A",
    "B"
  ],
  "batch_parents": [
    "MC",
    "AC",
    "AC"
  ],
  "unit_ids": [
    "2022_12_Actual_Working_AC",
    "2022_12_Actual_Working_A",
    "2022_12_Actual_Working_B"
  ]
}
Copy
{
	  "year": "2022",
    "period": "12",
    "scenario": "Actual",
    "version": "Working",
  	"entity": "A",
    "parent": "AC",
  	"unit_id": "2022_12_Actual_Working_A",
  	"action_code": "approve01",
    #操作范围:self-实体本身,idescendant-实体本身和后代,ichildren-实体本身和子代
  	"scope""idescendant",
		"origin_state": "state_1",
		"target_state": "state_5",
  	"origin_num": "1",
		"target_num": "5"
    "unit_ids": [
      {
        "entity":"A",
        "parent":"AC",
        "unit_id":"2022_12_Actual_Working_A"
      },
      {
        "entity":"B",
        "parent":"AC",
        "unit_id":"2022_12_Actual_Working_B"
      }
    ]
}

⚠️启动参数根据操作范围筛选,流程单元同时满足:
  • 符合审批动作「当前进度」

  • 鉴权及校验通过


标准的审批动作定义了「当前进度」到「目标进度」,但实际业务场景有从「当前进度」到「自定义目标进度」的需求,中间可能包含些外围系统校验等特殊判定,目前只有前置动作挂工作流去异步轮询的方式去实现一些审批动作后置逻辑,我们可以选择添加「自定义动作」按钮去实现个性化需求,使用方法可参考前置逻辑,不再重复

当实际业务场景中有批量审批或解锁下属所有单位的需求时,我们在编辑态会打开「允许对实体后代操作」功能以提升合并流程控制的使用效率和性能,后代批量功能在使用态主要有以下几方面影响:

与单条权限不同,单条同行流程单元「当前进度」= 动作配置「当前进度」时具备权限,后代批量按钮在此基础上,合并实体按钮会展现所有后代出现过的按钮,具体可见下案例:

Ⅰ.当操作按钮打开「允许对实体后代操作」时,审批时会弹窗二次确认,需确认操作范围,目前只支持:

  • 实体本身:自己本身

  • 实体本身和代:筛选范围同维度表达式IDescendant

  • 实体本身和代:筛选范围同维度表达式IChildren

  • 后代末级单体:筛选范围同维度表达式Base

Ⅱ.系统会根据所选范围实体,进行流程实体单元目标进度判断,流转需满足以下条件:

  • 操作人具备对应实体的审批权限

  • 审批方向为前进时,通过前置校验

    • 同单元的「作业状态」为空闲

    • 同单元的「计算校验状态」为校验通过(如果校验未开启,无此校验)

    • 同单元的「计算/合并的业务状态」 为已计算

Ⅲ.根据步骤Ⅱ结果,校验上下级关系,即父级进度不超过(≤) 任意下级实体单元的进度

Ⅳ. 步骤Ⅲ校验通过时,进行状态流转,反之,不会进行任何状态流转

  • 系统会提示执行成功及失败实体清单,

  • 但凡有执行成功的实体,单元审批日志(consol_approval_log)中sys_comment会记录具体明细结果。


单条执行结果说明

  • error:失败

    • 符合「当前进度」

    • 未通合并计算/阶段校验,或未通过目标进度校验

  • success:成功

    • 状态流转成功

  • nochange:无需执行,接口响应结果会具体告知,不会在反馈机制中体现

    • 不符合「当前进度」或已经在「当前进度」

    • 没有权限

【原则】

  • 单条没有执行按钮–>无需执行

  • 单条有执行按钮未执行成功–>失败

批量执行结果说明

  • 全部执行成功:结果都为成功或无需执行

  • 部分执行成功:同时含有成功和失败,可能有无需执行

  • 执行失败:有失败没有成功,可能有无需执行


执行案例

案例1

实体

父级

权限方案鉴权

校验

阶段状态

判断目标进度(2->3)

目标进度校验

单条结果

MC前进动作2->3


操作范围:实体本身和后代

全部执行成功

****

entityMC

通过

通过

2

2->3

成功

成功

entityM

entityMC

通过

通过

2

2->3

成功

entityAC

entityMC

通过

通过

2

2->3

成功

entityA

entityAC

通过

通过

3

3->3

无需执行

entityB

entityAC

通过

通过

3

3->3

无需执行

案例2

实体

父级

权限方案鉴权

校验

阶段状态

判断目标进度(2->3)

目标进度校验

单条结果

MC前进动作2->3


操作范围:实体本身和后代

执行失败

entityMC

通过

通过

1

1->1

失败

无需执行

entityM

entityMC

通过

通过

2

2->3

失败

entityAC

entityMC

通过

通过

2

2->3

失败

entityA

entityAC

未通过

通过

2

2->2

无需执行

entityB

entityAC

通过

通过

2

2->3

失败

案例3

实体

父级

权限方案鉴权

校验

阶段状态

判断目标进度(2->3)

目标进度校验

单条结果

MC前进动作2->3


操作范围:实体本身和后代

部分执行成功

entityMC

通过

通过

1

1->1

成功

无需执行

entityM

entityMC

通过

通过

1

1->1

无需执行

entityAC

entityMC

通过

未通过

2

2->2

失败

entityA

entityAC

通过

通过

2

2->3

成功

entityB

entityAC

通过

通过

2

2->3

成功

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send