7.2 实战训练(积分发放)

前言

当我们碰到一个全新的场景,除了写代码以外也可以通过设计器来完成,大致步骤如下:

  1. 分析业务场景,规划对应的模型并通过模型设计器进行配置

  2. 通过界面设计器,设计出必要管理页面

  3. 通过流程设计器,设计对应业务流程

  4. 通过数据可视化,设计相应的数据看板

场景说明

本节通过例子完成一个积分成本分摊的业务场景

积分支出:谁受益谁支出原则+导购手动确认原则,通过门店应用的积分规则,来实现自动化+手动积分形式实现

案例背景

某家具企业经营多种家具类型,不同系列不同品类分事业部经营。

注:

独立门店:只能售卖本事业部下的商品;

融合门店:可以售卖多事业部下的商品;

需求:需要建立一套积分规则,遵循谁受益谁支出原则+导购手动确认原则;通过门店应用的积分规则,来实现自动化+手动积分。

7.2 实战训练(积分发放)

场景一

导购a邀请老客户c通过裂变分享新客户x在独立门店1下单。系统根据独立门店1的积分规则,自动发放积分给老客户c和新客户x,积分由国一事业部承担。

7.2 实战训练(积分发放)

场景二

融合门店1导购b邀请老客户d裂变分享新客户y在融合门店下单。该订单可能涉及多个事业部,由导购b手动选择最大量值的积分规则进行发放

7.2 实战训练(积分发放)

场景三

独立门店1的导购a邀请老客户c裂变分享新客户z在独立门店2下单。系统根据独立门店2的积分规则,来计算积分值,自动发放老客户c和新客户z的积分,积分由国二事业部

7.2 实战训练(积分发放)

实战训练

Step1 分析业务场景规划对应模型

本场景下涉及基础对象模型包括:事业部、门店、导购、会员等

  1. 事业部:它是积分成本的载体

  2. 门店:类型分为独立门店和融合门店,独立门店必须隶属于一个事业部,同时配置默认积分发放规则,融合门店可能属于多个事业部当发生积分发放时,需要店员手工选择成本事业部和积分发放规则

  3. 导购员:导购员必须隶属于一个门店等

  4. 会员:消费者需要记录它隶属导购员,以及是由哪个会员推荐过来的等

涉及业务对象模型包括:积分发放规则,积分发放记录,邀请下单记录

  1. 积分发放规则:会员积分发放规则,对应邀请老客的积分发放规则等

  2. 积分发放记录:本次发放积分、本次发放积分规则、发放对象(会员)、成本事业部、关联门店、关联导购、关联老客(可空)、关联下单记录编码等

  3. 邀请下单记录:导购、下单会员、下单门店、商品信息、下单金额等

对应模型如下:

7.2 实战训练(积分发放)

模型 设计器呈现 自定义字段列表 关系字段说明 说明
事业部 7.2 实战训练(积分发放) 事业部负责人(文本)
门店列表(o2m)
与门店建立o2m绑定关系,绑定时选择双向绑定,双向绑定意思是在事业部这边建立o2m到门店的关系字段,在门店那边建立m2o的关系字段 关系字段需要在有对方模型的情况下再建,比如事业部中的门店列表则是再后面追加新增的
门店 7.2 实战训练(积分发放)
7.2 实战训练(积分发放)
导购列表(o2m)
事业部(m2o)
默认积分发规则(m2o)
门店类型(枚举)
分别与事业部、导购、积分发放规则建立m2o、o2m、m2o关系 门店类型:需要先建对应的数据字典
导购 7.2 实战训练(积分发放) 绑定用户(m2o)
门店(m2o)
是否离职(布尔型)
与门店建立m2o关系 1. 绑定用户,用于后续业务流程设计中的填写规则
2. 打马赛克的忽略,其他场景测试用
会员 7.2 实战训练(积分发放) 会员累计积分(浮点数)
推荐客户(m2o)
所属于导购员(m2o)
是否为新客(布尔型)
与导购、会员建立m2o关系 1. 会员m2o的字段是自关联用于存储推荐会员
2. 打马赛克的忽略,其他场景测试用
积分发放规则 7.2 实战训练(积分发放) 推荐客户发放比例(浮点数)
发放倍数(整数)
积分发放记录 7.2 实战训练(积分发放) 最终发放积分(浮点数)
关联积分规则(m2o)
事件编码(文本)
推荐导购员(m2o)
推荐会员(m2o)
关系门店(m2o)
成本事业部(m2o)
会员(m2o)
成本事业部名称(文本)
会员名称(文本)
与积分发放规则、导购员、会员、门店、事业部建立m2o关系 1. 会员有两个m2o,分别用户记录发放会员和发放会员的推荐会员也就是老客
2. 事件编码用户维护触发本次积分发放记录产生的源头单据编码如:邀请下单记录的编码
邀请下单记录 7.2 实战训练(积分发放) 成本事业部(m2o)
选择积分发放规则(m2o)
下单门店(m2o)
购买商品(文本)
下单金额(整数)
会员(m2o)
导购(m2o)
与成本事业部、积分发放规则、下单门店、会员、导购等建立m2o的关系 1. 会员、下单门店、导购属于必要信息
2. 成本事业部、积分发放规则是业务流程中自动计算回填的数据

Step3 利用界面设计器,设计出必要的管理页面

以事业部为例,构建管理页面。其他模型依次按例子建立管理页面

  1. 进入界面设计器,应用选择全员营销,模型选择事业部,点击添加页面下的直接创建

7.2 实战训练(积分发放)

  1. 设置页面标题、模型(自动带上可切换)、业务类型(运营管理后续会扩展其他类型)、视图类型(表单)后点击确认按钮进入事业部表单设计页面

7.2 实战训练(积分发放)

  1. 进入页面设计器,对事业部表单页面进行设计(更多细节介绍,请参考界面设计产品使用手册)

    a. 左侧为物料区:分为组件、模型。

    ⅰ. 【组件】选项卡下为通用物料区,我们可以为页面增加对应布局、字段(如同在模型设计器增加字段)、动作、数据、多媒体等等

    ⅱ. 【模型】选项卡下为页面对应模型的自定义字段、系统字段、以及模型已有动作

    b. 中间是设计区域

    c. 右侧为属性面板,在设计区域选择中组件会显示对应组件的可配置参数

7.2 实战训练(积分发放)

  1. 在左侧【组件】选项卡下,拖入布局组件【分组】,并设置组件【标题属性】为基础信息

7.2 实战训练(积分发放)

  1. 在左侧【组件】选项卡下,再次拖入布局组件【分组】,并设置组件【标题属性】为门店列表

7.2 实战训练(积分发放)

  1. 在左侧【模型】选项卡下,分别把自定义字段中的【事业部负责人】和系统字段中的【名称】拖入【基础信息】分组,把自定义字段中的【门店列表】字段拖入门店列表分组

7.2 实战训练(积分发放)

  1. 在设计区域切换【门店列表】展示组件为【表格】

7.2 实战训练(积分发放)

  1. 此时【门店列表】展示形式变成了表格形式,选中【门店列表】组件,会发现左侧【模型】选项卡下的当前模型切换成了【门店】,同时我们在右属性面板区置空其【标题属性】

