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低代码应用平台体验

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

相关推荐

  • 3.5.7.3 自定义布局

    布局是什么 在系统中,布局决定了母版内的页面元素,一个页面可以由多个组件进行组装,布局可以根据视图类型来替换。 默认布局范围: 图3-5-7-36 默认布局范围 作用场景 系统内置了多个布局组件,这些组件适用于全局、某个应用或某个页面,提供了灵活的布局定制选项。这些组件根据不同类型的视图进行了默认的组装,这也是选择了视图类型后,页面能够呈现的原因。当然,这些默认的组装是可以被覆盖、新增和添加新组件的。 使用registerLayout进行自定义布局 开发者在使用这些布局组件时,应该遵循公司的规范进行统一的调整。自定义布局组件的使用可通过 registerLayout 实现。registerLayout 的第一个参数是代表布局的 XML,第二个参数是不同的选项维度,默认包含以下维度: viewType: 视图类型 module: 视图模型所在模块 moduleName: 视图模型所在模块名称 model: 视图模型编码 modelName: 视图模型名称 viewName: 视图名称 actionName: 动作名称 inline: 是否内嵌视图(子视图特有) ttype: 模型字段类型(子视图特有) relatedTtype: 关联模型字段类型(子视图特有) field: 字段(子视图特有) 需要注意的是,动作可以是A模块下的a模型,这个动作可以打开B模块下的b模型的视图,module、moduleName、model、modelName应该填b模型对应的值,只不过大部分场景我们都是本模型的动作打开本模型的视图,所以这些场景拿动作所在模型填这些值也可以这些纬度也可以通过查看TS的定义查看 全局 在系统中,我们可以通过指定视图类型来决定某一类视图的全局布局。以表格为例,当第二个入参为 { viewType: ViewType.Table } 时,代表了替换了系统内所有表格的布局样式。 示例工程目录 以下是需关注的工程目录示例,main.ts更新导入./layout,layout/index.ts更新导出./tableLayout: 图3-5-7-37 全局纬度注册布局工程目录示例 示例代码 import {registerLayout, ViewType} from '@kunlun/dependencies' /** * 把系统内所有表格类型视图的全局动作放入搜索区域 * * 移动actionBar布局至外层 * <element widget="actionBar" slot="actionBar" slotSupport="action"> * <xslot name="actions" slotSupport="action" /> * </element> * */ const registerGlobalTableLayout = () => { return registerLayout(`<view type="TABLE"> <element widget="actionBar" slot="actionBar" slotSupport="action"> <xslot name="actions" slotSupport="action" /> </element> <pack widget="group"> <view type="SEARCH"> <element widget="search" slot="search" slotSupport="field" /> </view> </pack> <pack widget="group" slot="tableGroup"> <element widget="table" slot="table" slotSupport="field"> <element widget="expandColumn" slot="expandRow" /> <xslot name="fields" slotSupport="field" /> <element widget="rowActions" slot="rowActions" slotSupport="action" /> </element> </pack> </view>`, { viewType: ViewType.Table }) } registerGlobalTableLayout() 图3-5-7-38 全局纬度注册布局代码示例 效果 图3-5-7-39 全局纬度注册布局效果示例 应用 在系统中,我们可以通过指定视图类型和模块名称来替换某一类视图在特定模块下的全局布局。以表格为例,当第二个入参为 { viewType: ViewType.Table, moduleName: ‘resource’ } 时,代表了替换了资源应用下所有表格的布局样式,而其他应用仍使用默认布局 import {registerLayout, ViewType} from '@kunlun/dependencies' const registerModuleTableLayout = () => { return registerLayout(`<view type="TABLE"> <element widget="actionBar" slot="actionBar" slotSupport="action"> <xslot name="actions" slotSupport="action" /> </element> <pack widget="group"> <view type="SEARCH"> <element widget="search" slot="search" slotSupport="field" /> </view> </pack> <pack…

    2024年5月23日
    98800
  • 6.5 权限体系(改)

    做好企业级软件,首先得过权限这一关 在企业的IT部门沟通中,权限是避免不了。自嘲下在我们刚出来创业时,为了收获客户对我们技术能力的信任,每每与跟客户沟通时都会说我们是阿里出来的,但在权限设计这个环节不那么灵验,反而被打上了不懂B端权限设计的标签,会问很多问题。我就很奇怪难道大厂就没有内部管理系统了?大厂只有C端交易,没有B端交易?但从侧面说明权限不简单还特别重要。做好企业级软件,首先得过权限这一关。 整体介绍 对于平台运行来说,权限是必须,但我们的auth模块不是必须的,auth模块只是我们提供的一种默认实现,客户可以根据平台的spi机制进行替换。auth模块利用了平台的Hook特性做到与业务无关,在我们开发上层应用的时,是不用感知它的存在的。 auth模块涉及:功能权限、数据权限 数据权限:行权限和列权限。备注:数据权限的控制只能用于【存储模型】 表级权限:表达的语义是:是否该表可读/写(修改和新增) 列权限:表达的语义是:是否该列可读/写(修改和新增) 行权限:表达的语义是:是否对该行可读/写(修改)/删除 功能权限:表达的语义是ServerAction/Function是否可执行/展示,viewAction是否可展示,菜单是否可以显示 范围说明: 配置多个权限项的时候,取并集 配置多个角色的时候,取并集 模型设计 产品体验 Step1 创建角色 通过App Finder 切换至【权限】应用,点击新增按钮创建一个名为oinone的角色 Step2 创建数据权限项 在【权限项列表】菜单,点击【创建】按钮新增一个名为【宠物达人数据权限项】,同时宠物达人的数据权限设置为只能查看性别为男的记录 配置说明: 名称: 代表该项配置的权限的名字(必填)(必须是全系统唯一) 权限模型: 选择需要拦截的数据所在的表,即为模型,可以搜索使用 描述:对该权限项的描述 权限条件的配置: 满足全部:对条件一和条件二要同时满足的数据才能被看见 满足任一:对条件一和条件二要任意满足的数据都能被看见 读权限:对该数据是否有读取的权限 写权限:对该数据是否有修改的权限 删除权限:对该条件内的数据是否有删除的权限 Step3 为角色配置权限 编辑oinone角色,只开通oinoneDemo工程应用 选中【数据权限】选项卡点击【添加】按钮,勾选宠物达人数据权限项点击【确定】按钮 整体点击保存,回到列表页记得点击【权限生效】按钮 Step4 新建用户绑定角色 切换到用户中心模块,点击【创建】按钮填写必要信息,并在角色选中oinone权限组。 退出admin用户,用oinone登陆,权限效果: 只能看见demo模块 oinone登陆只能看到性别为男的宠物达人记录 admin用户登陆 oinone用户登陆 因为宠物达人的页面没有把性别字段放出来,我们看下数据库数据 auth模块扩展 在日常项目开发中,难免会碰到一些针对权限管理的特殊需求,或是为提升性能做的特殊逻辑。接下来我给大家介绍auth模块扩展性。 权限全局配置 对所有权限角色都做限制,而且不想让用户感知,可以实现PermissionFunApi接口,API接口实现的配置方式【只能用于支持全局的数据权限配置】 实现接口PermissionFunApi 将实现托管给SpringAOP 接口的具体实现看下图的代码 package pro.shushi.pamirs.demo.core.service; import org.springframework.stereotype.Component; import pro.shushi.pamirs.auth.api.service.PermissionFunApi; import pro.shushi.pamirs.demo.api.model.PetTalent; @Component public class PetTalentPermissionFunApi implements PermissionFunApi { @Override public String permissionDomain(Object… args) { //获取当前组织中 return "name == '张学友'"; } @Override public String nameSpace() { return PetTalent.MODEL_MODEL; } } 不参与权限控制 如果某一接口不想做权限控制,则可以在启动工程的application-dev.yml文件中配置不需要权限过滤的接口 pamirs: auth: fun-filter: – namespace: demo.PetTalent fun: queryPage 换一个没有配置宠物达人权限的用户(除管理员以外)进入系统,则也可以看到数据。注意【权限全局控制】还是生效的 API 1. 获取当前用户对该模型的行权限 Result<String> result = CommonApiFactory.getApi(AuthApi.class).canReadAccessData("Model"); 返回值为 { 'data':"name=in=('hahaha')" 'success':true … } 用法 : 场景:前端发起的请求都会经过权限拦截,后端代码逻辑发起的数据请求都是不经过任何权限的过滤,但是某些特殊情况需要在后端代码逻辑发起的数据请求也带上权限过滤 入参:请求的模型 出参:Result 数据结构中data会存储一段字符串,该字符串为Rsql 将该Rsql追加到wrapper中 Result<String> result = CommonApiFactory.getApi(AuthApi.class).canReadAccessData("base.UeModule"); String data=result.getData(); QueryWrapper<UeModule> wrapper = Pops.query(); wrapper.setEntity(ueModule); if (!StringUtils.isBlank(data)) { wrapper.apply(data); }

    2024年5月23日
    84800
  • 4.1.16 框架之网关协议-RQSL及扩展

    一、RSQL / FIQL parser RSQL是一种查询语言,用于对RESTful API中的条目进行参数化过滤。它基于FIQL(Feed Item Query Language)——一种URI友好的语法,用于跨Atom Feed中的条目表达过滤器。FIQL非常适合在URI中使用,没有不安全的字符,因此不需要URL编码。另一方面,FIQL的语法不太直观,URL编码也不总是那么重要,因此RSQL还为逻辑运算符和一些比较运算符提供了更友好的语法。 例如,您可以像这样查询资源:/movies?query=name=="Kill Bill";year=gt=2003 or /movies?query=director.lastName==Nolan and year>=2000。详见以下示例: 这是一个用JavaCC和Java编写的完整且经过彻底测试的RSQL解析器。因为RSQL是FIQL的超集,所以它也可以用于解析FIQL。 语法和语义 以下语法规范采用EBNF表示法(ISO 14977)编写。 RSQL表达式由一个或多个比较组成,通过逻辑运算符相互关联: Logical AND : ; or and Logical OR : , or or 默认情况下,AND运算符优先(即,在任何OR运算符之前对其求值)。但是,可以使用带括号的表达式来更改优先级,从而产生所包含表达式产生的任何结果。 input = or, EOF; or = and, { "," , and }; and = constraint, { ";" , constraint }; constraint= ( group | comparison ); group = "(", or, ")"; 比较由选择器、运算符和参数组成。 comparison=选择器、比较运算、参数; 选择器标识要筛选的资源表示形式的字段(或属性、元素…)。它可以是任何不包含保留字符的非空Unicode字符串(见下文)或空格。选择器的特定语法不由此解析器强制执行。 selector=未保留str; 比较运算符采用FIQL表示法,其中一些运算符还具有另一种语法: · Equal to : == · Not equal to : != · Less than : =lt= or < · Less than or equal to : =le= or <= · Greater than operator : =gt= or > · Greater than or equal to : =ge= or >= · In : =in= · Not in : =out= 您还可以使用自己的运算符简单地扩展此解析器(请参阅下一节)。 comparison-op = comp-fiql | comp-alt; comp-fiql = ( ( "=", { ALPHA } ) | "!" ), "="; comp-alt = ( ">" | "<" ), [ "=" ]; 参数可以是单个值,也可以是用逗号分隔的括号中的多个值。不包含任何保留字符或空格的值可以不加引号,其他参数必须用单引号或双引号括起来。 arguments = ( "(", value, { "," , value }, ")" ) | value; value = unreserved-str | double-quoted | single-quoted; unreserved-str = unreserved, {…

  • 3.5.3 Action的类型

    各类动作我们都碰到过,但都没有展开讲过。这篇文章我们来系统介绍下oinone涉及到的所有Action类型。 一、动作类型 服务器动作ServerAction 类似于Spring MVC的控制器Controller,通过模型编码和动作名称路由,定义存储模型或代理模型将为该模型自动生成动作名称为consturct,queryOne,queryPage,create,update,delete,deleteWithFieldBatch的服务器动作。定义传输模型将为该模型自动生成动作名称为consturct的服务器动作 窗口动作ViewAction 站内跳转,通过模型编码和动作名称路由。系统将为存储模型和代理模型自动生成动作名称为redirectDetailPage的跳转详情页窗口动作,动作名称为redirectListPage的跳转列表页窗口动作,动作名称为redirectCreatePage的跳转新增页窗口动作,动作名称为redirectUpdatePage的跳转更新页窗口动作。 跳转动作UrlAction 外链跳转 客户端动作ClientAction 调用客户端函数 二、默认动作 如果在UI层级,有开放新增语义函数,则会默认生成新增的窗口动作ViewAction,跳转到新增页面 如果在UI层级,有开放更新语义函数,则会默认生成修改的窗口动作ViewAction,跳转到更新页面 如果在UI层级,有开放删除语义函数,则会默认生成删除的客户端动作ClientAction,弹出删除确认对话框 三、第一个服务器动作ServerAction 回顾第一个ServerAction 第一个ServerAction是在3.3.2【模型的类型】一文中的“代理模型”部分出现的,再来看下当时的定义代码 package pro.shushi.pamirs.demo.core.action; ……引用类 @Model.model(PetShopProxy.MODEL_MODEL) @Component public class PetShopProxyAction extends DataStatusBehavior<PetShopProxy> { @Override protected PetShopProxy fetchData(PetShopProxy data) { return data.queryById(); } @Action(displayName = "启用") public PetShopProxy dataStatusEnable(PetShopProxy data){ data = super.dataStatusEnable(data); data.updateById(); return data; } ……其他代码 } 图3-5-3-1 回顾第一个ServerAction @Action注解将创建服务器动作,并@Model.model绑定 自定义ServerAction请勿使用get、set、unset开头命名方法或toString命名方法。 ServerAction之校验(举例) Step1 为动作配置校验表达式 使用@Validation注解为PetShopProxyAction的dataStatusEnable服务端动作进行校验表达式配置 package pro.shushi.pamirs.demo.core.action; ……引用类 @Model.model(PetShopProxy.MODEL_MODEL) @Component public class PetShopProxyAction extends DataStatusBehavior<PetShopProxy> { @Override protected PetShopProxy fetchData(PetShopProxy data) { return data.queryById(); } @Validation(ruleWithTips = { @Validation.Rule(value = "!IS_BLANK(data.code)", error = "编码为必填项"), @Validation.Rule(value = "LEN(data.shopName) < 128", error = "名称过长,不能超过128位"), }) @Action(displayName = "启用") public PetShopProxy dataStatusEnable(PetShopProxy data){ data = super.dataStatusEnable(data); data.updateById(); return data; } ……其他代码 } 图3-5-3-2 为动作配置校验表达式 注: ruleWithTips可以声明多个校验规则及错误提示; IS_BLANK和LEN为内置文本函数,更多内置函数详见4.1.12【函数之内置函数与表达式】一文; 当内置函数不满足时参考4.1.13【Action之校验】一文。 Step2 重启看效果 在商店管理页面点击【启用】得到了预期返回错误信息,显示"编码为必填项" 图3-5-3-3 在商店管理页面点击启用得到了预期返回错误信息 ServerAction之前端展示规则(举例) 既然后端对ServerAction发起提交做了校验,那能不能在前端就不展示呢?当然可以,我们现在就来试下。 Step1 配置PetShopProxyAction的dataStatusEnable的前端出现规则 用注解@Action.Advanced(invisible="!(activeRecord.code !== undefined && !IS_BLANK(activeRecord.code))")来表示,注意这里配对invisible是给前端识别的,所以写法上跟后端的校验有些不一样,但如内置函数IS_BLANK这些是前后端一致实现的,activeRecord在前端用于表示当前记录。 package pro.shushi.pamirs.demo.core.action; ……引用类 @Model.model(PetShopProxy.MODEL_MODEL) @Component public class PetShopProxyAction extends DataStatusBehavior<PetShopProxy> { @Override protected PetShopProxy fetchData(PetShopProxy data) { return data.queryById(); } @Validation(ruleWithTips = { @Validation.Rule(value = "!IS_BLANK(data.code)", error = "编码为必填项"), @Validation.Rule(value = "LEN(data.name) < 128", error = "名称过长,不能超过128位"), }) @Action(displayName = "启用") @Action.Advanced(invisible="!(activeRecord.code !== undefined…

    2024年5月23日
    1.1K00
  • 接口日志

    记录每个PAPI接口执行日志,接口的响应结果、执行时间、执行时长等信息,可查看接口详情。 接口详情

    2023年5月23日
    1.0K00

Leave a Reply

登录后才能评论