## Create

**Interface Description**
<table>
    <tr>
        <td>Method</td>
        <td>create</td>
        <td> </td>
        <td>Creating process instance objects</td>
    </tr>
    <tr>
        <td> Function description</td>
        <td colspan="3">This interface is used to creating process instance objects</td>
    </tr>
    <tr>
        <td colspan="4" align="center">Interface information</td>
    </tr>
    <tr>
        <td>Interface type</td>
        <td>api</td>
        <td>Interaction frequency</td>
        <td>Aperiodic</td>
    </tr>
    <tr>
        <td>Interface protocol</td>
        <td>Direct method invocation</td>
        <td>Response time</td>
        <td></td>
    </tr>
   <tr>
        <td> Remarks</td>
        <td colspan="3">IWorkResult create(WorkParaBean workParaBean)</td>
    </tr>
</table>
**Parameter description**

| Parameter        | Type    | Required | Description                                                              |
|------------------|---------|----------|--------------------------------------------------------------------------|
| flowId           | String  | √        | Process identification                                                   |
| userId           | String  | √        | Current operator identification                                          |
| tenantCode       | String  | √        | Current tenant identification                                            |
| userName         | String  | X        | Current operator name                                                    |
| deptName         | String  | X        | The department to which the current operator belongs                     |
| dataIdentifier   | String  | √        | Data source of business data                                             |
| flowIdentifier   | String  | √        | Data source for process data                                             |
| doNotToFirstNode | boolean | X        | Default (True), submit to the first node. False: submit to the next node |
** Invoking example**
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
inparam.setUserId("xxx");							//Current operator ID
inparam.setUserName("xxx");						//Current operator name
inparam.setDeptName("xxx");						//Department Name
inparam.setFlowIdentifier("xxx");		//Data source for process data
inparam.setDataIdentifier("xxx");			//Data source for business data
inparam.setFlowId("xxx");            //Process ID of process definition
IWorkResult result = opr.create(inparam);	    //Create instance
```
##  Open instance
**Interface Description**
<table>
    <tr>
        <td>Method</td>
        <td>open</td>
        <td> </td>
        <td>Open instance</td>
    </tr>
    <tr>
        <td> Function description</td>
        <td colspan="3">This interface is used to open instance</td>
    </tr>
    <tr>
        <td colspan="4" align="center">Interface information</td>
    </tr>
    <tr>
        <td>Interface type</td>
        <td>api</td>
        <td>Interaction frequency</td>
        <td>Aperiodic</td>
    </tr>
    <tr>
        <td>Interface protocol</td>
        <td>Direct method invocation</td>
        <td>Response time</td>
        <td></td>
    </tr>
    <tr>
        <td> Remarks</td>
        <td colspan="3">IWorkResult open(WorkParaBean workParaBean)</td>
    </tr>
</table>
**Parameter description**

| Parameter                      | Type   | Required | Description                                                                |
|--------------------------------|--------|----------|----------------------------------------------------------------------------|
| workId                         | String | √        | Instance ID                                                                |
| trackId                        | String | √        | Process routing identification                                             |
| userId                         | String | √        | Current operator identification                                            |
| tenantCode                     | String | √        | Current tenant identification                                              |
| userName                       | String | X        | Current operator name                                                      |
| deptName                       | String | X        | Department Name                                                            |
| dataIdentifier                 | String | √        | Data source of business data                                               |
| flowIdentifier                 | String | √        | Data source for process data                                               |
| bussinessClassForOpenByService | String | X        | when opening an instance, obtain the implementation class of business data |
** Invoking example**
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
inparam.setUserId("xxx");							//Current operator ID
inparam.setUserName("xxx");						//Current operator name
inparam.setDeptName("xxx");						//Department Name
inparam.setFlowIdentifier("xxx");			//Data source for process data
inparam.setDataIdentifier("xxx");			//Data source for business data
inparam.setWorkId("xxxx");           //Instance ID
inparam.setTrackId("xxx");            //Track ID
IWorkResult result = opr.open(inparam); //Open instance
```
## Close process instance
**Interface Description**
<table>
    <tr>
        <td>Method</td>
        <td>close</td>
        <td> </td>
        <td>Close process instance</td>
    </tr>
    <tr>
        <td> Function description</td>
        <td colspan="3">This interface is used to close process instance</td>
    </tr>
    <tr>
        <td colspan="4" align="center">Interface information</td>
    </tr>
    <tr>
        <td>Interface type</td>
        <td>api</td>
        <td>Interaction frequency</td>
        <td>Aperiodic</td>
    </tr>
    <tr>
        <td>Interface protocol</td>
        <td>Direct method invocation</td>
        <td>Response time</td>
        <td></td>
    </tr>
    <tr>
        <td> Remarks</td>
        <td colspan="3">void close(String workid,String trackid,String userid)</td>
    </tr>
</table>
**Parameter description**

| Parameter | Type   | Required | Description                    |
|-----------|--------|----------|--------------------------------|
| workId    | String | √        | Instance ID                    |
| trackId   | String | √        | Process routing identification |
| userId    | String | √        | Current operator ID            |
** Invoking example**
```
IWorkflowOperator opr = new WorkflowOperator();	//Process operation object
opr.close("workid","trackid","userid");
```
## Obtain the history record of process instances
**Interface Description**
<table>
    <tr>
        <td>Method</td>
        <td>getHistory</td>
        <td> </td>
        <td>Obtain the history record of process instances</td>
    </tr>
    <tr>
        <td> Function description</td>
        <td colspan="3">ThisObtain the history record of process instances</td>
    </tr>
    <tr>
        <td colspan="4" align="center">Interface information</td>
    </tr>
    <tr>
        <td>Interface type</td>
        <td>api</td>
        <td>Interaction frequency</td>
        <td>Aperiodic</td>
    </tr>
    <tr>
        <td>Interface protocol</td>
        <td>Direct method invocation</td>
        <td>Response time</td>
        <td></td>
    </tr>
    <tr>
        <td> Remarks</td>
        <td colspan="3">List&lt;DBLog&gt; getHistory(String workid, String identifier)</td>
    </tr>
</table>
**Parameter description**

| Parameter  | Type   | Required | Description    |
|------------|--------|----------|----------------|
| workid     | String | √        | Instance ID    |
| identifier | String | √        | Data source ID |
** Invoking example**
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
List<DBLog> logList = opr.getHistory("workid","identifier");
```
## Process operation description
>Process instance operation  include:Start flow,Submit,Add operator,Assist submit,Internal Submit,Multi-Operator Parallel,Parallel submit,Return,Return to Any Node,Return Submission,Take back,Temporary save,Withdraw,Jump,Pre-add Reviewer,Add Reviewer,Reduce Reviewer,Send to Read,Branch add operator,Transfer,Claim,Suspend,Replace Operator,Terminate,Add reader ,Reviewed,Reminder,Start sub process。

The following table provides instructions for setting process instance operation parameters. Having this function is represented by "■", not having this function is represented by "▲", and invalid functions are represented by "●".

**List of reference parameters and method descriptions**

| Parameter                  | Start flow | Submit | Add operator | Secondary submit | Internal Submit | Free Submit | Initiate Multi-Operator | Parallel submit | Return | Return to Any Node | Return Submission | Internally  Return | Take back | Save | Withdraw | Jump | Pre-add Reviewer | Add Reviewer | Remove Reviewer | Send to Read | Branch add operator | Transfer | Claim | Suspend | Replace Operator | Terminate | Read | Urge | Start sub process |
|----------------------------|------------|--------|--------------|------------------|-----------------|-------------|-------------------------|-----------------|--------|--------------------|-------------------|--------------------|-----------|------|----------|------|------------------|--------------|-----------------|--------------|---------------------|----------|-------|---------|------------------|-----------|------|------|-------------------|
| flowId                     | ■          | ●      | ●            | ●                | ●               | ●           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |
| workId                     | ●          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| trackId                    | ●          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| userId                     | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| tenantCode                 | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| userName                   | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| deptName                   | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| funname                    | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| actionname                 | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| actionClass                | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| bussinessClass             | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| nodeId                     | ●          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ●     | ■       | ■                | ■         | ■    | ■    | ■                 |
| msgSendFlagMap             | ●          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| flowVarMap                 | ●          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| nextNodeId                 | ●          | ■      | ■            | ■                | ■               | ■           | ●                       | ■               | ▲      | ■                  | ■                 | ▲                  | ●         | ●    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ●     | ■       | ■                | ■         | ■    | ■    | ■                 |
| title                      | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ●     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| messageMoulds              | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ●     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| otherPara                  | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ●     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| selectAuthorMap            | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ●     | ■       | ■                | ■         | ■    | ■    | ■                 |
| selectAuthorNameMap        | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ●     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| selectSubFlowid            | ●          | ●      | ●            | ●                | ●               | ●           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ■                 |
| urlApp                     | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| dataIdentifier             | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| flowIdentifier             | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| allUserids                 | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ●       | ▲                | ●         | ▲    | ●    | ▲                 |
| parentWorkid               | ●          | ●      | ●            | ●                | ●               | ●           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ▲                 |
| outerConfig                | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ●     | ●       | ▲                | ●         | ▲    | ●    | ▲                 |
| comment                    | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| sxComment                  | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ▲     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| submitflag                 | ■          | ■      | ■            | ■                | ■               | ■           | ■                       | ■               | ■      | ■                  | ■                 | ■                  | ■         | ■    | ■        | ■    | ■                | ■            | ■               | ■            | ■                   | ■        | ■     | ■       | ■                | ■         | ■    | ■    | ■                 |
| clearMemAfterAction        | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ●     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| isMultiInstanceTransaction | ▲          | ▲      | ▲            | ▲                | ▲               | ▲           | ▲                       | ▲               | ▲      | ▲                  | ▲                 | ▲                  | ▲         | ▲    | ▲        | ▲    | ▲                | ▲            | ▲               | ▲            | ▲                   | ▲        | ●     | ▲       | ▲                | ▲         | ▲    | ▲    | ▲                 |
| rejectOtherBranch          | ●          | ●      | ●            | ●                | ●               | ●           | ●                       | ●               | ●      | ■                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |
| nextNodeName               | ●          | ●      | ●            | ●                | ●               | ■           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |
| nextNodeModuleName         | ●          | ●      | ●            | ●                | ●               | ▲           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |
| nextNodeX                  | ●          | ●      | ●            | ●                | ●               | ▲           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |
| nextNodeY                  | ●          | ●      | ●            | ●                | ●               | ▲           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |
| nextNodePosX               | ●          | ●      | ●            | ●                | ●               | ▲           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |
| nextNodePosY               | ●          | ●      | ●            | ●                | ●               | ▲           | ●                       | ●               | ●      | ●                  | ●                 | ●                  | ●         | ●    | ●        | ●    | ●                | ●            | ●               | ●            | ●                   | ●        | ●     | ●       | ●                | ●         | ●    | ●    | ●                 |

**Interface Description**
<table>
    <tr>
        <td>Method</td>
        <td>operator</td>
        <td> </td>
        <td>Process instance operation</td>
    </tr>
    <tr>
        <td> Function description</td>
        <td colspan="3">This interface is userd to process instance operation。</td>
    </tr>
    <tr>
        <td colspan="4" align="center">Interface information</td>
    </tr>
    <tr>
        <td>Interface type</td>
        <td>api</td>
        <td>Interaction frequency</td>
        <td>Aperiodic</td>
    </tr>
    <tr>
        <td>Interface protocol</td>
        <td>Direct method invocation</td>
        <td>Response time</td>
        <td></td>
    </tr>
    <tr>
        <td> Remarks</td>
        <td colspan="3">IWorkResult operator(WorkParaBean workParaBean)</td>
    </tr>
</table>
****

###  Start flow
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setFlowId(flowId);					//Process definition ID
inparam.setUserId(userId);					//Current operator ID
inparam. setTenantCode(tenantCode)       //Tenant ID        
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
inparam.setDoNotToFirstNode(false);         //Is the first node submitted?
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmitFirst");	
inparam.setFunname("Startflow");			//Instance operation ID
inparam.setActionname("Startflow");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){ 
//3.2Information automatically returned by the engine
}else{    
	result. getBackMsg();      
}     
```
###  Submit
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID           
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmit");
inparam.setFunname("Submit");			//Instance operation ID
inparam.setActionname("Submit");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//Set submission nodes: path ID,node ID
inparam.setNextNodeId("Line2~Node2");
// Set operator ID, assistant ID，reader ID
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("Line2-Author"," U_admin/D_HZ28821856ef63420156ef63429c0000");
selectAuthorMap.put("Line2-SecondAuthor"," U_ HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001 ");
selectAuthorMap.put("Line2-Reader"," U_admin/D_HZ28821856ef63420156ef63429c0000");
// Set the operator name, assistant name, reader name 
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Line2-Author", "Administrator (Huizheng Software)");
selectAuthorNameMap.put("Line2-SecondAuthor"," User 01 (Testing Department 01)");
selectAuthorNameMap.put("Line2-Reader", "Huizheng Software");
// Set the node processing time limit ‘Key’ to the next node ID, ‘Value’ to the time limit Type and number of time limits, separated by semicolons，
// The time limit ‘Type’ is a fixed value, 0: calendar day, 1: working day
inparam .putNodeLimitSetMap("node2", "0;3");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
	//3.2PInformation automatically returned by the engine
}else{    
	result. getBackMsg();      
} 
```

###  Invoking example
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID           
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmit");
inparam.setFunname("Submit");			//Instance operation ID
inparam.setActionname("Submit");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//Set submission nodes: path ID,node ID，Separate multiple submission nodes with '&'
inparam.setNextNodeId("Line2~Node2&Line3~Subflow3");
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
// Set the first node operator ID/assistant ID/reader ID
selectAuthorMap.put("Line2-Author"," U_admin/D_HZ28821856ef63420156ef63429c0000");
selectAuthorMap.put("Line2-SecondAuthor"," U_ HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001 ");
selectAuthorMap.put("Line2-Reader"," U_admin/D_HZ28821856ef63420156ef63429c0000");
// Set the second node reader ID
selectAuthorMap.put("Line3- Reader"," U_ HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001 ");
// Set the name of the first node operator/assistant/reader
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Line2-Author", "Huizheng Software");
selectAuthorNameMap.put("Line2-SecondAuthor"," User 01 (Testing Department 01)");
selectAuthorNameMap.put("Line2-Reader", "Huizheng Software");
// Set the reader name of second node 
selectAuthorNameMap.put("Line3-SecondAuthor"," User 01 (Testing Department 01)");
// Set the node processing time limit ‘Key’ to the next node ID, ‘Value’ to the time limit Type and number of time limits, separated by semicolons，
// The time limit ‘Type’ is a fixed value, 0: calendar day, 1: working day
// Set the deadline for the first submission node
inparam .putNodeLimitSetMap("node2", "0;3");
// Set the deadline for the second submission node
inparam .putNodeLimitSetMap("Subflow3", "1;2");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
//3.2PInformation automatically returned by the engine
}else{    
    result. getBackMsg();      
}
```
### Add secondary operator
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID           
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionAddSecondAuthor");
inparam.setFunname("addSecondauthor");			//Instance operation ID
inparam.setActionname("Add assistant");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
inparam.setNextNodeId(nodeId) //Set assistant node to the same as the current node
// Add assistant ID
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("Node1-Author","
HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001 ");
//Add assistant name
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Node1-Author", "User 01 (Testing Department 01)");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
```
### Secondary submit
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID           
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmitNotLeave");
inparam.setFunname("SecondSubmit");			//Instance operation ID
inparam.setActionname("Assistant submit");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
``` 
### Internal Submit 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID           
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmitForProgressively");
inparam.setFunname("innerSubmit");			//Instance operation ID
inparam.setActionname("Internal Submit ");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
inparam.setNextNodeId(nodeId) //Set the internal submission node to the same as the current node
//Set internal submission operator ID
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("Node2-Author","
HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001 ");
//Set the name of internal submission operator 
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Node2-Author", "User 01 (Testing Department 01)");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
//3.2PInformation automatically returned by the engine
}else{    
    result. getBackMsg();      
}
```
### Free Submit 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID           
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmitForFree");
inparam.setFunname("freeSubmit");			//Instance operation ID
inparam.setActionname("Free Submit ");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//Free submission does not require setting the submission free node ID, but requires setting the free node name
inparam.setNextNodeName("Testing free nodes");
inparam.setNextNodeX (12); //Set the horizontal axis on the page
inparam.setNextNodeY (25); //Set the vertical axis on the page
// Set the ID of the free node operator/assistant/reader, with the string 'Node Author'/'Node SecondAuthor'/'Node Reader'
// 
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("Node-Author","U_admin/D_HZ28821856ef63420156ef63429c0000");
selectAuthorMap.put("Node-SecondAuthor","U_ HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001");
selectAuthorMap.put("Node-Reader","U_admin/D_HZ28821856ef63420156ef63429c0000");
// Set the name of the free node operator/assistant/reader, with the string 'Node Author'/'Node SecondAuthor'/'Node Reader'
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Node-Author", "Huizheng Software");
selectAuthorNameMap.put("Node-SecondAuthor"," User 01 (Testing Department 01)");
selectAuthorNameMap.put("Node-Reader", "Huizheng Software");
// Set the node processing time limit ‘Key’ to the next node ID, ‘Value’ to the time limit Type and number of time limits, separated by semicolons，
// The time limit ‘Type’ is a fixed value, 0: calendar day, 1: working day
inparam .putNodeLimitSetMap("Node", "0;3");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
```
### Return Submission
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID           
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmitForReject");
inparam.setFunname("RejectSubmit");			//Instance operation ID
inparam.setActionname("Return Submission");		//Operation
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2PInformation automatically returned by the engine
else {    
result. getBackMsg();      
}
```

###Initiate  Multi-Operator 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionHuiQian");
inparam.setFunname("Huiqian");			//Instance operation ID
inparam.setActionname("Multi-Operator Parallel");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//The operator of Multi-Operator Parallel must be set,  and can invocate inparam.SetSelectAuthorMap (map)
inparam. putSelectAuthor ("Author","U_admin") ;
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2The node ’Type‘ does not support the corresponding operation - 'Multi-Operator'
else if(cp== StaticVarExtend.F_STATUS_Not_Operator_Nodetype){
//Application page prompts
}
//3.3PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
```
###  Parallel submit
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSubmitHuiqian");
inparam.setFunname("HuiqianSubmit");			//Instance operation ID
inparam.setActionname("Parallel submit");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if (cp == StaticVarExtend.F_STATUS_Success){
}
//3.2PInformation automatically returned by the engine
else {    
result. getBackMsg();      
}
```
###  Return 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionReject");
inparam.setFunname("Reject");			//Instance operation ID
inparam.setActionname("Return");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Perform operations without interacting with the engine,The system automatically returns to the previous processed node
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if (cp == StaticVarExtend.F_STATUS_Success) {
//3.2PInformation automatically returned by the engine
}else {    
    result.getBackMsg();      
}
```
###  Return to Any Node
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("1");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionRejectByJump");
inparam.setFunname("JumpReject");			//Instance operation ID
inparam.setActionname("Return to Any Node");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Directly set the node ID to be returned, or the operator can interactively select it
inparam.setNextNodeId ("Node1");
//Whether to joint return together, 1: Yes ,0: No (default), 'Joint return' refers to the situation where one branch is returned and the other branches are also returned in multiple branches
inparam. setRejectOtherBranch ("1");
//2.Execute operation 
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Get message sending method
String msgFlag = "";  	
List< INextNode> nodes = result.getNextNodes();
if(!(nodes ==null || nodes.size()==0)){
 INodeAuthUser nodeAuthUser = nodes.get(0).getFlowNode().getParticipantsUserList().get(0);
 if(wb != null){
  if(null != nodeAuthUser){
  //'Return to Any Node' can only return to one node, and only the chief operator of that node will be sent a to-do message  
  msgFlag = nodeAuthUser.getSendMsgFlag() ;
  }
 }
}
//4.Judgment of operation return value
//4.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
//Invoking and selecting specific successful operation methods
successRejectOper(result);
}
//4.2Prompt to select the node to be returned
else if(cp == StaticVarExtend.F_STATUS_SelectNode){
//Obtain the returned node information, traverse the List, set the parameters to 'iniparam', and execute the operation.
if(nodes==null || nodes.size()==0){
//There is no nodes to select , the page can be closed directly
}else{
//Traverse node information
for(int i=0,n=nodes.size();i<n;i++){
//Node IDs that can be selected
String selectNodeId = ((IXmlNode)nodes.get(i)).getNodeid();
//Node names that can be selected         
String selectNodeName = ((IXmlNode)nodes.get(i)).getNodename();
//Process the selected node information on the page, set the parameters to 'iniparam' and execute the operation
}
}
}
//4.3Prompt for selecting the operator
else if(cp == StaticVarExtend.F_STATUS_SelectAuthor){
//Obtain the information of the operator, set the parameters to 'iniparam' and execute the operation.
//Sample code for the selectAuthor() method
selectAuthor(result);
}
//4.4Prompt that the operator is empty
else if(cp == StaticVarExtend.F_STATUS_NoAuthor){
//Display prompt information on the page
}
//4.5PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
//Operation after Return to Any Node  prompt successful
private void successRejectOper(IWorkResult result){
boolean haveNormal = false;//Is there a operator (ID)?
//Operator ID
String[] participantId_success=
result.getFlowInfo().getParticipantTypes().split(";");
//Operator Name
String[] participantName_success =
result.getFlowInfo().getParticipantNames().split(";");
//Operator Information
LinkedHashMap selectAuthorMap_success = (LinkedHashMap)
result.getWorkParaBean().getSelectAuthorMap();
//Retruned Node ID
String nodeId = result. getWorkParaBean().getNextNodeId();
IXmlNode tempNextNode = result.getFlowInfo().getNodeById(nodeId);
int nodetype = tempNextNode.getNodetype();		//Node Type
String nodeName = tempNextNode.getNodename();	//Node Name
if(nodetype==StaticVarExtend.Node_Mutual){//Multiple engine interaction nodes
//Prompt that this node is the engine interaction node
}else{
//Display operator
haveNormal = true;
//operator information
List<IXmlUser> userList = tempNextNode.getParticipantsUserList();
String selUserFunCurNode = "";
String tempParticipantId_success = "";
String tempParticipantName_success = "";
for(IXmlUser tempUser:userList){
StringBuffer tempAuthor = new StringBuffer();
tempParticipantId_success = tempUser.getAuthName();
for(int j=0;j<participantId_success.length;j++){
if(tempParticipantId_success.equals(participantId_success[j])){
tempParticipantName_success = participantName_success[j];
break;
}
}
//The operator ID to be selected
String tempId = "";
//The operator name to be selected
String tempName = "";
if(selectAuthorMap_success!=null && selectAuthorMap_success
.get(nodeId+"-"+tempParticipantId_success)!=null){
tempId = (String)selectAuthorMap_success
.get(nodeId+"-"+tempParticipantId_success);
if(tempId.endsWith(";")){
tempId = tempId.substring(0,tempId.length()-1);
}
}
if(StringUtil.hasValue(tempId)){
//Obtain the operator name from the organization based on the operator ID and assign it to tempName
}
tempAuthor.append(tempName);
if(tempAuthor.toString().length()>0){
//Display operator information
}
}//end for for(IXmlUser tempUser:userList)
}//end for non multi engine interaction nodes
/**
* The selection box for message sending method is only displayed when the following conditions are met
* haveNormal:Is there a Operator (ID) :True
* StaticVarWorkFlowFrame.ReChgMsgFlag:Need to specify the method of sending messages again during submission:True
*/
if(haveNormal && StaticVarWorkFlowFrame.ReChgMsgFlag){
//The page displays the message processing method to be selected
}
// Set  the return attribute through the page:settingsRejectOtherBranch
}
```
### Internally Return  
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("1");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionRejectForInner");
inparam.setFunname("innerreject");			//Instance operation ID
inparam.setActionname("Return Internally ");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source

//2.Execute operation 
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if (cp == StaticVarExtend.F_STATUS_Success) {

}
//3.2PInformation automatically returned by the engine
else {    
result.getBackMsg();      
}
```
### Take back
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionGetBack");
inparam.setFunname("Getback");			//Instance operation ID
inparam.setActionname("Take back");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source

//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");

//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();

//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){

}
//3.2PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
```
### Save 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionSave");
inparam.setFunname("Save");			//Instance operation ID
inparam.setActionname(" Temporary save ");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
//3.2PInformation automatically returned by the engine
}else{
    result. getBackMsg();      
}
```
### Withdraw  
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionCancel");
inparam.setFunname("Cancel");			//Instance operation ID
inparam.setActionname("Withdraw  ");		//Operation
//2.Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
//3.2PInformation automatically returned by the engine
}else{    
    result. getBackMsg();      
}
```
###  Jump 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("1");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionGoto");
inparam.setFunname("Goto");			//Instance operation ID
inparam.setActionname("Jump ");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//If the following two parameters are known in advance, they can be set. If not, they can be obtained through 'Pre submission" ，system will wait for the operator to interactively select attributes related to the operation
//The next node operator, may obtain from  'inparam SetSelectAuthorMap (map)'
inparam. putSelectAuthor ("Node1-Author","U_admin") ;	  
inparam.setNextNodeId("Node1");   //Next node submitted
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Get message sending method
String msgFlag = "";  	
IXmlUser iXmlUser = result.getNextNodes().get(0).getParticipantsUserList().get(0);
if(result != null && iXmlUser!=null){
//'Jump' can only jumpto one node, and only the chief operator of that node will be sent a to-do message 
msgFlag = iXmlUser.getSendMsgFlag();
}
//4.Judgment of operation return value
//4.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
//Sample code: sucessRejectOper() method
successRejectOper(result);
}
//4.2Node needs to be selected
else if(cp == StaticVarExtend.F_STATUS_SelectNode){    
//Obtain the node information for the jump, traverse the List, set the parameters to 'iniparam', and execute the operation.
List<INextNode> nodes = result.getNextNodes();
if(nodes==null || nodes.size()==0){
//There are no nodes to choose from, the page can be closed directly
}else{
//Traverse Node Information
for(int i=0,n=nodes.size();i<n;i++){
//Node IDs that can be selected
String selectNodeId = ((IXmlNode)nodes.get(i)).getNodeid();
//Node names that can be selected           
String selectNodeName = ((IXmlNode)nodes.get(i)).getNodename();
//Process the selected node information on the page, set the parameters to 'iniparam' ,and execute the operation
}
}
}
//4.3Prompt for selecting the operator
else if(cp == StaticVarExtend.F_STATUS_SelectAuthor){
//Obtain the information of the operator, set the parameters to iniparam and execute the operation.
//Sample code: selectAuthor() method
selectAuthor(result);
}
//4.4Prompt that the operator is empty
else if(cp == StaticVarExtend.F_STATUS_NoAuthor){
//Display prompt information on the page
}else{    //4.5PInformation automatically returned by the engine
    result.getBackMsg();      
}
```
### Pre-add Reviewer
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionJiaQianBefore");
inparam.setFunname("jiaqianBefore");			//Instance operation ID
inparam.setActionname("Pre-add Reviewer");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
nparam.setNextNodeId(nodeId);              //Current node ID 
// The operator of Pre-add Reviewer must be set
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("Node2-Author","
HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001 ");
// Operator name of pre-add Reviewer
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Node1-Author", "User 01 (Testing Department 01)");
//Business data processing classes can be set, and if not set, the process engine will not process business data
Inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2The node type does not support the 'Pre-add Reviewer' operation
else if(cp== StaticVarExtend.F_STATUS_Not_Operator_Nodetype){
//Page prompt
}else{ //3.3PInformation automatically returned by the engine   
    result. getBackMsg();      
}
```
### Add Reviewer
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionJiaQian");
inparam.setFunname("Jiaqian");			//Instance operation ID
inparam.setActionname("Add Reviewer");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Business data processing classes can be set, and if not set, the process engine will not process business data
Inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
inparam.setNextNodeId(nodeId);              //Current node ID 
// The operator of 'Add Reviewer' must be set, the 'key' is Node id-Operator
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("Node2- Author ","HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001");
// The operator name of 'Add Reviewer'  the 'key' is Node id-Done
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Node2-Author", "User 01 (Testing Department 01)");
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2This node does not support the 'Add Reviewer' operation
else if(cp== StaticVarExtend.F_STATUS_Not_Operator_Nodetype){
//Page prompt
}
//3.3PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
```
### Remove Reviewer 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionReduceAuthor");
inparam.setFunname("reduceAuthor");			//Instance operation ID
inparam.setActionname("Reduce Reviewer");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
inparam.setNextNodeId(nodeId);              //Current node ID 
// The operator of 'Reduce Reviewer'  must be set, the 'key' is Node id-Done
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("Node2-Done","HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001");
// The operator name of 'Reduce Reviewer'  , the 'key' is Node id-Done
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("Node2-Done ", "User 01 (Testing Department 01)");
//Business data processing classes can be set, and if not set, the process engine will not process business data
Inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2This node does not support the 'Reduce Reviewer' operation
else if(cp== StaticVarExtend.F_STATUS_Not_Operator_Nodetype){
//Page prompt
}
//3.3PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
```
### Add operator 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionReissue");
inparam.setFunname("Reissue");			//Instance operation ID
inparam.setActionname("Add operator ");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//The operator of 'Add operator' must be set, may obtain from inparam.SetSelectAuthorMap (map)
inparam. putSelectAuthor ("Author","U_admin") ;
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2This node does not support the 'Send to Read ' operation
else if(cp== StaticVarExtend.F_STATUS_Not_Operator_Nodetype){
//Page prompt
}else{//3.3PInformation automatically returned by the engine    
    result. getBackMsg();      
}
```
### Branch add operator
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("1");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionReissueRouter");
inparam.setFunname("RreissueRouter");			//Instance operation ID
inparam.setActionname("Branch add operator");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//If the following two parameters are known in advance, they can be set. If not, they can be obtained through 'Pre submit', 'Pre submit" is that the system will wait for the operator to interactively select attributes related to the operation
//The next node operator,may obtain from inparam.SetSelectAuthorMap (map)
inparam. putSelectAuthor ("Line1-Author","U_admin") ;	  
inparam.setNextNodeId("Line1~Node1");   //Next node submitted
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Get message sending method
String msgFlag = "";  	
if(null != result.getNextNodes() && result.getNextNodes().size()>0){
if(null != result.getNextNodes().get(0)){
List< INodeAuthUser> xmlUsers = result.getNextNodes().getFlowNode().get(0).getParticipantsUserList();
if(null != xmlUsers && xmlUsers.size()>0){
IXmlUser iXmlUser = xmlUsers.get(0);
if(null != iXmlUser){
//Obtain the first node, and only the chief operator of that node will be sent a to-do message 
msgFlag = iXmlUser.getSendMsgFlag();
}
}
}
}
//4.Judgment of operation return value
//4.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
successReissueRouterOper(result);//Rewrite successful processing method
}
//4.2Prompt for selecting operator
else if(cp == StaticVarExtend.F_STATUS_SelectAuthor){    
if(result.getNextNodes()!=null && result.getNextNodes().size()>1){
int submitFlag = 0;//Formal submission requires setting the 'setSubmitflag' ("0") attribute
//Invoking to select specific node methods
selectReissueRouterNode(result);
}else{
//Obtain the information of the operator, set the parameters to 'iniparam' and execute the operation.
//Sample code of selectAuthor() method
selectAuthor(result);
}     
}  
//4.4Prompt to select nodes
else if(cp == StaticVarExtend.F_STATUS_SelectNode){    
int submitFlag = 1;//Formal submission requires setting the 'setSubmitflag' ("0") attribute
//select specific node
selectReissueRouterNode (result);     
}  
//4.5Prompt that the operator is empty
else if(cp == StaticVarExtend.F_STATUS_NoAuthor){    
//Page prompt handling
}
//4.6Entering rule invoking error
else if(cp == StaticVarExtend.F_STATUS_EntryRule_Error){    
//Page prompt handling
}
//4.7Leaving rule invoking error
else if(cp == StaticVarExtend.F_STATUS_LeaveRule_Error){    
//Page prompt handling
}  
//4.8 Rule startup invoking error
else if(cp == StaticVarExtend.F_STATUS_StartRule_Error){    
//Page prompt handling
}   
//4.9Unable to obtain the next node
else if(cp == StaticVarExtend.F_STATUS_NoFound){    
//Page prompt handling
}  
//4.10End of process
else if(cp == StaticVarExtend.F_STATUS_FlowEnd){    
//Page prompt handling
}
//4.11Sub process not ended
else if(cp == StaticVarExtend.F_STATUS_SubFlowNoEnd){    
//Page prompt handling
}
//4.12Process Pause
else if(cp == StaticVarExtend.F_STATUS_FlowPause){    
//Page prompt handling
}
//4.13Process abnormal termination
else if(cp == StaticVarExtend.F_STATUS_FlowErrorEnd){    
//Page prompt handling
}   
//4.14PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}