7.2 实战训练(积分发放)

  1. 设计区选中【门店列表】的表格组件,分别把自定义字段中的【默认积分发规则】、【门店类型】、【导购列表】和系统字段中的【名称】拖入【门店列表】表格组件的表格字段设计区

7.2 实战训练(积分发放)

  1. 设计区选中【门店列表】的表格组件的【创建】按钮,点击【打开弹窗】设计关系字段【门店】的新增页面

7.2 实战训练(积分发放)

11.分别把自定义字段中的【默认积分发规则】、【门店类型】和系统字段中的【名称】拖入门店的新增页面设计区

7.2 实战训练(积分发放)

  1. 选中弹出框中【取消】取消按钮,设置其【按钮样式】属性为【次要按钮】

7.2 实战训练(积分发放)

  1. 关闭弹出框,回到主设计区

7.2 实战训练(积分发放)

  1. 设计区选中【门店列表】的表格组件的【删除】按钮,设置其【按钮样式】属性为【次要按钮】,【二次确认】属性打开

7.2 实战训练(积分发放)

  1. 设计区选中【门店列表】的表格组件中操作列的【编辑】按钮,点击【打开弹窗】设计关系字段【门店】的编辑页面,

    a. 分别把自定义字段中的【默认积分发规则】、【门店类型】和系统字段中的【名称】拖入门店的新增页面设计区。

    b. 选中弹出框中【取消】取消按钮,设置其【按钮样式】属性为【次要按钮】

    c. 把门店类型展示组件切换为【单选框】

    d. 关闭弹出框

7.2 实战训练(积分发放)

  1. 设计区选择非【门店列表】组件如基础信息,模型切换为主模型【事业部】,在左侧【模型】选项卡下,把动作分类下的提交类型【创建】动作拖入中间设计区的动作区

7.2 实战训练(积分发放)

  1. 选择中展示名为【确定】的创建动作按钮,在右侧属性面板中设置:是否隐藏属性为【条件隐藏】,隐藏条件为【id非空】

7.2 实战训练(积分发放)

  1. 在左侧【模型】选项卡下,把动作分类下的提交类型【更新】动作拖入中间设计区的动作区

7.2 实战训练(积分发放)

  1. 选择中展示名为【确定】的更新动作按钮,在右侧属性面板中设置:是否隐藏属性为【条件隐藏】,隐藏条件为【id为空】。之所以同时拖入【创建】和【更新】动作并都命名为确认,是期望这个页面同时可以做为新增页面也可以做为编辑页面,只不过要通过条件隐藏来设置按钮的出现规则

7.2 实战训练(积分发放)

  1. 在左侧【组件】选项卡下,把动作分类下的【客户端动作】拖入中间设计区的动作区

7.2 实战训练(积分发放)

  1. 选择设计区【客户端动作】,在右侧属性面板中设置:动作名称为【返回】,客户端行为为【返回上一个页面】并点击保存

7.2 实战训练(积分发放)

  1. 选择设计区【返回】动作,在右侧属性面板中设置:按钮样式为【返回】,【二次确认】属性打开并设置提示文字为【返回页面操作将不被保存】,可以点击预览二次确认看效果

7.2 实战训练(积分发放)

  1. 点击【发布】按钮,页面成功发布,每发布一次会有一个例子版本,可以通过历史版本进行恢复

7.2 实战训练(积分发放)

  1. 点击右上角历史版本图标,进入历史版本查看页面

7.2 实战训练(积分发放)

  1. 在历史版本页面可以选择对应历史版本记录,并通过【恢复此版本】来完成页面的历史版本切换

7.2 实战训练(积分发放)

  1. 接下来我们为事业部模型创建表格管理页面,入口同编辑页面。设置页面标题、模型(自动带上可切换)、业务类型(运营管理后续会扩展其他类型)、视图类型(表格)后点击确认按钮进入事业部表格设计页面

7.2 实战训练(积分发放)

  1. 进入页面设计器,对事业部表格页面进行设计(更多细节介绍,请参考界面设计产品使用手册)

7.2 实战训练(积分发放)

  1. 在左侧【模型】选项卡下,分别把自定义字段中的【事业部负责人】和系统字段中的【名称】拖入表格组件的表格字段设计区

7.2 实战训练(积分发放)

  1. 在左侧【组件】选项卡下,把动作分类下的【跳转动作】拖入中间设计区的动作区,并在右侧属性面板中设置动作名称为【新增】,数据控制类型为【不进行数据处理】,打开方式为【当前窗口打开】,动作跳转页面为【事业部编辑】页面,并点击保存

7.2 实战训练(积分发放)

  1. 在左侧【组件】选项卡下,把动作分类下的【跳转动作】拖入中间设计区的行内动作区,并在右侧属性面板中设置动作名称为【编辑】,数据控制类型为【处理单条数据】,打开方式为【当前窗口打开】,动作跳转页面为【事业部编辑】页面,并点击保存

7.2 实战训练(积分发放)

  1. 在左侧【模型】选项卡下,把动作分类下的【删除】拖入中间设计区的动作区,并在右侧属性面板中设置动作名称为【删除】,按钮样式为【次要按钮】,【二次确认】属性打开

7.2 实战训练(积分发放)

  1. 点击右上角【显示母版】进入页面最终展示形式,点击添加菜单项,并在输入框中输入【事业部管理】

7.2 实战训练(积分发放)

  1. 点击菜单右侧设置图标,选择【绑定已有页面】,进行菜单与页面的绑定操作

7.2 实战训练(积分发放)

  1. 在绑定页面中,模型选择【事业部】,视图选择【事业部管理】,点击确认按钮提交

7.2 实战训练(积分发放)

  1. 拖动【事业部管理】菜单到【积分管理】父菜单下

7.2 实战训练(积分发放)

  1. 最后别忘了点击右上角【发布】按钮对【事业部管理】表格页面进行发布,回到界面设计器首页查看刚刚建好的两个页面

7.2 实战训练(积分发放)

  1. 以事业部为例分别对门店、导购、会员、积分发放规则、积分发放记录、邀请下单记录等模型进行页面设计,这里不再累赘,请按照自身学习需要,尝试进行界面设计

Step4 通过流程设计器,设计对应业务流程

我们先来整理下核心流程即:邀请下单流程

7.2 实战训练(积分发放)

Step4.1 创建导购邀请下单记录触发流程

  1. 进入流程设计器,点击【创建】按钮

注意:流程中需要获取关系类型的字段(如:O2O、O2M、M2O或M2M),这种类型都是复杂的对象字段,除关联字段(一般为ID)以外的字段,需要通过【数据获取】节点单独获取【关系字段】的对象数据。所以在流程设计中经常会用到【数据获取】节点

7.2 实战训练(积分发放)

  1. 左上角编辑流程名称为【导购邀请下单触发流程】,点击第一个【触发】节点,触发方式选择模型触发,模型选择【导购邀请下单】,触发场景选择【新增数据时】,点击该节点的【保存】按钮

7.2 实战训练(积分发放)

  1. 点击流程图节点间的【+】图标选择增加【获取数据】节点,或者拖动左侧物料区【获取数据】到特定的【+】图标

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 点击【获取数据】,在右侧属性面板中设置【获取数据条数】为单条,选择模型为【导购】,点击【筛选条件】的【{X}】图标,进行数据获取的条件设置

