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

Apriso 开发葵花宝典之七 Action Scripts 篇

作者头像
李英杰同学
发布2023-09-02 08:34:48
5001
发布2023-09-02 08:34:48
举报
文章被收录于专栏:智能制造社区

概述

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

本文介 Process builder 中 Action Scripts 概念及相关应用。

什么是Action Scripts

根据从各种 DELMIA Apriso 项目收集的数据,大多数包含业务逻辑的标准操作使用以下两个函数之一:用户公式或 SQL 查询。动作脚本可以用作这些类型的标准操作的替代品,因为它们可以在执行期间摆脱设计和运行时开销。

动作脚本是简单的代码片段,可以在某些情况下取代标准操作。动作脚本使用的语言是 TypeScript 。这是一种 Microsoft 编程语言,是 JavaScript 的严格超集,具有可选的静态类型和基于类的面向对象编程。

动作脚本仅在屏幕和视图级别可用,但它们不支持显示输出。它们可用于验证表单、解析或其他严格意义上的后端操作中的数据。即使有一个用户界面显示在一个动作脚本,它将不被支持。每个 Action Script “文件”都保存在 DELMIA Apriso 数据库中,因此它不是一个物理文件。

Action Scripts应用和执行场景

在某些情况下,动作脚本可以取代标准操作:

  • 执行屏幕上的验证
  • 执行简单的数据解析
  • 数据库查询
  • Action Scripts可以从以下点调用:
    • 在页面中OnLoad属性
    • 在页面中OnInitialize属性
    • 在视图中OnAction属性
    • 在视图中OnChange属性
    • 离线模式“Initialization Script”属性(离线模式没有Operation执行,Action Scripts在离线模式下是最重要的)

无论何时使用动作脚本,它都会成为标准操作的一部分,并包含在事务堆栈中。动作脚本不会随着使用它们的实体一起移动。您需要在移动实体后手动链接动作脚本。

Action Scripts可以运行在客户端(无需调用服务器)或服务器端(每次Action Script执行都会到达服务器以获取额外数据)两种模式,仅在Web浏览器中执行的动作脚本通常是对显示的Web页面上的数据进行简单的验证脚本,或者是数据修改或转换。

无法人为手动指定Action Script是客户端还是服务器端,系统自己决定在编译Action Script期间要做什么。

要确保Action Script是客户端,只能使用执行以下操作的类:

  • 只调用标准JavaScript对象中的方法和函数(例如,Number, String, Array, Date, Math, RegExp)
  • 只使用全局函数和属性(例如,isNaN, decodeURI, encodeURI, isFinite, parseFloat, parseInt)
  • 仅使用用于从Apriso Action Script API引发错误或记录调试、信息和错误消息的函数。

一般客户端执行页面校验和简单解析,服务器端执行从数据库中查询数据,但是在服务器端模式下执行一个脚本后,随后的所有脚本也将在服务器端执行。

已知的限制

  • 动作脚本仅在屏幕和视图级别可用,但它们不支持显示输出。它们可用于验证表单、解析或其他严格的后端操作中的数据
  • 对于项目Project中的动作脚本,它必须处于原型状态或更高状态。此外它的命名空间必须与将要使用它的项目的代码相同,导入的其他已有的动作脚本的命名空间名称必须手动更改。
  • 如果存在两个(或更多)动作脚本,一个在项目Project中,另一个在全局,并且在相同的命名空间和相同的类中,它们具有相同名称的函数,两个函数都可用于项目实体的链接,但系统始终只使用指定到项目中的那个函数。

Action Script创建

1、动作脚本管理器Action Script Manager

  • 通过Process builder菜单“管理”->”动作脚本管理器”,可以打开动作脚本管理器界面,并进行分类目录和动作脚本的创建,创建后自动生成一段示例代码结构,包括
    • 命名控件名称
    • 类名
    • 函数名称
    • 输入参数
    • 输出参数

注意:输入和输出参数名称应和页面视图中的命名一致。

  • 生成和运行测试代码

通过属性视图“生成测试代码” 按钮和工具条“测试运行” 按钮可以生成和测试运行Action Scripts代码

2、项目中创建Action Script

  • Action Script无法在直接Project中使用和新建,与其他实体不同,动作脚本不能直接添加到项目中,但是为了能够添加特定于项目的操作脚本(即仅在该特定项目中可用的操作脚本),可以通过右键单击实体资源管理器中的项目节点并选择添加操作脚本模块。为项目添加一个特殊的动作脚本模块,与其他模块不同,该模块不用于对实体进行分组,而仅表示使用项目特定动作脚本的能力。
  • 在动作脚本管理器中选择项目进行创建

