Todos los productos
Search
Centro de documentos

:Práctica recomendada: prohibir la función MAX_PT

Última actualización: Sep 28, 2026

DataWorks ofrece comprobaciones integradas, como revisiones de código antes del despliegue de tareas y validaciones del Data Governance Center. También puede integrar lógica de validación personalizada para aplicar controles de proceso en DataWorks. Este tema muestra cómo usar una extensión para prohibir funciones específicas en un espacio de trabajo. Para ello, se utiliza un ejemplo que comprueba la presencia de la función MAX_PT durante el envío o el despliegue.

Escenario

Esta práctica recomendada incluye un ejemplo sobre cómo comprobar la función MAX_PT en el código que se envía y se despliega. A continuación se describe el proceso de validación:

Paso

Proceso principal

Función clave

1

Open Event envía mensajes de envío y despliegue de archivos (por ejemplo, al enviar y desplegar nodos) desde un espacio de trabajo hacia EventBridge. Después, EventBridge filtra los mensajes de eventos y los envía a su servicio.

Cuando habilite la suscripción de mensajes, use una regla de eventos para suscribirse a tipos de eventos específicos, como el envío de archivos (dataworks:FileChange:CommitFile) y el despliegue de archivos (dataworks:FileChange:DeployFile).

Para más detalles de configuración, consulte Best practice: (advanced feature) Prohibit the MAX_PT function.

2

Un servicio local o en línea recibe los mensajes. La extensión se configura para gestionar los eventos de la siguiente manera:

  • Mensajes de envío de archivos en un espacio de trabajo específico: no se activa la comprobación y el proceso continúa.

  • Mensajes de despliegue de archivos en un espacio de trabajo específico: se activa la comprobación para determinar si el código usa la función MAX_PT y luego se proporciona una respuesta.

    Si el código contiene la función MAX_PT, la API de callback bloquea el envío o el despliegue en DataWorks, o bien envía una alerta.

  • Al registrar la extensión, use la opción Parameter Configuration para especificar los espacios de trabajo y los eventos en los que la extensión estará deshabilitada. En este ejemplo se especifica el evento de envío de archivos, lo que evita que la extensión se active.

  • Al registrar la extensión, use la opción Options for Extension para definir las respuestas ante eventos que no superen la validación. Cuando habilite la extensión, seleccione un método de respuesta específico. En este ejemplo, los métodos disponibles son alerta y bloqueo.

Para más detalles de configuración, consulte Best practice: (advanced feature) Prohibit the MAX_PT function.

Requisitos previos

Procedimiento

Paso 1: Configurar un bus de eventos personalizado

  1. Inicie sesión en la consola de EventBridge. En el panel de navegación izquierdo, haga clic en Event Bus para ir a la página de buses de eventos.

  2. Haga clic en el botón image para Create Custom Event Bus.

    1. En la sección Bus, configure Custom Event Bus Name y luego haga clic en Next step para continuar con la configuración del origen de eventos.

    2. Haga clic en Skip para omitir la configuración de Event Source, Rule y Target Module. Introduzca una Description.

  3. En el panel de navegación izquierdo, haga clic en Event Bus para ir a la página de buses de eventos. Busque el bus de eventos que creó y haga clic en su nombre para ir a la página de descripción general.

    • En el panel de navegación izquierdo, haga clic en Event Rules para ir a la página de reglas de eventos y luego haga clic en Create Rule para crear una regla de eventos.

    • En este ejemplo, el bus personalizado de EventBridge se configura para recibir mensajes de eventos de envío y despliegue de archivos desde DataWorks. A continuación se describen la demostración de configuración y los parámetros clave.

      1. Configure Basic Information: personalice el nombre de la regla.

      2. Pattern Content.

        • Event Source Type: seleccione custom event source.

        • Event Source: deje este campo vacío.

        • Pattern Content: escríbalo en formato JSON. La configuración es la siguiente.

          {
              "source": [
                  "acs.dataworks"
              ],
              "type": [
                  "dataworks:FileChange:CommitFile",
                  "dataworks:FileChange:DeployFile"
              ]
          }
          • source: define el identificador de nombre de producto acs.dataworks.

          • type: define los identificadores de tipo de evento dentro del producto. Establézcalo en dataworks:FileChange:CommitFile y dataworks:FileChange:DeployFile.

        • Event Pattern Debugging: complete y modifique los valores de source y type, y luego ejecute una prueba de eventos. Una vez que la prueba finalice correctamente, haga clic en Next. Haga clic en Test para comprobar que el evento personalizado coincide con el patrón. Si la prueba se supera, la página mostrará Match passed, event can be triggered normally.

      3. Configure Event Target.

        • Service Type: seleccione HTTPS o HTTP. Para conocer más tipos de servicio, consulte Event targets.

        • URL: introduzca la URL que recibe los mensajes enviados por el bus personalizado, por ejemplo, https://server-address:port/extensions/consumer.

        • Body: seleccione Complete Event.

        • Network Type: seleccione Public Network.

Paso 2: Configurar un canal de distribución de eventos

  1. Inicie sesión en la consola de DataWorks. En la región de destino, vaya a More > Open Platform en el panel de navegación izquierdo. Haga clic en Go to Open Platform para abrir la página Developer Backend.

  2. En la página Developer Backend, haga clic en OpenEvent en el panel de navegación izquierdo. En la página que aparece, haga clic en Add Event Distribution Channel y configure los ajustes en el cuadro de diálogo.

    • Workspace for Event Distribution: seleccione un espacio de trabajo que haya creado.

    • Custom Bus in Eventbridge for Distribution: seleccione el bus de eventos creado en el paso 1.

  3. Después de guardar el canal de distribución de eventos, en la columna Operation del canal, haga clic en Enable para habilitar el nuevo canal de distribución de eventos.

Paso 3: Registrar y configurar una extensión

  1. Inicie sesión en la consola de DataWorks. En la región de destino, vaya a More > Open Platform en el panel de navegación izquierdo. Haga clic en Go to Open Platform para abrir la página Developer Backend.

  2. En la página Developer Backend, haga clic en Extension en el panel de navegación izquierdo. En la página que aparece, haga clic en Register Extension y configure los ajustes en el cuadro de diálogo.

    1. Método de despliegue: seleccione Deploy via self-built service.

    2. Registre la extensión

      • Extension Name: introduzca un nombre personalizado.

      • Extension Point Event: seleccione Before File Commit y Before File Deploy.

      • Workspace for Testing: después de configurar esta opción, podrá probar la extensión en el espacio de trabajo especificado antes de enviarla.

      • Parameter Configurations for Extension

        Este parámetro le permite controlar el alcance de la extensión. En el espacio de trabajo especificado:

        • El envío de un nodo (Before File Commit) no activa la validación de la extensión ni bloquea el proceso de envío.

        • El despliegue de un nodo (Before File Deploy) activa la validación de la extensión. Si la validación falla, se bloquea el proceso de despliegue.

        Establézcalo en extension.project.commit-file.disabled=YourProjectId, donde YourProjectId es el ID del espacio de trabajo en el que el evento de punto de extensión no surte efecto.

      • Options for Extension: sirve para definir los métodos de respuesta cuando la validación falla. En este ejemplo, los métodos de respuesta especificados incluyen alerta y bloqueo.

        {
          "type":"object",
          "properties":{
            "checkStatus":{
              "type":"number",
              "title":"MAX-PT function check method",
              "x-decorator":"FormItem",
              "x-component":"Radio.Group",
              "x-decorator-props":{
                "tooltip":"Description file"
              },
              "x-component-props":{
                "dataSource":[
                  {
                    "value":"WARN",
                    "label":"Warning"
                  },
                  {
                    "value":"FAIL",
                    "label":"Disabled"
                  }
                ],
                "mode":"multiple"
              }
            }
          }
        }

        Los campos de la configuración de opciones se describen a continuación:

        • checkStatus: nombre de campo personalizado (nombre de componente, debe ser único) definido por el desarrollador de la extensión en la configuración de opciones. El servidor de la extensión lee mediante este nombre de campo el valor que configuró el administrador del espacio de trabajo.

        • title: título de la opción. Para conocer los valores, consulte los ejemplos de análisis y configuración de parámetros en Advanced feature: Extension options configuration. En este ejemplo, el título es MAX-PT Function Check Method.

        • x-component: componente de formulario que usa la opción. En este ejemplo se utiliza un componente de botón de opción (Radio.Group).

        • dataSource: opciones seleccionables para el componente de botón de opción, donde label es el texto que se muestra en la interfaz y value es el identificador correspondiente. Este ejemplo ofrece dos valores: Alert (WARN) y Block (FAIL), que permiten al administrador del espacio de trabajo seleccionar el método de respuesta cuando se detecta la función MAX_PT al habilitar la extensión.

        Con ayuda del código de ejemplo de este tema, puede comprender el flujo de valores de checkStatus: cuando el administrador del espacio de trabajo habilita la extensión, selecciona Alert o Block en MAX-PT Function Check Method. El servidor de la extensión lee esta configuración mediante GetOptionValueForProject, recupera la selección del administrador con jsonObject.getString("checkStatus") y devuelve el resultado a DataWorks mediante setCheckResult como callback, lo cual genera una alerta o bloquea el proceso de despliegue del nodo.

        Nota

        checkStatus es solo un ejemplo de configuración que usa el componente de botón de opción. Actualmente, la configuración de opciones admite siete tipos de componentes: texto, entrada de una línea, entrada de varias líneas, lista desplegable de selección única, lista desplegable de selección múltiple, casilla de verificación y botón de opción. Para conocer todos los tipos de componentes y sus métodos de configuración, consulte Configure extension options.

  3. Una vez completada la configuración, haga clic en Determine para guardar y registrar la extensión.

  4. En la columna Operation de la extensión creada, haga clic en Submit para enviar la extensión a revisión.

    Nota
    • La plataforma de DataWorks se encarga de revisar la extensión. Por lo general, la revisión tarda T+3 días hábiles en completarse.

    • Para probar la extensión creada, configure Workspace for Testing.

  5. Una vez aprobada la revisión, haga clic en Deploy en la columna Operation para poner la extensión en producción.

  6. Haga clic en Manage Extensions para ir a la página Management Center > Extension. Seleccione la extensión que creó, habilítela en la columna Enable y haga clic en Settings para configurar el nivel de control del uso de la función MAX_PT en el espacio de trabajo.

Desarrollar y configurar la extensión

EventBridge recibe los mensajes de eventos de DataWorks en formato JSON mediante solicitudes HTTP, los analiza y los envía al servicio de destino. Después de que el servicio procesa los eventos, devuelve los resultados a DataWorks.

Código de ejemplo

Este ejemplo de código llama a la API UpdateIDEEventResult para devolver el resultado del callback. Utiliza el parámetro messageId de la API para obtener los detalles del evento, ejecuta la lógica que determina si se usan funciones restringidas y devuelve el resultado a DataWorks mediante la API UpdateIDEEventResult. Para más información, consulte Develop an extension.

Configuración del entorno: Java 8, herramienta de compilación Maven.

package com.aliyun.dataworks.demo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.dataworks.config.Constants; import com.aliyun.dataworks.config.EventCheckEnum; import com.aliyun.dataworks.config.ExtensionParamProperties; import com.aliyun.dataworks.services.DataWorksOpenApiClient; import com.aliyun.dataworks_public20200518.Client; import com.aliyun.dataworks_public20200518.models.; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; / @author dataworks demo / @RestController @RequestMapping("/extensions") public class ExtensionsController { @Autowired(required = false) private DataWorksOpenApiClient dataWorksOpenApiClient; @Autowired private ExtensionParamProperties extensionParamProperties; / Receive messages pushed by EventBridge @param jsonParam */ @PostMapping("/consumer") public void consumerEventBridge(@RequestBody String jsonParam) { JSONObject jsonObj = JSON.parseObject(jsonParam); String eventCode = jsonObj.getString(Constants.EVENT_CODE_FILED); if (Constants.COMMIT_FILE_EVENT_CODE.equals(eventCode) || Constants.DEPLOY_FILE_EVENT_CODE.equals(eventCode)) { //Initialize client Client client = dataWorksOpenApiClient.createClient(); try { //Current event parameter information String messageId = jsonObj.getString("id"); JSONObject data = jsonObj.getObject("data", JSONObject.class); Long projectId = data.getLong("projectId"); //Initialize event callback UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest(); updateIDEEventResultRequest.setMessageId(messageId); updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode()); //Query the extension point data snapshot when the extension point event was triggered GetIDEEventDetailRequest getIDEEventDetailRequest = new GetIDEEventDetailRequest(); getIDEEventDetailRequest.setMessageId(messageId); getIDEEventDetailRequest.setProjectId(projectId); GetIDEEventDetailResponse getIDEEventDetailResponse = client.getIDEEventDetail(getIDEEventDetailRequest); String content = getIDEEventDetailResponse.getBody().getEventDetail().getCommittedFile().getContent(); //Check whether the code contains restricted functions if (content.contains(Constants.CHECK_CODE)) { //Get the extension option configuration for the workspace GetOptionValueForProjectRequest getOptionValueForProjectRequest = new GetOptionValueForProjectRequest(); getOptionValueForProjectRequest.setProjectId(String.valueOf(projectId)); getOptionValueForProjectRequest.setExtensionCode(extensionParamProperties.getExtensionCode()); GetOptionValueForProjectResponse getOptionValueForProjectResponse = client.getOptionValueForProject(getOptionValueForProjectRequest); JSONObject jsonObject = JSON.parseObject(getOptionValueForProjectResponse.getBody().getOptionValue()); //Note: fill in according to the actual format configured in DataWorks String checkStatus = jsonObject.getString("checkStatus"); updateIDEEventResultRequest.setCheckResult(checkStatus); updateIDEEventResultRequest.setCheckResultTip("Restricted functions found in code"); } else {//Success callback updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode()); updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName()); } //Callback to DataWorks UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest); //Unique request ID for subsequent troubleshooting System.out.println("response:" + response.getBody().getRequestId()); } catch (Exception e) { //Error description System.out.println("ErrMsg:" + e.getMessage()); } } else { System.out.println("Failed to filter other events, please check the configuration steps"); } } }

Desplegar el proyecto de ejemplo

  1. Prepare el entorno y el proyecto

  2. Métodos de despliegue

    • Despliegue local: empaquete el proyecto como un archivo JAR y luego ejecute el comando java -jar yourapp.jar en un servidor local que tenga instalado Java 8 y Maven para iniciar el servicio.

    • Despliegue en la nube: empaquete el proyecto como un archivo JAR y luego cárguelo en el entorno de ejecución adecuado, como un contenedor docker o un servidor en la nube, para desplegarlo.

    Nota

    El servicio desplegado debe ser accesible para EventBridge a través de Internet.

  3. Después de descargar el proyecto, vaya al directorio raíz y ejecute el comando de empaquetado para compilar el archivo JAR.

    mvn clean package -Dmaven.test.skip=true spring-boot:repackage
  4. Ejecute el archivo JAR:

    java -jar target/extensions-demo-maxpt-1.0.jar

    El proyecto se inicia correctamente.

    /\ / /'---'.    __   __  ____    /'\'\\
     ( ( )\'---'|  '--'| '--'\/'--'| '\ \\\\
      \/ /__) | |__| | | |__(___| | ) ) ) )
      ' '__|  | |__| |'|  |___| | / / / /
    =========|_|===============|__/=/=/_/
    :: Spring Boot ::                (v2.7.2)
    2022-08-22 11:17:35.261  INFO 28648 --- [           main] com.aliyun.dataworks.DemoStarter          : Starting DemoStarter v1.0 using Java 1.8.0_151 on xxx.local with PID 28648 (/Users/xxx/ts/extensions-demo-maxpt)
    ns-demo-maxpt/target/extensions-demo-maxpt-1.0.jar started by guangzhen.zk in /Users/xxx/ts/extensions-demo-maxpt)
    2022-08-22 11:17:35.264  INFO 28648 --- [           main] com.aliyun.dataworks.DemoStarter          : No active profile set, falling back to 1 default profile: "default"
    2022-08-22 11:17:35.276  INFO 28648 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
    2022-08-22 11:17:36.291  INFO 28648 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2022-08-22 11:17:36.291  INFO 28648 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
    2022-08-22 11:17:36.419  INFO 28648 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2022-08-22 11:17:36.419  INFO 28648 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1099 ms
    2022-08-22 11:17:36.851  INFO 28648 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
    2022-08-22 11:17:36.860  INFO 28648 --- [           main] com.aliyun.dataworks.DemoStarter          : Started DemoStarter in 1.98 seconds (JVM running for 2.449)

    Introduzca http://localhost:8080/index en un navegador. Si recibe "hello world!", la aplicación se desplegó correctamente. Una vez establecida la conectividad de red, podrá suscribirse a los mensajes de EventBridge.

Verificación de resultados

Después de completar el despliegue del código y establecer la conectividad de red con EventBridge, puede verificar la configuración en el espacio de trabajo donde se habilitó la extensión.

Pasos de verificación

  1. En la página Data Studio, cree un nodo, escriba en él la función prohibida MAX_PT, guárdelo y envíelo.

  2. Haga clic en el botón Deploy para ir a la página de creación de paquetes de despliegue y despliegue el nodo. Esto activa la validación de la extensión.

    Nota

    Según la configuración de la extensión, esta no surte efecto para los eventos de envío de archivos en el espacio de trabajo especificado. Por lo tanto, enviar un nodo que contenga la función MAX_PT no activa la validación de la extensión. La extensión solo se activa cuando despliega un nodo que contiene la función MAX_PT.