7.2 实战训练(积分发放)

  1. 选择条件字段为【ID】条件操作符为【等于】,条件为变量的导购字段的ID。当上下文只有一个变量时默认不需要选择,这里默认的是【触发[导购邀请下单记录]】,设置好以后点击确认,回到属性面板设置【未获取到数据时执行方式】为【终止流程】,并点击节点【保持】按钮

7.2 实战训练(积分发放)

  1. 再增加一个【获取数据】节点,在右侧属性面板中设置

    a. 【获取数据条数】为单条,选择模型为【会员】

    b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量【导购邀请下单记录】的会员关系字段的ID字段。因为上下文中存在多个变量时需要选择对应变量,跟获取导购数据有点区别,在获取导购数据时,上下文中只有此次【导购邀请下单记录】所以不需要选择对应变量,设置好以后点击【确认】按钮

    c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】

    d. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

  1. 新增【条件分支】,分别对分支1和分支2进行条件设置,条件为:【获取数据[会员]】的关系字段【所属导购员】的【ID】字段一个设置【为空】,一个设置【非空】

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 在【条件分支】的【获取数据[会员]】的关系字段【所属导购员】的【ID】字段【为空】的分支流程中,增加【更新数据】节点,在右侧属性面板中

    a. 【更新模型】选择【获取数据[会员]】

    b. 【字段列表】点击【创建】按钮

    ⅰ. 字段选择 更新【所属导购员】的【ID】

    ⅱ. 表达式设置为:【获取数据[导购]】的【ID】,点击【确认】按钮。

最终完成对【获取数据[会员]】的关系字段【所属导购员】的【ID】字段等于【获取数据[导购]】的【ID】字段的设置,最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

  1. 再增加一个【获取数据】节点,在右侧属性面板中设置

    a. 【获取数据条数】为单条,选择模型为【门店】

    b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量【导购邀请下单记录】的关系字段【下单门店】的【ID】字段。设置好以后点击【确认】按钮

    c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】

    d. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

  1. 新增【条件分支】,分别对分支1和分支2进行条件设置,条件为:【获取数据[门店]】的【门店类型】字段一个设置为【独立门店】,一个设置【融合门店】。这里条件值没有选择上下文变量,而是选择了选项。选项即字段对应的枚举值,在这个例子中【门店类型】字段类型为数据字典

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 在【条件分支】的【获取数据[门店]】的【门店类型】字段等于【独立门店】的分支流程中,增加【更新数据】节点,在右侧属性面板中

    a. 【更新模型】选择【触发[导购邀请下单]】

    b. 【字段列表】点击【创建】按钮

    ⅰ. 字段选择 更新【成本事业部】的【ID】

    ⅱ. 表达式设置为:【获取数据[门店]】的关系字段【事业部】的【ID】字段,点击【确认】按钮。

    c. 【字段列表】点击【创建】按钮

    ⅰ. 字段选择 更新【选择积分发放规则】的【ID】

    ⅱ. 表达式设置为:【获取数据[门店]】的关系字段【默认积分发放规则】的【ID】字段,点击【确认】按钮。

最终完成的【触发[导购邀请下单]】更新设置

a. 【触发[导购邀请下单]】的关系字段【成本事业部】的【ID】字段等于【获取数据[门店]】的关系字段【事业部】的【ID】字段

b. 【触发[导购邀请下单]】的关系字段【选择积分发放规则】的【ID】字段等于【获取数据[门店]】的关系字段【默认积分发放规则】的【ID】字段

c. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 在【条件分支】的【获取数据[门店]】的【门店类型】字段等于【融合门店】的分支流程中,增加【填写】节点,在右侧属性面板中

    a. 【填写模型】选择模型为【触发[导购邀请下单]】

    b. 【选择视图】选择【流程中邀请下单】,这里需要专门为流程增加一个表单页面,因为正常的【导购邀请下单】的表单不需要填写积分发放规则和成本部门

    c. 填写人,选择导购的【绑定用户】,同时加上角色为【超级管理员】方便测试

    d. 数据权限除了【积分发放规则】和【成本部门】需要编辑外,其他都为查看

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 再增加一个【获取数据】节点,在右侧属性面板中设置

    a. 【获取数据条数】为单条,选择模型为【积分发放规则】

    b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量【触发[导购邀请下单]】的关系字段【选择积分发放规则】的【ID】字段。设置好以后点击【确认】按钮

    c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】

    d. 最后点击节点【保持】按钮。

  2. 再增加一个【获取数据】节点,在右侧属性面板中设置

a. 【获取数据条数】为单条,选择模型为【事业部】

b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量【触发[导购邀请下单]】的关系字段【成本事业部】的【ID】字段。设置好以后点击【确认】按钮

c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】

d. 最后点击节点【保持】按钮。

  1. 增加【新增数据】节点,在右侧属性面板中设置

    a. 【新增模型】选择模型为【积分发放记录】

    b. 【新增数据的节点】设置为【节点执行完即时增加业务数据】

    c. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择【最终发放积分】

    ⅱ. 表达式设置为:【触发[导购邀请下单]】的【下单金额】字段【乘以】【获取数据[积分发放规则]】的【发放倍数】字段,点击【确认】按钮。

    d. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【积分发放规则】的【ID】

    ⅱ. 表达式设置为:【获取数据[积分发放规则]】的【ID】字段,点击【确认】按钮。

    e. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择【事件编码】

    ⅱ. 表达式设置为:【触发[导购邀请下单]】的【编码】字段,点击【确认】按钮。

    f. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【推荐导购员】的【ID】

    ⅱ. 表达式设置为:【获取数据[导购]】的【ID】字段,点击【确认】按钮。

    g. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【推荐会员】的【ID】

    ⅱ. 表达式设置为:【获取数据[会员]】的关系字段【推荐客户】的【ID】字段,点击【确认】按钮。

    h. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【关系门店】的【ID】

    ⅱ. 表达式设置为:【获取数据[门店]】的【ID】字段,点击【确认】按钮。

    i. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【成本事业部】的【ID】

    ⅱ. 表达式设置为:【触发[导购邀请下单]】的关系字段【成本事业部】的【ID】字段,点击【确认】按钮。

    j. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【会员】的【ID】

    ⅱ. 表达式设置为:【获取数据[会员]】的【ID】字段,点击【确认】按钮。

    k. 【新增数据】点击【创建】按钮 -- 为数据分析预留字段

    ⅰ. 字段选择【成本事业部名称】

    ⅱ. 表达式设置为:【获取数据[事业部]】的【名称】字段,点击【确认】按钮。

    l. 【新增数据】点击【创建】按钮 -- 为数据分析预留字段

    ⅰ. 字段选择【会员名称】

    ⅱ. 表达式设置为:【获取数据[会员]】的【名称】字段,点击【确认】按钮。

    m. 最终完成的【新增数据[积分发放记录]】新增设置,最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 新增【子流程节点】,这里之所以设置为子流程,就跟上面我们业务流程图中画的一样,【导购邀请下单触发流程】已经完成,会员积分累加从业务上来说是独立的,不影响【导购邀请下单触发流程】。我们在右侧属性面板中设置

    a. 【选择模型】设置为【新增数据[积分发放记录]】

    b. 【选择子流程】设置为【创建新的子流程】,并设置子流程名称为【会员积分累加子流程】

    c. 【子流程执行方式】设置为【子流程和后续节点同时进行】

    d. 最后点击节点【保持】按钮

    7.2 实战训练(积分发放)

