
# 启动BPM
在低代码平台中，您可以通过如下三种方式，启动工作流。
![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
接口启动或者脚本启动，入参中指定BPM版本号，可以不用启用（即激活）BPM。
#### 在BPM设计页面启动工作流
1. 参考[登录经典应用设计器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_5025.html)中操作，登录经典版应用设计器。
2. 在BPM所在目录下，单击对应的BPM，进入BPM编辑器。 
   图1单击待启动的BPM   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284197.png)
   
   
3. 在BPM设计页面，单击页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124397.png)，启动该BPM。
   
   在BPM设计页面，可以通过如下两种方式启动。
   - 自定义：将BPM的"开始"图元的开始类型设置为"自定义"启动，不指定事件的起因，即不需要指定触发条件，主要用于接口调用进行启动。
     图2自定义   
     ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045076.png) 
   
   - 表单：使用表单或页面，启动BPM。选择该项时，需要配置具体的表单、标准页面或高级页面。
     图3表单   
     ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284201.png "点击放大") 
    
   
   
 
#### 接口启动
通过调用BPM的Rest接口"http://*AstroZero* *对外提供的默认域名*/u-route/baas/bp/v2.0"，进行启动。
接口URI：POST *AstroZero域名*/u-route/baas/bp/v2.0/runtime/instances
表1请求参数 
| 参数        | 是否必选 | 参数类型   | 描述                                                                                                                                                                       |
|:---|:---|:---|:---|
| name      | 是    | String | BPM的名称，在界面处创建BPM时配置的名称。                                                                                                                                                  |
| version   | 否    | String | BPM版本号，为可选参数，因为一个BPM可以存在多个版本。如不带版本号，表示运行当前启用的版本。                                                                                                                         |
| variables | 否    | Object | BPM元数据中定义的变量，包括自定义变量和系统变量， key-value形式，key为变量名字，value为变量的值。如果需要在启动BPM前设置BPM的变量，可以填写该参数。如需启动时设置变量，可以在variables中设置系统变量$Flow.BusinessKey；如需设置工作流的title，可以设置系统变量$Flow.Title。 |
   
表2响应参数 
| 参数      | 参数类型   | 描述                                         |
|:---|:---|:---|
| resCode | String | 返回码，如果返回"0"代表请求成功。                         |
| resMsg  | String | 返回消息，如果成功状态，通常会返回"Success"，其他情况会返回具体的错误信息。 |
| result  | Object | 在成功请求时会有内容，返回启动BPM之后，BPM实例的运行信息。           |
   
例如，创建并启动了一个BPM，BPM名称为"createCloudOK_NEW"，版本号为"1.0.1"，带有4个启动参数。
- 请求示例
  ```
  POST AstroZero域名/u-route/baas/bp/v2.0/runtime/instances
      
   {
      "name":"createCloudOK_NEW",
      "version":"1.0.1",
      "variables":{
          "name":"sun",
          "memorySize":"15",
          "storageSize":"15",
          "expiryDate":"2018-12-12"
      }
  }
  ```
  
- 响应示例
  ```
  {
      "resCode":"0",
      "resMsg":"Success",
      "result":{
          "name":"bpName1",
          "version":"1.0.1",
          "id":"002N000000Sy2NphoRbU",
          "processDefID":"001L000000S8Yi3xG9Gi",
          "interviewLabel":"BP Label 1",
          "nextElem":"subProcess",
          "isTest":true,
          "state":"Dispatched",
          "bpStatus":"New",
          "urgency":0,
          "taskOutcome":"",
          "businessKey":"002N000000Sy2NphoRbU",
          "startTime":"2019-08-27 10:53:04",
          "endTime":"",
          "Ext1":"",
          "Ext2":"",
          "Ext3":"",
          "Ext4":"",
          "Ext5":"",
          "Ext6":"",
          "Ext7":0,
          "Ext8":0,
          "suspended":false,
          "isClosed":false
      }
  }
  ```
  
 
#### 脚本启动
在脚本代码中，导入BPM的脚本库，通过下面脚本代码方式启动。
```
import * as bp from "bp";
//......（其他代码）
const client = bp.newInstanceClient();  
client.start(BPM名称, BPM版本号, BPM中定义的变量);
```
脚本样例如下：
```
import * as bp from 'bp';
let client = bp.newInstanceClient();
let res = client.start("test", "1.0.1", {  "foo": 1,  "bar": 3});
```
输出样例如下：
```
{
    "interviewId": "002N000000FdtN6xwgjI",
    "screen": {
        "allowBack": false,
        "allowFinish": true,
        "allowNext": true,
        "allowPause": false,
        "helpText": "",
        "label": "input phone number",
        "name": "inputphonenumber",
        "pausedText": "",
        "screenFields": [
            {
                "dataType": "text",
                "defaultValue": "135xxxxxxxx",
                "fieldType": "InputField",
                "helpText": "",
                "isRequired": false,
                "label": "phone number",
                "name": "phoneNumber"
            }
        ]
    }
```
- 脚本启动：在脚本代码中导入BPM的脚本库。通过下面脚本代码方式启动。
  ```
  import * as bp from "bp";
  //......（其他代码）
  const client = bp.newInstanceClient();  
  client.start(BPM名称, BPM版本号, BPM中定义的变量);
  ```
  脚本样例如下：
  ```
  import * as bp from 'bp';
  let client = bp.newInstanceClient();
  let res = client.start("test", "1.0.1", {  "foo": 1,  "bar": 3});
  ```
  输出样例如下：
  ```
  {
      "interviewId": "002N000000FdtN6xwgjI",
      "screen": {
          "allowBack": false,
          "allowFinish": true,
          "allowNext": true,
          "allowPause": false,
          "helpText": "",
          "label": "input phone number",
          "name": "inputphonenumber",
          "pausedText": "",
          "screenFields": [
              {
                  "dataType": "text",
                  "defaultValue": "135xxxxxxxx",
                  "fieldType": "InputField",
                  "helpText": "",
                  "isRequired": false,
                  "label": "phone number",
                  "name": "phoneNumber"
              }
          ]
      }
  ```
  
 
