All Products
Search
Document Center

:Praktik terbaik: Larang fungsi MAX_PT

Last Updated:Jun 22, 2026

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

Skenario

Praktik terbaik ini memberikan contoh cara memeriksa keberadaan fungsi MAX_PT dalam kode yang dikomit dan diterapkan.

Langkah

Proses inti

Fitur utama

1

OpenEvent mengirim pesan commit file dan penerapan file dari ruang kerja ke EventBridge. EventBridge kemudian menyaring pesan event tersebut dan mengirimkannya ke layanan Anda.

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

Untuk detail konfigurasi, lihat Praktik terbaik: (Fitur lanjutan) Larang penggunaan fungsi MAX_PT.

2

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

  • Untuk pesan commit 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 tanggapan.

    Jika kode berisi fungsi MAX_PT, API callback akan memblokir commit atau penerapan, atau mengirim peringatan.

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

  • Saat mendaftarkan ekstensi, gunakan pengaturan Options For Extension untuk menentukan opsi tanggapan untuk event yang gagal dalam pemeriksaan. Anda kemudian dapat memilih tanggapan spesifik saat mengaktifkan ekstensi. Dalam contoh ini, opsi yang tersedia adalah Alert dan Disable.

Untuk detail konfigurasi, lihat Praktik terbaik: (Fitur lanjutan) Larang penggunaan fungsi MAX_PT.

Prasyarat

  • Anda telah mengaktifkan EventBridge. Untuk informasi lebih lanjut, lihat Penagihan.

  • Anda telah mengaktifkan DataWorks. Untuk informasi lebih lanjut, lihat Panduan pembelian.

  • Anda telah membuat ruang kerja di DataWorks. Untuk informasi lebih lanjut, lihat Buat ruang kerja.

Prosedur

Langkah 1: Konfigurasikan event bus kustom

  1. Masuk ke Konsol EventBridge. Di panel navigasi kiri, klik Event Bus.

  2. Klik ikon image untuk Create Custom Event Bus.

    1. Pada bagian Event Bus, masukkan Name untuk event bus kustom, lalu klik Next step untuk mengonfigurasi sumber event.

    2. Klik Skip untuk melewati konfigurasi Event Source, Rule, dan Target. Anda juga harus memasukkan Description.

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

    • Di panel navigasi kiri, klik Event Rules, lalu klik Create Rule.

    • Dalam praktik terbaik ini, event bus EventBridge kustom didefinisikan untuk menerima pesan event commit file dan penerapan file dari DataWorks. Contoh berikut menunjukkan pengaturan parameter inti.

      1. Configure basic info: Tentukan nama kustom untuk aturan tersebut.

      2. Configure event pattern.

        • Event Source Type: Pilih Custom Event Source.

        • Event Source: Biarkan tidak dikonfigurasi.

        • Pattern content: Masukkan konten berikut dalam format JSON.

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

          • type: Menentukan identifier jenis event untuk produk tersebut. Atur parameter ini ke dataworks:FileChange:CommitFile dan dataworks:FileChange:DeployFile.

        • Event pattern debugging: Ubah nilai source dan type, lalu uji event tersebut. Jika pengujian berhasil, klik Next Step. Klik Test untuk memverifikasi apakah event kustom sesuai dengan pola. Jika pengujian lolos, halaman akan menampilkan pesan bahwa kecocokan berhasil dan event dapat dipicu.

      3. Configure targets.

        • Service Type: Pilih HTTPS atau HTTP. Untuk informasi lebih lanjut tentang jenis layanan, lihat Kelola aturan event.

        • URL: Masukkan URL untuk menerima pesan dari event bus kustom. Misalnya, masukkan https://server_address:port_number/extensions/consumer.

        • Body: Pilih Complete Event.

        • Network Type: Pilih Public Network.

Langkah 2: Konfigurasikan 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 parameter dalam dialog tersebut.

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

    • Specify Custom Event Bus in EventBridge for Distribution of Event Messages: Pilih event bus yang telah Anda buat di Langkah 1.

  3. Setelah menyimpan saluran distribusi event, temukan saluran tersebut dan klik Enable di kolom Operation untuk mengaktifkannya.

Langkah 3: Daftarkan dan konfigurasikan ekstensi

  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. Lalu, klik Register Extension dan konfigurasikan parameter dalam dialog tersebut.

    1. Deployment Method: Pilih Deploy based on self-managed service.

    2. Daftarkan ekstensi

      • Extension Name: Masukkan nama kustom.

      • Extension Point Event: Pilih Pre-event for Node Commit dan Pre-event for Node Deployment.

      • Workspace for Testing: Setelah mengonfigurasi parameter ini, Anda dapat menguji ekstensi di ruang kerja yang ditentukan setelah ekstensi dibuat tetapi sebelum diajukan.

      • Parameter Configurations for Extension

        Gunakan parameter ini untuk mengontrol cakupan ekstensi. Di ruang kerja yang ditentukan:

        • Saat node dikomit (Pre-event for Node Commit), pemeriksaan ekstensi tidak dipicu, dan proses commit tidak diblokir.

        • Saat node diterapkan (Pre-event for Node Deployment), pemeriksaan ekstensi dipicu. Jika validasi gagal, proses penerapan diblokir.

        Atur parameter menjadi extension.project.commit-file.disabled=YourProjectId. Ganti YourProjectId dengan ID ruang kerja tempat ekstensi dinonaktifkan untuk event titik ekstensi tertentu.

      • Options for Extension: Gunakan ini untuk menentukan opsi tanggapan untuk validasi yang gagal. Dalam contoh berikut, opsi yang tersedia adalah Alert dan Disable.

        {
          "type":"object",
          "properties":{
            "checkStatus":{
              "type":"number",
              "title":"Check method for MAX_PT function",
              "x-decorator":"FormItem",
              "x-component":"Radio.Group",
              "x-decorator-props":{
                "tooltip":"Description file"
              },
              "x-component-props":{
                "dataSource":[
                  {
                    "value":"WARN",
                    "label":"Alert"
                  },
                  {
                    "value":"FAIL",
                    "label":"Disable"
                  }
                ],
                "mode":"multiple"
              }
            }
          }
        }
  3. Setelah menyelesaikan konfigurasi, klik Determine untuk menyimpan ekstensi yang telah didaftarkan.

  4. Di kolom Operation untuk ekstensi yang Anda buat, klik Submit untuk memulai proses peninjauan.

    Catatan
    • Ekstensi ditinjau oleh platform DataWorks. Peninjauan biasanya selesai dalam tiga hari kerja.

    • Untuk menguji ekstensi yang Anda buat, Anda harus mengonfigurasi Workspace for Testing.

  5. Setelah ekstensi disetujui, klik Publish di kolom Actions.

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

Kembangkan dan konfigurasikan ekstensi

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

Kode contoh

Kode contoh ini memanggil API UpdateIDEEventResult untuk mengembalikan hasil pemrosesan. Kode ini menggunakan parameter messageId dalam API untuk mengambil informasi detail event, memeriksa apakah fungsi terlarang termasuk di dalamnya, lalu mengembalikan hasilnya ke DataWorks menggunakan UpdateIDEEventResult. Untuk informasi lebih lanjut, lihat Kembangkan ekstensi.

Lingkungan build: Java 8 dan 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;
  /**
   * Menerima pesan yang didorong dari 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)) {
      // Inisialisasi client.
      Client client = dataWorksOpenApiClient.createClient();
      try {
        // Dapatkan informasi tentang parameter event saat ini.
        String messageId = jsonObj.getString("id");
        JSONObject data = jsonObj.getObject("data", JSONObject.class);
        Long projectId = data.getLong("projectId");
        // Inisialisasi callback event.
        UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
        updateIDEEventResultRequest.setMessageId(messageId);
        updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
        // Kueri snapshot data titik ekstensi saat event titik ekstensi dipicu.
        GetIDEEventDetailRequest getIDEEventDetailRequest = new GetIDEEventDetailRequest();
        getIDEEventDetailRequest.setMessageId(messageId);
        getIDEEventDetailRequest.setProjectId(projectId);
        GetIDEEventDetailResponse getIDEEventDetailResponse = client.getIDEEventDetail(getIDEEventDetailRequest);
        String content = getIDEEventDetailResponse.getBody().getEventDetail().getCommittedFile().getContent();
        // Periksa apakah kode berisi fungsi terlarang.
        if (content.contains(Constants.CHECK_CODE)) {
          // Dapatkan konfigurasi opsi ekstensi di ruang kerja.
          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());
                  // Catatan: Anda harus mengisi format berdasarkan pengaturan aktual di DataWorks.
                  String checkStatus = jsonObject.getString("checkStatus");
                  updateIDEEventResultRequest.setCheckResult(checkStatus);
                  updateIDEEventResultRequest.setCheckResultTip("Kode berisi fungsi terlarang.");
              } else {// Callback berhasil.
                  updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
                  updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
              }
              // Kirim callback ke DataWorks.
              UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
              // ID unik permintaan, digunakan untuk troubleshooting selanjutnya.
              System.out.println("response:" + response.getBody().getRequestId());
          } catch (Exception e) {
              // Deskripsi error.
              System.out.println("ErrMsg:" + e.getMessage());
          }
      } else {
          System.out.println("Gagal menyaring event lainnya. Periksa langkah konfigurasi.");
      }
  }
}

Terapkan proyek contoh

  1. Persiapkan lingkungan dan proyek

  2. Metode penerapan

    • Penerapan lokal: Kemas proyek menjadi file JAR. Di server lokal dengan Java 8 dan Maven, jalankan perintah java -jar yourapp.jar untuk menjalankan layanan.

    • Penerapan di platform cloud: Kemas proyek menjadi file JAR dan unggah ke lingkungan runtime, seperti kontainer Docker atau Instance ECS, untuk penerapan.

    Catatan

    Pastikan EventBridge dapat mengakses layanan yang diterapkan melalui Internet.

  3. Di direktori root proyek, jalankan perintah pengemasan untuk mengemas proyek menjadi 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 "hello world!" dikembalikan, aplikasi berhasil diterapkan. Setelah jaringan terhubung, Anda dapat berlangganan pesan dari EventBridge.

Verifikasi hasil

Setelah menerapkan kode dan memastikan layanan Anda dapat diakses dari EventBridge, verifikasi hasilnya di ruang kerja tempat ekstensi diaktifkan.

Langkah verifikasi

  1. Di halaman Pengembangan Data, buat node. Di node tersebut, edit kode agar menyertakan fungsi MAX_PT yang dilarang, lalu simpan dan komit node tersebut.

  2. Klik tombol Publish. Di halaman Create Deployment Package, terapkan node tersebut secara langsung. Ini akan memicu pemeriksaan ekstensi.

    Catatan

    Sesuai konfigurasi ekstensi, pemeriksaan tidak berlaku untuk event commit file di ruang kerja yang ditentukan. Oleh karena itu, pemeriksaan ekstensi tidak dipicu saat Anda mengkomit node yang berisi fungsi MAX_PT. Pemeriksaan hanya dipicu saat Anda menerapkan node yang berisi fungsi MAX_PT.