
# 创建用户登录服务编排
用户登录服务编排通过调用脚本、编排图元等操作实现用户登录完整逻辑。
#### 实现原理
图1用户登录服务编排大致设想   
![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151906.png "点击放大")
如[图1]所示，用户登录服务编排业务逻辑实现过程如下：
1. 通过调用"用户登录"脚本，查询登录账户密码，然后使用"决策"图元进行判断，判断当前登录的账号密码是否正确。
2. 如果判断账户密码错误，直接执行"账户密码错误"，判断账户密码正确，则使用"决策"图元，继续判断是否有验证码。
3. 如果判断当前登录没有验证码，则直接执行登录，判断当前有验证码，则继续判断验证码是否正确。
4. 如果判断验证码正确，则执行登录操作，判断验证码错误，则执行验证失败。
 
#### 操作步骤
"用户登录"服务编排开发的大致过程：先拖拽1个脚本图元，3个决策图元以及3个赋值图元，再分别配置各个图元属性，然后配置各个图元之间连线类型，最后保存启用。
1. 在"我的应用"中，单击"设备维修管理系统"，进入应用。
2. 在"User"目录中，将鼠标放在"Flow"上，单击界面上出现的"+"，在弹出菜单中选择"服务编排"。
3. 选中"创建一个新的服务编排"，在"标签"和"名称"文本框中输入"login"，并设置类型为"Autolaunched Flow"，单击"添加"。
4. 定义服务编排用到的变量。 
   1. 单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991289.png)，展开全局上下文，再单击"变量"后的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071825.png)，设置参数名称为"username"，如[图2]所示。
      图2新增变量   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151910.png) 
   
   2. 重复上一步，定义其他变量。
      需要定义的变量如[表1]所示。
       表1服务编排变量说明 
      | 变量名称（唯一标识）       | 数据类型 |
      |:---|:---|
      | username（上一步已创建） | 文本   |
      | password         | 文本   |
      | msg              | 文本   |
      | userId           | 文本   |
      | loginMsg         | 文本   |
      | captcha          | 文本   |
      | profile          | 文本   |
         
      
   
   3. 单击"公式"后的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071801.png)，在左侧公式弹窗中，设置"名称"为"portalUserLogin"，"表达式"为"PORTALUSERLOGIN({!username})"，单击"保存"。
      图3添加公式变量"portalUserLogin"   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432835038.png "点击放大") 
   
   4. 参考上一步，创建公式变量"verifyCode"，需要定义的变量如[表2]所示。
       表2公式变量说明 
      | 名称         | 表达式                                    |
      |:---|:---|
      | verifyCode | VERIFYCODEWITHTYPE({!captcha},"login") |
         
      
   
   
   
   
5. 拖拽图元到服务编排画布，并配置图元的基本属性。 
   1. 从图元区分别拖拽脚本（1个）、决策（3个）、赋值（3个）图元到画布中，排列，如[图4]所示。
      图4拖拽脚本（1个）、决策（3个）、赋值（3个）图元   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432675054.png "点击放大") 
   
   2. 选中"Script0"图元，在右侧基本信息中，设置"标签"为"查询用户"。
   
   3. 参考[5.b]，设置其他图元的"标签"属性，具体值如[表3]所示。
       表3图元基本属性 
      | 名称（变量唯一标识，**不需要修改**） | 标签        |
      |:---|:---|
      | Script0（上一步已设置）      | 查询用户      |
      | Decision0            | 判断账号密码    |
      | Decision1            | 判断是否包含验证码 |
      | Decision2            | 校验验证码     |
      | Assignment0          | 账号密码错误    |
      | Assignment1          | 执行登录      |
      | Assignment2          | 验证失败      |
         
      图5修改后图元   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432675070.png "点击放大") 
   
   
   
   