// Operation after prompt successful of branch add operator 
public void successReissueRouterOper (IWorkResult result){
boolean haveNormal = false;//Is there a operator (ID)
//Operator  ID
String[] participantId_success=
result.getFlowInfo().getParticipantTypes().split(";");
//Operator  Name
String[] participantName_success =
result.getFlowInfo().getParticipantNames().split(";");
//Operator' Information
LinkedHashMap selectAuthorMap_success = (LinkedHashMap)
result.getWorkParaBean().getSelectAuthorMap();
//Node information of branch add operator 
if(result.getNextNodes()!=null){
//Traverse the next node list
for(int i=0,n= result.getNextNodes().size();i<n;i++){
IXmlNode tempNextNode = result.getNextNodes().get(i);
int nodetype = tempNextNode.getNodetype();		//Node Type
String nodeId = tempNextNode.getNodeid();		//Node ID
String nodeName = tempNextNode.getNodename();	//Node Name
if(nodetype==StaticVarExtend.Node_Mutual){//Multiple engine interaction nodes
//The page prompts that the engine interaction node has been reached
}else{
//Display operator
List<IXmlUser> userList = tempNextNode.getParticipantsUserList();
String selUserFunCurNode = "";
        //Return the operator variable to be displayed
        String tempParticipantId_success = "";
		String tempParticipantName_success = "";
           //Traverse operator information
           for(IXmlUser tempUser:userList){
				tempParticipantId_success = tempUser.getAuthName();
				for(int j=0;j<participantId_success.length;j++){
                   if(tempParticipantId_success.
                              equals(participantId_success[j])){
			             tempParticipantName_success = 
                                        participantName_success[j];
				       break;
				     }
			     } //end for participantId_success.length
			    //Operator ID
                 String tempId = "";
			    //Operator Name
                 String tempName = "";
			    if(selectAuthorMap_success!=null &&  
                   selectAuthorMap_success.
                       get(nodeId+"-"+tempParticipantId_success)!=null){
					      tempId = (String)selectAuthorMap_success
                          .get(nodeId+"-"+tempParticipantId_success);
					     if(tempId.endsWith(";")){
						     tempId = tempId.substring(0,tempId.length()-1);
					     }
			     }
                 //Obtain the operator name from the organization based on the operator ID ,assign it to tempName
			    
			    if(StringUtil.hasValue(tempId)){
				    haveNormal = true;//When 'tempId' is not empty, 'the flag indicating whether there is a operator' is true
				//The operator information (tempParticipantName_success and tempName) needs to be displayed on the page						
			    }
		 }//end for IXmlUser
      }//end for Non multi engine interaction nodes

     }//end for result.getNextNodes();
    }//end if result.getNextNodes()!=null
    /**
			 * The selection box for message sending method is only displayed when the following conditions are met
			 * haveNormal:The flag of existing an operator is True
			 * StaticVarWorkFlowFrame.ReChgMsgFlag:The flag that requires re specifying the method of sending messages during submission is True
			 */
	if(haveNormal && StaticVarWorkFlowFrame.ReChgMsgFlag){
          //The page displays the message processing method to be selected
     }
}
//'Branch add operator' prompt selection node operation
private  void selectReissueRouterNode (IWorkResult result){
List nodes = result.getNextNodes();//Optional node  
//Operator information
LinkedHashMap tmpAuthorMap = (LinkedHashMap) result.getTmpAuthorMap();
LinkedHashMap selectAuthorMap = (LinkedHashMap)
result.getWorkParaBean().getSelectAuthorMap();
LinkedHashMap initAuthorMap = (LinkedHashMap)
result.getInitAuthorMap();
if(nodes!=null){
for(int i=0,n=nodes.size();i<n;i++) {
IXmlNode node = (IXmlNode)nodes.get(i);
String nodeId = node.getNodeid();			//Node ID
String nodeName = node.getNodename();		//Node Name
//Set the selected node ID
String selectid = nodeId;
//Set the selected node name
String selectname = nodeName;
//Determine whether the given route is selected
boolean isSelected = result.isSelectedRouter(nodeId);
//This page can display node information based on whether it is selected or not
//If selected
if(isSelected){
int tmpSwitch = result.getResultByNodeid(nodeId);
//Obtain operator information for process definition
String[] participantId =
result.getFlowInfo().getParticipantTypes().split(";");
String[] participantName =
result.getFlowInfo().getParticipantNames().split(";");
List<IXmlUser> userList = node.getParticipantsUserList();
switch(tmpSwitch) {
case StaticVarExtend.F_STATUS_Success://Success message display 
case StaticVarExtend.F_STATUS_SelectAuthor://Personnel selection
//Refer to selectAuthor()。
case StaticVarExtend.F_STATUS_NoFound://Unable to obtain the next node
case StaticVarExtend.F_STATUS_SubFlowNoEnd://Sub process not ended
case StaticVarExtend.F_STATUS_FlowEnd://End of process
case StaticVarExtend.F_STATUS_FlowPause://Process Pause
case StaticVarExtend.F_STATUS_FlowErrorEnd://Process abnormal termination
default:
result. getBackMsg();//Processing of other error messages                
}//end for switch(tmpSwitch)
}//end for (isSelected)
}//end for for loop
}//end for tpRouter!=null
}
```
###  Transfer  
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionMove");
inparam.setFunname("Move");			//Instance operation ID
inparam.setActionname("Transfer ");		//Operation
//Set the operator transferred to, or you can invocate 'inparam SetSelectAuthorMap (map)'  to set
inparam. putSelectAuthor ("Author","U_admin") ;
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process Engine dada
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2The node type does not support  transfer operation
else if(cp== StaticVarExtend.F_STATUS_Not_Operator_Nodetype){
//Page prompt
}
//3.3PInformation automatically returned by the engine
else{    
result. getBackMsg();      
}
```
###  Suspend 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionPause");
inparam.setFunname("Pause");			//Instance operation ID
inparam.setActionname("Suspend ");		//Operation
//Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}else{//PInformation automatically returned by the engine    
    result. getBackMsg();      
}
```
###  Replace Operator 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionReplaceAuthor");
inparam.setFunname("Replace");			//Instance operation ID
inparam.setActionname("Replace Operator");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Set the operator to be replaced, or invocate 'inparam.SetSelectAuthorMap (map)' to set
inparam. putSelectAuthor ("Author","U_admin") ;
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//2.Execute operation
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//3.Judgment of operation return value
//3.1Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}
//3.2The node type does not support the replace operator operation
else if(cp== StaticVarExtend.F_STATUS_Not_Operator_Nodetype){
//Page prompt
}else{//3.3PInformation automatically returned by the engine    
    result. getBackMsg();      
}
```
### Terminate 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionStop");
inparam.setFunname("Stop");			//Instance operation ID
inparam.setActionname("Terminate ");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}else{//PInformation automatically returned by the engine    
    result. getBackMsg();      
}
```

### Read  
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionReaded");
inparam.setFunname("readed");			//Instance operation ID
inparam.setActionname("Reviewed ");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}else{//PInformation automatically returned by the engine  
    result. getBackMsg();      
}
```
### Urge
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("1");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setActionClass("com.horizon.wf.action.ActionReMsg");	//Operation
//Implementation class (full path)
inparam.setFunname("Urge");			//Instance operation ID
inparam.setActionname("Reminder ");		//Operation
inparam.setComment ("Comment of reminder");		//Comment of reminder
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
//Execute operation，  After 'pre submission" , the system will wait for the operator to interactively select attributes related to the operation
IWorkResult result = opr.operator(inparam);	  
int cp = result.getResult();
//执行Operation successful
if(cp==StaticVarExtend.F_STATUS_Success){
}
//The number of reminders exceeds the setting
else if(cp==StaticVarExtend.F_STATUS_OverReMsg){
result.getBackMsg();
}else{//PInformation automatically returned by the engine
    result.getBackMsg();
}
```
### Start sub process 
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Tenant ID   
inparam.setSubmitflag("1");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
inparam.setActionClass("com.horizon.wf.action.ActionStartMultiSubFlow");
//Implementation class of operation (full path)
//Alternatively, it is necessary to maintain consistency with the action class used by the start sub process set in the process definition.
inparam.setActionClass("com.horizon.wf.action.ActionStartSubFlow");
inparam.setFunname("subflow");			//Instance operation ID
inparam.setActionname("Start sub process");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Business data processing classes can be set, and if not set, the process engine will not process business data
inparam.setBussinessClass("com.horizon.workflow.support.data.BusinessDataOperate");
// Directly set the sub process ID to start,
//If the specific information of the sub process is unclear, the sub process list information can be returned
inparam.setSelectSubFlowid("xxx");
// Add sub process operator ID, 'Key' is the sub process ID
Map<String,String> selectAuthorMap = inparam.getSelectAuthorMap();
selectAuthorMap.put("subflowId ","
HZ28821856ef63420156ef6342a20002/D_HZ28821856ef63420156ef6342a20001 ");
//Add the name of the sub process operator,  'Key' is the sub process ID
Map<String,String> selectAuthorNameMap = inparam.getSelectAuthorNameMap();
selectAuthorNameMap.put("subflowId", "User 01 (Testing Department 01)");
//Execute operation，After pre submit,  the system will wait for the operator to interactively select attributes related to the operation
IWorkResult result = opr.operator(inparam);	  
int cp = result.getResult();
//The sub process has already been started, and it is not allowed to start the sub process again at this time
if(cp == StaticVarExtend.F_STATUS_IsHaveSubFlow){   
//Get Running Sub processes
List< DBRelationSubflow> dBWorkList = result.getSubflowWorks();
}
//Need to select sub processes, including those that have already been started
else if(cp == StaticVarExtend.F_STATUS_NeedSelSubFlow){
//Obtaining started sub processes
List< DBRelationSubflow > dBWorkList = result.getSubflowWorks();
//Select the sub process to start from the return list, set the parameters to 'iniparam', and execute the operation.
List< INodeSubflow> iXMLSubFlowInfoList = result. getNodeSubflows();
// Traversing the 'iXMLSubFlowInfoList', obtain the Id and name of the sub process.
if(iXMLSubFlowInfoList!=null && iXMLSubFlowInfoList.size()>0){
for(int i=0;i<iXMLSubFlowInfoList.size();i++){
IXMLSubFlowInfo subFlowInfo = iXMLSubFlowInfoList.get(i);
//Sub process Id
String subFlowId = subFlowInfo.getSubFlowId();
//Sub process Name
String subFlowName = subFlowInfo.getSubFlowName(); 			 
}				
}
}
//Successfully start sub process
else if(cp == StaticVarExtend.F_STATUS_Success){
 //Obtain the Instance ID  of the sub process and main process  after successfully starting the sub process 
 String workid = result. getSubflowWorkResult().getWorkid()
 String parentworkid = result. getWorkid();
}else{//PInformation automatically returned by the engine    
    result. getBackMsg();      
}
```
### Claim
```
IWorkflowOperator opr = WorkflowFactory.getWorkflowOperator();	//Process operation object
WorkParaBean inparam = new WorkParaBean();		//Operation parameter object
//1.Obtain the necessary parameter values from the return value information of the opened process instance
inparam.setUserId(userId);					//Current operator ID
inparam.setWorkId(workId);				//Instance ID
inparam.setTrackId(trackId);				//Track ID
inparam.setNodeId(nodeId);              //Current node ID 
inparam. setTenantCode(tenantCode)       //Current node ID 
inparam.setSubmitflag("0");//Proceed with the operation? 0: Confirmation 1: Pre submit, 'Pre submission" is that the system will wait for the operator to interactively select attributes related to the submit operation
//Implementation class of operation (full path)
inparam.setActionClass("com.horizon.wf.action.ActionClaim");
inparam.setFunname("Claim");			//Instance operation ID
inparam.setSubjection (deptid);			//Department Id
inparam.setActionname("Claim");		//Operation
inparam.setDataIdentifier("xxx");            //Business Data Source
inparam.setFlowIdentifier("xxx");            //Process engine data source
//Perform operations without interacting with the engine
IWorkResult result = opr.operator(inparam);
int cp = result.getResult();
//Operation successful
if(cp == StaticVarExtend.F_STATUS_Success){
}else{//PInformation automatically returned by the engine    
   result. getBackMsg();      
} 
```