Step4.2 创建积分发放记录子流程:积分累积子流程

  1. 点击子流程的跳转图标,跳转到子流程的设计页面。子流程的触发模型由主流程指定,无法更改

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 新增【条件分支】,分别对分支1和分支2进行条件设置,条件为:【触发[积分发放记录]】的【最终发放积分】字段一个设置为小于等于100,一个设置大于100。这里条件值没有选择上下文变量,而是选择了数值,因为【最终发放积分】字段为数字的普通类型,所以可以直接填数字

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 在【条件分支】的【触发[积分发放记录]】的【最终发放积分】字段一个设置为大于100的分支流程中,增加【审批】节点,在右侧属性面板中

    a. 【审批模型】选择模型为【触发[积分发放记录]】

    b. 【审批人】选择角色为【超级管理员】

    c. 【数据】权限全部设置为【查看】

    d. 其他配置项默认,需要了解更多请查看产品使用手册

    e. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

  1. 再增加一个【获取数据】节点,在右侧属性面板中设置

    a. 【获取数据条数】为单条,选择模型为【会员】

    b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量的关系字段【会员】的【ID】字段。设置好以后点击【确认】按钮。当上下文只有一个变量时默认不需要选择,这里默认的是【触发[积分发放记录]】

    c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】

    d. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

  1. 增加【更新数据】节点,在右侧属性面板中

    a. 【更新模型】选择【获取数据[会员]】

    b. 【字段列表】点击【创建】按钮

    ⅰ. 字段选择 更新【会员累计积分】字段

    ⅱ. 表达式设置为:【获取数据[会员]】的【会员累计积分】字段【加上】【触发[积分发放记录]】的【最终发放积分】字段,点击【确认】按钮。

最终完成的【触发[导购邀请下单]】更新设置

a. 【获取数据[会员]】的【会员累计积分】字段等于自身【加上】【触发[积分发放记录]】的【最终发放积分】字段

b. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 新增【条件分支】,分别对分支1和分支2进行条件设置,条件为:【获取数据[会员]】的关系字段【推荐客户】的【ID】字段一个设置为【为空】,一个设置为【非空】。

7.2 实战训练(积分发放)

  1. 在【条件分支】的【获取数据[会员]】的关系字段【推荐客户】的【ID】字段非空,增加【获取数据】节点,在右侧属性面板中

    a. 【获取数据条数】为单条,选择模型为【积分发放规则】

    b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量【触发[积分发放记录]】的关系字段【关联积分规则】的【ID】字段。设置好以后点击【确认】按钮。

    c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】

    d. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

  1. 在【条件分支】的【获取数据[会员]】的关系字段【推荐客户】的【ID】字段非空,增加【获取数据】节点,在右侧属性面板中

    a. 【获取数据条数】为单条,选择模型为【会员】

    b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量【获取数据[会员]】的关系字段【推荐客户】的【ID】字段。设置好以后点击【确认】按钮。

    c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】

    d. 最后点击节点【保持】按钮。

    e. 编辑节点名字为【推荐客户】

7.2 实战训练(积分发放)

  1. 在【条件分支】的【获取数据[会员]】的关系字段【推荐客户】的【ID】字段非空,增加【新增数据】节点,在右侧属性面板中

    a. 【新增模型】选择模型为【积分发放记录】

    b. 【新增数据的节点】设置为【节点执行完即时增加业务数据】

    c. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择【最终发放积分】

    ⅱ. 表达式设置为:【触发[积分发放记录]】的【最终发放积分】字段【乘以】【获取数据[积分发放规则]】的【推荐客户发放比例】字段,点击【确认】按钮。

    d. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【积分发放规则】的【ID】

    ⅱ. 表达式设置为:【获取数据[积分发放规则]】的【ID】字段,点击【确认】按钮。

    e. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择【事件编码】

    ⅱ. 表达式设置为:【触发[积分发放记录]】的【事件编码】字段,点击【确认】按钮。

    f. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【推荐导购员】的【ID】

    ⅱ. 表达式设置为:【触发[积分发放记录]】关系字段【推荐导购员】的【ID】,点击【确认】按钮。

    g. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【关系门店】的【ID】

    ⅱ. 表达式设置为:【触发[积分发放记录]】的关系字段【关系门店】的【ID】,点击【确认】按钮。

    h. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【成本事业部】的【ID】

    ⅱ. 表达式设置为:【触发[积分发放记录]】的关系字段【成本事业部】的【ID】字段,点击【确认】按钮。

    i. 【新增数据】点击【创建】按钮

    ⅰ. 字段选择关系字段【会员】的【ID】

    ⅱ. 表达式设置为:【推荐客户[会员]】的【ID】字段,点击【确认】按钮。

    j. 【新增数据】点击【创建】按钮 -- 为数据分析预留字段

    ⅰ. 字段选择【成本事业部名称】

    ⅱ. 表达式设置为:【触发[积分发放记录]】的【成本事业部名称】字段,点击【确认】按钮。

    k. 【新增数据】点击【创建】按钮 -- 为数据分析预留字段

    ⅰ. 字段选择【会员名称】

    ⅱ. 表达式设置为:【推荐客户[会员]】的【名称】字段,点击【确认】按钮。

    l. 最终完成的【新增数据[积分发放记录]】新增设置,最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 增加【更新数据】节点,在右侧属性面板中

    a. 【更新模型】选择【推荐客户[会员]】

    b. 【字段列表】点击【创建】按钮

    ⅰ. 字段选择 更新【会员累计积分】字段

    ⅱ. 表达式设置为:【推荐客户[会员]】的【会员累计积分】字段【加上】【新增[积分发放记录]】的【最终发放积分】字段,点击【确认】按钮。

最终完成的【触发[导购邀请下单]】更新设置

a. 【推荐客户[会员]】的【会员累计积分】字段等于自身【加上】【新增[积分发放记录]】的【最终发放积分】字段

b. 最后点击节点【保持】按钮。

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

Step4.3 两个流程确保都保持并发布过

流程列表页查看流程状态图标

7.2 实战训练(积分发放)

Step5 基础数据管理

流程前提:基础数据通过管理页面已经建好,后面看实战效果的基础数据为:

  1. 事业部:国一事业部、国二事业部

  2. 门店:国一独立门店01(绑定:国一事业部,积分发放规则:正常发放)、国二独立门店01(绑定:国二事业部,积分发放规则:双倍发放)、融合门店01

  3. 导购员:国一独立门店导购-cpc(绑定:国一独立门店01)、国二独立门店导购-温振(绑定:国二独立门店01)、融合门店导购-梦瑶(绑定:融合门店01)

  4. 会员:会员1001(导购绑定:融合门店导购-梦瑶)、会员1002(导购绑定:国二独立门店导购-温振、推荐会员绑定:会员1001)、会员1003(导购绑定:未绑定、推荐会员绑定:会员1001)、

  5. 积分发放规则:双倍发放(发放倍数:2、推荐客户发放比例:0.5)、正常发放(发放倍数:1、推荐客户发放比例:0.2)

Step6 走业务流程,看效果

Step6.1 用例设计1

新建【导购邀请下单记录】如下:

  1. 门店选择:国一独立门店01

  2. 导购选择:国一独立门店导购-cpc

  3. 会员选择:会员1003

  4. 商品填写:测试商品1001

  5. 下单金额:12

  6. 事件编码:O1001

期望结果:

  1. 【会员1003】的【所属于导购员】字段更新为:【国一独立门店导购-cpc】

  2. 【会员1003】的【会员累计积分】字段在原有值上增加【12】

  3. 【会员1001】的【会员累计积分】字段在原有值上增加【2.4】

  4. 新增两条【积分发放记录】

会员 关系门店 最终发放积分 关联积分规则 事件编码 推荐导购员 成本事业部 推荐会员
会员1003 国一独立门店01 12 正常发放 O1001 国一独立门店导购-cpc 国一事业部 会员1001
会员1001 国一独立门店01 2.4 正常发放 O1001 国一独立门店导购-cpc 国一事业部

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

Step6.2 用例设计2

新建【导购邀请下单记录】如下:

  1. 门店选择:融合门店01

  2. 导购选择:融合门店导购-梦瑶

  3. 会员选择:会员1001

  4. 商品填写:测试商品1002

  5. 下单金额:12

  6. 事件编码:O1002

期望结果:

  1. 出现填写节点,【选择积分发放规则】:双倍发放,【成本事业部】:国二事业部

  2. 【会员1001】的【会员累计积分】字段在原有值上增加【24】

  3. 新增一条【积分发放记录】

会员 关系门店 最终发放积分 关联积分规则 事件编码 推荐导购员 成本事业部 推荐会员
会员1001 融合门店01 24 双倍发放 O1002 融合门店导购-梦瑶 国二事业部

7.2 实战训练(积分发放)

Step6.3 用例设计3

新建【导购邀请下单记录】如下:

  1. 门店选择:国二独立门店01

  2. 导购选择:国二独立门店导购-温振

  3. 会员选择:会员1002

  4. 商品填写:测试商品1003

  5. 下单金额:60

  6. 事件编码:O1003

期望结果:

  1. 出现审批,审批通过

  2. 【会员1002】的【会员累计积分】字段在原有值上增加【120】

  3. 【会员1001】的【会员累计积分】字段在原有值上增加【60】

  4. 新增两条【积分发放记录】

会员 关系门店 最终发放积分 关联积分规则 事件编码 推荐导购员 成本事业部 推荐会员
会员1002 国二独立门店01 120 双倍发放 O1003 国二独立门店导购-温振 国二事业部 会员1001
会员1001 国二独立门店01 60 双倍发放 O1003 国二独立门店导购-温振 国二事业部

7.2 实战训练(积分发放)

Step6.4 用例设计4

新建【导购邀请下单记录】如下:

  1. 门店选择:国一独立门店01

  2. 导购选择:国二独立门店导购-温振

  3. 会员选择:会员1002

  4. 商品填写:测试商品1003

  5. 下单金额:60

  6. 事件编码:O1004

期望结果:

  1. 【会员1002】的【会员累计积分】字段在原有值上增加【60】

  2. 【会员1001】的【会员累计积分】字段在原有值上增加【12】

  3. 新增两条【积分发放记录】

会员 关系门店 最终发放积分 关联积分规则 事件编码 推荐导购员 成本事业部 推荐会员
会员1002 国一独立门店01 60 正常发放 O1004 国二独立门店导购-温振 国一事业部 会员1001
会员1001 国一独立门店01 12 正常发放 O1004 国二独立门店导购-温振 国一事业部

7.2 实战训练(积分发放)

Step7 通过数据可视化,设计相应的数据看板

Step7.1 事业部积分发放分析

  1. 进入数据可视化【图表】设计页,点击创建一级分组,在分组栏中会多出一行,并填入积分发放综合分析

7.2 实战训练(积分发放)

  1. 鼠标放到一级分组上会出现增加二级分组和删除入口,点击图标“+”,创建两个二级分组分别为:积分发放分析和订单下单分析

7.2 实战训练(积分发放)

  1. 选中二级分组【积分发放分析】出现【添加图标】操作入口,点击添加图表

7.2 实战训练(积分发放)

  1. 在创建图表弹出框中

    a. 【图表标题】填入【事业部积分成本分析】

    b. 【模型】选择【积分发放记录】

    c. 【方法】选择【根据条件分页查询记录列表和总数】

    d. 最后点击节点【确定】按钮

7.2 实战训练(积分发放)

  1. 上一步点击【确定】按钮后自动进入【事业部积分成本分析】图表设计页面。

    a. 【维度】选择【成本事业部名称】

    b. 【数值】选择【最终发放积分】

    c. 点击右上角【保存】,并点击左上角【< 事业部积分成本分析】返回图表管理入口

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 点击右上角【发布】按钮,即完成一个图表的开发。更多图表设计细节请查阅对应的产品使用手册
    7.2 实战训练(积分发放)

  2. 当有业务数据的时候展示

7.2 实战训练(积分发放)

Step7.2 会员积分分析

  1. 选中二级分组【积分发放分析】出现【添加图标】操作入口,点击添加图表。在创建图表弹出框中

    a. 【图表标题】填入【会员累计获取积分分析】

    b. 【模型】选择【积分发放记录】

    c. 【方法】选择【根据条件分页查询记录列表和总数】

    d. 最后点击节点【确定】按钮

7.2 实战训练(积分发放)

  1. 进入【会员累计获取积分分析】图表设计页面。

    a. 【维度】选择【会员名称】

    b. 【数值】选择【最终发放积分】

    c. 【对比】选择【成本事业部名称】

    d. 点击右上角【保存】,并点击左上角【< 会员累计获取积分分析】返回图表管理入口

7.2 实战训练(积分发放)

  1. 点击右上角【发布】按钮,即完成该图表的开发

7.2 实战训练(积分发放)

Step7.3 商品下单金额分析

  1. 选中二级分组【订单下单分析】出现【添加图标】操作入口,点击添加图表。在创建图表弹出框中

    a. 【图表标题】填入【商品购买金额分析】

    b. 【模型】选择【导购邀请下单】

    c. 【方法】选择【根据条件分页查询记录列表和总数】

    d. 最后点击节点【确定】按钮

7.2 实战训练(积分发放)

  1. 进入【商品购买金额分析】图表设计页面。

    a. 图表形式切换为【饼图】

    b. 【维度】选择【购买商品】

    c. 【数值】选择【下单金额】

    d. 右侧属性面板设置

    ⅰ. 【展示标签】为【开启】

    1. 勾选【购买商品】

    ⅱ. 【展示图例】为【开启】

    1. 勾选【购买商品】

    2. 勾选【数值】

    e. 点击右上角【保存】,并点击左上角【< 会员累计获取积分分析】返回图表管理入口

7.2 实战训练(积分发放)

  1. 点击右上角【发布】按钮,即完成该图表的开发

7.2 实战训练(积分发放)

Step7.4 设计综合分析报表

  1. 进入数据可视化【报表】设计页,点击创建一、二级分组,分别为【积分分析报表】、【积分综合报表】,选中二级分组【积分综合报表】出现【添加图标】操作入口,在分组栏中会多出一行,并填入积分发放综合分析

7.2 实战训练(积分发放)

  1. 选中二级分组【积分发放综合分析】,点击右上角【选择图表】,把上面建的三张图表都选上

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

  1. 选完图表后,拖动图表大小和所在位置即完成了报表的设计,最后别完了点击【发布】按钮

