All Products
Search
Document Center

:Praktik terbaik: Larang fungsi MAX_PT

Last Updated:Jul 03, 2026

DataWorks menyediakan pemeriksaan bawaan, seperti tinjauan kode sebelum penerapan tugas dan validasi dari Data Governance Center. Anda juga dapat mengintegrasikan logika validasi kustom untuk menerapkan kontrol proses di DataWorks. Topik ini menjelaskan cara menggunakan extension untuk melarang fungsi tertentu di ruang kerja, dengan contoh yang memeriksa keberadaan fungsi MAX_PT saat pengiriman atau penerapan.

Skenario

Praktik terbaik ini memberikan contoh cara memeriksa keberadaan fungsi MAX_PT dalam kode yang dikirim dan diterapkan. Tabel berikut menjelaskan proses validasi:

Langkah

Proses inti

Fitur utama

1

Open Event mengirim pesan pengiriman dan penerapan file (seperti mengirim dan menerapkan node) dari ruang kerja ke EventBridge. EventBridge kemudian menyaring pesan event tersebut dan mengirimkannya ke layanan Anda.

Saat Anda mengaktifkan subscription pesan, gunakan aturan event untuk berlangganan jenis event tertentu, seperti pengiriman file (dataworks:FileChange:CommitFile) dan penerapan file (dataworks:FileChange:DeployFile).

Untuk detail konfigurasi, lihat Praktik terbaik: (fitur advanced) Larang fungsi MAX_PT.

2

Layanan lokal atau online menerima pesan tersebut. Extension dikonfigurasi untuk menangani event sebagai berikut:

  • Untuk pesan pengiriman file di ruang kerja tertentu: Pemeriksaan tidak dipicu, dan proses dilanjutkan.

  • Untuk pesan penerapan file di ruang kerja tertentu: Pemeriksaan dipicu untuk menentukan apakah kode menggunakan fungsi MAX_PT, lalu memberikan respons.

    Jika kode berisi fungsi MAX_PT, API callback akan memblokir pengiriman atau penerapan di DataWorks, atau mengirim peringatan.

  • Saat mendaftarkan extension, gunakan pengaturan Parameter Configuration untuk menentukan ruang kerja dan event tempat extension dinonaktifkan. Dalam contoh ini, event pengiriman file ditentukan, sehingga mencegah extension dipicu.

  • Saat mendaftarkan extension, gunakan pengaturan Options for Extension untuk menentukan opsi respons terhadap event yang gagal validasi. Saat Anda mengaktifkan extension, pilih metode respons tertentu. Dalam contoh ini, metode respons yang tersedia adalah alert dan block.

Untuk detail konfigurasi, lihat Praktik terbaik: (fitur advanced) Larang fungsi MAX_PT.

Prasyarat

Prosedur

Langkah 1: Konfigurasi custom event bus

  1. Masuk ke Konsol EventBridge. Di panel navigasi kiri, klik Event Bus untuk membuka halaman event bus.

  2. Klik tombol image untuk Create Custom Event Bus.

    1. Pada bagian Bus, konfigurasikan Custom Event Bus Name, lalu klik Next step untuk melanjutkan ke konfigurasi sumber event.

    2. Klik Skip untuk melewati konfigurasi Event Source, Rule, dan Target Module. Masukkan Description.

  3. Di panel navigasi kiri, klik Event Bus untuk membuka halaman event bus. Temukan event bus yang telah Anda buat dan klik namanya untuk membuka halaman ikhtisar.

    • Di panel navigasi kiri, klik Event Rules untuk membuka halaman aturan event, lalu klik Create Rule untuk membuat aturan event.

    • Dalam contoh ini, custom EventBridge bus dikonfigurasi untuk menerima pesan event pengiriman file dan penerapan file dari DataWorks. Bagian berikut menjelaskan demo konfigurasi dan parameter utamanya.

      1. Configure Basic Information: Sesuaikan nama aturan.

      2. Pattern Content.

        • Event Source Type: Pilih custom event source.

        • Event Source: Biarkan bidang ini kosong.

        • Pattern Content: Tulis dalam format JSON. Konfigurasinya sebagai berikut.

          {
              "source": [
                  "acs.dataworks"
              ],
              "type": [
                  "dataworks:FileChange:CommitFile",
                  "dataworks:FileChange:DeployFile"
              ]
          }
          • source: Menentukan identifier nama produk acs.dataworks.

          • type: Menentukan identifier jenis event di bawah produk tersebut. Atur ke dataworks:FileChange:CommitFile dan dataworks:FileChange:DeployFile.

        • Event Pattern Debugging: Isi dan ubah nilai source dan type, lalu lakukan uji coba event. Setelah uji coba berhasil, klik Next. Klik Test untuk memverifikasi bahwa event kustom sesuai dengan pola. Jika uji coba berhasil, halaman akan menampilkan Match passed, event can be triggered normally.

      3. Configure Event Target.

        • Service Type: Pilih HTTPS atau HTTP. Untuk jenis layanan lainnya, lihat Event targets.

        • URL: Masukkan URL yang menerima pesan yang didorong oleh custom bus, misalnya https://server-address:port/extensions/consumer.

        • Body: Pilih Complete Event.

        • Network Type: Pilih Public Network.

