前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apriso开发葵花宝典之八Portal Session篇

Apriso开发葵花宝典之八Portal Session篇

作者头像
李英杰同学
发布2024-02-28 17:03:47
1800
发布2024-02-28 17:03:47
举报
文章被收录于专栏:智能制造社区

概述

Process builder是Delmia Apriso中主要的业务流程管理工具,也是DELMIA更广泛的Apriso制造运营管理解决方案的核心应用程序,Process Builder允许使用屏幕流管理设计方法和实体(如项目、屏幕、布局、视图和操作(函数))创作用户界面和业务逻辑。该应用程序能够快速方便地管理和修改开发的设计,使您能够根据需要随时更改业务流程。由于增强了对可重用性的支持,以前开发的逻辑可以在新的设计中快速重用。

本文介绍Process builder中Portal导航及Portal Session相关机制概念及应用。

页面导航

在DELMIA Apriso中,页面由一个布局和几个视图组成。视图链接到页面Screen上的布局面板或通过操作作为弹出窗口。屏幕之间的导航、屏幕上的交互以及业务逻辑的运行都是通过Actions完成的。

  • 屏幕之间的导航——按钮调用的“转到屏幕”动作
  • 屏幕上的交互——切换选项卡
  • 运行业务逻辑——调用标准操作的按钮

Apriso中一个应用通过一组页面组合形成一个页面流(Screen Flow)堆栈来实现,导航方式通过页面Screen中的导航类型来定义:

  • 主页Home:堆栈中的第一个屏幕,用于重置整个屏幕堆栈历史
  • 子门户Sub Portal:用于创建新的较低级别屏幕堆栈会话,
  • 标准Normal:将所有相关变量放入屏幕堆栈中
  • 中级Intermediate :这些屏幕是临时的,不放在屏幕堆栈中
  • 循环Loop:屏幕被标记为循环的开始
  • 2级循环Loop Level 2:二级循环
  • 3级循环Loop Level 3:三级循环

详细的导航说明,参照:

http://[ServerName]/Apriso/Help/en-us/ProcessBuilder/index.htm#Screen_Flow_Diagram.htm?TocPath=Managing%2520Screen%2520Flows%257CScreen%2520Processing%2520and%2520Portal%2520Variables%257C_____2

页面导航类型定义了页面将如何与门户会话和页面调用堆栈进行交互。这个设置还直接确定了什么样的导航操作可以引导到这个特定的屏幕。

实例Instance:

有时需要在不同的上下文中显示相同的页面,如有一个页面显示产品详细信息,但是希望区分不同产品的显示不同的页面实例,这时可以在实例Instance属性中设置{ProductNo}来实现。设置后,不同的产品就能实例化成不同的页面实例。

下面以不同的产品为例,假设用于显示产品详细信息的屏幕名为“PRD-10”,其实例Instance设置为{ProductNo}。如果产品ProductNo为“ABC”时,导航到此屏幕,则页面实例将设置为“PRD-10ABC”,如果产品ProductNo变为“XYZ”,则页面实例设置为“PRD-10XYZ”。在这两种场景中,Screen实例是不同的,因此系统假定它们实际上是不同的Screen。在导航场景(例如back或return)以及调用Screen On Initialize 操作也同样存在不一样。

页面堆栈Screen Stack:

每个门户会话调用一个相关联的Screen堆栈。在屏幕之间导航时,可以将屏幕推入堆栈或从堆栈中拉出并呈现给用户。当导航到普通屏幕时,屏幕被放置在屏幕堆栈中,可以稍后返回。但是,您可以使用导航类型更改屏幕与屏幕堆栈交互的方式。

通过Action属性中的Portal Actions来定义Screen导航:

