Save Flow¶
Save the information of the current workflow.
Prerequisite¶
The user must be the owner of the workflow.
Request Format¶
POST https://{apigw-address}/dataflow-batch-service/v2.0/flows?action=save
Request Parameters (URI)¶
Name  | 
Location (Path/Query)  | 
Mandatory/Optional  | 
Data Type  | 
Description  | 
|---|---|---|---|---|
userId  | 
Query  | 
Mandatory  | 
String  | 
The user ID. How to get userId>>  | 
orgId  | 
Query  | 
Mandatory  | 
String  | 
The organization ID which the user belongs to. How to get orgId>>  | 
Request Parameters (Body)¶
Name  | 
Mandatory/Optional  | 
Data Type  | 
Description  | 
|---|---|---|---|
id  | 
Mandatory  | 
Integer  | 
The workflow ID.  | 
type  | 
Mandatory  | 
Integer  | 
The scheduling type of the workflow. 
  | 
name  | 
Mandatory  | 
String  | 
The workflow name.  | 
freq  | 
Mandatory  | 
String  | 
Use the CronTab syntax to specify the time to start the workflow in a scheduling cycle (specify a 7-character CronTab expression). For more information about CronTab, see the Cron Expression Explainer  | 
cycle  | 
Mandatory  | 
String  | 
The scheduling cycle. 
  | 
alertMode  | 
Mandatory  | 
Integer  | 
The alert mode. 
  | 
doAs  | 
Mandatory  | 
String  | 
The big data account of the organization to which the workflow belongs.  | 
owners  | 
Mandatory  | 
String  | 
The username of the owners of the workflow. The semicolon (;) is used to separate each owner, for example, owners=”userNameA;userNameB”.  | 
visitors  | 
Mandatory  | 
String  | 
The username of the vistors who can access the workflow. The semicolon (;) is used to separate each visitor, for example, visitors=”userNameA;userNameB”.  | 
startTime  | 
Mandatory  | 
String  | 
The effective date of the workflow.  | 
active  | 
Mandatory  | 
Integer  | 
The scheduling status of the workflow. 
  | 
