华为云用户手册

  • SQL语法文本格式约定 为了方便对语法使用的理解,在文档中对SQL语法文本按如下格式进行表述。 格式 意义 大写 语法关键字(语句中保持不变、必须照输的部分)采用大写表示。 小写 参数(语句中必须由实际值进行替代的部分)采用小写表示。 [ ] 表示用“[ ]”括起来的部分是可选的。 ... 表示前面的元素可重复出现。 [ x | y | ... ] 表示从两个或多个选项中选取一个或者不选。 { x | y | ... } 表示从两个或多个选项中选取一个。 [x | y | ... ] [ ... ] 表示可选多个参数或者不选,如果选择多个参数,则参数之间用空格分隔。 [ x | y | ... ] [ ,... ] 表示可选多个参数或者不选,如果选择多个参数,则参数之间用逗号分隔。 { x | y | ... } [ ... ] 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间以空格分隔。 { x | y | ... } [ ,... ] 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间用逗号分隔。
  • 阅读指引 对于首次接触 GaussDB (DWS)的用户,建议先阅读以下部分: 介绍GaussDB(DWS)服务的特点、功能和适用场景。 GaussDB(DWS)入门包含一个示例,引导您完成创建 数据仓库 集群、创建数据库表、上传数据和测试查询这一过程。 如果计划或正在将应用程序从其他数据仓库向GaussDB(DWS)迁移,您可能想了解GaussDB(DWS)在实施方式上有什么区别。 GaussDB(DWS)进行数据库应用程序开发过程中,下表将帮您找到对应的信息。 如果要.. 查阅建议 快速开始使用GaussDB(DWS)。 首先,按照《数据仓库服务快速入门》中的步骤快速部署集群、连接到数据库并尝试进行一些查询。 准备好构建数据库后,将数据加载到表中并编写查询内容以操作数据仓库中的数据后,可以回到《数据仓库服务数据库开发指南》。 了解GaussDB(DWS)数据仓库的内部架构。 如果您想要更全面地了解GaussDB(DWS)服务,请转到GaussDB(DWS)产品首页。 了解如何设计表以实现良好性能。 GaussDB(DWS)开发设计规范介绍数据库应用程序开发过程中,应当遵守的设计规范。依据这些规范进行建模,能够更好的契合GaussDB(DWS)的分布式处理架构,输出更高效的业务SQL代码。 对业务的执行效率不满意,期望通过调优加快业务执行的情况下,可以参考GaussDB(DWS)性能调优进行调优。性能调优是一项复杂的工程,有些时候无法系统性地说明和解释,而是依赖于DBA的经验判断。尽管如此,GaussDB(DWS)性能调优章节还是期望能尽量系统性的对性能调优方法加以说明,方便应用开发人员和刚接触GaussDB(DWS)的DBA参考。 加载数据。 导入数据介绍数据入库GaussDB(DWS)的方法和途径。 导入最佳实践提供有关快速高效数据导入的经验提示。 管理用户、组和数据库安全。 GaussDB(DWS)数据库安全管理涵盖数据库安全主题。 监控和优化系统性能。 GaussDB(DWS)系统表和系统视图详细介绍您可以从中查询数据库状态并监控查询内容与流程的系统表和视图。 您还应该查阅管理指南了解如何使用GaussDB(DWS)管理控制台检查系统运行状况、监控指标。
  • 前提条件 如果您使用的是开源的JDBC驱动程序,应确保数据库参数password_encryption_type取值设置为1,如果参数值不为1,可能会出现连接失败,典型的报错信息比如:“none of the server's SASL authentication mechanisms are supported”,可参考如下操作进行处理: 联系技术支持人员检查数据库参数password_encryption_type是否为1,如果取值不为1,需要将该参数修改为1。 新建一个数据库用户用于连接,或者重置准备使用的数据库用户的密码。 如果您使用的是管理员账号,参见重置密码。 如果是普通用户,可以先通过其他客户端工具(例如Data Studio)连接数据库后,使用ALTER USER语句来修改密码。 再尝试连接数据库 需要执行以上操作的原因: 调整参数的原因:当前MD5算法已被证实可以人工碰撞,已严禁将之用于密码校验算法。GaussDB(DWS)采用默认安全设计,默认禁止MD5算法的密码校验,可能导致开源客户端无法正常连接的问题。所以需要调整密码算法参数password_encryption_type,打开MD5算法。 修改密码的原因:GaussDB(DWS) 中是不会存储您的密码原文的,而是存储的密码HASH摘要(默认是SHA256摘要),在密码校验时该摘要会与客户端发来的密码摘要进行比对(中间会有加盐操作)。故当您只是单纯调整了密码算法策略时,数据库是无法还原您的密码进而再生成MD5的摘要值的,必须要求您手动修改一次密码或者创建一个新用户,这时新的密码将会采用您设置的HASH算法进行摘要存储,用于下次连接认证。
  • 参数 表1 数据库连接参数 参数 描述 url gsjdbc4.jar数据库连接描述符。格式如下: jdbc:postgresql:database jdbc:postgresql://host/database jdbc:postgresql://host:port/database jdbc:postgresql://host:port[,host:port][...]/database 说明: 使用gsjdbc200.jar时,将“jdbc:postgresql”修改为“jdbc:gaussdb” database为要连接的数据库名称。 host为数据库服务器名称或IP地址,当集群绑定弹性负载均衡(ELB)时,应设置为ELB的IP地址。 port为数据库服务器端口。缺省情况下,会尝试连接到localhost的8000端口的database。 支持多ip端口配置形式,jdbc自动实现了负载均衡,多ip端口配置形式是采取随机访问+failover的方式,这个过程系统会自动忽略不可达IP。 以","隔开,例如jdbc:postgresql://10.10.0.13:8000,10.10.0.14:8000/database 使用JDBC连接集群时集群链接地址只支持指定jdbc连接参数,不支持增加变量参数。 info 数据库连接属性。常用的属性如下: user:String类型。表示创建连接的数据库用户。 password:String类型。表示数据库用户的密码。 ssl:Boolean类型。表示是否使用SSL连接。 loggerLevel:string类型。为LogStream或LogWriter设置记录进DriverManager当前值的日志信息量。目前支持"OFF"、"DEBUG"和"TRACE"。 值为"DEBUG"时,表示只打印DEBUG级别以上的日志,将记录非常少的信息。值等于TRACE时,表示打印DEBUG和TRACE级别的日志,将产生详细的日志信息。默认值为OFF,表示不打印日志。 prepareThreshold:integer类型。用于确定在转换为服务器端的预备语句之前,要求执行方法PreparedStatement的次数。缺省值是5。 batchMode : boolean类型,用于确定是否使用batch模式连接。 fetchsize : integer类型,用于设置数据库链接所创建statement的默认fetchsize。 ApplicationName:string类型。应用名称,在不做设置时,缺省值为PostgreSQL JDBC Driver。 allowReadOnly:boolean类型,用于设置connection是否允许设置readonly模式,默认为false,若该参数不被设置为true,则执行connection.setReadOnly不生效。 blobMode:string类型,用于设置setBinaryStream方法为不同的数据类型赋值,设置为on时表示为blob数据类型赋值,设置为off时表示为bytea数据类型赋值,默认为on。 connectionExtraInfo:Boolean类型。表示驱动是否上报当前驱动的部署路径、进程属主用户到数据库。 说明: 取值范围:true或false,默认值为true。设置connectionExtraInfo为true,JDBC驱动会将当前驱动的部署路径、进程属主用户上报到数据库中,记录在connection_info参数(参见connection_info)里;同时可以在PG_STAT_ACTIVITY和PGXC_STAT_ACTIVITY中查询到。 user 数据库用户。 password 数据库用户的密码。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 //以下用例以gsjdbc4.jar为例,如果要使用gsjdbc200.jar,请替换驱动类名(将代码中的“org.postgresql”替换成“com.huawei.gauss200.jdbc”)与连接URL串前缀(将“jdbc:postgresql”替换为“jdbc:gaussdb”)。 //以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。 public static Connection GetConnection(String username, String passwd) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:postgresql://10.10.0.13:8000/postgres?currentSchema=test"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } catch (ClassNotFoundException e ){ e.printStackTrace(); return null; } try { //创建连接。 conn = DriverManager.getConnection(sourceURL, username, passwd); System.out.println("Connection succeed!"); } catch (SQLException e) { e.printStackTrace(); return null; } return conn; }
  • 从MySQL向GaussDB(DWS)进行数据迁移 下面示例演示如何通过CopyManager从mysql向GaussDB(DWS)进行数据迁移的过程。 以下用例以gsjdbc4.jar为例,如果要使用gsjdbc200.jar,请替换驱动类名(将代码中的“org.postgresql”替换成“com.huawei.gauss200.jdbc”)与连接URL串前缀(将“jdbc:postgresql”替换为“jdbc:gaussdb”)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Migration{ public static void main(String[] args) { String url = new String("jdbc:postgresql://10.180.155.74:8000/gaussdb"); //数据库URL String user = new String("jack"); //DWS用户名 String pass = new String("********"); //DWS密码 String tablename = new String("migration_table"); //定义表信息 String delimiter = new String("|"); //定义分隔符 String encoding = new String("UTF8"); //定义字符集 String driver = "org.postgresql.Driver"; StringBuffer buffer = new StringBuffer(); //定义存放格式 化数据的缓存 try { //获取源数据库查询结果集 ResultSet rs = getDataSet(); //遍历结果集,逐行获取记录 //将每条记录中各字段值,按指定分隔符分割,由换行符结束,拼成一个字符串 //把拼成的字符串,添加到缓存buffer while (rs.next()) { buffer.append(rs.getString(1) + delimiter + rs.getString(2) + delimiter + rs.getString(3) + delimiter + rs.getString(4) + "\n"); } rs.close(); try { //建立目标数据库连接 Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); BaseConnection baseConn = (BaseConnection) conn; baseConn.setAutoCommit(false); //初始化表信息 String sql = "Copy " + tablename + " from STDIN DELIMITER " + "'" + delimiter + "'" + " ENCODING " + "'" + encoding + "'"; //提交缓存buffer中的数据 CopyManager cp = new CopyManager(baseConn); StringReader reader = new StringReader(buffer.toString()); cp.copyIn(sql, reader); baseConn.commit(); reader.close(); baseConn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } } catch (Exception e) { e.printStackTrace(); } } 从源数据库返回查询结果集: private static ResultSet getDataSet() { ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://10.119.179.227:3306/jack?useSSL=false&allowPublicKeyRetrieval=true", "jack", "********"); Statement stmt = conn.createStatement(); rs = stmt.executeQuery("select * from migration_table"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return rs; } }
  • 通过本地文件导入导出数据 在使用JAVA语言基于GaussDB(DWS)进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者将本地文件导入数据库中,文件格式支持 CS V、TEXT等格式。 样例程序如下,执行时需要加载GaussDB(DWS) jdbc驱动。 以下用例以gsjdbc4.jar为例,如果要使用gsjdbc200.jar,请替换驱动类名(将代码中的“org.postgresql”替换成“com.huawei.gauss200.jdbc”)与连接URL串前缀(将“jdbc:postgresql”替换为“jdbc:gaussdb”)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import java.sql.Connection; import java.sql.DriverManager; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.SQLException; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Copy{ public static void main(String[] args) { String urls = new String("jdbc:postgresql://10.180.155.74:8000/gaussdb"); //数据库URL String username = new String("jack"); //用户名 String password = new String("********"); //密码 String tablename = new String("migration_table"); //定义表信息 String tablename1 = new String("migration_table_1"); //定义表信息 String driver = "org.postgresql.Driver"; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(urls, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } 执行数据导入导出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 // 将migration_table查询结果导出到本地文件d:/data.txt try { copyToFile(conn, "d:/data.txt", "(SELECT * FROM migration_table)"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //将d:/data.txt中的数据导入到migration_table_1中。 try { copyFromFile(conn, "d:/data.txt", migration_table_1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 将migration_table_1中的数据导出到本地文件d:/data1.txt try { copyToFile(conn, "d:/data1.txt", migration_table_1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void copyFromFile(Connection connection, String filePath, String tableName) throws SQLException, IOException { FileInputStream fileInputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileInputStream = new FileInputStream(filePath); copyManager.copyIn("COPY " + tableName + " FROM STDIN", fileInputStream); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void copyToFile(Connection connection, String filePath, String tableOrQuery) throws SQLException, IOException { FileOutputStream fileOutputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileOutputStream = new FileOutputStream(filePath); copyManager.copyOut("COPY " + tableOrQuery + " TO STDOUT", fileOutputStream); } finally { if (fileOutputStream != null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
  • 示例2 客户端内存占用过多解决 此示例主要使用setFetchSize来调整客户端内存使用,它的原理是通过数据库游标来分批获取服务器端数据,但它会加大网络交互,可能会损失部分性能。 由于游标事务内有效,故需要先关闭自动提交。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // 关闭掉自动提交 conn.setAutoCommit(false); Statement st = conn.createStatement(); // 打开游标,每次获取50行数据 st.setFetchSize(50); ResultSet rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()){ System.out.print("a row was returned."); } rs.close(); // 关闭服务器游标。 st.setFetchSize(0); rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()){ System.out.print("many rows were returned."); } rs.close(); // Close the statement. st.close();
  • 常见问题处理 Server common name "xxxx" does not match host name "xxxxx" 此问题的原因是使用了SSL加密的“verify-full”选项,这时驱动程序会验证证书中的主机名与实际部署数据库的主机名是否一致。碰到此问题可以使用“verify-ca”选项,不再校验主机名;或者重新生成一套与数据库所在主机名相同的CA证书。 connect to server failed: no such file or directory 此问题可能的原因: 配置了错误的/不可达的数据库地址,或者端口 请检查数据源配置中的Servername及Port配置项。 服务器监听不正确 如果确认Servername及Port配置正确,请根据“操作步骤”中数据库服务器的相关配置,确保数据库监听了合适的网卡及端口。 防火墙及网闸设备 请确认防火墙设置,将数据库的通信端口添加到可信端口中。 如果有网闸设备,请确认相关的设置。 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配 此问题可能的原因:在64位程序中使用了32位驱动,或者相反。 C:\Windows\SysWOW64\odbcad32.exe:这是32位ODBC驱动管理器。 C:\Windows\System32\odbcad32.exe:这是64位ODBC驱动管理器。 The password-stored method is not supported. 此问题可能原因: 数据源中未配置sslmode配置项,请调整此项至allow或以上级别,允许SSL连接,此选项的更多说明,请见表1。 authentication method 10 not supported. 使用开源客户端碰到此问题,可能原因: 数据库中存储的口令校验只存储了SHA256格式哈希,而开源客户端只识别MD5校验,双方校验方法不匹配报错。 数据库并不存储用户口令,只存储用户口令的哈希码。 早期版本(V100R002C80SPC300之前的版本)的数据库只存储了SHA256格式的哈希,并未存储MD5的哈希,所以无法使用MD5做用户口令校验。 新版本(V100R002C80SPC300及之后版本)的数据库当用户更新用户口令或者新建用户时,会同时存储两种格式的哈希码,这时将兼容开源的认证协议。 但是当老版本升级到新版本时,由于哈希的不可逆性,所以数据库无法还原用户口令,进而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,导致仍然无法使用MD5做口令认证。 要解决该问题,参见以下操作: 联系技术支持人员检查数据库参数password_encryption_type是否为1,如果取值不为1,需要将该参数修改为1。 新建一个数据库用户用于连接,或者重置准备使用的数据库用户的密码。 如果您使用的是管理员账号,参见重置密码。 如果是普通用户,可以先通过其他客户端工具(例如Data Studio)连接数据库后,使用ALTER USER语句来修改密码。 再尝试连接数据库 unsupported frontend protocol 3.51: server supports 1.0 to 3.0 目标数据库版本过低,或者目标数据库为开源数据库。请使用对应版本的数据库驱动连接目标数据库。
  • 创建数据库 使用CREATE DATABASE语句创建一个新的数据库。 1 CREATE DATABASE mydatabase; 创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节,不要使用多字节字符作为对象名。(如果出现因为误操作导致在多字节字符的中间截断进而无法删除数据库对象的现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删掉。) 数据库名称遵循SQL标识符的一般规则。当前用户自动成为此新数据库的所有者。 如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。 如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的Schema中。 用户必须拥有数据库创建的权限或者是数据库的系统管理员权限才能创建数据库。
  • 模板和默认数据 GaussDB(DWS)提供了两个模板数据库template0、template1,以及一个默认的数据库gaussdb。 默认情况下,每个新创建的数据库都是基于一个模板数据库。GaussDB(DWS)数据库默认使用template1作为模板,编码格式为SQL_ASCII,且不允许自定义字符编码。若创建数据库时需指定字符编码,请使用template0创建数据库。 请避免使用客户端或其他手段连接及操作两个模板数据库。 通过“show server_encoding”命令可以查看当前数据库存储编码。
  • 子流程 子流程任务是一个特殊的自动化容器任务,其内在包含了对子流程(Sub Process)的创建、启动和调度管理。 当流程到达子流程任务时,按照配置策略自动启动子流程实例,父流程的该分支中断,在这里等待子流程实例全部结束后继续执行后续路线。 子流程模型可以再包含调用子流程,成为每层嵌套的多级流程。 图21 子流程实例 调用活动和子流程图元都是工作流的内嵌子流程,区别在于: 调用活动把子流程当做一个黑盒(不需要关注子流程是怎么实现的),通过参数传递进行调用。 内嵌子流程则直接在当前流程中规划出一个子流程,子流程可共享父流程的变量。可用于流程步骤的划分、封装和复用。 内嵌子流程中使用“终止”事件,只终止当前内嵌子流程。
  • 记录创建 “记录创建”图元用于新增平台对象的实例记录,类似于数据库中的INSERT INTO命令。系统提供了以下两种模式,新增对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,将该对象变量或对象变量数组拖拽到“变量”输入框中,使用该对象变量或对象变量数组的值,创建实例记录。 图6 对象模式创建 条件模式:需要先指定对象并为对象的字段赋值,来创建记录。如下图所示,为“Account”对象新增实例记录,在变量“id”中保存新建的记录ID。 图7 条件模式创建
  • 记录更新 “记录更新”图元用于更新平台对象的实例记录,类似于数据库中的UPDATE命令。系统提供了以下两种模式,更新对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或对象变量数组,并将该对象变量或对象变量数组拖拽到“变量”输入框中,即可根据对象变量中的记录ID将对象变量更新到数据库中,更新的值来源于对象变量中的值。如下图所示,根据对象变量数组“account”中的记录ID,将对象变量中的值更新到数据库中。 图10 对象模式 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,在赋值中设置需要更新的目标字段及更新值,最后根据条件查找符合条件的对象记录并将赋值中的值更新到数据库中。 图11 条件模式
  • 调用脚本 当流程到达“调用脚本”任务时,系统自动执行脚本,执行完成后继续执行后续路线。使用该图元时,需要选择具体调用的脚本,配置输入输出参数。 图14 调用脚本配置页面 工作流中只允许调用当前应用工程下的资源(例如脚本、服务编排),即调用脚本中可供选择的脚本和该工作流都处于同一应用下。 例如,工作流A中需要调用脚本B,请确保A和B处于同一应用中。如果需要调用的资源不在同一应用中,请在工作流A所在的应用中新建脚本B,或选择“使用已有脚本”导入脚本B。再在工作流A中,使用“调用脚本”图元调用该脚本。 图15 使用已有脚本
  • 记录查询 “记录查询”图元用于根据条件查询平台对象的实例记录,类似于数据库中的SELECT命令。系统提供了以下两种模式,查询对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,将该对象变量或对象变量数组拖拽到“变量”输入框中,并设置条件以及选择排序方式,即可实现根据条件和排序方式,将查询结果保存在对象变量中。如下图所示,根据条件查询对象数据,并将查询结果保存在对象变量数组“account”中。 图8 对象模式查询 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,根据条件查询符合条件的对象记录,并赋值到设置的变量上。 图9 条件模式查询 对象:查询的具体对象名,直接在下拉框中选择。 剔重:如果查询记录有重复值,是否需要删掉重复记录只保留一条记录。 条件:选中对象后,该条件区域“字段”列会出现该对象的字段。单击“新增行”,可设置查询数据的条件。 在“字段”中选择要进行判断的对象字段,在“比较符”中选择相应的比较符,“值”则可从全局上下文拖拽变量或者直接输入“{!变量名}”。 排序字段/顺序:使查询结果根据某个字段进行升序或者降序排序。 记录行的偏移量:分页,跳过前“n”条记录,从第“n+1”条记录开始。 记录行的最大数目:分页,每页最多显示的记录数。 记录的总行数存入变量:限定查询出来的总记录数,存入变量中。 (输出)源/目标:输出的结果。其中,“源”为需要查询的字段,查询结果需要保存到设置的变量中,“目标”为设置的变量。 无记录时配置空值:当根据条件查询无记录时,则变量为空值。
  • 记录删除 “记录删除”图元能够删除平台对象的实例记录,类似于数据库中的DELETE命令。系统提供了以下两种模式,删除对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,并将该对象变量或对象变量数组拖拽到“变量”输入框中,使用该对象变量或对象变量数组的记录ID删除对应的对象记录。 图12 对象模式 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,根据条件删除符合条件的对象记录。 图13 条件模式
  • 邮件 当流程到达“邮件”任务时,系统自动发送邮件,执行完成后继续执行后续路线。 使用邮件图元,需要提前配置租户的默认邮件服务器,具体操作请参考服务编排、BPM、脚本中发送邮件功能不可用。 图18 调用邮件页面 邮件配置:支持“直接编辑”手动设置邮件信息或“基于模板”选择邮件模板。 主题:当“邮件配置”设置为“基于模板”时,需要选择邮件模板。 内容:当“邮件配置”设置为“直接编辑”时,需要配置邮件内容。 模板:当“邮件配置”设置为“基于模板”时,需要选择邮件模板。 地址:设置接收人的邮箱地址。 文本:直接输入邮箱地址,多个地址请用分号分隔,或者从全局上下文拖拽变量代表一个接收人的邮箱地址。 集合:可以从全局上下文拖拽集合变量,集合变量即数组型变量,表示多个接收人的邮箱地址。在定义变量时,勾选“是否为数组”,则该变量被定义为集合变量。 图19 集合变量 抄送:抄送人的邮箱地址。 密送:密送人的邮箱地址。 是否同步发送:是否开启同步发送功能。
  • 用户任务 用户任务用来表示业务流程中由用户参与完成的工作。当引擎处理到该节点时,给指定的用户(参与者)或者一组用户(如某泳道的工作队列)创建待处理的任务项,等待用户的处理。 用户任务配置:在用户任务配置界面,配置任务接收人和活动界面。 图1 用户任务配置页面 任务标题:显示在任务界面的标题。 任务描述:显示在任务界面的任务描述。 优先级:在下拉框中,选择任务的优先级,如正常、高和低等。 渲染类型:用户处理的界面,可以是标准页面、标准表单或高级页面。当配置为标准表单时,需要配置用户可执行的动作(例如同意或拒绝)。如何创建标准表单,请参见创建标准表单。 类型:待处理任务的用户类型。 当前泳道:设置为“当前泳道”,将泳道和工作队列绑定,则处于该泳道的用户任务图元,由该泳道对应工作队列中的成员去处理。工作队列中的成员可以是多个用户、业务用户、公共组中成员、角色或带有下属的角色中成员。 流程发起人的主管:设置为“流程发起人的主管”时,需要配置“部门经理层级”,即主管所属的部门。 名称和表达式:设置为“名称和表达式”时,可以通过“表达式”、“用户”和“组”三种方式分配该任务的参与者。这时,泳道中的工作队列配置不起作用。 基于规则:当配置为该类型时,需要配置具体的“规则”。 参与者:当类型为“名称和表达式”时,该参数才会显示。参与者类型可以是用户、业务用户、组或者表达式。 用户:在“取值”中,选择接收该任务的用户,不包括业务用户。 业务用户:在“取值”中,选择接收该任务的业务用户。 组:在“取值”中选择公共组,则该任务由公共组的成员去处理。公共组的成员可以是用户、业务用户、其他公共组的成员、角色或带有下属的角色中成员。如何创建公共组,请参见管理应用中的公共组。 表达式:将参与者类型配置为“表达式”时,实际是一个变量。在“取值”中,可设置变量的值,变量值支持以下几种: 用户的用户名或用户ID,其中用户名前需要加“user:”前缀。 业务用户的用户名或业务用户ID,其中业务用户名前需要加“puser:”前缀。 公共组名称或者公共组ID,其中公共组名称前需要加“group:”前缀。 角色名称或者角色ID,其中角色名称前需要加“role:”前缀。 例如,分配任务接受者为用户名为“PortalUser1”的业务用户、用户名为“User1”的用户、用户ID为“10XX000000XXXXXXX”的用户、公共组名称为“group1”和角色名称为“role1”的合集,则取值为“"puser:PortalUser1,user:User1,10XX000000XXXXXXX,group:group1,role:role1"”。多个取值之间用英文逗号“,”分隔,取值外加英文双引号。 规则:接收人满足的规则。类型为“基于规则”时,该参数才会显示。 审批类型:选择审批的类型。 如果选择了“或签:任一个分配人均可审批”,则只需要接收人中的某一用户完成了审批,即可推动任务流程,走向下一个任务。 如果选择了“会签:每个分配人都需要审批”,则需要接收人中的用户群体满足您设置的审批条件才可推动任务流程,走向下一个任务。 如果审批人中包含群组,则群组中任意一人审批即认为该群组已经审批。当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 勾选,表示如果审批人中包含群组,则群组中任意一人第一个审批即认为该群组已经审批,不需要其他用户再进行审批,该群组只算一个有效审批人数。 不勾选,表示如果审批人中包含群组,则群组中每个人都需要审批,都计算在有效审批人数内。 投票结果门槛:该参数取值表示百分比,如果达到设置的百分比,审批结果中最高的得票结果将覆盖 “$BP.TaskOutcome”系统变量,即将执行最高得票的审批结果。 默认结果:审批百分比(已审批的人数/总的有效审批人数)未达到“投票结果门槛”百分比时,默认的审批结果。当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 结果触发方式:当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 当最小百分比满足时,立即触发投票结果。 等待所有投票完成,触发投票结果。 审批动作:设定一些候选的动作,作为默认审批结果。 当存在以下动作时立即终止任务:当存在设定的某个或者某些动作时,立即终止任务。 自动审批:AstroZero支持用户任务自动审批功能,例如设置“主管审核”任务自动审批。在用户任务配置界面,指定该任务具体接收人,可使用表达式的形式将任务指派给某一用户,在自动审批中进行设置。 图2 自动审批设置 流程触发人自动通过:如果勾选该选项,任务接收人是流程触发人时,该用户任务会被自动审批。 已审批过该流程的审批人自动通过:如果勾选该选项,任务接收人在当前工作流实例中已审批过其他用户任务,则该用户任务会被自动审批。 当任务接收人设置为“当前泳道”对应的工作队列或用户组时,将无法使用自动审批功能。只有任务接收人设置为某一用户时,才可以进行自动审批。 自动审批时默认选择的动作:勾选自动审批时,可以设置自动审批默认选择的动作。 动作配置:为该用户任务配置前置或者后置动作。 图3 动作配置 前置动作:流程执行该用户任务前执行的动作。 触发条件:触发该动作的条件表达式。 动作类型:满足触发条件时,执行的具体动作。 通知经理:发邮件通知经理。 通知分配人:发邮件通知任务分配人。 调用服务编排:调用已启用的服务编排。 调用脚本:调用已激活的脚本。 发送事件:发送某一事件。 转移:将该用户任务转移给其他用户或工作队列中的用户处理。 设置状态:设置该用户任务的状态。 完成任务:完成某一任务,超期会自动完成任务。 后置动作:流程执行该用户任务后,执行的动作,请参考“前置动作”进行配置。 数据映射:对该用户任务的输入输出参数,进行数据映射。 图4 数据映射 SLA:为用户任务设置定时器,时间逾期可增加紧急程度并执行相应动作。 图5 启用SLA定期器 开始时间:定时器的开始时间。 任务创建后:设置任务创建的时间作为定时器开始的时间。 由变量指定:通过指定时间变量,来确定开始时间。 由表达式指定:通过表达式指定开始时间,例如支持特定时间的相对时间,设置为“STRING2TIME('yyyy-MM-dd hh:mm:ss.S', {!variable1})”。动态指定时间的相对时间,设置为“TIMEADD({!$Flow.CurrentDateTime}, 100)”。 目标期限:任务在目标期限内且即将过期时,满足触发条件后触发一个指定的动作。 截止限期:任务过期,满足触发条件后触发一个指定的动作。 紧急程度:定时器的紧急程度。 动作:时间逾期后执行的相应动作。单击“添加”,可以新增动作。 触发条件:触发该动作的条件表达式。 动作类型:满足触发条件时,执行的具体动作。 通知经理:发邮件通知经理。 通知分配人:发邮件通知任务分配人。 调用服务编排:调用已启用的服务编排。 调用脚本:调用已激活的脚本。 发送事件:发送某一事件。 转移:将该用户任务转移给其他用户或工作队列中的用户处理。 设置状态:设置该用户任务的状态。 赋值:给用户的任务赋值。 完成任务:完成某一任务,超期会自动完成任务。
  • 操作场景 当华为云Astro轻应用低代码平台提供的预置高级组件无法满足您的开发需求时,开发者可以自定义组件包,并上传到华为云Astro轻应用中。自定义组件包上传到华为云Astro轻应用中后,可在高级页面中使用。自定义组件的开发流程如下: 下载组件模板 将华为云Astro轻应用系统预置的模板到本地。 开发自定义组件 基于下载的模板,在本地根据自身业务需求开发组件。 上传组件到组件库并使用组件 将开发完的自定义组件上传到组件库,并在高级页面中使用。
  • 边框 设置组件的边框样式,支持全边框和角边框两种。 全边框 样式:设置组件边框的样式,如实线、点线、虚线和双实线。 宽度:设置边框的宽度,单位px。 颜色:设置组件边框的颜色。 弧度:设置组件边框四个角的弧度,单位px。 角边框 宽度:设置组件边框的宽度,单位px。 长度:设置组件边框的长度,单位px。 颜色:设置组件边框的颜色。 弧度:设置组件边框四个角的弧度,单位px。 边距:设置组件边框和图表之间的间距,单位px。
  • 位置 距离左端:组件到页面左侧的距离,单位为px。 距离顶端:组件到页面顶部的距离,单位为px。 宽度:组件的宽度,单位为px。 高度:组件的高度,单位为px。 堆叠顺序:设置组件层叠显示顺序。组件的堆叠顺序默认都是“1”,数字越大,显示越靠前。当需要让组件置底时,可设置堆叠顺序为“0”。 自适应高度:组件的高度是否随宽度改变。 开启:勾选该按钮,下方可见页面适配功能。 页面适配:勾选页面适配下方的“开启”,表示组件开启自适应高度。该属性使页面其它位于其下方的组件,根据该组件的高度变化自动调整位置,一个页面只支持一个组件。
  • 自定义布局样式 如果导航页面,想实现如下图所示布局效果,即整个页面不需要有滚动条,而其中导航组件区域和全局路由视图组件区域可随滚动条滚动时,可参考如下步骤实现。 图13 自定义布局样式页面效果 在头部组件的“.css”样式文件中,指定头部组件的高度。 样例代码如下: #headerWidget { height: 90px; } 参考基于预置组件进行自定义中操作,下载预置组件路由导航(示例),解压global_Vue3NavigatorWidget_版本号.zip。 修改解压后的“Vue3Navigator_Widget.css”文件,该文件是Widget的样式文件,在该文件中编写Widget的css样式。 样例代码如下: html[app=desktop] body { overflow: hidden; } #navigatorWidget, #global_RouterViewWidget { height: calc(100% - 90px); overflow: scroll; } 将修改后的头部组件和组件路由导航组件文件,重新打成zip包。 参考基于预置组件进行自定义中操作,上传重新打包后的组件。 在高级页面设计器左上方,单击,拖出上传的头部组件、路由导航组件和预置的路由视图组件至设计页面。 单击页面上方的,保存页面。 保存成功后,单击,发布页面。 发布成功后,单击,可查看页面效果。
  • 发布并部署华为云Astro轻应用开发的应用 根据实际业务需求,可以将应用一键打包发布到运行环境或沙箱环境,也可以生成应用安装包供其他用户在其他华为云Astro轻应用环境中安装使用。 快速发布与部署华为云Astro轻应用开发的应用:应用开发完成后,支持将应用一键打包发布到运行环境或沙箱环境。 发布与部署华为云Astro轻应用开发应用的安装包或补丁包:将应用发布为安装包或补丁包。安装包/补丁包主要用于租户之间或者环境之间的资产复用,避免重复开发。 发布与部署华为云Astro轻应用开发应用的源码包:源码包中的所有组件,都不受保护和限制。在其他开发环境安装后,可编辑包中组件,即在原有基础上可进行再开发。源码包主要用于同一租户内,在不同环境之间的资产迁移,以源环境的状态继续开发(类似自己的代码仓库),或者用于备份租户自己的代码,以便在需要恢复时使用。 跨账号或环境安装低代码应用:华为云Astro轻应用默认为每个账号分配了“我的仓库”,开发者开发好应用后,可将应用发布到“我的仓库”,供同账号下其他用户在沙箱环境或者运行环境“我的仓库”中进行安装,以便于测试或者使用该应用。华为云Astro轻应用也支持自定义“我的仓库”,即支持将账号私仓配置为某个OBS仓,当其他账号或者其他运行环境配置了相同的OBS仓时,可实现跨账号或跨环境安装应用。 将开发的应用发布成移动端小程序:将应用发布为移动端小程序,如Welink-We码、 WeLink 轻应用和微信等。
  • 管理华为云Astro轻应用中已安装的应用 使用华为云Astro轻应用完成应用的开发后,您还可以在华为云Astro轻应用中对已开发或安装的应用进行管理。 为华为云Astro轻应用开发的应用添加业务用户:业务用户(即PortalUser)是指登录并使用在华为云Astro轻应用中开发的业务应用的用户账号。您可以在业务配置中心创建、删除和编辑业务用户,并为业务用户配置相应的权限。 个性化设置华为云Astro轻应用中已安装的应用:在华为云Astro轻应用的环境配置中心,对已安装的应用进行个性化设置。此处的设置仅对当前的应用有效且不会更改应用包中原有的设置。如果需要更改应用包中原有的设置,请参考使用华为云Astro轻应用对应用进行个性化设置。 个性化设置华为云Astro轻应用中开发应用的工作台:在华为云Astro轻应用的环境配置中,设置个人工作台的企业外观、应用导航和应用标签等。 查看华为云Astro轻应用中已安装的应用:在华为云Astro轻应用环境配置的应用列表中,可查看当前账号已安装的所有应用。 卸载华为云Astro轻应用中已安装的应用:应用不再使用或者账号可创建应用的配额不足时,可将应用从华为云Astro轻应用中删除。
  • 华为云Astro轻应用低代码平台管理中心 华为云Astro轻应用低代码平台提供了一个平台管理功能,用于进行系统设置、管理用户、管理应用及应用中资源和监控系统业务配额、查看系统告警、日志等。 管理华为云Astro轻应用中用户及权限:在华为云Astro轻应用中,通过预置的权限(Profile)来控制用户、业务用户等的操作权限。如果默认的权限不能满足您的需求,即用户需要额外的权限时,支持对预置的权限进行修改。 管理华为云Astro轻应用中已安装应用的资源:在华为云Astro轻应用的环境配置中,管理华为云Astro轻应用平台中已安装应用的资源,如服务编排、脚本、定时任务等。 华为云Astro轻应用系统设置与运维监控:监控和设置华为云Astro轻应用系统,如查看账号业务阈值、公司信息,设置系统参数、系统 域名 和应用支持的语言等。
  • 使用华为云Astro轻应用开发应用 在华为云Astro轻应用中开发应用没有严格的顺序要求,可按照个人习惯进行,建议先进行后端开发,再进行页面组装、页面流程编排。华为云Astro轻应用开发架构主要分为后端开发、前端开发、集成开发和个性化设置四层,如图3所示。 图3 华为云Astro轻应用开发架构 使用华为云Astro轻应用开发应用后端 对象:华为云Astro轻应用中的对象(也可以称为Object)相当于传统方式开发业务系统时,数据库中创建一个表。每个对象对应一张数据库表,用于保存业务系统需要的配置数据和业务数据。 事件:在业务流程中,有意义的状态变化都可称为事件。自定义好事件后,可基于该事件实现事件发送、事件订阅,对发送的事件数据进行分析处理等功能。 结构体:结构体是用于约束应用开发时,输入、输出和内部变量使用的规范。在华为云Astro轻应用低代码平台中可以应用于服务编排、连接器等场景的外部输入、输出参数以及流程内部的变量结构。结构体仅支持在本应用中使用,可随应用打包。 脚本:针对业务逻辑比较复杂的场景,华为云Astro轻应用平台提供了脚本(Script)能力,支持用户在线开发TypeScript脚本,完成灵活复杂的业务逻辑。 服务编排:服务编排是一种通过简单的拖拉拽式流程编排以及参数配置的方式来进行服务开发的能力,并支持对已开发的服务重新进行组合编排。 触发器:触发器以图形表示的方式将业务流程呈现给用户,触发器配置好后,用户不必手动执行这些操作,系统会自动执行。 工作流:工作流即业务流程管理,源自业界BPMN 2.0标准。低代码平台基于该规范实现了自己的业务流程管理系统,由于工作流本身已成为了业界一套行业规范,因此在低代码平台中称实现此类流程的引擎为工作流。 定时任务:通过创建定时任务,让系统自动执行某脚本、服务编排完成业务功能。例如,系统中存在一个定时任务,在每天凌晨3点,定时将到期的商品进行下架处理。 使用华为云Astro轻应用开发应用前端 标准页面:标准页面是一种将一个或多个通用基础组件拖进画布,进行低代码或无代码的配置,即可快速完成业务功能的前端页面。对于一般的业务应用系统,例如请假电子流、出差报销、在线投票等企业常见业务场景,其功能主要是针对业务数据的增、删、改、查,且前端界面的样式相对简单的页面,可以使用华为云Astro轻应用提供的标准页面。 高级页面:高级页面也是由一个或多个组件拼装而成,但是高级页面的组件是一个通用性强、功能丰富、可视化效果好的页面组成元素,因此高级页面主要用于对呈现效果要求比较高的场景,而标准页面主要用于后台管理类的表格表单类的开发。 报表:报表是华为云Astro轻应用对内部数据提供的一种汇总方式的视图。利用报表,可以让数据进行可视化的展示。 使用华为云Astro轻应用进行应用集成开发 使用连接器对接云服务:通过连接器将第三方系统集成到华为云Astro轻应用中,供应用中创建的服务编排或脚本使用。 通过数据接入将消息类数据接入华为云Astro轻应用:当需要从外部数据源获取数据,并按照需求对数据进行一系列处理后,转化成内部事件,输出给Kafka或者ROMA,这时可以通过配置“数据接入”,来实现整个流程。 开放接口供第三方系统调用:将华为云Astro轻应用中开发的脚本、服务编排等包装成自定义REST接口,供第三方系统进行调用。 使用华为云Astro轻应用对应用进行个性化设置 使用华为云Astro轻应用设置应用的外观:设置应用的导航框架布局、元素和样式。 使用华为云Astro轻应用管理应用中标准页面的主题:对标准页面的主题进行管理。 使用华为云Astro轻应用设置应用的导航栏菜单:自定义应用的主导航菜单树、应用的设置菜单和应用右上角的用户菜单。 使用华为云Astro轻应用设置应用的依赖与开放关系:建立应用与应用之间的依赖关系,可模块化构建复杂的解决方案,实现资产复用。 使用华为云Astro轻应用设置应用的兼容性:如果应用中包含一些在早期平台版本中开发的内容,而当前版本已经发生了变更,此时需要通过设置兼容性开关来恢复原来的功能。
  • 授权用户使用华为云Astro轻应用并购买实例 注册华为云后,系统会自动创建一个账号,账号是资源的归属以及使用计费的主体,对其所拥有的资源具有完全控制权限,可以访问所有云服务。为了保证您的账号安全,建议您创建一个或多个 IAM 用户并赋予系统管理员权限,用于购买华为云Astro轻应用实例。华为云Astro轻应用实例是一个独立的资源空间,所有的操作都是在实例内进行,不同实例间的资源相互隔离。 创建用户并授权使用华为云Astro轻应用:根据企业的业务组织,在您的华为账号中,给企业中不同职能部门的员工创建IAM用户,让员工拥有唯一安全凭证,并使用华为云Astro轻应用资源。 申请华为云Astro轻应用免费试用:华为云Astro轻应用支持申请免费试用,试用版可以使用的资源有限。华为云Astro轻应用免费试用版本不限制使用时间,不涉及华为云Astro轻应用退订及资源释放。 购买华为云Astro轻应用商用实例:华为云Astro轻应用免费版可使用的资源有限,标准版、专业版和专享版更适用于个人或企业的商用开发。 购买华为云Astro轻应用沙箱实例:在应用正式发布上线前,需要在测试环境进行测试和数据配置。在华为云Astro轻应用中,以沙箱(Sandbox)环境来作为测试环境,您也可以直接在开发环境进行测试。在沙箱环境测试的优势是不影响开发环境的配置,沙箱环境(Sandbox)是与开发环境完全隔离的。
  • 添加华为云Astro轻应用开发者用户 在账号下添加用户,可实现多人协助开发。为了方便同一个开发团队成员之间,能够更好地配合开发项目,在华为云Astro轻应用中同一个账号下的所有用户开发的内容都可以互相查看,配合开发。 为IAM用户添加华为云Astro轻应用开发者权限:将IAM用户添加到华为云Astro轻应用中,并赋予开发者权限。 为WeLink用户添加华为云Astro轻应用开发者权限:将WeLink用户添加到华为云Astro轻应用中,并赋予开发者权限。
  • 使用华为云Astro轻应用创建应用 在低代码平台中,您可以通过如下方式,开发各个场景的应用,以满足千行百业的各种需求。 使用华为云Astro轻应用创建一个空白应用:从后端到前端,从零开始,一步步完成应用的开发。 使用华为云Astro轻应用预置模板创建应用:当业务与应用模板中的场景相似度较高时,可以尝试使用应用模板创建,并在模板应用的基础上继续改造应用。 使用华为云Astro轻应用创建扩展应用:当需要基于已有应用或解决方案(不是单一的应用,某一解决方案会涉及到多个应用)进行定制时,可选择创建扩展类型应用。 使用华为云Astro轻应用创建应用资产:在华为云Astro轻应用中,除了开发低代码应用外,还支持开发资产组件或安装已有的资产组件,供其它应用复用。在华为云Astro轻应用中,支持创建业务对象和原生服务两种类型的应用资产。 使用华为云Astro轻应用创建业务对象:通过创建业务对象(Business Object,简称BO),来封装领域服务,供上层应用使用。一个BO提供一个完整场景的服务,为上层应用提供特定服务。不同用户可以开发各自的BO,在BO中创建逻辑使其具有特定的业务功能,开发好后制作成用户包并进行发布。将用户包分享给其他用户,其他用户安装BO包后,在上层应用(需要使用该BO服务的应用)中导入发布好的BO,即导入特定的业务功能进行使用。 使用华为云Astro轻应用创建原生服务:开发者在低代码平台外开发了一些服务,服务运行在Docker容器中。如果希望将这些服务集成到华为云Astro轻应用中,供华为云Astro轻应用内部应用或其他第三方系统调用时,可选择创建原生服务。本质上原生服务起到了一种桥接的作用,用于将原生服务的API集成到华为云Astro轻应用,使得运行于华为云Astro轻应用上的应用,更容易地使用原生服务的API。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全