门户行动Portal Action选项:

  • 转到屏幕Go to Screen:转到指定的页面,如果为空,在Screen Flows客户端模式下则不执行任何操作,在Screen Flows Server模式下也会刷新当前页面
  • 返回Back:返回到堆栈中的上一个屏幕,并恢复门户会话变量Portal Session Variable
  • 关闭所有Close All:关闭所有的页面堆栈,并退出DELMIA Apriso门户
  • 退出Exit:关闭顶部屏幕堆栈(子门户会话Sub-Portal Session),并退出到更高级别的页面堆栈或DELMIA Apriso门户
  • 循环结束
  • 回路2级关闭
  • 回路3级关闭
  • 弹出-关闭(刷新屏幕)
  • 弹出关闭
  • 返回Return:使用不同的屏幕代码返回到上一个屏幕 ,如果没有前一个屏幕,那么它将退出到更高级别的屏幕堆栈
  • 屏幕关闭Screen Close
  • 帮助Help
  • 刷新:刷新当前屏幕
  • 替换屏幕Replace Screen:替换屏幕堆栈中的当前屏幕

打开弹出视图Open Pop-up View

弹出一个窗口。在PB Project下,弹出窗口将显示当前项目中操作Operation的默认版本。

页面Header

在DELMIA Apriso Portal中,页面Header总是会显示,因此不需要将其链接到Screen,在3DE平台中使用,也不能链接Header

DELMIA Apriso桌面客户端如果需要显示,则需要在页面或布局Layout中链接一个Header

标准标头功能

  • 导航条
  • 搜索(只允许搜索具有权限的基本页面Base Screen)
  • 按钮(返回,主页。帮助)
    • 帮助按钮可以链接到为创建的屏幕准备的自定义文档内容,操作方法详见:http://[ServerName]/Apriso/Help/en-us/ProcessBuilder/index.htm#Help.htm#top
    • 可以启用或禁用这些功能
    • 还可以添加调用任何Action的自定义按钮
  • 时钟
  • 用户信息(单击可以显示Logout按钮)
  • 附加信息(可由用户通过链接Header View Operation添加)

View Action和Screen Action

Action是一个交互式元素,它支持在屏幕之间移动和执行业务逻辑。

Action可以通过以下UI事件调用:

  • 点击屏幕上的按钮或标签
  • 单击/双击业务控件中的特定位置(例如,在Grid控件的一行上)
  • 达到窗体控件上的最大字符数

Action可以:

  • 调用另一个动作
  • 转到另一个屏幕
  • 调用另一个门户命令
  • 通过标准操作调用业务逻辑
  • Action类型的标准操作可以在执行后调用另一个Action,并建立起Action链,如下图点击OK触发校验,校验通过执行保存,实现更细粒度和可重用的设计和构建。

动作链仅限于在面板内使用的动作。如果需要使用在另一个视图中定义的Action,可以使用On Action Operation/Action Script函数,返回两个输出:ActionView和Action,后续Action将从ActionView Output中返回的View中获取。

On Action Operation和Action Script输入输出:

外部输入:

  • 屏幕Screen:操作被触发的页面的页面代码
  • 视图View:引起此操作的视图
  • 行动Action:Action名称
  • 所有门户会话变量

外部输出:

  • Action和ActionView:要执行的下一个操作的名称。当ActionView输出不为空时,将从指定的视图中采取一个动作,只允许当前可见视图的名称
  • ToScreen和ToScreenProjectCode:执行“Go to Screen”导航类型到任何页面。输出包含页面的名称和包含页面的项目
  • 所有要合并到Portal会话中的变量

Action 通配符:

Action名称可以包含一个通配符(“%”)。如

一个视图操作可以返回以下操作:

STATUS_TO_NEW

STATUS_TO_CANCEL

STATUS_TO_OPEN

CLOSE

在这个例子中,如果所有的“STATUS_TO…”动作都应该以同样的方式处理。则可以创建一个带有通配符的Action:”STATUS_TO_%”,而不是创建三个单独的Action。

Screen Action和View Action类似,可以直接在页面面板Panel中添加Screen Action,此外,Screen Action还可以:

  • 否决行动Overridden :在页面上重写一个View Action,该动作随后成为特定屏幕的本地动作,并带有修改过的属性
  • 附加了Change View属性:Change View可以在同一屏幕上的同一面板上的不同视图之间切换。

有些场景,如根据报警类型不同,显示不同的View,此时需要On Initialize和On Load操作有特殊的输出:PanelList和ViewList ,实现根据报警类型进行切换,PanelList包含页面面板名称,ViewList输出的相应视图:

这种用法不属于Screen配置一部分的视图不会自动附加到GPM包中,必须手动添加。

  • 发布操作Publish Action:发布后Action在转移到锁绑定的View里,并可用于使用到这个View其他页面

Action Operation和View Operation

1、Action Operation

用于执行与特定事件(操作)相关的业务逻辑,不能包含UI元素,只包含数据验证或业务逻辑执行,也可以使用DisplayError业务组件BC来返回一个错误。

DisplayError组件和ShowMessage功能一致。

2、 View Operation

View类型的Operation是任何View的内部集成部分(Header View除外,Header View不需要View Operation)。

在大多数情况下,一个视图操作只链接到一个视图,它的名称应该与视图的名称相同。但是用于表单类型视图和选项卡视图模板的GenericPortalTab和GenericPortalForm视图操作可以链接到各自类型的许多视图。

视图操作通常不是从头开始创建的,建议使用视图模板。当从模板创建视图时,它的视图操作也被复制(重复)。

View Operation特征:

View操作负责呈现屏幕的一部分。有几个主要的假设:

l 它应该只包含一个呈现用户界面的步骤

l 它不应该包含任何业务逻辑或事件处理

l 它应该能够从数据库加载数据以用于显示目的

l 它不应该能够修改数据(View类型的操作不能执行诸如“更新”、“插入”或“删除”之类的数据库操作,这些操作不会在事务中调用,这可能会在发生错误时导致数据库的意外行为。)

l 它必须返回一个外部输出动作

View Operation的输入输出:

外部输入:

l 屏幕Screen:显示此视图的屏幕的屏幕代码

l 屏幕标题Screen Title:屏幕的标题

l 视图标题ViewTitle :视图的标题

l 所有门户会话变量

外部输出:

l 动作Action(必需的)-在此视图上触发的动作 ,如果这个视图没有触发Action,则返回一个空字符串

l DefaultAction -此视图的默认操作 ,如果视图不应对按ENTER键或页面刷新等事件作出反应,则将此值保留为空

l 任何外部输出:如果此视图操作触发屏幕提交后才会输出

l MergeOutputs:如果提交不是由屏幕上的此视图操作触发的,并且需要将额外的外部输出合并到门户会话,则必须将MergeOutputs设置为true

l ToStackIndex和ToScreen:启用控制屏幕流而不需要任何动作,但是建议不要使用,最佳实践是始终使用Action配置进行导航

视图操作不能传递带有“External_”前缀的输出。

UI步骤:

必须有一个步骤向用户显示UI的各个部分:

l ScreenInterface函数:使用HTML布局编辑器的结果(推荐使用)

l 它可以包含PortalGenerateButtonList操作,PortalGenerateButtonList操作生成一个HTML字符串列表,这些字符串将被直接注入HTML布局编辑器。此列表的每个元素包含为给定操作组的当前视图配置为按钮的所有操作。这些按钮仅限于当前屏幕和当前员工角色所允许的按钮。另外可以通过将它们的名字传递给HiddenActionList和DisabledActionList input来手动隐藏或禁用一些按钮。

默认情况下,视图模板使用所有不带组的按钮,并将它们显示在视图UI的底部。可以通过将相关的HTML代码移动到不同的位置来进行调整。如果需要在不同的位置显示两组按钮(不同的组),请将按钮的HTML代码复制到所需的位置,并修改data- flex -filter表达式以匹配您的组(View Action: General选项卡上的group Tag属性)。例如:data- flex -filter="ButtonGroupList[i] == 'TOP'"。

l 它可以包含业务控件

l 附加功能(例如,从数据库加载数据以显示)

门户会话变量处理

门户会话是视图操作和业务逻辑操作之间交换的所有变量的占位符/容器,门户会话变量用于在不同操作之间交换数据,例如视图、操作、初始化和加载操作。

门户会话变量通常的规则是:

l从上述操作或视图表单中使用的控件返回的任何外部输出都会自动添加到当前门户会话中。这按以下顺序发生:

Ø在屏幕显示之前:屏幕上初始化或加载On Initialize or On Load Operatio操作的所有外部输出。

Ø屏幕提交后:

n第一优先级:触发提交(触发动作)的视图操作的所有输出。

n第二优先级:所有来自视图操作返回的MergeOutputs输出设置为True的其他屏幕视图的输出

Ø在动作分析期间:所有动作操作On Initialize or On Load Operation的输出(如果设置)。

l如果一个变量已经存在于Portal会话中,它将被覆盖

l上述操作所需的任何不带任何前缀(例如“Global_”、“External_”)的外部输入都自动从Portal会话中获取。

l如果Portal会话中不存在这样的变量,并且操作接口Interface 被禁用,则函数解释器将向用户询问该变量(这与调用子操作而不传递所有所需输入时发生的行为相同),如果操作接口被启用,则所需的所有输入必须出现在Portal会话中

根据特殊模式选择变量名可能会影响其在Process Builder中的行为。模式是:[Global_ | External_]变量名[_UI]。可选的前缀(全局或外部)定义了变量范围

可选后缀(UserInput:”_UI”)定义了变量的值snapshot被推送到调用堆栈的时刻:

lNormal(没有后缀):在屏幕显示之前的变量值用于Portal Session快照

l_UI:提交屏幕后的变量值用于Portal Session快照

例如:

lContainer :定义一个普通变量:

Ø在屏幕显示之前被推入堆栈

Ø返回(Back)后(恢复到屏幕显示前的值)

Ø不传递到子门户

lContainer_UI:定义一个用户输入User Input变量

Ø在Screen提交之后被推送到堆栈(带有来自用户的值)

Ø返回时恢复(恢复到用户最初输入的值)

Ø 不传递到子门户

Ø当向会话变量添加变量时,后缀“_UI”会自动删除

lExternal_Container_UI

Ø在Screen提交之后被推送到堆栈(带有来自用户的值)

Ø返回时恢复(恢复到用户最初输入的值)

Ø 传递到子门户

Ø当向会话变量添加变量时,后缀“_UI”会自动删除

1、中间变量Immediate Variables

中间变量不会合并到Portal会话中的门户会话变量,因为它们仅在单个屏幕范围内可见。

对于仅在on Action操作Operation中需要视图上作为用户输入提供的变量的场景,使用中间变量是一种理想的解决方案。中间变量将被传递到On Action操作中,但它们不会保存在Portal会话中。因此,它们不会用仅用于立即处理的变量污染影响会话。

视图的外部输出被认为是一个中间变量,因为它以“_”前缀开头(例如,_Container)。当将直接变量传递给On Action操作Operation时,“_”前缀将被自动删除。因此,On Action操作Operation中可以以相同的方式处理普通变量和中间变量

作为最佳实践,可以考虑使用中间变量作为起点。只有在另一个屏幕上需要时才将它们更改为常规变量。这有助于保持门户会话较小,同样中间变量也可以用在Form View 中。

2、页面实例变量Screen Instance Variables

又是需要在Portal会话中存储一些特定于页面的信息时,您可以使用特殊的页面实例变量(例如,在每个屏幕上存储最后使用的网格配置文件Grid profile)。要定义Screen页面实例变量,在变量名前加上/Screen前缀(这样变量名就是/Screen/NameOfTheVariable)。

页面实例变量定义后,只能在相应的Screen上使用这种变量,当Screen堆栈中没有Screen实例使用它们时,这些变量将从Portal会话中删除。

例如:在定义/Screen/GridProfile变量之后,它将被包含在Portal会话中,并且它不会覆盖来自不同Screen的同名变量。然后,您可以在不同的Screen上重用现有的变量(不带前缀),这样再不同的页面Screen上的就可以使用不同Grid配置文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智能制造社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档