parameters  | 
false  | 
Map  | 
The parameters that are configured for the workflow to dynamically adapt to the environment changes (in the format of key=value).  | 
desc  | 
Optional  | 
String  | 
The workflow description.  | 
queue  | 
Optional  | 
String  | 
The computing queue.  | 
tasks  | 
Optional  | 
Array of TaskSimpleInfo Structs  | 
The list of all task nodes in the workflow, with each element representing a TaskSimpleInfo Struct, which contains the basic information of a task node.  | 
flows  | 
Optional  | 
Array of FlowSimpleInfo Structs  | 
The list of workflows that have dependency relations with the workflow. For more information, see FlowSimpleInfo Struct  | 
relations  | 
Optional  | 
Array of Relation Structs  | 
The list of relations between tasks in the workflow, with each element representing the upstream and downstream dependency. For more information, see Relation Struct  | 
Response Parameters¶
Name  | 
Data Type  | 
Description  | 
|---|---|---|
data  | 
FlowID Struct  | 
The ID of the workflow that is saved.  | 
Error Code¶
Code  | 
Message  | 
Description  | 
|---|---|---|
62102  | 
graph not found  | 
The format of the parameter is invalid.  | 
62105  | 
Your account has been locked  | 
The user account is locked. Please contact the administrator.  | 
Samples¶
Request Sample¶
url: https://{apigw-address}/dataflow-batch-service/v2.0/flows?action=save&userId=yourUserId&orgId=yourOrgId
method: POST
requestBody:
{
    "id":"2515",
    "type":1,
    "name":"fpostm",
    "freq":"0 0 0 * * ? *",
    "cycle":"D",
    "alertMode":3,
    "doAs":"yourDoAs",
    "parameters":"[]",
    "owners":";yourOwners;",
    "desc":"e",
    "startTime":"2019-07-23",
    "visitors":";yourVisitors;",
    "active":0,
    "queue":"",
    "tasks":[
        {
            "taskName":"tass",
            "x":0.0132,
            "y":0.008100000381469727,
            "taskId":"104575",
            "nodeId":"t_104575"
        },
        {
            "taskName":"gg",
            "x":0.0084,
            "y":0.014199999237060546,
            "taskId":"104590",
            "nodeId":"t_104590"
        },
        {
            "taskName":"dff",
            "x":0.0352,"y":0.008300002288818359,
            "taskId":"104901","nodeId":"t_104901"
        }
            ],
    "flows":
            [
        {
            "isVirtual":false,
            "flowId":"2788",
            "x":0.0186,
            "flowName":"jin",
            "y":0.0016999999046325683,
            "nodeId":"f_2788"},
            {"flowId":"2819",
            "flowName":"104891(tass)",
            "nodeId":"f_2819",
            "isVirtual":true,
            "x":0.0125,
            "y":0.023800001525878908}],
    "relations":
    [
        {
            "cycleGap":"D0",
            "source":"t_104575",
            "rerun":true,
            "target":"t_104590"
            },
        {
            "cycleGap":"D0",
            "source":"f_2788",
            "rerun":false,
            "target":"t_104575"
            }
    ]
}
Return Sample¶
{
  "status": 0,
  "msg": "Success",
  "data": {
    "flowId": 2841
  }
}
Java SDK Sample¶
import com.alibaba.fastjson.JSONObject;
import com.envision.apim.poseidon.config.PConfig;
import com.envision.apim.poseidon.core.Poseidon;
public class Request extends PoseidonRequest {
    public void setQueryParam(String key, Object value){
        QueryParams().put(key, value);
    }
    public void setHeaderParam(String key, String value){
        headerParams().put(key, value);
    }
    public void setBodyParam(Map<String, Object> bodyPara){
        bodyParams().putAll(bodyPara);
    }
    public void setMethod(String method) {
        this.method = method;
    }
    private String method;
    public String baseUri() {
        return "";
    }
    public String method() {
        return method;
    }
}
public void saveFlowTest(){
        //1. Select Application Registration from the left navigation bar of EnOS Console.
        //2. Open the App Detail page to get the AccessKey and SecretKey of the application.
        String accessKey = "yourAppAccessKey";
        String secretKey = "yourAppSecretKey";
        //Create a request and save the required parameters in the map of the Query.
        Request request = new Request();
        HashMap<String,Object> hashMap = new HashMap<String, Object>(2);
        hashMap.put("type",1);
        hashMap.put("name","testWorkflow");
        hashMap.put("cycle","D");
        hashMap.put("freq","0 0 0 * * ? *");
        hashMap.put("parameters","[]");
        hashMap.put("alertMode",3);
        hashMap.put("alertTo","");
        hashMap.put("id","2515");
        hashMap.put("doAs","yourDoas");
        hashMap.put("visitors","yourVisitors");
        hashMap.put("owners","yourOwners");
        hashMap.put("active",0);
        hashMap.put("queue","");
        hashMap.put("startTime","2019-07-25");
        JSONArray jsonArrayTasks = new JSONArray();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("taskName","tass");
        jsonObject.put("x",0.0132);
        jsonObject.put("y",0.008100000381469727);
        jsonObject.put("taskId","104575");
        jsonObject.put("nodeId","t_104575");
        jsonArrayTasks.add(jsonObject);
        hashMap.put("tasks",jsonArrayTasks);
        JSONArray jsonArray = new JSONArray();
        hashMap.put("relations",jsonArray);
        hashMap.put("flows",jsonArray);
        request.setQueryParam("userId","yourUserId");
        request.setBodyParam(hashMap);
        request.setMethod("POST");
        try {
            JSONObject response = Poseidon.config(PConfig.init().appKey(accessKey).appSecret(secretKey).debug())
                    .url("https://{apigw-address}/dataflow-batch-service/v2.0/flows?action=save")
                    .getResponse(request, JSONObject.class);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }