华为云用户手册

  • 调用API获取项目ID 项目ID可以通过调用查询指定条件下的项目列表API获取。 获取项目ID的接口为“GET https://{Endpoint}/v3/projects”,其中{Endpoint}为IAM的终端节点,可以从地区和终端节点获取。接口的认证鉴权请参见认证鉴权。 响应示例如下,其中projects下的“id”即为项目ID。 { "projects": [ { "domain_id": "65382450e8f64ac0870cd180d14e684b", "is_domain": false, "parent_id": "65382450e8f64ac0870cd180d14e684b", "name": "project_name", "description": "", "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99" }, "id": "a4a5d4098fb4474fa22cd05f897d6b99", "enabled": true } ], "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects" }}
  • 错误码 当您调用API时,如果遇到“APIGW”开头的错误码,请参见API网关错误码进行处理。 状态码 错误码 错误信息 描述 处理措施 400 MapDS.10000003 会话无效。 会话无效。 检查参数是否合法。 400 MapDS.10100002 参数为空。 参数为空。 检查参数是否合法。 400 MapDS.10100003 参数不符合规范。 参数不符合规范。 检查参数是否合法。 400 MapDS.10100004 凭证数量超规格。 凭证数量超规格。 请使用已创建的凭证。 401 MapDS.10000002 认证失败。 认证失败。 检查是否有权限。 404 MapDS.10100005 请求资源不存在。 请求资源不存在。 检查请求的参数。 500 MapDS.10000000 系统内部错误。 系统内部错误。 请稍后操作。 503 MapDS.10000001 系统忙,请稍后操作。 系统忙,请稍后操作。 请稍后操作。 父主题: 附录
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String IAM用户的token,无需特殊权限。 Content-Type 是 String 该字段填为“application/json;charset=utf8”。 表2 请求Body参数 参数 是否必选 参数类型 描述 credential 否 credential object 创建访问地图数据服务的凭证。 表3 credential 参数 是否必选 参数类型 描述 description 否 String 凭证的描述。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 key String 凭证 create_time String 创建凭证的时间UTC时间格式:YYYY-mm-dd'T'HH:mm:ss.SSSSSS'Z',e.g. "2020-01-08T06:26:08.123059Z" description String 凭证的描述信息。 status String 凭证状态“ACTIVE”
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String IAM用户的token,无需特殊权限。 Content-Type 是 String 该字段填为“application/json;charset=utf8”。 表2 请求Body参数 参数 是否必选 参数类型 描述 keytype 是 String 用于为用户生成令牌的密钥 取值为primary或者secondary 每个用户只有2个apikey,primary的原则就是对比apiKey时间最早的那个。 如果只有一个apikey,primary和secondary都指同一个apiKey expiry 是 String 令牌到期UTC时间,格式如:2019-04-21T00:44:24Z 日期符合以下格式: yyyy-MM-ddTHH:mm:ssZ 由 ISO 8601 标准指定。 最小值不小于15min,最大值不超过24h
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Authorization 是 String 签名消息头为:Authorization: HMAC-SHA256 Clientid=xxxx,Expiry=xxxx,Signature=xxxxHMAC-SHA256为固定签名算法,Clientid、Expiry、Signature的值从获取获取SAS token请求返回的消息体中获取,要求Clientid,Expiry,Signature同时存在。
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 credentials Array of credentials objects 凭证信息。 表3 credentials 参数 参数类型 描述 uuid String 凭证id key String 凭证value create_time String 凭证创建时间 description String 凭证描述 status String 凭证状态
  • 响应示例 状态码: 200 成功。 { "credentials" : [ { "uuid" : "LOSZM4YRVLKOY9E8X...", "create_time" : "2020-01-08T06:26:08.123059Z", "description" : "", "status" : "ACTIVE" }, { "uuid" : "P83EVBZJMXCYTMU...", "create_time" : "2020-01-08T06:25:19.014028Z", "description" : "", "status" : "ACTIVE" } ]}
  • API调用 本章节以postman为例介绍如何调用API,建议使用SDK。 使用API调用时,因为需要使用Token进行认证鉴权,在鉴权中,会存在因华为帐号升级导致的“无法使用主账户获取Token”的情况,产生“The username or password is wrong.”报错,该问题可以通过创建一个IAM子用户获取Token解决,处理步骤请参见帐密报错“The username or password is wrong.”。 获取Token。 由于自定义OCR部署在华北-北京四区域,因此需要获取北京四(cn-north-4)区域的Token。 POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokensRequest Header: Content-Type: application/jsonRequest Body:{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "IAM子用户名", "password": "密码", "domain": { "name": "主帐户的用户名" } } } }, "scope": { "project": { "name": "cn-north-4" } } } 图8 请求header 图9 请求body 调用自定义OCR API。 依据下图的对应关系,将自定义OCR部署后生产的API填写至postman中。url中的{endpoint}需要替换为ocr.cn-north-4.myhuaweicloud.com。 在"image"参数中,输入图片的base64编码即可调用API。 图10 调用自定义OCR API
  • ModelArts.4204服务未开通报错 问题现象 子帐号在使用自定义OCR(ModelArts Pro文字识别套件)生成的api时,出现如下报错。表示用户,没有OCR权限或没有开通ModelArts Pro服务。 "ModelArts.4204"、"Request API error. The API xxx is not subscribed. 处理步骤 子帐号(IAM用户)需要联系主账户授予使用OCR服务的权限。为IAM用户授权过程请参见为IAM用户分配权限、IAM用户登录并验证权限。 授权时,子帐号所在的用户组,需要设置为OCR FullAccess权限。 图11 用户组权限 授权后,子帐号登录自定义OCR(ModelArts Pro )页面,服务会自动开通。 在子用户已经具备OCR权限,并开通ModelArts Pro后,如果仍然无法调用,请检查子用户是否有“编程访问权限”。 图12 编程访问权限
  • SDK调用 本章节以Python SDK为例介绍如何进行使用,其他语言SDK使用方法相同。 获取SDK。 在自定义OCR的“部署”页面,选择“SDK调用”获取SDK。 图2 获取SDK 导入SDK至PyCharm(请在PyCharm中提前配置python环境)。 图3 导入SDK 获取AK、SK。 AK/SK(Access Key ID/Secret Access Key)即访问密钥,包含访问密钥ID(AK)和秘密访问密钥(SK)两部分,华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。 登录访问密钥页面,依据界面操作指引,获取AK、SK。下载得到的访问密钥为credentials.csv文件,文件中的B列和C列分别是AK、SK信息。 图4 新增访问密钥 图5 AKSK文件 修改OCRDemo.py文件。 在文件中找到“aksk_request”,修改内容有两处: (1)填写获取的AK、SK。 (2)将代码示例中的请求url替换为自定义OCR部署后生成的url,只使用图片中用蓝色标注的字段进行替换。 (3)将代码示例中的# option["side"]="front"替换为: option["template_id"]="xxx" template_id的值可以在自定义OCR部署发布后获取。 图6 修改代码文件(修改前) 图7 修改代码文件(修改后) 调用自定义OCR SDK。 在示例代码“img_path”中输入需要识别的图片,并执行代码。
  • 开通服务 进入文字识别控制台。 在文字识别控制台“总览”页面,选择需要使用的服务,执行开通操作。 服务开通成功后,开通状态显示“已开通”。 在界面左上角,可以切换服务部署的区域,例如北京四、上海一等。不同区域OCR部署情况请参考终端节点。 图1 开通服务 OCR开通服务时,计费规则默认为“按需计费”,按需计费时,不使用OCR服务,则不收费。如果您购买了套餐包,套餐包扣减规则请参见计费说明,套餐包购买后暂不支持退款。 如未开通服务,直接调用OCR API会提示ModelArts.4204报错。 使用文字识别服务时,可以通过配置OBS访问权限搭配使用。服务只需要配置一次即可,后面使用时无需再次配置,详细信息请参见配置OBS访问权限章节。 父主题: 如何调用API
  • 操作步骤 登录新版应用设计器。 在主菜单中,选择“检查”,进入立即检查页面。 图1 选择检查 检查完成后,在页面上方的“检查”,会显示问题个数。 图2 查看问题个数 单击下方立即检查后的,选择当前工程的内核版本,单击“确定”。 图3 选择内核版本 查看异常信息,根据异常信息内容解决问题。 立即检查:执行应用检查,检测应用中的元素是否存在问题。 异常描述:给出异常问题的描述信息,指明错误原因。 资源类型:出现异常问题的元素类型。 来自应用:出现异常问题的应用。 资源:出现异常问题的具体元素,单击则可跳转至对应组件元素。 检测完成后,若无异常信息,应用可以正常打包发布。
  • 设置应用说明 登录新版应用设计器。 在左侧导航栏中,选择“设置”,进入应用设置页面。 在应用信息中,单击“编辑使用说明”。 为应用添加使用说明,支持多语言,即不同语言下的应用说明。 “用户访问时是否自动弹出”设置为“不弹出”,运行该应用后,用户访问时不会弹出应用使用说明页。 “用户访问时是否自动弹出”设置为“可勾选下次不再弹出”,运行该应用后,用户首次访问时会弹出应用说明页,且弹出页会显示参数“下次不再弹出”供用户勾选。 图2 编辑应用使用说明 配置完成后,用户访问应用时,可参考图3,查看应用说明。 图3 查看说明
  • 修改标题与描述 登录新版应用设计器。 在页面左上角,单击应用名称后的下拉框,选择“修改应用图标和描述”。 您也可以在左侧导航栏中,选择“设置”,在应用信息中,单击“修改标题与描述”。 图1 选择修改应用图标和描述 设置应用名称、标题、图标等信息,单击“保存”。 应用名称:创建应用时设置的标签值,单击,可进行国际化设置。 应用描述:应用的附加描述信息,单击,可进行国际化设置。 应用图标:设置应用Logo,单击“上传”,可上传本地的图片作为应用的Logo图标。 图标颜色:设置应用Logo中,图标的颜色。 选择图标:选择图标的样式。
  • 图形化建模 图形化建模面向所有低代码应用开发者,提供简单易懂的数据库对象建模工具并复用知识经验,降低开发者的学习难度和技能门槛。 图4 初识对象设计器 映射工程目录 如何创建一个对象中介绍了对象及对象目录的创建,其中每个对象目录都可以映射为一个设计图,单击目录即可切换设计图。设计图用于展示目录中,对象之间的关系。 应用设计器数据视图的对象目录,本身就映射到一个设计图,设计图的名称即目录名称。 对象中每创建一个目录,就映射为一个独立的设计图。 目录中再创建目录,也映射为独立的设计图。 设计图上方,通过面包屑显示映射的目录路径,通过面包屑可切换设计图。 图5 对象目录路径 选中左侧工程目录中的对象和目录,设计图面包屑及对象图元会同步被选中。 对象和关系 设计图中,显示了当前目录下的所有对象图元。 对象图元上显示对象名称、字段名称和字段类型。 单击对象模型中的,可展开对象模型,查看对象的标准字段(Standard Fields)。标准字段由系统自动创建,无需用户创建。单击对象模型中的,可收起对象模型。 图6 对象图元 对象和对象之间的关系显示为关系连线。关系连线上显示关系名称,具体可参考关联对象。 属性面板 选中对象图元时,设计图右侧会显示该对象的属性面板。 图7 对象属性面板 属性面板的主要用途如下: 显示对象基本信息,如名称、唯一标识和描述。单击“更多信息”,会展示创建人、创建时间等信息。 设置该对象是否对外公开,是否可被其他应用访问。 修改属性后,单击“保存”,可保存修改的内容。 单击“删除”,可删除该对象。 自动排版 在设计器上方,单击“自动排列”,可自动排版设计图上的对象位置,以获取较好的视觉呈现。 图8 自动排版
  • 操作步骤 登录新版应用设计器。 单击页面右上方的,进入协作页面。 单击“开发者”,开启“开发者管理已开启”功能。 开启后,可以管理哪些用户,可以访问和编辑该应用,并设置权限。默认该开关关闭,表示环境上所有开发者,都可以访问并编辑该应用。 只有拥有“应用管理”权限的用户,才能开启关闭此开关,有权添加用户、删除用户及修改用户权限。 当用户新创建一个应用时(包括克隆、导入),该用户默认具备应用的所有权限,因此该用户可以开启和关闭开关。 图1 开发者 图2 开启此开关 单击“添加”,选择所需开发人员,单击“下一步”。 应用的管理者或应用的创建者,可以为当前应用添加开发者用户。被添加的开发者用户,可以访问或编辑该应用,由权限控制。 图3 选择用户 为添加的用户设置权限,单击“确定”。 选择“是”,按需为开发人员分配对应权限。用户必须要有查看应用权限项,才能通过应用设计器(包括新版和经典版)打开应用,否则进入应用设计器时会提示“您没有访问该应用的权限”。 图4 为用户设置权限 选择“否”,表示默认拥有原有的开发权限。被添加到应用中的标准用户,已在环境中具备了某种角色,在该应用中,此用户默认按其系统角色包含的权限来操作应用。 设置完成后,单击“确定”,完成用户的添加。 单击已添加用户后的,可修改用户权限。 单击已添加用户后的,可移除已添加的用户。开启“开发者管理”权限的用户,无法修改其应用权限,也不可以删除该用户。
  • 低代码平台中的对象 低代码平台中的对象(也可以称为Object)相当于传统方式开发业务系统时,数据库中创建的一个表。每个对象对应一张数据库表,用于保存业务系统需要的配置数据和业务数据。 对象可以存储组织或业务特有的数据,您可以围绕对象这一核心,定义相关的字段、字段校验规则、界面样式、字段变更时的触发事件等。如果把待开发的业务系统比作一部电影,对象就是电影中的各个角色,需要勾勒角色的外貌、性格特点、人物关系和所经历的剧情。 低代码平台预置了一部分标准对象(Standard Object),您可以为这些标准对象新增字段,但不能修改、删除预置字段。租户开发者也可以根据自己的业务需要,创建自定义对象(Custom Object),支持增、删、改自定义对象及自定义对象的字段。 创建一个自定义对象后,系统会为自定义对象自动创建一些标准字段(Standard Fields),如图1所示。 图1 自定义对象的标准字段
  • 添加索引 登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击已创建的对象,进入对象设计器页面。 单击对象中的,进入对象详情页面。 在“索引”页签,单击“添加”。 设置索引信息,单击“保存”。 图1 设置索引信息 显示名称:索引在界面的展示名称,创建后可修改 唯一标识:索引在系统中的唯一标识,创建后不支持修改。 索引类型:选择新建索引的类型,支持普通索引和唯一索引。 普通索引:允许被索引的数据列包含重复的值,可按需选择绑定的字段数。 唯一索引:被索引的数据列不包含重复值,保证数据记录的唯一性,必须绑定两个字段。 字段:索引关联的数据字段。 文本、密文、文本区、复选框、选项列表(多项选择)、公式、多语言和附件字段类型不支持创建索引。 使用关联字段(查找关系与主从关系)创建索引时,必须绑定两个及以上字段。
  • 操作步骤 登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击已创建的对象,进入对象设计器页面。 单击对象后的,进入添加关联页面。 图1 创建对象关系 设置关联关系,单击“下一步”。 图2 选择关系类型 查找关系:引用目标对象的记录,通过关联当前字段与另一对象的ID字段,创建本对象与另一对象的引用关系。定义了查找关系后,本字段的取值只能来源于关联对象。当本对象的记录被删除时,被引用记录不受影响。例如,学生对象到班级对象的关联关系。 主从关系类型:目标对象为当前对象的子表,通过关联当前字段与另一对象的ID字段,创建本对象与另一对象的主从关系。定义了主从关系后,本字段的取值只能来源于关联主对象。当本对象的记录被删除时,子表记录会被一起删除。例如,订单对象和订单明细对象的关联关系。 设置关系类型的基本信息,单击“确定”。 显示名称:关联关系在界面的展示名称。 唯一标识:关联关系在系统中的唯一标识,创建后不支持修改。 关联对象:选择关联目标,下拉框展示当前应用内所有对象的显示名称。 对象与目标对象创建关系后,会产生关系连线, 如图3所示。 图3 关联对象 关联关系两端显示和,表示1对多关系。目前查找关系和主从关系都是1对多关系,低代码平台暂无1对1的关系设置。 箭头从有关系字段的对象,指向被关联的对象。 关系连线被选中时,右侧显示关系字段的属性面板。在右侧属性面板中,可以修改关联字段的属性信息或删除关联字段。
  • 操作步骤 登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击视图后的,进入新建视图对象页面。 图3 进入新建视图对象页面 单击“新建”,设置视图对象的基本信息,单击“下一步”。 图4 设置基本信息 标签:新建视图对象的标签,用于在页面显示。 名称:视图对象在系统中的唯一标识,创建后不支持修改。输入标签后单击该参数的输入框,系统会自动生成视图对象的名称。同时会自动增加“__VIEW__CST”后缀和命名空间前缀,作为对象的唯一标识。 描述:新建视图对象的描述信息。 设置对象联结,单击“下一步”。 在A中选择主对象,单击“点击以关联另一个对象”后,在B中选择另一个对象,设置关联关系,单击加号设置“关联条件”。 如图5,表示当部门ID相同时,取两个对象表数据中的交集。对象联结最多支持三个Object连接,两个Object之间的连接条件由各自的字段及操作符所组成,连接条件可以有多条。 图5 配置关联关系 每个“A”对象的记录至少关联一条“B”的记录:表示结果取满足对象之间设定条件的“且”合集。 “A”对象的记录可以关联或不关联“B”的记录:表示结果取满足对象之间设定条件的“或”合集。 关联条件:表示对象之间的关联条件。 在映射信息页面,单击“字段映射”中“添加”,选择所需的字段(选择的字段将作为视图对象展示的字段),设置标签。 支持增加记录筛选条件,只有满足该条件,才会展示在视图中。本示例不涉及。 图6 映射信息配置 单击“下一步”, 预览视图对象对应的SQL语句。 图7 预览 核对信息无误后,单击“保存”,进入视图对象的详情页面。 “自定义字段”页签中,显示了配置的展示字段。 在“关联对象”页签中,单击,可查看视图对象对应的SQL语句。
  • 操作步骤 登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击已创建的对象,进入对象设计器页面。 选中对象图元,在右侧属性面板中,单击“生成页面”。 图1 生成页面 在生成页面中,选中“更新已有页面”。 在显示的页面列表中,选择对应的页面,单击“保存”。 图2 更新已有页面 该列表显示的是由该对象直接生成的页面,不包括开发者通过创建新页面生成的页面(即使也绑定了该对象模型)。 页面的显示名称和唯一标识以及内容可能已被更改,但仍然归属此对象的生成页面。
  • 编辑脚本 登录新版应用设计器。 在左侧导航栏中,选择“逻辑”。 单击脚本后的,选择“编辑”,进入脚本详情页面。 单击对应参数后的,可编辑该参数。 表1 脚本参数说明 参数 参数说明 单击该按钮,可进入脚本的编辑器页签。 如果脚本有多个版本,则进入处于启用状态的脚本编辑器页面。 如果多个版本都未启用,则进入最近版本的脚本编辑器页面。 名称 脚本的名称,在创建脚本时配置的名称。 是否启用 脚本是否已启用。 勾选:表示已启用。 不勾选:表示禁用。 归属APP 该脚本属于哪个应用。 版本 脚本的版本号。 方法名 脚本的方法名。 可见性 脚本是否可见。 允许覆盖 控制该资源是否可以被定制为新版本,或者是否可以被Addon应用导入,若已存在于Addon应用中,是否允许被另存为新版本。 默认允许,当配置为不允许时,说明如下: 在该应用中基于该资源定制新版本时,会报错“XXX不允许定制新版本,请检查基本属性并确认该资产是否允许覆盖”。 Addon应用里不允许导入该资源。 如果已导入到Addon应用中,无法定制新版本。 描述 脚本的描述信息,建议设置为脚本的作用。 创建人 脚本创建人。 创建时间 脚本创建时间。 最近修改人 最近一次修改脚本的用户名。 最后修改时间 最近一次修改脚本的时间。 输入参数 显示脚本的输入参数,包括参数名、参数类型、是否为集合和描述信息。 如果脚本有多个版本,则显示处于启用状态脚本的参数。 如果多个版本都未启用,则显示最近版本脚本的参数。 输出参数 显示脚本的输出参数,包括参数名、参数类型、是否为集合和描述信息。 如果脚本有多个版本,则显示处于启用状态脚本的参数。 如果多个版本都未启用,则显示最近版本脚本的参数。 版本 显示脚本的所有版本。
  • 创建定时任务 登录新版应用设计器。 在“开始”页面,单击“新建定时任务”。 图1 新建定时任务 配置定时任务,单击“保存”。 例如,创建一个定时任务“OfferingOffline”,用于实现从2021-11-25开始,每天零点自动将过期商品下架。其中,将过期商品下架的功能由“OfferingOffline”脚本实现。在创建定时任务之前,需要先开发实现定时任务功能的脚本。如何开发脚本,请参见脚本开发。 图2 配置定时任务 表1 定时任务参数说明 参数 说明 名称 定时任务名称。 例如:OfferingOffline 类型 选择定时任务执行的类型,支持脚本或服务编排。 例如:脚本 服务编排/脚本 选择定时任务执行的脚本或服务编排。 例如:选择已启用的脚本“OfferingOffline”。 输入参数 输入脚本或服务编排的输入参数。 任务首次执行时间 首次执行脚本或服务编排的时间。 例如:2021-11-25 00:00:00 执行次数 定时任务执行次数。 仅执行一次。 按设置的频率执行多次。 例如:按设置的频率执行多次 执行周期 “执行次数”配置为“按设置的频率执行多次”时,需要设置。 例如:1 执行周期单位 “执行次数”配置为“按设置的频率执行多次”时,需要设置执行任务时间的间隔单位。 例如:天 描述 定时任务的描述信息,建议描述其用途。
  • 规则10:SELECT语句中谨慎使用order by SELECT语句中,请谨慎使用order by。如果需要使用order by,请为排序字段增加索引,以提高查询效率。如果无法增加索引,需要关注是否存在查询性能低下的风险。 错误代码示例 import * as db from 'db';let errorDemo = db.sql().exec("select object_name from object_demo where object_id = 'HuaWei' Orde by createdDate") 表“object_demo”中的“createdDate”,并没有创建索引。 正确代码示例 import * as db from 'db';let correctDemo = db.sql().exec("select object_name from object_demo where id = 'HuaWei' Order by createdDate") “object_demo”中的“createdDate”,创建了索引。
  • 规则7:SELECT语句中严禁使用“select from...”形式查询语句 严禁使用“select ...”形式查询语句,请指出select的具体字段。 错误代码示例 import * as db from 'db';let errorDemo = db.sql().exec("select from object_demo where object_name = 'test'") 正确代码示例 import * as db from 'db';let correctDemo = db.sql().exec("select id, object_type from object_demo where object_name = 'test'")
  • 规则6:SELECT语句中聚集函数必须增加别名 SELECT语句中,聚合函数必须使用别名方式存储查询结果,以免因聚合函数返回的结果不一致,导致存在兼容性问题。 错误代码示例 import * as db from 'db';let errorDemo = db.sql().exec("select count(*) from object_demo where object_name = 'HuaWei'") 正确代码示例 import * as db from 'db';let correctDemo = db.sql().exec("select count(*) as count from object_demo where object_name = 'HuaWei'") 推荐代码示例 ***聚合函数示例 ****select count(*) as count_res,select max(*) as max_res,select min(*) as min_res,select avg(*) as avg_res,select sum(*) as sum_res
  • 规则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”创建了索引。
  • 规则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”为脚本入参。
  • 调试过程 单击页面上方的,输入参数后单击“运行”,运行服务编排。 在“输入参数”中,输入如下参数: { "ownerId":"123", "limit":3, "offset":1} 检查输出页签的结果,是否符合预期。 输出如下: { "interviewId": "002N000000P4ApgMJOM4", "outputs": { "resource": [ { "ownerId": "123", "resourceName": "Folder01", "status": "Waiting", "type": "Folder" }, { "ownerId": "123", "resourceName": "File02", "status": "Waiting", "type": "File" }, { "ownerId": "123", "resourceName": "Folder02", "status": "Waiting", "type": "Folder" } ], "totalCount": 100 }} 单击服务编排设计页面右上方的“跟踪”,打开“日志跟踪器”页面。 在“日志跟踪器”页面中,可查看服务编排执行的每一步的详细信息。 图10 查看跟踪日志 单击页面上方的,启用服务编排。
共100000条