6. 配置"查询用户"脚本图元。 
   1. 单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911525.png)，指定图元对应的脚本名称 （***HW__***login），并配置脚本的输入输出参数。
   
   2. 单击"全局上下文"，显示变量列表，从"变量"中，拖拽"username"、"password"、"captcha"到"输入参数"下对应的"源"输入框中。
   
   3. 在"输出参数"下，单击5次"新增行"，依次添加下拉选项中的输出参数字段，并从"变量"中**拖拽** 相应的字段到"目标"输入框下，字段与变量对应关系如[图6]所示。
      请直接从全局上下文拖拽"变量"到对应的输入输出参数下，请勿手动输入，手动输入的值系统可能不识别。
      图6拖拽脚本的输入输出参数   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911549.png "点击放大") 
   
   
   
   
7. 配置"判断账号密码"决策图元。 
   1. 选择"判断账号密码"图元，在右侧单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071821.png)图标，修改"默认"的"名称"为"loginFail"。
      图7修改"默认"结果名称   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231317.png) 
   
   2. 单击"新增"，增加一个可编辑的结果，修改结果为"loginSuccess"，在"可视"下单击"新增行"，并**拖拽** 变量中的"msg"到"资源"下，设置"比较符"为"=="，"值"为"**"登录成功！"** "。
      - 请直接从全局上下文拖拽变量"msg"到"资源"下，请勿手动输入，手动输入的值系统可能不识别。
      
      - **"登录成功！"** 需要与"login"脚本中的输出参数一致。
        图8修改可编辑的结果   
        ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151890.png "点击放大") 
       
   
   
   
   
8. 配置"判断是否包含验证码"决策图元。 
   1. 选择"判断是否包含验证码"图元，在右侧单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151934.png)图标，修改"默认"的"名称"为"hasVerifyCode"。
      图9修改"默认"结果名称   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231309.png) 
   
   2. 单击"新增"，增加一个可编辑的结果，修改结果为"noVerifyCode"，在"可视"下单击"新增行"，并**拖拽** 变量中的"captcha"到"资源"下，设置"比较符"为"=="，"值"为"**""** "。
      图10修改可编辑的结果   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231329.png "点击放大") 
   
   
   
   
9. 配置"校验验证码"决策图元。 
   1. 选择"校验验证码"图元，在右侧单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992662.png)图标，修改"默认"的"名称"为"verifyCodeFail"。
      图11修改"默认"名称   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992634.png) 
   
   2. 单击"新增"，增加一个可编辑的结果，修改结果为"verifyCodeSuccess"，在右侧选择"公式"，并从全局上下文中，**拖拽** "verifyCode"到"公式"下。
      图12修改可编辑的结果   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432675058.png "点击放大") 
   
   
   
   
10. 配置"账号密码错误"赋值图元。 
    选择"账号密码错误"图元，在右侧单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992642.png)图标，单击"新增行"，从全局上下文的"系统变量"中，拖拽"$Flow.ResMsg"到"赋值"下，并设置"操作符"为"="，拖拽"msg"到"值"；然后再拖拽"系统变量"下的"$Flow.ResCode"到"赋值"的"变量"下，设置"操作符"为"="，设置"值"为"**"1"**"。
    请直接从全局上下文拖拽变量到"赋值"下的对应位置，请勿手动输入，手动输入的值系统可能不识账。
    图13配置"账号密码错误"图元   
    ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992666.png "点击放大")
    
    
11. 配置"执行登录"赋值图元。 
    1. 选择"执行登录"图元，在右侧单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911545.png)图标，单击5次"新增行"。
    
    2. 从全局上下文，拖拽"msg"等字段到"赋值"的"变量"下，并设置"操作符"为"="，然后再拖拽"值"下的各个值，具体字段对应关系，如[图14]所示。
       图14拖拽"执行登录"赋值的变量及值   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432835018.png "点击放大")
       请直接从全局上下文拖拽变量到"值"下的对应位置，请勿手动输入，手动输入的值系统可能不识别。
       表4变量与值对应关系 
       | 变量       | 操作符 | 值               |
       |:---|:---|:---|
       | loginMsg | =   | portalUserLogin |
       | msg      | =   | msg             |
       | profile  | =   | profile         |
       | username | =   | username        |
       | userId   | =   | userId          |
          
       
    
    
    
    