Langkah 2: Konfigurasi saluran distribusi event

  1. Masuk ke Konsol DataWorks. Di wilayah target, klik More > Open Platform di panel navigasi kiri. Klik Go to Open Platform untuk membuka halaman Developer Backend.

  2. Di halaman Developer Backend, klik OpenEvent di panel navigasi kiri. Di halaman yang muncul, klik Add Event Distribution Channel dan konfigurasikan pengaturan di dialog tersebut.

    • Workspace for Event Distribution: Pilih ruang kerja yang telah Anda buat.

    • Custom Bus in Eventbridge for Distribution: Pilih event bus yang dibuat pada Langkah 1.

  3. Setelah Anda menyimpan saluran distribusi event, di kolom Operation saluran tersebut, klik Enable untuk mengaktifkan saluran distribusi event baru.

Langkah 3: Daftarkan dan konfigurasikan extension

  1. Masuk ke Konsol DataWorks. Di wilayah target, klik More > Open Platform di panel navigasi kiri. Klik Go to Open Platform untuk membuka halaman Developer Backend.

  2. Di halaman Developer Backend, klik Extension di panel navigasi kiri. Di halaman yang muncul, klik Register Extension dan konfigurasikan pengaturan di dialog tersebut.

    1. Metode deployment: Pilih Deploy via self-built service.

    2. Daftarkan extension

      • Extension Name: Masukkan nama kustom.

      • Extension Point Event: Pilih Before File Commit dan Before File Deploy.

      • Workspace for Testing: Setelah Anda mengonfigurasi pengaturan ini, Anda dapat menguji extension di ruang kerja yang ditentukan sebelum mengirimkannya.

      • Parameter Configurations for Extension

        Anda dapat menggunakan parameter ini untuk mengontrol cakupan extension. Di ruang kerja yang ditentukan:

        • Mengirim node (Before File Commit) tidak memicu validasi extension atau memblokir proses pengiriman.

        • Menerapkan node (Before File Deploy) memicu validasi extension. Jika validasi gagal, proses penerapan diblokir.

        Atur ke extension.project.commit-file.disabled=YourProjectId, di mana YourProjectId adalah ID ruang kerja tempat event titik extension tidak berlaku.

      • Options for Extension: Digunakan untuk menentukan metode respons saat validasi gagal. Dalam contoh ini, metode respons yang ditentukan mencakup alert dan block.

        {
          "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"
              }
            }
          }
        }

        Bidang dalam konfigurasi opsi dijelaskan sebagai berikut:

        • checkStatus: Nama bidang kustom (nama komponen, harus unik) yang ditentukan oleh developer extension dalam konfigurasi opsi. Server extension membaca nilai yang dikonfigurasi oleh administrator ruang kerja untuk ruang kerja tersebut melalui nama bidang ini.

        • title: Judul opsi. Untuk nilai-nilainya, lihat contoh parsing dan konfigurasi parameter di Fitur advanced: Konfigurasi opsi extension. Dalam contoh ini, judulnya adalah MAX-PT Function Check Method.

        • x-component: Komponen formulir yang digunakan oleh opsi tersebut. Dalam contoh ini, digunakan komponen tombol radio (Radio.Group).

        • dataSource: Opsi yang dapat dipilih untuk komponen tombol radio, di mana label adalah teks yang ditampilkan di UI dan value adalah identifier yang sesuai. Contoh ini menyediakan dua nilai: Alert (WARN) dan Block (FAIL), yang memungkinkan administrator ruang kerja memilih metode respons saat fungsi MAX_PT terdeteksi selama pengaktifan extension.

        Digabungkan dengan kode contoh dalam topik ini, Anda dapat memahami alur nilai checkStatus: Saat administrator ruang kerja mengaktifkan extension, mereka memilih antara Alert atau Block dari MAX-PT Function Check Method. Server extension membaca konfigurasi ini melalui GetOptionValueForProject, mengambil pilihan administrator melalui jsonObject.getString("checkStatus"), dan mengembalikan hasilnya ke DataWorks melalui setCheckResult sebagai callback, yang akan memberikan peringatan atau memblokir proses penerapan node.

        Catatan

        checkStatus hanyalah satu contoh konfigurasi yang menggunakan komponen tombol radio. Konfigurasi opsi saat ini mendukung tujuh jenis komponen: teks, input satu baris, input multi-baris, dropdown pilihan tunggal, dropdown pilihan ganda, checkbox, dan tombol radio. Untuk jenis komponen lengkap dan metode konfigurasinya, lihat Advanced: Configure extension options.

  3. Setelah menyelesaikan konfigurasi, klik Determine untuk menyimpan dan mendaftarkan extension.

  4. Di kolom Operation extension yang dibuat, klik Submit untuk mengirimkan extension guna ditinjau.

    Catatan
    • Tinjauan extension dilakukan oleh platform DataWorks. Proses tinjauan biasanya membutuhkan waktu T+3 hari kerja untuk diselesaikan.

    • Untuk menguji extension yang dibuat, konfigurasikan Workspace for Testing.

  5. Setelah tinjauan disetujui, klik Deploy di kolom Operation untuk mengaktifkan extension secara online.

  6. Klik Manage Extensions untuk membuka halaman Management Center > Extension. Pilih extension yang Anda buat, aktifkan di kolom Enable, lalu klik Settings untuk mengonfigurasi tingkat kontrol penggunaan fungsi MAX_PT di ruang kerja.

Kembangkan dan konfigurasikan extension

EventBridge menerima pesan event DataWorks dalam format JSON melalui permintaan HTTP, mengurai pesan tersebut, lalu mendorongnya ke layanan target. Setelah layanan memproses event tersebut, hasilnya dikembalikan ke DataWorks.

Kode contoh

Kode contoh ini memanggil API UpdateIDEEventResult untuk mengembalikan hasil callback. Kode ini menggunakan parameter messageId dalam API untuk mendapatkan detail event, menjalankan logika untuk menentukan apakah fungsi terlarang digunakan, lalu mengembalikan hasilnya ke DataWorks melalui API UpdateIDEEventResult. Untuk informasi selengkapnya, lihat Kembangkan extension.

Persiapan lingkungan: Java 8, tool build 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");
      }
  }
}

Deploy proyek contoh

  1. Siapkan lingkungan dan proyek

  2. Metode deployment

    • Deployment lokal: Kemas proyek sebagai file JAR, lalu jalankan perintah java -jar yourapp.jar di server lokal yang telah menginstal Java 8 dan Maven untuk memulai layanan.

    • Deployment cloud: Kemas proyek sebagai file JAR, lalu unggah ke lingkungan runtime yang sesuai, seperti kontainer Docker atau server cloud, untuk deployment.

    Catatan

    Layanan yang dideploy harus dapat diakses oleh EventBridge melalui Internet.

  3. Setelah mengunduh proyek, buka direktori root dan jalankan perintah pengemasan untuk membuat file JAR.

    mvn clean package -Dmaven.test.skip=true spring-boot:repackage
  4. Jalankan file JAR:

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

    Proyek berhasil dimulai.

    /\ / /'---'.    __   __  ____    /'\'\\
     ( ( )\'---'|  '--'| '--'\/'--'| '\ \\\\
      \/ /__) | |__| | | |__(___| | ) ) ) )
      ' '__|  | |__| |'|  |___| | / / / /
    =========|_|===============|__/=/=/_/
    :: 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)

    Masukkan http://localhost:8080/index di browser. Jika Anda menerima "hello world!", aplikasi berhasil dideploy. Setelah koneksi jaringan terbentuk, Anda dapat berlangganan pesan EventBridge.

Verifikasi hasil

Setelah Anda menyelesaikan deployment kode dan membentuk koneksi jaringan dengan EventBridge, Anda dapat memverifikasi konfigurasi di ruang kerja tempat extension diaktifkan.

Langkah verifikasi

  1. Di halaman Data Studio, buat node, tulis fungsi MAX_PT yang dilarang di node tersebut, simpan dan kirim node.

  2. Klik tombol Deploy untuk membuka halaman pembuatan paket penyebaran dan terapkan node tersebut. Ini akan memicu validasi extension.

    Catatan

    Berdasarkan konfigurasi extension, extension tidak berlaku untuk event pengiriman file di ruang kerja yang ditentukan. Oleh karena itu, mengirim node yang berisi fungsi MAX_PT tidak memicu validasi extension. Extension hanya dipicu saat Anda menerapkan node yang berisi fungsi MAX_PT.