7.2 实战训练(积分发放)

7.2 实战训练(积分发放)

Step7.5 把报表挂载到页面上并邦上菜单

简单描述:新建名为【积分综合分析页】的页面,选择模型【积分发放记录】,页面类型设置为【详情】,并在左侧【组件】选项卡下找到【报表】组件,拖入到设计器区并在其属性面板中选择展示报表。新建菜单【积分数据分析】并绑定已有页面【积分综合分析页】,最后点击【发布】按钮

这里新建页面不过多赘诉,更多细节可参阅产品操作手册

7.2 实战训练(积分发放)

Oinone社区 作者:史, 昂原创文章,如若转载,请注明出处:https://doc.oinone.top/oio4/9334.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(1)
史, 昂的头像史, 昂数式管理员
上一篇 2024年5月23日
下一篇 2024年5月23日

相关推荐

  • 3.5.7.2 自定义母版

    母版是什么 在业务系统中,母版是一种全局通用的组件,用于包裹每个页面的元素。这个概念类似于 PPT 中的母版,它定义了页面的整体结构、样式和布局,使得系统具有一致的外观和风格。 特点: 全局通用:母版是全局性的,适用于系统中的每个页面,确保一致性的用户体验。 包裹元素:母版包裹每个页面的元素,定义了整体的结构和布局。 外观一致性:通过统一的母版设计,系统达到外观和风格的一致性。 与 PPT 母版的类比: 在母版的概念上,与 PPT 中的母版类似,都是用于定义整体结构和样式,确保每个页面都具有一致的外观。 默认母版范围: 图3-5-7-20 默认母版范围 作用场景 在系统中,我们提供了多个纬度的母版,包括全局、应用和页面纬度。这样的设计允许根据不同的业务场景选择合适的母版纬度,以满足不同层次的定制需求。 母版纬度: 全局母版: 覆盖系统中所有页面,确保全局的一致性和统一的用户体验。 定义全局性的结构、样式和布局。 应用母版: 适用于特定应用或模块,定制化程度介于全局和页面之间。 允许在不同应用间实现一定的差异化。 页面母版: 面向具体页面,提供最大的定制化空间。 允许在不同页面中定义不同的结构和样式。 选择纬度: 业务场景决定:根据具体的业务场景和需求选择合适的母版纬度。 定制化需求:如果需要全局一致性,选择全局母版;如果在应用层面有特定需求,选择应用母版;如果需要最大的灵活性和定制化,选择页面母版。 参数说明: 在系统中,使用 registerMask 注册母版时,需要提供两个参数。第一个参数是母版的 XML,第二个参数用于控制母版的注册行为,包括 module、moduleName、model 和 actionName。 母版 XML(第一个参数): 提供母版的 XML 描述,定义了母版的结构和样式。 控制参数(第二个参数): module:指定模块的名称。 moduleName:指定模块的显示名称。 model:指定母版所属的模型。 actionName:指定母版的操作名称,可以是字符串或字符串数组。 全局母版 可以使用 registerMask 注册母版。当第二个参数为 {} 时,即代表注册全局母版。 示例工程目录 以下是需关注的工程目录示例,并确保导入导出依赖正确: 图3-5-7-21 全局纬度注册母版工程目录示例 示例代码 以下是一个示例代码: import { registerMask } from '@kunlun/dependencies'; /** * mask: 在做系统时,我们通常会把外层的布局(菜单、顶部导航)等抽出公共组件,公共组件会抽离全局通用。类似ppt母版的概念即为Mask * registerMask 第二个入参为{}即注册了全局得母版 * * 和默认母版相比移除右上角消息、语言切换、用户 * `<block> * <widget widget="notification" /> * <widget widget="divider" /> * <widget widget="language" /> * <widget widget="divider" /> * <widget widget="user" /> * </block>` */ const registerGlobalMask = () => { registerMask(` <mask> <multi-tabs /> <header> <widget widget="app-switcher" /> </header> <container> <sidebar> <widget widget="nav-menu" height="100%" /> </sidebar> <content> <breadcrumb /> <block width="100%"> <widget width="100%" widget="main-view" /> </block> </content> </container> </mask>`, {}); } registerGlobalMask(); 图3-5-7-22 全局纬度注册母版代码示例 复制这段代码执行下registerGlobalMask()试试看吧 效果 右上角消息、语言切换、用户被移除。 图3-5-7-23 全局纬度注册母版效果示例 应用母版 在系统中,可以使用 registerMask 注册母版。当第二个参数为 {moduleName: ‘resource’} 时,即注册了 resource(资源)应用的母版。 示例工程目录 以下是需关注的工程目录示例,更新导出./moduleMask: 图3-5-7-24 应用纬度注册母版工程目录示例 示例代码 以下是一个示例代码: /** * registerMask 第二个入参为{moduleName: 'resource'}即注册了resource(资源)应用的母版 * * resource来源: 通常是浏览器url上的module * * 和默认模版相比拿掉了菜单 * `<sidebar> * <widget widget="nav-menu" height="100%"…

    2024年5月23日
    1.6K00
  • 书籍封面

    2024年5月23日
    3.4K00
  • 陈浩

    自2017年中国推进数字建设以来,数字经济规模持续增长,“十四五”规划和2035远景目标纲要中明确强调企业和政府需大力推动数字化转型,中国正在迈进一个崭新的数字经济时代。 在这个过程中,软件已经从工具变成信息化的基础设施,如何有效应对该变化所带来的一系列新的核心技术挑战,是整个软件行业发展遇到的另一难题。我认为,开源创新是解决这些难题的有效手段之一,也是未来软件发展的重要方向。如果说,数字化转型是时代趋势,那么开源创新也已成为时代主流。十四五规划纲要首提开源,2021年11月工信部印发《十四五软件和信息技术服务业发展规划》中提到开源重塑软件发展新生态,并将开源重塑软件发展新生态作为十四五期间我国软件产业的四大发展形势之一进行重点阐述。支持国产化开源创新体系发展,建设自己的开源社区和开源平台,其所具有的大众协同、开放共享、持续创新等特点,可有效推动各行业自主可控的数字化转型。 Oinone所倡导的开源理念和生态共建,与国家开源战略不谋而合:将开源作为一种合作手段,通过完善社区注重开源治理,吸引更多的企业和个体参与其中。湖南大学作为首批国家示范性软件学院的双一流建设高校,一直致力于推进和引导国产化开源软件体系的建设,并为此开展多种形式的产学研研究和实践。基于Oinone微服务分布式的设计理念和面向生态的开源特性,湖南大学结合自身在大数据分布式存储、多元异构数据汇聚融合和大数据智能分析等方面的研究成果,与Oinone展开了深度的技术创新合作,并在多个大中型企业数字化应用和数字政府应用中取得了良好的效果。 随着Oinone的开源,相信能激发更多的开发者参与到国产软件建设中,通过开源模式实现更广泛参与方的共享、共创、共生、共赢,构建价值驱动的数字创新生态平台,为我国数字经济发展贡献科技力量。 湖南大学教授:陈浩

    Oinone 7天入门到精通 2024年5月23日
    1.9K00
  • 3.3.4 模型的继承

    在我们的很多项目中,客户都是有个性化需求的,就像我们不能找到两件一模一样的东西,何况是企业的经营与管理思路,多少都会有差异。常规的方式只能去修改标准产品的逻辑来适配客户的需求。导致后续标品维护非常困难。而在介绍完这节以后是不是让你更加清晰认知到我们2.4.2【oinone独特性之每一个需求都可以是一个模块】一文中所表达的特性带来的好处呢? 一、继承方式 继承方式可以分为五种: 抽象基类ABSTRACT,只保存不希望为每个子模型重复键入的信息的模型,抽象基类模型不生成数据表存储数据,只供其他模型继承模型可继承域使用,抽象基类可以继承抽象基类。 扩展继承EXTENDS,子模型与父模型的数据表相同,子模型继承父模型的字段与函数。存储模型之间的继承默认为扩展继承。 多表继承MULTI_TABLE,父模型不变,子模型获得父模型的可继承域生成新的模型;父子模型不同表,子模型会建立与父模型的一对一关联关系字段(而不是交叉表),使用主键关联,同时子模型会通过一对一关联关系引用父模型的所有字段。多表继承父模型需要使用@Model.MultiTable来标识,子模型需要使用@Model.MultiTableInherited来标识。 代理继承PROXY,为原始模型创建代理,可以增删改查代理模型的实体数据,就像使用原始(非代理)模型一样。不同之处在于代理继承并不关注更改字段,可以更改代理中的元信息、函数和动作,而无需更改原始内容。一个代理模型必须仅能继承一个非抽象模型类。一个代理模型可以继承任意数量的没有定义任何模型字段的抽象模型类。一个代理模型也可以继承任意数量继承相同父类的代理模型。 临时继承TRANSIENT,将父模型作为传输模型使用,并可以添加传输字段。 二、继承约束 通用约束 对于扩展继承,查询的时候,父模型只能查询到父模型字段的数据,子模型可以查询出父模型及子模型的字段数据(因为派生关系所以子模型复刻了一份父模型的字段到子模型中)。 系统不会为抽象基类创建实际的数据库表,它们也没有默认的数据管理器,不能被实例化也无法直接保存,它们就是用来被继承的。抽象基类完全就是用来保存子模型们共有的内容部分,达到重用的目的。当它们被继承时,它们的字段会全部复制到子模型中。 系统不支持非jar包依赖模型的继承。 多表继承具有阻断效应,子模型无法继承多表继承父模型的存储父模型的字段,需要使用@Model.Advanced注解的inherited属性显示声明继承父模型的父模型。但是可以继承多表继承父模型的抽象父模型的字段。 可以使用@Model.Advanced的unInheritedFields和unInheritedFunctions属性设置不从父类继承的字段和函数。 跨模块继承约束 如果模型间的继承是跨模块继承,应该与模型所属模块建立依赖关系;如果模块间有互斥关系,则不允许建立模块依赖关系,同理模型间也不允许存在继承关系。 跨模块代理继承,对代理模型的非inJvm函数调用将使用远程调用方式;跨模块扩展(同表)继承将使用本地调用方式,如果是数据管理器函数,将直连数据源。 模型类型与继承约束 抽象模型可继承:抽象模型(Abstract) 临时模型可继承:抽象模型(Abstract)、传输模型(Transient) 存储模型可继承:抽象模型(Abstract)、存储模型(Store)、存储模型(多表,Multi-table Store),不可继承多个Store或Multi-table Store 多表存储模型(父)可继承:同扩展继承 多表存储模型(子)在继承单个Multi-table Store后可继承:抽象模型(Abstract)、存储模型(Store),不可继承多个Store 代理模型可继承: 抽象模型(Abstract),须搭配继承Store、Multi-table Store或Proxy 存储模型(Store),不可继承多个Store或Multi-table Store 存储模型(多表,Multi-table Store),不可继承多个Store或Multi-table Store 代理模型(Proxy),可继承多个Proxy,但多个父Proxy须继承自同一个Store或Multi-table Store,且不能再继承其他Store或Multi-table Store 同名字段以模型自身字段为有效配置,若模型自身不存在该字段,继承字段以第一个加载的字段为有效配置,所以在多重继承的情况下,未避免继承同名父模型字段的不确定性,在自身模型配置同名字段来确定生效配置。 三、继承的使用场景 模型的继承可以继承父模型的元信息、字段、数据管理器和函数 抽象基类 解决公用字段问题 扩展继承 解决开放封闭原则、跨模块扩展等问题 多表继承 解决多型派生类字段差异问题和前端多存储模型组合外观问题 代理继承 解决同一模型在不同场景下的多态问题(一表多态) 临时继承 解决使用现有模型进行数据传输问题 举例,前端多存储模型组合外观问题可通过多表继承的子模型,并一对一关联到关联模型,同时使用排除继承字段去掉不需要继承的字段。子模型通过默认模型管理器提供查询功能给前端,默认查询会查询子模型数据列表并在列表行内根据一对一关系查出关联模型数据合并,关联模型数据展现形态在行内是平铺还是折叠,在详情是分组还是选项卡可以自定义view进行配置 扩展继承 父子同表,模型在所有场景都有一致化的表现,意味着原模型被扩展成了新模型,父子模型的表名一致,模型编码不同,可覆盖父模型的模型管理器、数据排序规则、函数 多表继承 父子多表,父子间有隐式一对一关系,即父子模型都增加了一对一关联关系字段,同时父模型的字段被引用到子模型,且引用字段为只读字段,意味着子模型不可以直接更改父模型的字段值,子模型不继承父模型的模型管理器、数据排序规则、函数,子模型拥有自己的默认模型管理器、数据排序规则、函数。多表继承具有阻断效应,子模型无法自动多表继承父模型的存储父模型,需要显式声明多表继承父模型的存储父模型。 代理继承 代理模型继承并可覆盖父模型的模型管理器、数据排序规则、函数,同时可以使用排除继承字段和函数来达到不同场景不同视觉交互的效果。 图3-3-4-1 继承的使用场景 四、抽象基类(举例) 参考前文中3.3.2【模型的类型】一文中关于抽象模型的介绍 五、多表继承(举例) 场景设计如下 图3-3-4-2 多表继承设计场景 Step1 新建宠物品种、宠狗品种和萌猫品种模型 新建宠物品种模型,用@Model.MultiTable(typeField = "kind"),申明为可多表继承父类,typeField指定为kind字段 package pro.shushi.pamirs.demo.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; @Model.MultiTable(typeField = "kind") @Model.model(PetType.MODEL_MODEL) @Model(displayName="品种",labelFields = {"name"}) public class PetType extends IdModel { public static final String MODEL_MODEL="demo.PetType"; @Field(displayName = "品种名") private String name; @Field(displayName = "宠物分类") private String kind; } 图3-3-4-3 多表继承示例代码 新建宠狗品种模型,用@Model.MultiTableInherited(type = PetDogType.KIND_DOG),申明以多表继承模式继承PetType,覆盖kind字段(用defaultValue设置默认值,用invisible = true设置为前端不展示),更多模块元数据以及模型字段元数据配置详见4.1.6【模型之元数据详解】一文 package pro.shushi.pamirs.demo.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; @Model.MultiTableInherited(type = PetDogType.KIND_DOG) @Model.model(PetDogType.MODEL_MODEL) @Model(displayName="宠狗品种",labelFields = {"name"}) public class PetDogType extends PetType { public static final String MODEL_MODEL="demo.PetDogType"; public static final String KIND_DOG="DOG"; @Field(displayName = "宠物分类",defaultValue = PetDogType.KIND_DOG,invisible = true) private String kind; } 图3-3-4-4 多表继承示例代码 新建萌猫品种模型,用@Model.MultiTableInherited(type = PetCatType.KIND_CAT),申明以多表继承模式继承PetType,覆盖kind字段(用defaultValue设置默认值,用invisible = true设置为前端不展示),并新增一个CatShapeEnum枚举类型的字段shape package pro.shushi.pamirs.demo.api.enumeration; import pro.shushi.pamirs.meta.annotation.Dict; import pro.shushi.pamirs.meta.common.enmu.BaseEnum; @Dict(dictionary = CatShapeEnum.DICTIONARY,displayName = "萌猫体型") public class CatShapeEnum extends BaseEnum<CatShapeEnum,Integer>…

    2024年5月23日
    1.6K00
  • 2.4.3 Oinone独特性之低无一体

    当今企业软件开发行业,低代码和无代码已经成为热门话题。它们的优势很明显:加速软件开发周期、减少代码开发时间、降低开发成本、易于维护等等。而 Oinone 作为一个低无一体的开发平台,更是在这些优势上做出了巨大的创新。 技术亮点 低代码-在不改变研发习惯的前提下,提升效率降低难度(如下图2-15所示) 一、提高专业开发人员效率 低代码开发模式大大降低了繁琐、重复的工作,模型定义完后,数据 API、数据管理器、基础管理的界面都不需要再进行开发。同时,低代码模式让分布式微服务架构的系统开发变得简单,研发人员不需要考虑分布式部署能力和大数据能力,也不需要去关心一些业务无关的通用能力,如权限、导入导出、国际化翻译、消息、审计等。这样,开发人员可以专注于业务研发,从而大幅提高开发效率。 二、提升系统扩展性 在研发标品的时候,低代码模式让开发人员不再需要关心系统的扩展性。与传统模式不同,低代码模式更加注重元数据的管理,这样就可以更好地保障系统扩展性。 三、保留研发人员习惯 Oinone 平台非常开放,满足开发人员的各种习惯,比如原有的 IDE 环境、熟悉的 Spring Boot 工程结构等。而且在 Oinone 的低代码模式下,研发人员还可以通过无代码方式,在线可视化地修改应用。这样,即使在使用低代码模式的情况下,开发人员也可以保留原有的习惯,提升开发效率。 四、提供更加开放的解决方案 Oinone 提供了非常开放的解决方案,让开发人员可以自由定制和组合各种功能。当行业出现特殊的功能需求时,开发人员可以整合成平台组件,并集成到应用中。Oinone的低代码模式具有高度的开放性和灵活性,这使得它在与其他低代码平台的比较中具有明显的优势。相比其他低代码平台,Oinone不会在无法满足特定需求的情况下限制开发人员的创造力(如下图2-16所示)。 图2-15 Oinone低代码特性介绍 图2-16 Oinone低代码的被集成特性示意图 无代码-五大设计器覆盖研发方方面面,让业务、实施也能参与 它是LCDP的产品化呈现,是冰山露在外面大家看得到的,核心还是在LCDP本身。这部分实时在演进迭代,如您有想体验最新版本,可以在Oinone官网:https://www.oinone.top注册。 设计器 说明 产品展示 模型设计器 1.以模型为驱动,当有模型、数据字典、数据编码等设计功能,我们就可以完整地定义产品数据模型,模型设计器默认整体呈现区别于普通ER图,以当前模型为核心视角展开,可以点击关联模型切换主视角。2.多种模式可切换:专家与经典切换,图与表模式的切换 界面设计器 1.界面设计器旨在帮助用户快速搭建页面;2.所见即所得和根据不同视图类型设计契合的搭建交互就变得尤为重要;3.多端页面设计能力。 流程设计器 1.为业务流程和审批流程提供可自动执行的流程模型,通过定义流转过程中的各个动作、规则,以此实现流程自动化;2.流程可以跨应用设计,不同应用的模型之间可以通过同一流程执行。 逻辑设计器 1.组件化、可视化逻辑编排,逻辑动态变更、动态管理,实施验证。 数据可视化 1.从内部系统模型获取数据内容后,根据业务需求自定义图表,目的是为企业提供更高效的数据分析工具;2.可以智取业务系统模型,系统自动解析选择的模型、接口、表格中的字段后进行数据分析;3.降低对数据分析人员的研发能力要求,提升数据分析的效率 表2-3 Oinone无代码-五大设计器简述 真正的低无一体,体现在一体化的融合能力上 在开发核心产品时,我们主要采用低代码开发,辅以无代码的开发方式。你可以参考我们的低代码开发基础入门教程中3.5.5【设计器的结合】的文章。 而在实施或者处理临时需求时,我们主要采用无代码的开发方式,低代码作为辅助。这种模式比较特殊,只在SaaS模式下提供。如果你发现某个客户个性化部分无法通过无代码设计器完成,我们提供了一个“低无一体”模块,可以反向生成API代码,生成对应的扩展工程和API依赖包,再由专业研发人员基于扩展工程,利用API包进行开发并上传至平台,可以参考关于7.4【Oinone的低无一体】的文章。 场景 融合形式 具体操作 标准产品以低代码开发为主,以无代码为辅助 标品开发时结合无代码设计器来完成页面开发,可以把设计后的页面元数据装载为标准产品的一部分。详细教程见:3.5.5【设计器的结合】一文 项目交付以无代码为主,以低代码为辅助 当有特殊需求设计器无法支持时,则可以通过低无一体应用的代码模式来完成。支持了两种使用模式:上传jar包模式、源码托管模式。详细教程见:7.4【Oinone的低无一体】一文 表2-4 不同场景适配方式说明 实现原理 本章节我们将从以下三个方面来解读Oinone的低无一体。 一:低无一体的设计原则及好处:真正的低无一体平台应该确保标准产品迭代与个性化保持独立,让软件企业具备为客户提供在线化的快速响应、个性化定制、持续更新等服务的能力,让企业客户能够真正自主做到敏捷响应和快速创新。所以Oinone的元数据融合方案跟其他平台有所区别(如下图2-17所示)。 图2-17 Oinone与其他平台的元数据融合对比图 二:低无一体中低与无的关系:无代码是低代码平台的图形化呈现,是低代码的一个子集,它将无限接近低代码的能力,同时也将成为低代码平台的必备特征,是通过低代码开发的标准产品的二开配套工具。 三:低无一体中低与无的定位:通过表2-3可以看出,低代码和无代码在Oinone的体系中相互融合,共同构成了一个完整的低无一体模式,提供更加开放、灵活和可扩展的解决方案,让用户能够更加轻松地完成开发和实施。 低代码模式 无代码模式 用户群体 专业研发 产品经理、需求分析师、直接业务人员 支撑场景 企业全场景软件以及二开 企业全场景软件以及二开,专业化场景比较高的则需低代码支持 核心能力 不改变研发习惯,提升研发效率 可视化编程无需专业编程语言知识 核心定位 开发标准模块 标准模块的二开无标品支撑场景的新模块开发 表2-3 Oinone低代码开发平台的两种开发模式对比

    2024年5月23日
    1.7K00

Leave a Reply

登录后才能评论