diff --git a/docs/docs/en/guide/parameter/built-in.md b/docs/docs/en/guide/parameter/built-in.md
index c2adc6b615..9df7dc991f 100644
--- a/docs/docs/en/guide/parameter/built-in.md
+++ b/docs/docs/en/guide/parameter/built-in.md
@@ -2,11 +2,20 @@
## Basic Built-in Parameter
-| Variable | Declaration Method | Meaning |
-|--------------------|-------------------------|---------------------------------------------------------------------------------------------|
-| system.biz.date | `${system.biz.date}` | The day before the schedule time of the daily scheduling instance, the format is `yyyyMMdd` |
-| system.biz.curdate | `${system.biz.curdate}` | The schedule time of the daily scheduling instance, the format is `yyyyMMdd` |
-| system.datetime | `${system.datetime}` | The schedule time of the daily scheduling instance, the format is `yyyyMMddHHmmss` |
+| Variable | Declaration Method | Meaning |
+|---------------------------------|--------------------------------------|---------------------------------------------------------------------------------------------|
+| system.biz.date | `${system.biz.date}` | The day before the schedule time of the daily scheduling instance, the format is `yyyyMMdd` |
+| system.biz.curdate | `${system.biz.curdate}` | The schedule time of the daily scheduling instance, the format is `yyyyMMdd` |
+| system.datetime | `${system.datetime}` | The schedule time of the daily scheduling instance, the format is `yyyyMMddHHmmss` |
+| system.task.execute.path | `${system.task.execute.path}` | The absolute path of current executing task |
+| system.task.instance.id | `${ssystem.task.instance.id}` | The instance id of current task |
+| system.task.definition.name | `${system.task.definition.name}` | The definition name of current task |
+| system.task.definition.code | `${system.task.definition.code}` | The definition code of current task |
+| system.workflow.instance.id | `${system.workflow.instance.id}` | The instance id of the workflow to which current task belongs |
+| system.workflow.definition.name | `${system.workflow.definition.name}` | The definition name of the workflow to which current task belongs |
+| system.workflow.definition.code | `${system.workflow.definition.code}` | The definition code of the workflow to which current task belongs |
+| system.project.name | `${system.project.name}` | The name of the project to which current task belongs |
+| system.project.code | `${system.project.code}` | The code of the project to which current task belongs |
## Extended Built-in Parameter
diff --git a/docs/docs/zh/guide/parameter/built-in.md b/docs/docs/zh/guide/parameter/built-in.md
index abf5ade789..4de216bc20 100644
--- a/docs/docs/zh/guide/parameter/built-in.md
+++ b/docs/docs/zh/guide/parameter/built-in.md
@@ -2,24 +2,20 @@
## 基础内置参数
-
- 变量名 | 声明方式 | 含义 |
-
- system.biz.date |
- ${system.biz.date} |
- 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd |
-
-
- system.biz.curdate |
- ${system.biz.curdate} |
- 日常调度实例定时的定时时间,格式为 yyyyMMdd |
-
-
- system.datetime |
- ${system.datetime} |
- 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss |
-
-
+| 变量名 | 声明方式 | 含义 |
+|---------------------------------|--------------------------------------|----------------------------------|
+| system.biz.date | `${system.biz.date}` | 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd |
+| system.biz.curdate | `${system.biz.curdate}` | 日常调度实例定时的定时时间,格式为 yyyyMMdd |
+| system.datetime | `${system.datetime}` | 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss |
+| system.task.execute.path | `${system.task.execute.path}` | 当前任务执行的绝对路径 |
+| system.task.instance.id | `${ssystem.task.instance.id}` | 当前任务实例的ID |
+| system.task.definition.name | `${system.task.definition.name}` | 当前任务所属任务定义的名称 |
+| system.task.definition.code | `${system.task.definition.code}` | 当前任务所属任务定义的code |
+| system.workflow.instance.id | `${system.workflow.instance.id}` | 当前任务所属工作流实例ID |
+| system.workflow.definition.name | `${system.workflow.definition.name}` | 当前任务所属工作流定义的名称 |
+| system.workflow.definition.code | `${system.workflow.definition.code}` | 当前任务所属工作流定义的code |
+| system.project.name | `${system.project.name}` | 当前任务所在项目的名称 |
+| system.project.code | `${system.project.code}` | 当前任务所在项目的code |
## 衍生内置参数
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParams.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParams.java
index 8878fc3c2e..a916f4ad35 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParams.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParams.java
@@ -17,8 +17,15 @@
package org.apache.dolphinscheduler.service.expand;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_PROJECT_CODE;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_PROJECT_NAME;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_TASK_DEFINITION_CODE;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_TASK_DEFINITION_NAME;
import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_TASK_EXECUTE_PATH;
import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_TASK_INSTANCE_ID;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_WORKFLOW_DEFINITION_CODE;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_WORKFLOW_DEFINITION_NAME;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.PARAMETER_WORKFLOW_INSTANCE_ID;
import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.constants.DateConstants;
@@ -123,7 +130,7 @@ public class CuringGlobalParams implements CuringParamsService {
}
/**
- * the global parameters and local parameters used in the worker will be prepared here.
+ * the global parameters and local parameters used in the worker will be prepared here, and built-in parameters.
*
* @param taskInstance
* @param parameters
@@ -137,8 +144,6 @@ public class CuringGlobalParams implements CuringParamsService {
// assign value to definedParams here
Map globalParamsMap = setGlobalParamsMap(processInstance);
Map globalParams = ParamUtils.getUserDefParamsMap(globalParamsMap);
- CommandType commandType = processInstance.getCmdTypeIfComplement();
- Date scheduleTime = processInstance.getScheduleTime();
// combining local and global parameters
Map localParams = parameters.getInputLocalParametersMap();
@@ -147,24 +152,18 @@ public class CuringGlobalParams implements CuringParamsService {
parameters.setVarPool(taskInstance.getVarPool());
Map varParams = parameters.getVarPoolMap();
- if (MapUtils.isEmpty(globalParams) && MapUtils.isEmpty(localParams) && MapUtils.isEmpty(varParams)) {
- return null;
- }
// if it is a complement,
// you need to pass in the task instance id to locate the time
// of the process instance complement
Map cmdParam = JSONUtils.toMap(processInstance.getCommandParam());
String timeZone = cmdParam.get(Constants.SCHEDULE_TIMEZONE);
- Map params = BusinessTimeUtils.getBusinessTime(commandType, scheduleTime, timeZone);
- if (MapUtils.isNotEmpty(globalParamsMap)) {
- params.putAll(globalParamsMap);
- }
+ // built-in params
+ Map params = setBuiltInParamsMap(taskInstance, timeZone);
- if (StringUtils.isNotBlank(taskInstance.getExecutePath())) {
- params.put(PARAMETER_TASK_EXECUTE_PATH, taskInstance.getExecutePath());
+ if (MapUtils.isNotEmpty(params)) {
+ globalParams.putAll(ParamUtils.getUserDefParamsMap(params));
}
- params.put(PARAMETER_TASK_INSTANCE_ID, Integer.toString(taskInstance.getId()));
if (MapUtils.isNotEmpty(varParams)) {
globalParams.putAll(varParams);
@@ -206,6 +205,33 @@ public class CuringGlobalParams implements CuringParamsService {
return globalParams;
}
+ /**
+ * build all built-in parameters
+ * @param taskInstance
+ * @param timeZone
+ */
+ private Map setBuiltInParamsMap(@NonNull TaskInstance taskInstance, String timeZone) {
+ CommandType commandType = taskInstance.getProcessInstance().getCmdTypeIfComplement();
+ Date scheduleTime = taskInstance.getProcessInstance().getScheduleTime();
+
+ Map params = BusinessTimeUtils.getBusinessTime(commandType, scheduleTime, timeZone);
+
+ if (StringUtils.isNotBlank(taskInstance.getExecutePath())) {
+ params.put(PARAMETER_TASK_EXECUTE_PATH, taskInstance.getExecutePath());
+ }
+ params.put(PARAMETER_TASK_INSTANCE_ID, Integer.toString(taskInstance.getId()));
+ params.put(PARAMETER_TASK_DEFINITION_NAME, taskInstance.getTaskDefine().getName());
+ params.put(PARAMETER_TASK_DEFINITION_CODE, Long.toString(taskInstance.getTaskDefine().getCode()));
+ params.put(PARAMETER_WORKFLOW_INSTANCE_ID, Integer.toString(taskInstance.getProcessInstance().getId()));
+ params.put(PARAMETER_WORKFLOW_DEFINITION_NAME,
+ taskInstance.getProcessInstance().getProcessDefinition().getName());
+ params.put(PARAMETER_WORKFLOW_DEFINITION_CODE,
+ Long.toString(taskInstance.getProcessInstance().getProcessDefinition().getCode()));
+ params.put(PARAMETER_PROJECT_NAME, taskInstance.getProcessInstance().getProcessDefinition().getProjectName());
+ params.put(PARAMETER_PROJECT_CODE,
+ Long.toString(taskInstance.getProcessInstance().getProcessDefinition().getProjectCode()));
+ return params;
+ }
private Map setGlobalParamsMap(ProcessInstance processInstance) {
Map globalParamsMap = new HashMap<>(16);
diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParamsServiceTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParamsServiceTest.java
index 00476da32e..9a8ad877b4 100644
--- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParamsServiceTest.java
+++ b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/expand/CuringGlobalParamsServiceTest.java
@@ -17,12 +17,20 @@
package org.apache.dolphinscheduler.service.expand;
+import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.enums.CommandType;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
+import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
import org.apache.dolphinscheduler.plugin.task.api.enums.DataType;
import org.apache.dolphinscheduler.plugin.task.api.enums.Direct;
import org.apache.dolphinscheduler.plugin.task.api.model.Property;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.SubProcessParameters;
import java.util.ArrayList;
import java.util.Date;
@@ -39,6 +47,8 @@ import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
+import com.google.common.collect.Lists;
+
@ExtendWith(MockitoExtension.class)
public class CuringGlobalParamsServiceTest {
@@ -158,4 +168,60 @@ public class CuringGlobalParamsServiceTest {
CommandType.START_CURRENT_TASK_PROCESS, scheduleTime, null);
Assertions.assertEquals(result6, JSONUtils.toJsonString(globalParamList));
}
+
+ @Test
+ public void testParamParsingPreparation() {
+ TaskInstance taskInstance = new TaskInstance();
+ taskInstance.setId(1);
+ taskInstance.setExecutePath("home/path/execute");
+
+ TaskDefinition taskDefinition = new TaskDefinition();
+ taskDefinition.setName("TaskName-1");
+ taskDefinition.setCode(1000001l);
+
+ ProcessInstance processInstance = new ProcessInstance();
+ processInstance.setId(2);
+ processInstance.setCommandParam("{\"" + Constants.SCHEDULE_TIMEZONE + "\":\"Asia/Shanghai\"}");
+ processInstance.setHistoryCmd(CommandType.COMPLEMENT_DATA.toString());
+ Property property = new Property();
+ property.setDirect(Direct.IN);
+ property.setProp("global_params");
+ property.setValue("hello world");
+ property.setType(DataType.VARCHAR);
+ List properties = Lists.newArrayList(property);
+ processInstance.setGlobalParams(JSONUtils.toJsonString(properties));
+
+ ProcessDefinition processDefinition = new ProcessDefinition();
+ processDefinition.setName("ProcessName-1");
+ processDefinition.setProjectName("ProjectName-1");
+ processDefinition.setProjectCode(3000001l);
+ processDefinition.setCode(200001l);
+
+ processInstance.setProcessDefinition(processDefinition);
+ taskInstance.setProcessDefine(processDefinition);
+ taskInstance.setProcessInstance(processInstance);
+ taskInstance.setTaskDefine(taskDefinition);
+
+ AbstractParameters parameters = new SubProcessParameters();
+
+ Map propertyMap =
+ dolphinSchedulerCuringGlobalParams.paramParsingPreparation(taskInstance, parameters, processInstance);
+ Assertions.assertNotNull(propertyMap);
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_TASK_INSTANCE_ID).getValue(),
+ String.valueOf(taskInstance.getId()));
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_TASK_EXECUTE_PATH).getValue(),
+ taskInstance.getExecutePath());
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_WORKFLOW_INSTANCE_ID).getValue(),
+ String.valueOf(processInstance.getId()));
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_WORKFLOW_DEFINITION_NAME).getValue(),
+ processDefinition.getName());
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_PROJECT_NAME).getValue(),
+ processDefinition.getProjectName());
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_PROJECT_CODE).getValue(),
+ String.valueOf(processDefinition.getProjectCode()));
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_TASK_DEFINITION_CODE).getValue(),
+ String.valueOf(taskDefinition.getCode()));
+ Assertions.assertEquals(propertyMap.get(TaskConstants.PARAMETER_WORKFLOW_DEFINITION_CODE).getValue(),
+ String.valueOf(processDefinition.getCode()));
+ }
}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java
index bb7c8fc439..d6c84eeff2 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java
@@ -17,6 +17,8 @@
package org.apache.dolphinscheduler.plugin.task.api;
+import org.apache.dolphinscheduler.common.constants.DateConstants;
+
import java.time.Duration;
import java.util.Set;
import java.util.regex.Pattern;
@@ -165,17 +167,17 @@ public class TaskConstants {
/**
* system date(yyyyMMddHHmmss)
*/
- public static final String PARAMETER_DATETIME = "system.datetime";
+ public static final String PARAMETER_DATETIME = DateConstants.PARAMETER_DATETIME;
/**
* system date(yyyymmdd) today
*/
- public static final String PARAMETER_CURRENT_DATE = "system.biz.curdate";
+ public static final String PARAMETER_CURRENT_DATE = DateConstants.PARAMETER_CURRENT_DATE;
/**
* system date(yyyymmdd) yesterday
*/
- public static final String PARAMETER_BUSINESS_DATE = "system.biz.date";
+ public static final String PARAMETER_BUSINESS_DATE = DateConstants.PARAMETER_BUSINESS_DATE;
/**
* the absolute path of current executing task
@@ -187,6 +189,40 @@ public class TaskConstants {
*/
public static final String PARAMETER_TASK_INSTANCE_ID = "system.task.instance.id";
+ /**
+ * the definition code of current task
+ */
+ public static final String PARAMETER_TASK_DEFINITION_CODE = "system.task.definition.code";
+
+ /**
+ * the definition name of current task
+ */
+ public static final String PARAMETER_TASK_DEFINITION_NAME = "system.task.definition.name";
+
+ /**
+ * the instance id of the workflow to which current task belongs
+ */
+ public static final String PARAMETER_WORKFLOW_INSTANCE_ID = "system.workflow.instance.id";
+
+ /**
+ * the definition code of the workflow to which current task belongs
+ */
+ public static final String PARAMETER_WORKFLOW_DEFINITION_CODE = "system.workflow.definition.code";
+
+ /**
+ * the definition name of the workflow to which current task belongs
+ */
+ public static final String PARAMETER_WORKFLOW_DEFINITION_NAME = "system.workflow.definition.name";
+
+ /**
+ * the code of the project to which current task belongs
+ */
+ public static final String PARAMETER_PROJECT_CODE = "system.project.code";
+
+ /**
+ * the name of the project to which current task belongs
+ */
+ public static final String PARAMETER_PROJECT_NAME = "system.project.name";
/**
* month_begin
*/