离线模式下应用

在离线模式下使用的类(由属于离线模块的实体使用)必须扩展OfflineScript类,而不是ActionScript类:

如果脚本是脱机脚本,则无法测试代码。

Action Scripts API

在动作脚本实体资源管理器Action Scripts Manager工具窗格中的找到示例动作脚本,Apriso也提供了详细的API说明文档,详见:http://[ServerName]/Apriso/Portal/Documentation/ApiDocs/index.htm。

1、数据库Database API

  • 简单查询Database.RunQuery:直接执行查询,如
代码语言:javascript
复制
var result = Database.RunQuery('SELECT ID, LoginName as "LoginName" FROM EMPLOYEE WHERE LoginName = @LoginName', { LoginName : loginName });
  • 带参数类型查询,查询参数的数据类型在运行时确定。特别是在Oracle数据库上运行查询时,或者在数据类型为date的数据上运行查询时,确定的数据类型可能是无效的,在这种情况下,数据类型应该在脚本中提供,如
代码语言:javascript
复制
var query = Database.Query.Create("SELECT ID FROM OPERATION WHERE OperationCode = @OperationCode AND CreatedOn >= @CreatedOn",
                {
                    OperationCode : operationCode,
                    CreatedOn: createdOn
                });            
   
//定义参数类型
query.DefineParameter("CreatedOn", Database.ParameterType.DateTime);
var result = query.Run();
  • 注册查询Query:因为SQL Server与Oracle不同,为了在两个数据库(SQL和Oracle)中使用相同的脚本,可以使用QueryRepository存储命名查询,并使用这些名称创建查询对象并执行查询。
代码语言:javascript
复制
//Registering a query in the repository (queries for SQL and Oracle database can be different):


Database.QueryRepository.RegisterQuery("MyQuery",
               "SELECT OperationCode, OperationRevision FROM OPERATION WHERE DefaultOperationRevision = @DefaultRevision AND OperationCode = @Code",
               'SELECT OperationCode AS "OperationCode", OperationRevision as "OperationRevision" FROM OPERATION WHERE DefaultOperationRevision = @DefaultRevision AND OperationCode = @Code',
               [
                   {Name : "DefaultRevision", DataType : Database.ParameterType.Boolean},
                   {Name : "Code", DataType : Database.ParameterType.String}
               ]);



//Using a query from the repository by providing its name:


var query = Database.Query.CreateByName("MyQuery", {
               DefaultRevision : true,
               Code : "PortalExecute"
           });  
var result = query.Run();
  • 执行查询RunQuery和RunQueryOn:在Oracle数据库上运行查询将返回大写的列名,除非为该列提供了别名。根据查询的不同,可以通过大写的列名或提供的别名访问Result中的值。RunQueryOn可以指定数据库名称进行查询,如
代码语言:javascript
复制
var result = Database.RunQuery('SELECT LoginName as “LoginName“ FROM EMPLOYEE WHERE LoginName = @LoginName', { LoginName : loginName });


var ln = result.Rows[0].LoginName;

2、调试日志DebugConsole API

  • LogDebug、LogInfo、LogError:可以在运行时执行动作脚本时记录消息。这些消息是根据DELMIA Apriso服务器的Logging Configuration记录的。当在Action script测试模式下执行脚本时,消息被记录在Action script Output工具窗格中。可用的消息类型有:Debug、Info、Error,如DebugConsole.LogInfo("Info: Three parameters {0}, {1}, {2} message", 1, "2", "another");
  • ErrorCodes:支持硬编码或者字典链接词条进行的错误消息,如throw ErrorCodes.GenericMessage(message: string, params: any[]) throw ErrorCodes.YourErrorCodeName();

3、 系统参数:支持静态类型Static Type的系统参数读取,如

var priorityValue = SystemParameters.Priority()

总结

1、 Action Script主要应用于校验、简单解析处理等场景,个人认为应用场景不多,并且反而增加了系统实现和管理的复杂度。

2、 因为没有服务器请求和响应,Action Scripts性能更快

3、 因为它不使用函数解释器引擎FI,当与涉及迭代或嵌套子操作的标准操作相比,Action Scripts更快

4、 常规和默认开发方式下,Action Scripts和Action Operation都会刷新界面

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

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

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

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

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