华为云用户手册

  • 什么应用代码可以保护 应用包类型有资产包和源码包两种,仅资产包可设置是否受保护,源码包不受保护。 参考应用打包发布,选择“资产包”发布的应用包,包中组件可设置是否受保护。选择该项后,您需要配置版权信息(可选)、描述(可选)、每个组件的保护设置(必选。配置为未受保护或者只读保护)。 三种类型保护模式:未受保护、只读保护和不可见保护。相当于Linux下的三种保护模式,即可读可写可执行(RWX)、不可写(RX)和仅可执行(X)。
  • 什么是实例化数据包 实例化数据是应用需要自带的预设数据,用于支持应用的默认行为。 在AppCube平台中,实例化数据包是由以下三种类型数据的整体或部分构成的数据压缩包: 系统对象数据。AppCube系统定义的实例化数据主要是用户在开发应用过程中平台产生或用户使用平台功能生成的,在应用安装完成后能够进行配置的数据。 标准对象数据。AppCube平台内部自带的或第三方提供的标准对象数据,标准对象实例化数据包括了平台内置的(例如Account、Contact)以及订购了基线应用所提供的对象的实例化数据。 自定义对象数据。由用户通过建立自定义对象,并通过界面或接口生成的记录数据。 应用在发布时,包含一些初始化的数据,可通过进入App视图在左侧菜单栏下方单击或者进入管理台单击右侧图标,使用SQL语句查询对象及对象的数据,详情可参考使用控制台分析查询SQL。
  • 如何导入导出数据 实例化数据可以通过AppCube平台的“数据导出”功能,以对象的方式导出到本地;安装实例化数据可以通过平台的“数据导入”功能实现。 数据导入导出的具体操作,请参考如何导入导出数据。 数据修改后,升级没变化:不是同一条数据,即ID不一致。 对象存在,但数据导出里面找不到该表:开发界面里对象属性“允许API批量访问”未勾上。 报错“parsing request parameters content of JSON failed: 'record'”:表中存在lookup/masterdetail类型的字段,该字段的值必须为id,不能是普通的值。 报错“file server exception, receive response failed, TrackerTask RecvHeader recv resp status 28 != 0”:文件服务器异常,需要咨询运维处理。
  • 自定义OAuth2授权码模式接入鉴权 配置OAuth管理中介绍了第三方系统访问AppCube时,如何配置接入鉴权,通过鉴权认证的第三方系统才可访问AppCube。在AppCube中开发的应用也可以通过自定义OAuth2授权码模式接入鉴权,当应用配置鉴权后,只有通过鉴权的第三方系统才可访问应用。 参考配置OAuth管理中操作,获取鉴权ID“client_id”和鉴权密钥“client_secret”。 在新版应用设计器的集成中,开发者通过自定义接口,给第三方接入调用,用于第三方系统获取授权码code。 应用调用脚本API,判断第三方客户端的鉴权ID“client_id”和重定向地址“redirect_url”是否和注册接入鉴权时匹配。 如果匹配,则由平台应用自定义接口,实现登入跳转和授权跳转。在授权完成后,再调用脚本API获取授权码code,并将需要展示给第三方的授权用户信息,通过该API传给AppCube,AppCube会返回一个code,然后应用重定向到“redirect_url”,并携带code。 判断第三方客户端的鉴权ID“client_id”和重定向地址“redirect_url”是否和注册接入鉴权时,匹配的API样例如下: // Here's your code.import * as oauth from 'oauth'let handle = oauth.getAuthorizeHandle()let clientDatas: oauth.clientDataFromApp = { redirect_uri: "http://10.26.30.68:14000/appauth/code", client_id: "bff4398905ee4a918722debec98b594c",}let pass = handle.checkURL(clientDatas)console.log(pass) //trueif (pass){//判断是否登入,做登入跳转//判断是否授权,做授权跳转} 获取授权码code的脚本API样例如下: // Here's your code.import * as oauth from 'oauth'let handle = oauth.getAuthorizeHandle() //前面步骤已经走完let clientDatas: oauth.clientDataFromApp = { redirect_uri: "http://10.26.30.68:14000/appauth/code", client_id: "bff4398905ee4a918722debec98b594c",} let userInfo = { "name": "jack", "phone": "1256287222", "email": "dsfsdf.com"} let code = handle.getAuthCode(clientDatas, userInfo)console.log(code) //WEUcqXbeQDKUHxcn8til3Q 第三方系统接收到该请求,并解析出code后,在自己的后端访问AppCube接口获取access_token,其步骤和配置OAuth管理中一致。 第三方系统在获取到access_token后,使用该凭证访问平台“https://AppCube域名/u-route/baas/oauth/v1.0/third/userinfo”接口,来获取授权用户的信息。 响应示例如下: { "resCode": "0", "resMsg": "成功", "result": { "email": "dsfsdf.com", "name": "jack", "phone": "1256287222" }}
  • 相关操作 (可选)设置字段访问权限。 默认批量创建自定义字段后,所有权限Profile都会添加批量导入自定义字段的访问权限。若需要单独设置某些字段的访问权限,请执行该步骤。 单击自定义字段列表中的具体字段名,进入自定义字段详情页,单击“设置字段级权限”,可单独设置字段的访问权限,即哪些权限Profile可以查看或修改该字段。 图16 单击字段名 图17 设置字段级权限入口 图18 设置字段级权限 (可选)将对象字段添加到对象的页面布局: 默认批量创建自定义字段后,所有自定义字段都会显示在布局页面。若需要修改对象页面布局中字段,请执行该步骤。 在对象配置页面选择“布局”页签,单击“visitorlnfo Records”,进入对象布局页面后,选中页面中的表格组件,可在布局页添加或者删除字段。 图19 进入布局页 图20 添加或者删除字段
  • 操作步骤 登录AppCube开发环境,进入一个已创建好的应用。 创建一个自定义对象“visitorlnfo”。 在一个应用目录上,例如“Model”,单击 “+”,在弹出菜单中选择“对象”。 图1 创建对象 输入对象的标签为“visitorlnfo”,单击名称系统会自动生成该值,单击“添加”。 图2 设置对象名称 实际创建的自定义对象将会自动拼接命名空间前缀,以及对象标识后缀,即“CNAME__visitorlnfo__CST”。对象创建后,仅包含一些内置的标准字段,您可以继续以下步骤使用模板批量创建自定义字段。 下载对象字段模板: 在已创建的对象中,选择“自定义字段”页签,单击“批量创建”,然后单击“下载模板”,将字段模板Excel下载到本地。 图3 下载模板 在本地打开上一步下载的字段模板,单击左上角“启用内容”启用宏。 图4 启用宏 打开字段模板后,需要先单击“启用内容”,启用字段模板中的宏。如果不启用宏,字段模板将不校验字段属性,影响您使用。 您如果初次使用请在“Note”页签阅读字段模板说明,其中包含命名空间配置。“Example”页签提供了字段批量定义示例。 图5 模板说明 使用字段模板创建字段。 在表底部,选择“Data”表进入字段编辑页面。 图6 进入Data表 创建字段即在“Data”表中,填写各字段属性值,包括字段类型、标签、名称、数据长度以及默认值等,其中必填项单元格表头会有红色*号,背景置灰的单元格无法填写。 选中C列表头,显示当前列为“数据类型”。C列用于设置字段类型,设置字段类型后,不是当前字段类型的其他属性将会置灰。 图7 查看C列标题中文描述 单击C列第一行,在下拉选项中,选中您的第一字段“CNAME__matter__CST”的字段类型为“Text Area”。 图8 设置字段类型 分别在A列设置字段的标签、在B列设置字段的名称,其中B列值需要唯一,即字段名不能重复。A列可以为中文,B列为字段名称不能是中文。 图9 设置字段标签及名称 A列B列分别对应AppCube中自定义字段的标签、名称。 图10 AppCube自定义字段 单击必填列的列名,查看该列属性值的中文描述,然后依次设置当前字段的其他属性值。 图11 设置字段属性值 设置完成后,保存表格。 实例模板可单击下载链接另存到本地解压获取,供您体验导入一个对象字段模板使用。 本步骤实例模板“字段类型中英文对照及说明”页提供了字段类型中英文对应关系及字段类型说明。 图12 字段类型说明 在AppCube中批量导入对象(例如visitorlnfo)的自定义字段。 在对象配置页面选择“自定义字段”页签,单击“批量创建”,选择“批量导入字段”。 图13 进入自定义字段页面 在弹窗中拖入编辑好的字段模板,单击“确定”。 图14 拖入字段模板 导入字段模板成功后,系统会自动批量创建已定义好的所有字段。自定义字段列表将如下图所示。 图15 导入后的字段
  • 如何使用错误码 系统支持对错误码信息进行多语言国际化配置。您可以通过配置错误码,实现根据用户使用的语言不同将错误码信息进行不同的展示。 自定义错误码。 在App视图下左侧菜单栏下方选择“配置”,在打开的页签选择“自定义错误码”。 配置“显示名称”,该名称将会显示在运营配置页签。 单击“新建”。 您也可单击“导入”,选择系统中已创建的错误码进行导入。 参照表7配置错误码参数,单击“保存”。 图7 新建错误码 表7 错误码参数说明 参数 参数说明 名称 客户自定义的错误码。建议以字母打头。 包括命名空间,长度不超过64个字节。 系统根据“名称”和“语言”匹配错误码进行展示。请保证“名称”+“语言”唯一。 类别 该错误码所属的分类。 Http状态码 Http协议状态码。 语言 请根据实际情况从下拉列表中选择语言类型。目前支持中文、英文、西班牙语、法语和缅甸语。 单击“新增”支持创建多语言错误码。 单击语言后的“?”显示:请在翻译工作台中添加支持的语言。单击“翻译工作台”可跳转至翻译工作台配置页面。 格式 错误码信息描述。在描述中,可以用{Number}表示变量名。例如 {0} 表示第一个输出变量,{1} 表示第二个输出变量,以此类推。 长度不超过255个字节。 创建脚本。 在脚本中调用抛出错误信息的error函数I18nError('ErrorCodeName','变量1','变量2')。该函数中输入参数为错误码名称"t__testErrorCode"和错误码信息中所携带的变量("val1"和"val2")。 // test custom error func , get diff language error by user langimport * as error from 'error';export class TestDemo { @action.method({ label: 'test', description: 'error code', input: 'No input', output: 'No output' }) public test() { //使用I18nError函数设定错误码和错误码信息携带变量 throw new error.I18nError('t__testErrorCode', ["val1", "val2"]); }} 按照如何定义API接口中的步骤绑定上述开发的脚本,进行测试,最终根据用户使用的语言返回相应语言的错误信息。 图8 自定义错误信息测试
  • 自定义OAuth2授权码模式接入鉴权 前面介绍的是第三方系统访问AppCube时,如何配置接入鉴权,通过鉴权认证的第三方系统才可访问AppCube。 在AppCube开发的应用也可自定义OAuth2授权码模式接入鉴权,当应用配置鉴权后,只有通过鉴权的第三方系统才可访问应用。 参考1~4获取鉴权ID“client_id”和鉴权密钥“client_secret”。 在应用开发界面,开发者通过自定义接口,给第三方接入调用,用于第三方系统获取授权码code。 平台应用调用脚本API,判断第三方客户端的鉴权ID“client_id”和重定向地址“redirect_url”是否和注册接入鉴权时匹配。如果匹配,则由平台应用自定义接口,实现登入跳转和授权跳转。在授权完成后,再调用脚本API获取授权码code,并将需要展示给第三方的授权用户信息通过该API传给AppCube,AppCube会返回一个code。然后应用重定向到“redirect_url”,并携带code。 判断第三方客户端的鉴权ID“client_id”和重定向地址“redirect_url”是否和注册接入鉴权时匹配的API样例如下: // Here's your code.import * as oauth from 'oauth'let handle = oauth.getAuthorizeHandle()let clientDatas: oauth.clientDataFromApp = { redirect_uri: "http://10.26.30.68:14000/appauth/code", client_id: "bff4398905ee4a918722debec98b594c",}let pass = handle.checkURL(clientDatas)console.log(pass) //trueif (pass){//判断是否登入,做登入跳转//判断是否授权,做授权跳转} 获取授权码code的脚本API样例如下: // Here's your code.import * as oauth from 'oauth'let handle = oauth.getAuthorizeHandle() //前面步骤已经走完let clientDatas: oauth.clientDataFromApp = { redirect_uri: "http://10.26.30.68:14000/appauth/code", client_id: "bff4398905ee4a918722debec98b594c",} let userInfo = { "name": "jack", "phone": "1256287222", "email": "dsfsdf.com"} let code = handle.getAuthCode(clientDatas, userInfo)console.log(code) //WEUcqXbeQDKUHxcn8til3Q 第三方系统接收到该请求,并解析出code后,在自己的后端访问AppCube接口获取access_token,其步骤和6一致。 第三方系统在获取到access_token后,用该凭证访问平台“https://AppCube域名/u-route/baas/oauth/v1.0/third/userinfo”接口(注意,该接口和8中的接口不同),来获取授权用户的信息。 响应如下: { "resCode": "0", "resMsg": "成功", "result": { "email": "dsfsdf.com", "name": "jack", "phone": "1256287222" }}
  • 如何进行鉴权 AppCube采用OAuth 2.0协议进行接入认证。第三方系统在调用AppCube业务接口前,需要在AppCube上进行鉴权注册,获取接入客户端ID、密钥等鉴权信息,才能实现调用AppCube业务接口。 AppCube平台提供了两种授权模式进行Oauth鉴权,分别是“客户端模式”和“授权码模式”,两种授权模式适用的鉴权范围有所不同。 通过“客户端模式”获取的access-token可用于调用API接口时进行鉴权,使用时在请求消息头上设置“access-token”。 通过“授权码模式”获取的access-token只用于获取用户信息时进行鉴权,使用时在请求消息头上设置“Authorization”。 每个OAuth都有特定的用途,建议为不同的第三方系统单独新建一个OAuth。
  • 如何定义API接口 在AppCube开发环境首页,单击某个应用,进入应用开发页面。 单击左下角的“服务”,进入服务管理页面。 图1 服务 图2 服务管理界面 私有接口:使用私有接口,您可以将服务编排的URL映射到内部网关,提供给内部脚本、服务编排等流程调用。对于BO可以定义私有接口。 公共接口:使用公共接口,您可以将服务编排、脚本或对象的URL映射到外部网关,第三方可以通过OAuth2.0调用。 内部网关:仅当前租户能够访问映射到内部网关中的自定义接口,即只有同一租户下的脚本、服务编排等才能调用发布的私有接口。 外部网关:其他租户或第三方系统均可访问映射到外部网关中的自定义接口。 单击“新建”,填写表1中参数,单击“保存”。 表1 API信息 参数名 参数说明 标签 API接口标签。 操作名称 API接口名称。 版本 API接口版本,格式为“x.y.z”。 URL API接口路径, 固定以 /service/{命名空间}__{应用名}/{版本} 开头, 后面接API的具体路径。 内容类型 请求中的body类型。 application/json multipart/form-data binary-data “multipart/form-data”和“binary-data”用于文件上传接口,选择该内容类型,只能调用post类型的脚本。 分类 该接口所属的分类。 选填项,直接输入。 描述 关于该自定义API的描述信息。 类型 选择资源类型,只有服务编排类型的接口能够在服务编排中被调用,其他类型接口只能通过API的形式进行调用。 服务编排:表示该定义URL调用的接口类型是服务编排。 脚本:表示该定义URL调用的接口类型是脚本。 对象:表示该定义URL是操作对象数据,包括对象数据的增删改查。 自定义响应 是否需要格式化调用该URL后返回的响应消息。如果勾选,表示对响应消息进行格式化,删除resCode、resMsg、result外层信息,只透传返回的消息。 例如,不勾选“自定义响应”,返回如下响应消息: { "resCode": "0", "resMsg": "成功", "result": [ { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } ]} 则勾选“自定义响应”后,只返回如下响应消息: { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2"} 资源 根据类型选定需要绑定的资源,如脚本,服务编排或者操作的对象名称。 注意: 如果您找不到想绑定的服务编排或脚本,请检查服务编排或脚本是否启用,如果没有启用请单击按钮启用。 对象操作 当“类型”选择为“对象”时,该参数才会显示。 Insert Record:新增对象数据。 Update or Insert Record:更新或者新增对象数据。 Update By ID:按记录ID更新对象数据。 Delete By ID:按记录ID删除对象数据。 Query By ID:按记录ID查询对象数据。 Update By Condition:按条件更新对象数据。 Delete By Condition:按条件删除对象数据。 Query By Condition:按条件查询对象数据。 方法 API接口的HTTP方法。 GET:请求服务器返回指定资源。 PUT:请求服务器更新指定资源。 POST:请求服务器新增资源或执行特殊操作。 DELETE:请求服务器删除指定资源。 PATCH:请求服务器更新资源的部分内容。当资源不存在的时候,PATCH可能会去创建一个新的资源。 单击API接口列表操作栏按钮,查看定义的API信息。单击“测试一下”可模拟API接口调用。 图3 API接口请求参数信息 图4 API接口返回参数信息 API接口的请求参数和返回消息体,为绑定的资源(如脚本,服务编排等)所配置的入参和出参。
  • 如何使用自定义错误码 自定义错误码创建完成后,可在脚本中使用。在脚本中,调用抛出错误信息的error函数I18nError('ErrorCodeName','变量1','变量2')。该函数中,输入参数为错误码名称"t__testErrorCode"和错误码信息中所携带的变量("val1"和"val2")。 创建脚本。 在新版设计器页面,单击左侧导航栏中的“逻辑”。 单击脚本后的,进入新增脚本页面。 设置脚本的名称,模板选择“空脚本”,单击“添加”。 在脚本编辑器中,输入如下代码。 // test custom error func , get diff language error by user langimport * as error from 'error';export class TestDemo { @action.method({ label: 'test', description: 'error code', input: 'No input', output: 'No output' }) public test() { //使用I18nError函数设定错误码和错误码信息携带变量 throw new error.I18nError('t__testErrorCode', ["val1", "val2"]); }} 其中,“t__testErrorCode”为自定义错误码名称,请根据实际情况配置。 单击,保存脚本后,单击,启用脚本。 按照如何定义API接口中操作,绑定上述开发的脚本,进行测试。 图3 自定义错误信息测试
  • 操作步骤 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“逻辑”。 单击脚本后的,设置脚本名称,单击“添加”。 图1 新增一个空脚本 在脚本编辑器中,输入如下代码。 // Here's your code.import * as connector from "connector";let client = connector.newClient("LT927__test", "test1");let result = client.invoke("LT927__flapRefund", {});console.log(result) 其中,“LT927__test”表示连接器的名称,“test1”为创建Rest Service(自定义连接器)配置的认证信息名称,“LT927__flapRefund”为6中配置的动作名称。 单击脚本编辑器页面上方的,保存脚本。 脚本保存成功后,单击,运行脚本。 在页面底部“输入参数”页签中,输入请求参数,单击测试窗口右上角的。 在“日志”页签,查看打印的日志。
  • 绑定数据模型、设置组件属性 设置组件绑定的数据模型,有自定义对象、对象、服务以及事件四种,以下是绑定模型、设置组件属性的大致步骤。 向页面中拖入一个表格(新)组件,单击“表格”页签,在表格属性“数据绑定”中单击齿轮图标,绑定数据模型。 图2 数据绑定 在弹出页面中单击“新增模型”。 设置表格的数据模型,如下图所示,添加对象模型,模型名称“equipmentInstance”,单击“下一步”。 图3 创建数据模型 “选择对象”选择一个提前创建好的对象,例如“HW__Equipment__CST”,“选择字段”中选择表单中需要展示的字段,单击“下一步”,然后单击“确定”。 图4 选择展示字段 勾选刚建好的数据模型,单击“确定”。 绑定对象模型后,显示如图5所示。 系统默认添加了斑马纹,如果不需要,可在表格属性的“基本设置”中关闭“斑马纹”。 图5 绑定数据模型后的结果列 参考表1和表2配置表格属性。 表1 表格(新)属性说明 参数名 说明 序号 是否显示序号列,序号累加显示。 自动加载 预览或加载页面时是否自动加载数据。仅当模型为对象模型时有效,启用后,预览或加载页面时,将调用后台的对象查询接口自动加载数据,不需要通过事件触发。 单选 启用后,显示单选按钮。 多选 启用后,显示多选按钮。与属性“单选”互斥,只能勾选“单选”或“多选”的一种。 斑马纹 是否显示间隔斑马纹。 表头 是否显示表头。表头的对齐方式,支持left、center、right 表格边框 表格边框样式设置。 显示完整边框 显示默认边框 显示外边框 显示内边框 隐藏全部边框 文字对齐方式 表格中文字整体的对齐方式。 编辑数据的方式 编辑表格中数据的方式,可以设置“链接到页面”编辑数据。 设置“链接到页面”时需要配置关联的页面名称,例如配置“详情页”、“添加页”、“修改页”的页面名称。 若在当前页面编辑数据,则清空“编辑数据的方式”值。 调整列宽 展开“高级设置”,可查看到该参数。设置项只在电脑端有效。表示是否支持拖拽调整列宽。 表头溢出省略 展开“高级设置”,可查看到该参数。设置项只在电脑端有效。当每列的表头内容超过表格当前列宽后,是否设置超过的部分为省略号。 内容溢出省略 展开“高级设置”,可查看到该参数。设置项只在电脑端有效。当每列的内容超过表格当前列宽后,是否设置超过的部分为省略号。 尺寸 设置项只在电脑端有效。表示表格整体尺寸。 表格最大高度 设置项只在电脑端有效。表示表格的最大高度,单位为px。 表格固定宽度 设置项只在电脑端有效。表示表格的固定宽度,单位为px,为0表示不限制。 表格固定高度 设置项只在电脑端有效。表示表格的固定高度,单位为px,为0表示不限制。 设置后,如果表数据内容超出该高度,会自动固定表头。 分页设置/启用 可以选择是否启用分页。 风格 启用分页后,可以对分页风格等进行设置。 默认分页大小 启用分页后,默认的分页大小。 每页大小选项列表 启用分页后,每页显示的条数选项列表,例如[10,20,40]。 分页显示位置 启用分页后,分页的显示位置。 查询条件 扩展表格能力,可以在表格上方添加查询条件,快速查询数据。 单击“+ 新建”,设置条件文字的对齐方式、文字宽度、排列方式、按钮(查询、重置按钮)是否单独一行以及选择查询的条件字段。 工具栏设置 扩展表格能力,单击“+ 新建”,可以在表格上方添加工具栏,系统预置了新建、删除、打印、刷新,可根据需要进行选择。 操作列 单击“+ 新建”,可以在表格列配置单独的操作列,系统预置了详情、修改、删除,可根据需要进行选择。 展开行 单击“设置”,可以配置展开行后显示的字段,配置后系统自动在每行下方生成字段展示区域。 表格列 表格列生成后,单击“设置”,可以进行列的配置调整:支持配置列对齐方式、是否固定列、调整列宽、该列是否排序、列是否支持筛选、列是否支持合计等配置。 表格列的属性请参见表2。 在表格属性中单击“表格列”后的“设置”,表格列的属性参数说明如表2所示。 图6 设置表格列 表2 “表格列”属性配置说明 参数名 说明 对齐方式 该列的对齐方式:居左、居中、居右。 是否固定列 是否固定列:不固定、固定左侧、固定右侧。 当横向内容过多时可以配置固定左侧或者固定右侧。 列宽 列的宽度,单位为px,为0表示不限制。 排序 列是否开启排序功能。例如打开排序开关,列头效果为。 筛选 列是否开启筛选功能,筛选条件:多选、单选、相等或者包含。 例如设置支持筛选且多选,列头效果如下。 合计 列是否开启合计功能,支持统计:合值、平均值、最大值、最小值、数量。 表格列开启合计后,系统自动在表尾生成合计行进行信息展示。 显示平台 列支持的显示平台:电脑端、移动端。 移动端配置 在移动端支持多级表头设置。该列在移动端显示为主标题还是副标题。 展示方式 单击齿轮图标,可设置如下属性: 选择字体:该列文字的字体。 字号大小 字体颜色 文字背景 选择字型:例如加粗、斜体、下划线 单元格:是否展示单元格,效果示例:。只有勾选“单元格”,展示方式中的上述配置(例如字体、字号大小等)才生效。 是否添加组件 是否添加图标。选择“添加图标”后,要设置图标展示形式、图标和颜色。效果示例:。 选择图标时,支持从以下三个页签选择图标: 预置图标:系统预置了一些图标显示在该页签供用户选择。 自定义库图标:从自定义的库图标中选择图标。 存储图标(不推荐):从存储中选择已上传的图标。
  • 有什么应用类型可以打包 在对轻应用或者行业应用打包时,打包类型支持打资产包或者源码包,它们的区别请参见源码包与资产包对比。打包说明如下: 源码包:该类型包中的所有组件都不受保护和限制,源码包只能发布到“我的仓库”。在其他环境安装后可编辑包中组件,即在原有基础上可进行再开发。若后续其他用户在开发环境安装后,会显示在开发环境首页的“项目”页签下。 资产包:该类型支持设置包中的组件是否受保护。打包时不做编译设置,默认打出的包都是资产包,包中组件都为只读保护模式,将包安装到其他环境时,只能运行和预览。不可编辑包中组件。若后续其他用户在其他开发环境安装资产包后,应用会显示在开发环境首页的“库”页签下。 发布应用包时,在应用开发页面左侧单击,会出现如下图所示界面,AppCube资产包支持多种发布方式。 图1 应用发布方式 表1 发布说明 发布方式 说明 我的仓库 即发布到租户私仓,开发好应用后,将应用发布到我的仓库,可供其他用户在其他开发环境、沙箱环境、运行环境中下载安装软件包,以便于测试或者使用该软件。 华为OneMobile 可将App中的标准页面和高级页面发布到华为OneMobile。需要输入华为OneMobile的用户名和密码或扫码进行授权登录。选择该方式发布后在华为OneMobile上可生成应用程序二维码,扫码后按照提示可体验该应用。 华为OneMDOS 将应用小程序发布到OneMDOS。 发布到华为OneMDOS为白名单特性,需要联系后台管理人员开通后方可使用。 WeLink-We码 华为云的企业WeLink,融合消息、会议、邮件、音视频、小程序等服务,打造企业数字化办公协作平台,实现团队、知识、业务、设备的全面连接。AppCube允许将标准页面或高级页面以小程序(即应用)的方式发布到企业WeLink,提供给企业用户使用。 WeLink-轻应用 AppCube支持将应用发布成WeLink轻应用,提供给WeLink企业用户使用。 微信 可将App中的标准页面和高级页面发布到微信小程序。 下载前端运行包 选择该方式可生成前端运行包。获取包后可运行在如下容器中: 华为OneMobile 蓝标WeLink Web容器(目前Web容器中运行当前只支持高级页面) 开天企业工作台 将应用小程序发布到华为开天企业工作台。 开天企业工作台是企业一站式数字化工作台,是企业应用的统一门户,为企业提供了用户、组织的统一管理,应用的统一管理和授权及应用间的单点登录,提升企业的办公效率。更多相关介绍请参考开天企业工作台产品文档。 发布到华为开天企业工作台为白名单特性,需要联系后台管理人员开通后方可使用。
  • 开天企业工作台 发布到华为开天企业工作台为白名单特性,需要联系后台管理人员开通后方可使用。 参考1~3,开发好应用后,进行编译设置,编译设置时请选择“资产包”。 在应用开发页面左侧单击,选择“开天企业工作台”。可将App中的标准页面和高级页面发布到华为开天企业工作台。 在弹出的页面设置用户访问首页和管理后台首页,单击“发布”。 图10 发布开天企业工作台设置 页面显示“发布成功”,则表示应用已成功发布到开天企业工作台。 登录开天企业工作台管理后台,参考应用权限控制设置应用可见范围。
  • 二维码 二维码组件用于根据文本内容或者链接地址生成二维码,用户通过微信或者支付宝扫描二维码,可查看到文本内容或者跳转到相应的链接。 向标准页面中拖入一个二维码组件,在右侧显示属性配置面板。配置后单击页面上方保存页面,单击预览页面,可查看生成的二维码。 图1 配置二维码组件 属性 说明 内容或链接 设置扫描二维码后,要展示的文本内容或者跳转的链接地址。 宽度 二维码的宽度,单位像素。 默认值:150 容错级别 二维码被遮挡或残破时依然能被识别的几率,容错级别越高抗残破或遮挡的能力就越强。 空白间距 四周空白间距,单位像素。 前景色 二维码的颜色。 背景色 背景颜色。 中间Logo 二维码中间Logo图片,可不用设置。 设置Logo后,如果扫描二维码识别失败,可以调高容错级别或调大二维码。 Logo大小 Logo大小,单位像素。 具体使用示例可参考扩展知识。 父主题: 平台标准组件介绍
  • 支持自动审批 AppCube支持用户任务自动审批功能,例如设置“主管审核”任务自动审批。在用户任务配置界面,指定该任务具体某一接收人,可使用表达式的形式将任务指派某一用户,在自动审批中进行设置: 流程触发人自动通过:若勾选该选项,任务接收人是流程触发人时,该用户任务会被自动审批。 已审批过该流程的审批人自动通过:若勾选该选项,任务接收人在当前BPM实例中已审批过其他用户任务,则该用户任务会被自动审批。 图1 自动审批设置 当任务接收人设置为“当前泳道”对应的工作队列或者用户组时,将无法使用自动审批功能。只有任务接收人设置为某一用户时,才可进行自动审批。 父主题: 深入了解用户任务
  • 脚本中调用连接器 您可以在脚本中调用连接器实现与SMTP的对接,下面以新建一个脚本实现发送邮件为例进行说明。 鼠标放在App下的Logic文件夹旁会出现加号,单击加号,选择“脚本”。 选择“创建一个新脚本”,输入基本信息,单击“保存”。 在脚本编辑器中输入如下代码。 // 导入连接器import * as connector from 'connector';//新建SMTP邮件连接器,第一个参数固定是emailsmtp,第二个参数是连接器的名称let client = connector.newClient("emailsmtp","命名空间__smtp01");//构建请求消息头,包括收件人地址、邮件主题、邮件正文(主题和正文不能同时为空)//按内容发送let req ={"address":"test@huawei.com","subject":"SMTP功能验证-脚本","body":"使用SMTP发送邮件"};//按模板发送,如果有template模板参数,则主题和正文配置无效,按邮件模板中的内容发送//let req={"address":"test@huawei.com","template":"smtptt1."}//发送邮件,其中第一个参数不用填写,第二个参数为消息体let resp = client.invoke("",req); 其中,connector.newClient中“命名空间__smtp01”为连接器的名称,address为收件人,subject为主题,body为邮件内容。 单击代码编辑页面上方,保存脚本。 运行测试脚本。 单击编辑器上方的,执行脚本。 3中已设置入参,故此处不需要再设置,直接单击测试窗口右上角图标。 检查收件人是否收到邮件。 收到邮件,表示成功调用连接器,如图4。 图4 接收邮件内容 单击代码编辑页面上方,启用脚本。
  • 视频播放 该组件用于播放视频,支持的格式有:MP4、OGV、WebM。 向工作区域中拖入一个“视频播放”组件,选择该组件,在右侧“属性”页签显示可配置属性参数。 表1 组件属性说明 参数名 说明 自定义视频地址 输入自定义视频的视频地址。 封面 选择或上传图片作为视频封面。 控制条 是否显示控制条。 静音 是否静音。 自动播放 是否自动播放。 倍速播放 是否支持倍速播放。 打开该开关后,打开页面播放视频时可设置0.5、1、1.5、2倍速播放视频。 循环播放 是否循环播放。 父主题: 平台标准组件介绍
  • 背景信息 AppCube高级页面支持设置全局状态,通过页面级内存方式共享数据,即采用集中式存储管理页面的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。通俗的说,全局状态可理解为页面中所有组件的共享状态,不管组件在页面的哪个位置或层级,任何组件都能获取状态或者触发状态改变的动作。全局状态相当于全局变量,属性是私有的,需要在组件的js文件中使用预置的“this.$mstore.dispatch”方法来修改状态数据。 什么情况下我应该使用全局状态?当页面组件构成比较简单,组件间不需要频繁地进行信息交互时,则不需要设置全局状态;反之,则建议使用全局状态,通过设置并使用全局状态,可以帮助我们管理页面所有组件的共享状态。
  • 操作步骤 在高级页面开发界面,单击右上角,定义全局状态。 定义全局状态使用JavaScript编程语言,不支持TypeScript。全局状态结构固定以MStore命名,每个页面仅包含一个全局状态实例,方便在组件调试的过程中轻易地取得整个当前页面状态的快照。全局状态的结构定义由以下三部分组成。 state:定义页面所有组件的初始状态数据,即页面中所有组件共享状态的初始数据源。 mutations:状态变更的唯一方法是提交mutation。mutation以声明方式将state变化映射到视图。每次state的变更都需要定义一个mutation。mutation使用对象风格的提交方式,整个对象都作为载荷(payload)传给mutation函数。mutation都是同步事务。 actions:通过actions执行状态数据变更,用于衔接state和mutation。Action可以包含任意异步操作。通常用于绑定状态和组件。可以调用服务。 在页面的组件js文件中使用预置的“this.$mstore.dispatch()”方法来修改状态数据。 系统还预置了onStateChanged(state) 方法,用于监听属性整个全局状态的变更。
  • 背景信息 API Explorer是华为云为开发者提供的一站式API解决方案的统一平台,集成华为云云服务开放API,支持全量快速检索、可视化调试、帮助文档,帮助开发者快速查找、学习API和定位修复错误。 AppCube通过对接API Explorer可获取到大量华为云云服务的API元数据信息,从而为开发者提供访问这些API的连接器,无需再针对每个云服务单独开发连接器。 AppCube当前支持对接如下云服务的API: 自然语言处理 自然语言处理(Natural Language Processing,简称NLP)是一款基于人工智能技术,针对各类企业及开发者提供的用于文本分析及挖掘的云服务,旨在帮助用户高效的处理文本。更多内容请参见https://support.huaweicloud.com/nlp/。 对话机器人服务 对话机器人服务(Conversational Bot Service) 是一款基于人工智能技术,针对企业应用场景开发的云服务,主要包括智能问答、智能质检、定制对话机器人和任务型对话等功能。更多内容请参见https://support.huaweicloud.com/cbs/。 人脸识别服务 人脸识别服务(Face Recognition Service,简称FRS),是基于人的脸部特征信息,利用计算机对人脸图像进行处理、分析和理解,进行身份识别的一种智能服务。更多内容请参见https://support.huaweicloud.com/face/。 内容审核服务 内容审核(Content Moderation),基于图像、文本、视频审核技术,可自动进行涉黄、广告、涉政涉暴、涉政敏感人物等内容检测,帮助客户降低业务违规风险。更多内容请参见https://support.huaweicloud.com/moderation/。 文字识别服务 文字识别(Optical Character Recognition,简称OCR)以开放API的方式提供给用户,用户使用Python、Java等编程语言调用OCR服务API将图片识别成文字,帮助用户自动采集关键数据,打造智能化业务系统,提升业务效率。更多内容请参见https://support.huaweicloud.com/ocr/。 图像识别服务 图像识别(Image Recognition),基于深度学习技术,可准确识别图像中的视觉内容,提供多种物体、场景和概念标签,具备目标检测和属性识别等能力,帮助客户准确识别和理解图像内容。更多内容请参见https://support.huaweicloud.com/image/。 图像搜索服务 图像搜索(ImageSearch)基于深度学习与图像识别技术,结合不同应用业务和行业场景,利用特征向量化与搜索能力,帮助客户从指定图库中搜索相同或相似的图片。更多内容请参见https://support.huaweicloud.com/imagesearch/。 视频接入服务 视频接入服务(Video Ingestion Service,简称VIS)是华为云提供的实时视频数据接入服务,提供了摄像头视频数据采集、实时数据分发和视频数据转储等能力。借助视频接入服务,您可以与华为云视频分析服务集成,快速构建基于实时视频数据的智能分析应用。更多内容请参见https://support.huaweicloud.com/vis/index.html。 视频分析服务 视频分析服务(Video Analysis Service,简称VAS)依靠AI技术对视频进行智能分析,提供了视频预处理、视频审核、视频内容分析、视频编辑、视频搜索、视频指纹等功能。包含了对视频中目标的检测、跟踪、属性识别、行为识别、内容审核、摘要、标签等能力,在多种场景下为用户提供快捷高效的视频分析能力。更多内容请参见https://support.huaweicloud.com/vas/。 语音交互服务 语音交互服务(Speech Interaction Service,简称SIS)是一种人机交互方式,用户通过实时访问和调用API(Application Programming Interface,应用程序编程接口)将语音识别成文字或者将文本转换成逼真的语音等。更多内容请参见https://support.huaweicloud.com/sis/。
  • 前提条件 已在华为云的自然语言处理 NLP注册帐号下获取如下关键信息。 登录华为云官网。 如果您没有华为云帐号,请立即注册,相关操作请参见如何进行帐号注册。注册后参考企业帐号如何完成实名认证完成企业帐号实名认证。 获取项目ID。 单击右上角的“控制台”,进入“管理控制台”界面。 鼠标移动至用户名处,在下拉列表中单击“我的凭证”,进入“我的凭证”页面。 在“API凭证”页签下,获取所用NLP资源对应区域的项目ID。 图1 获取项目ID 参考获取AK/SK获取AK(Access Key ID)、SK(Secret Access Key),即访问密钥对。
  • 脚本中调用连接器 您可以在脚本中调用连接器实现调用ModelArts的接口,这里以新建一个脚本实现识别花卉图片为例进行举例说明。 鼠标放在App下的Logic文件夹旁会出现加号,单击加号,选择“脚本”。 选择“创建一个新脚本”,输入基本信息,单击“添加”。 编辑代码如下: import * as modelarts from 'modelarts';export class Input { @action.param({ type: "String", required: false, description: "the image url" }) url: string; @action.param({ type: "String", required: false, description: "the base64 coded image" }) image: string; @action.param({ type: "String", required: false, description: "" }) apigCode: string @action.param({ type: "String", required: false, description: "" }) modelId: string}export class Output { @action.param({ type: "string" }) result: string;}export class testModelarts { @action.method({ input: "Input", output: "Output", description: "modelartspro test case" }) run(input: Input): void { // 填写实例化的modelartspro连接器名称 let client = modelarts.newClient("testArts") let result = null result = client.modelArtsWithURL(input.url, input.apigCode, input.modelId); console.log(result) return result }} 代码modelarts.newClient("testArts")中“testArts”为2创建的连接器的名称。如果连接器名称中带有命名空间前缀,代码中也需要携带。 单击代码编辑页面上方保存图标,保存脚本。 运行测试脚本。 单击编辑器上方执行图标。 在页面底部“输入参数”页签输入请求参数,参数说明参考表2,其中“url”填写图片的URL。单击测试窗口右上角图标。 { "url": "https://XXXXXXXXX/testmodelarts.jpg", "apigCode": "bec274062225485b95fbcd4d6e8f128a", "modelId": "5ecac550-eefe-4437-9767-57eca07fa91f"} 检查输出,显示出识别结果,表示执行脚本成功。 { "predicted_label": "roses", "scores": [ [ "roses", "0.947" ], [ "daisy", "0.050" ], [ "tulips", "0.002" ], [ "dandelion", "0.000" ], [ "sunflowers", "0.000" ] ]} 单击代码编辑页面上方图标,启用脚本。
  • 流程-附件 该组件为BPM流程使用的附件组件,根据当前BPM流程信息显示当前的附件列表,并支持上传附件。 向工作区域中拖入一个“流程-附件”组件,选择该组件,在右侧“属性”页签显示可配置属性参数。 表3 “流程-历史”组件属性说明 参数名 说明 流程实例ID BPM流程实例ID。 如果不配置则默认使用页面的查询参数“interviewID”。关联该标准页面的BPM启动时,会自动往标准页面中传入该参数值。
  • 流程-动作 该组件为BPM流程使用的动作组件,根据当前BPM流程信息显示可执行的动作,如提交、委托、转派、完成。 向工作区域中拖入一个“流程-动作”组件,选择该组件,在右侧“属性”页签显示可配置属性参数。 表1 “流程-动作”组件属性说明 参数名 说明 流程实例ID BPM流程实例ID。 如果不配置则默认使用页面的查询参数“interviewID”。关联该标准页面的BPM启动时,会自动往标准页面中传入该参数值。 流程名称 BPM流程名称。 如果不配置则默认使用页面的查询参数“bp.name”。关联该标准页面的BPM启动时,会自动往标准页面中传入该参数值。 流程版本 BPM流程版本。 如果不配置则默认使用页面的查询参数“bp.version”。关联该标准页面的BPM启动时,会自动往标准页面中传入该参数值。 表单组件名称 可选配置,表单组件的名称,配置后获取该表单的数据内容进行提交。 附件列表 上传的附件列表,配置后进行提交。 配置完组件属性后,需要在“事件”页签定义提交动作触发的事件,即进行事件编排,事件编排有两种方式,请根据实际情况进行编排,具体请参见事件编排器说明。
  • 脚本中调用连接器 您可以在脚本中调用连接器实现调用ModelArts Pro的接口,这里以新建一个脚本实现识别行程码为例进行举例说明。 鼠标放在App下的Logic文件夹旁会出现加号,单击加号,选择“脚本”。 选择“创建一个新脚本”,输入基本信息,单击“添加”。 编辑代码如下: import * as modelartspro from 'modelartspro';export class Input { @action.param({ type: "String", required: false, description: "the image url" }) url: string; @action.param({ type: "String", required: false, description: "the base64 coded image" }) image: string; @action.param({ type: "Boolean", required: false, description: "" }) isMultiTemplate: boolean @action.param({ type: "String", required: false, description: "" }) modelId: string}export class Output { @action.param({ type: "string" }) result: string;}export class testModelartsPro { @action.method({ input: "Input", output: "Output", description: "modelartspro test case" }) run(input: Input): void { // 填写实例化的modelartspro连接器名称 let client = modelartspro.newClient("custom_defined_ocr") let result = null result = client.customOCRWithURL(input.url, input.isMultiTemplate, input.modelId); console.log(result) }} 代码modelartspro.newClient("custom_defined_ocr")中“custom_defined_ocr”为2中创建的连接器的名称,如果连接器名称带有命名空间前缀,代码中也要携带。 单击代码编辑页面上方保存图标,保存脚本。 运行测试脚本。 单击编辑器上方执行图标。 在页面底部“输入参数”页签输入请求参数,参数说明参考表2,其中“url”填写图片的URL,单击测试窗口右上角图标。 { "url": "https://XXXXXXXX/testModelArtsPro.jpg", "isMultiTemplate": true, "modelId": "0b7f0f28-27e2-11ec-8f30-0255ac100057"} 检查日志,有识别结果,表示执行脚本成功。 单击代码编辑页面上方图标,启用脚本。
  • 前提条件 使用ModelArts Pro过程中,ModelArts Pro需要访问ModelArts服务的云资源。因此需要先申请开通华为云ModelArts服务,具体操作请参考准备工作。 AppCube对接ModelArts Pro,使用ModelArts Pro提供的文字识别套件、自然语言处理套件提供的能力。因此需要先申请文字识别套件和自然语言处理套件。具体操作请参考申请行业套件。 参考获取AK/SK获取AK(Access Key ID)、SK(Secret Access Key),即访问密钥对。 本节场景是对行程码图片进行识别,需要在ModelArts Pro上创建并部署上线用于对行程码进行识别的模型,由于各省份行程码可能不一致,所以部署的为多模板。具体操作请参考使用多模板工作流开发应用。
  • 规则4:SELECT语句中查询字段不在表的索引库中 如果SELECT语句where条件中查询字段并未创建索引,请判断该字段是否需要创建索引,以提高代码查询效率。 错误代码示例: import * as db from 'db';let errorDemo = db.sql().exec("select object_name from object_demo where object_id = ?") 表“object_demo”中的“object_id”并没有创建索引。 正确代码示例: import * as db from 'db';let correctDemo = db.sql().exec("select object_name from object_demo where id = ?") 表“object_demo”中的“id”创建了索引。 该规则在版本1.3.3中被引入。
  • 规则8:SELECT语句中拼接的参数值请谨慎使用入参变量 SELECT语句中拼接的参数值请谨慎使用入参变量,以免引起SQL注入的风险。 错误代码示例: import * as db from 'db';let errorDemo = "select id,name from object_demo where id = ";errorDemo += input.parameter let errorDemoResult = db.sql().exec(errorDemo) 其中“input.parameter”为脚本入参。 正确代码示例: import * as db from 'db';let correctDemo = "select id,name from object_demo where id = ?";let correctDemoResult = db.sql().exec(correctDemo, { params: [input.parameter] }) 其中“input.parameter”为脚本入参。 该规则在版本1.3.5中被引入。
共100000条