12. 配置"验证失败"赋值图元。 
    选择"验证失败"图元，在右侧单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231305.png)图标，单击"新增行"，从全局上下文"系统变量"，**拖拽** "$Flow.ResMsg"、"$Flow.ResCode"到"赋值"下，并设置操作符为"="，分别设置"值"为"**"验证码错误！"** "、"**"1"**"。
    表5赋值 
    | 变量            | 操作符 | 值            |
    |:---|:---|:---|
    | $Flow.ResMsg  | =   | **"验证码错误！"** |
    | $Flow.ResCode | =   | **"1"**      |
       
    图15配置"验证失败"赋值图元   
    ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911537.png "点击放大")
    
    
13. 拖拽图元连线，并配置连线属性。 
    1. 在画布上，把鼠标放在起点图元![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991257.png)图元上，从"+"拖动鼠标，在起点图元和"查询用户"图元间增加连线；即将当前脚本设置为服务编排的起始节点。
    
    2. 依次在"查询用户"、"判断账号密码"、"判断是否包含验证码"、"执行登录"图元直接拖拽连线。
       图16拖拽连线   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991277.png "点击放大") 
    
    3. 单击"判断账号密码"与"判断是否包含验证码"图元之间的连线，在右侧属性单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231297.png)，在"连线"中修改"连线类型"为"loginSuccess"。
       图17选中连线   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992674.png "点击放大")
       图18修改连线类型   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991273.png) 
    
    4. 单击"判断是否包含验证码"与"执行登录"图元之间的连线，在右侧属性单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991265.png)，在"连线"中修改"连线类型"为"noVerifyCode"
    
    5. 从"判断账号密码"图元上拖拽一条连线到"账号密码错误"图元。
    
    6. 从"判断是否包含验证码"图元上拖拽一条连线到"校验验证码"图元。
    
    7. 从"校验验证码"图元上拖拽一条连线到"验证失败"图元。
    
    8. 从"校验验证码"图元上拖拽一条连线到"执行登录"图元，并设置该连线的"连线类型"为"verifyCodeSuccess"。
       连线拖拽完成，如[图19]所示。
       图19拖拽图元连线   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151914.png "点击放大") 
    
    
    
    
14. 定义服务编排的输入、输出参数，并保存服务编排。 
    1. 鼠标在画布空白处点一下，单击右侧![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151886.png)，设置服务编排的输入输出参数，如[图20]所示。
       图20拖拽服务编排的输入输出参数   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432675074.png "点击放大") 
    
    2. 单击服务编排页面上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432835002.png)，保存服务编排。
       系统会弹出窗口，显示编译结果。
       
    
    
    
    
15. 测试服务编排能否正常执行。 
    1. 单击服务编排编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432835006.png)，执行服务编排。
    
    2. 在"Flow Run"界面中输入测试数据，单击"运行"。其中,"*test_cs* "、"*{XXXXXXXX}* "为[用户注册](https://support.huaweicloud.com/bestpractice-astrozero/astrozero_07_1084.html#astrozero_07_1084__li89525471121)脚本中测试数据。
       ```
       {
        "username": "test_cs",
        "password": "{XXXXXXXX}",
        "captcha": ""
        }
       ```
       执行成功，界面上会返回设备对象中的全部信息，样例如下：
       ```
       {
         "interviewId": "002N000000jjQ95dKbCK",
         "outputs": {
           "loginMsg": "null",
           "msg": "登录成功！",
           "profile": "cs",
           "userId": "10gg0XXXXXXXXXXXXX",
           "username": "test_cs"
         }
       }
       ```
       返回值提示"登录成功"，完成业务用户的登录。业务用户登录成功后，返回华为云Astro轻应用，刷新页面后在页面右上角可以看到当前登录的用户已变成在服务编排中输入的业务用户。
       
    
    
    
    
16. （可选）在服务编排编辑器单击"跟踪"，可以查看到上一步的执行日志，方便定位错误。
17. 测试成功，使用平台开发者用户重新登录，单击服务编排编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991281.png)，启用发布服务编排。
    
    ![](https://support.huaweicloud.com/bestpractice-astrozero/public_sys-resources/note_3.0-zh-cn.png)
    测试成功后，此时页面的登录用户已经变成了在服务编排中输入的业务用户，直接单击服务编排编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002361686828.png)，会报无权限执行，因此需要切换为平台开发者用户重新登录后再启用该编排。
    
    
 
