Mengontrol urutan eksekusi dalam alur kerja

Halaman ini menunjukkan cara menggunakan jump atau loop for untuk mengontrol urutan langkah-langkah alur kerja yang dijalankan. Dengan lompatan dasar, Anda dapat menentukan langkah yang akan dijalankan alur kerja berikutnya. Lompat kondisional dibuat berdasarkan lompat dasar, yang memungkinkan Anda menggunakan ekspresi kondisional untuk mengontrol urutan eksekusi melalui alur kerja. Misalnya, Anda dapat menjalankan langkah tertentu hanya jika variabel atau respons dari langkah alur kerja lain memenuhi kriteria tertentu.

Contoh di halaman ini menggunakan contoh API yang menampilkan hari dalam seminggu.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Anda harus sudah memiliki alur kerja yang ingin Anda ubah urutan eksekusinya. Untuk mempelajari cara membuat dan men-deploy alur kerja, lihat Membuat dan memperbarui alur kerja.

Menggunakan lompatan untuk mengubah urutan eksekusi

Secara default, semua alur kerja adalah daftar yang diurutkan dengan setiap langkah berjalan sesuai urutan yang Anda tentukan dalam kode sumber alur kerja. Anda dapat memilih untuk mengganti pengurutan default ini menggunakan lompatan.

Lompat dasar

Anda dapat menentukan langkah yang akan dijalankan berikutnya dalam alur kerja menggunakan lompatan dasar.

Konsol

  1. Buka halaman Alur Kerja di konsol Google Cloud:
    Buka Alur Kerja

  2. Pilih nama alur kerja tempat Anda ingin mengubah urutan eksekusi langkah yang ada.

  3. Di halaman Edit alur kerja, pilih Berikutnya untuk membuka editor alur kerja.

  4. Tambahkan kolom next di akhir langkah untuk memberi tahu alur kerja agar melompat ke langkah tertentu:

    YAML

         - step_a:
             ...
             next: STEP_NAME_TO_JUMP_TO
         - step_b:
             ...
         - next_step:
             ...

    JSON

        [
          {
            "step_a": {
              ...
              "next": "STEP_NAME_TO_JUMP_TO"
            }
          }
          {
            "step_b": {
              ...
            }
          }
          {
            "next_step": {
              ...
            }
          }
        ]

    Ganti STEP_NAME_TO_JUMP_TO dengan nama langkah yang ingin dieksekusi alur kerjanya berikutnya. Contoh: next_step

  5. Pilih Deploy.

gcloud

  1. Buka file definisi alur kerja di editor teks pilihan Anda.

  2. Tambahkan kolom next di akhir langkah untuk memberi tahu alur kerja agar melompat ke langkah tertentu:

    YAML

         - step_a:
             ...
             next: STEP_NAME_TO_JUMP_TO
         - step_b:
             ...
         - next_step:
             ...

    JSON

      [
        {
          "step_a": {
            ...
            "next": "STEP_NAME_TO_JUMP_TO"
          }
        }
        {
          "step_b": {
            ...
          }
        }
        {
          "next_step": {
            ...
          }
        }
      ]

    Ganti STEP_NAME_TO_JUMP_TO dengan nama langkah yang ingin Anda jalankan berikutnya. Contoh, next_step.

  3. Simpan file alur kerja.

  4. Untuk men-deploy alur kerja, masukkan perintah berikut:

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML

    Ganti kode berikut:

    • WORKFLOW_NAME: wajib diisi. Nama alur kerja Anda.

    • WORKFLOW_FILE.YAML: wajib diisi. File sumber untuk alur kerja.

Contoh

Misalnya, alur kerja berikut memiliki langkah-langkah yang tidak berurutan:

YAML

  - get_time:
     call: http.get
     args:
         url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
     result: currentTime
  - return_daylight_savings_bool:
     return: ${daylightSavings}
  - get_daylight_savings_bool:
     assign:
         - daylightSavings: ${currentTime.body.isDayLightSavingsTime}

JSON

    [
      {
        "get_time": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime"
        }
      },
      {
        "return_daylight_savings_bool": {
          "return": "${daylightSavings}"
        }
      },
      {
        "get_daylight_savings_bool": {
          "assign": [
            {
              "daylightSavings": "${currentTime.body.isDayLightSavingsTime}"
            }
          ]
        }
      }
    ]

Dalam contoh ini, kolom next telah ditambahkan ke langkah get_daylight_savings_bool dan return_daylight_savings_bool sehingga langkah-langkah tersebut dijalankan dalam urutan yang benar:

YAML

  - get_time:
     call: http.get
     args:
         url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
     result: currentTime
     next: get_daylight_savings_bool
  - return_daylight_savings_bool:
     return: ${daylightSavings}
  - get_daylight_savings_bool:
     assign:
         - daylightSavings: ${currentTime.body.isDayLightSavingsTime}
     next: return_daylight_savings_bool

JSON

    [
      {
        "get_time": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime",
          "next": "get_daylight_savings_bool"
        }
      },
      {
        "return_daylight_savings_bool": {
          "return": "${daylightSavings}"
        }
      },
      {
        "get_daylight_savings_bool": {
          "assign": [
            {
              "daylightSavings": "${currentTime.body.isDayLightSavingsTime}"
            }
          ],
          "next": "return_daylight_savings_bool"
        }
      }
    ]

Lompat bersyarat

Anda dapat menggunakan jump bersyarat untuk menentukan langkah mana yang akan dijalankan berikutnya dalam alur kerja. Langsung bersyarat menggunakan blok switch, yang langsung ke langkah yang ditentukan jika kondisi tertentu terpenuhi. Setiap blok switch dapat menyertakan maksimum 50 kondisi.

Konsol

  1. Buka halaman Alur Kerja di konsol Google Cloud:
    Buka Alur Kerja

  2. Pilih nama alur kerja yang ingin Anda tambahkan blok switch.

  3. Di halaman Edit alur kerja, pilih Berikutnya untuk membuka editor alur kerja.

  4. Di halaman Menentukan alur kerja, definisi alur kerja Anda saat ini akan ditampilkan. Untuk mengedit alur kerja agar dapat menjalankan langkah tertentu berdasarkan pernyataan kondisional, tambahkan langkah yang menggunakan blok switch:

    YAML

         - SWITCH_STEP_NAME:
             switch:
                 - condition: ${EXPRESSION_ONE}
                   next: STEP_A
                 - condition: ${EXPRESSION_TWO}
                   next: STEP_B
                 ...
             next: STEP_C
         - STEP_A
             ...
         - STEP_B
             ...
         - STEP_C
             ...

    JSON

        [
          {
            "SWITCH_STEP_NAME": {
              "switch": [
                {
                  "condition": "${EXPRESSION_ONE}",
                  "next": "STEP_A"
                },
                {
                  "condition": "${EXPRESSION_TWO}",
                  "next": "STEP_B"
                }
              ],
              "next": "STEP_C"
            }
            "STEP_A": {
              ...
            }
            "STEP_B": {
              ...
            }
            "STEP_C": {
              ...
            }
          }
        ]

    Ganti kode berikut:

    • SWITCH_STEP_NAME: nama langkah yang berisi blok switch.

    • EXPRESSION_ONE: ekspresi pertama yang akan dievaluasi. Jika ekspresi ini bernilai benar (true), alur kerja akan mengeksekusi STEP_A berikutnya. Jika ekspresi ini bernilai salah, alur kerja akan mengevaluasi ekspresi berikutnya.

    • EXPRESSION_TWO: ekspresi kedua yang akan dievaluasi. Jika ekspresi ini bernilai benar (true), alur kerja akan mengeksekusi STEP_B berikutnya. Jika ekspresi ini bernilai salah, alur kerja akan menjalankan STEP_C.

    • STEP_A, STEP_B, STEP_C: nama langkah placeholder.

  5. Pilih Deploy.

gcloud

  1. Buka definisi alur kerja Anda di editor teks pilihan Anda.

  2. Untuk mengedit alur kerja agar menjalankan langkah tertentu berdasarkan pernyataan kondisional, tambahkan langkah yang menggunakan blok switch:

    YAML

     - SWITCH_STEP_NAME:
         switch:
             - condition: ${EXPRESSION_ONE}
               next: STEP_A
             - condition: ${EXPRESSION_TWO}
               next: STEP_B
             ...
         next: STEP_C
     - STEP_A
         ...
     - STEP_B
         ...
     - STEP_C
         ...

    JSON

    [
      {
        "SWITCH_STEP_NAME": {
          "switch": [
            {
              "condition": "${EXPRESSION_ONE}",
              "next": "STEP_A"
            },
            {
              "condition": "${EXPRESSION_TWO}",
              "next": "STEP_B"
            }
          ],
          "next": "STEP_C"
        }
        "STEP_A": {
          ...
        }
        "STEP_B": {
          ...
        }
        "STEP_C": {
          ...
        }
      }
    ]
      

    Ganti kode berikut:

    • SWITCH_STEP_NAME: nama langkah yang berisi blok switch.

    • EXPRESSION_ONE: ekspresi pertama yang akan dievaluasi. Jika ekspresi ini bernilai benar (true), alur kerja akan mengeksekusi STEP_A berikutnya. Jika ekspresi ini bernilai salah, alur kerja akan mengevaluasi ekspresi berikutnya.

    • EXPRESSION_TWO: ekspresi kedua yang akan dievaluasi. Jika ekspresi ini bernilai benar (true), alur kerja akan mengeksekusi STEP_B berikutnya. Jika ekspresi ini bernilai salah, alur kerja akan menjalankan STEP_C.

    • STEP_A, STEP_B, STEP_C: nama langkah placeholder.

  3. Simpan file alur kerja.

  4. Untuk men-deploy alur kerja, masukkan perintah berikut:

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML

    Ganti kode berikut:

    • WORKFLOW_NAME: wajib diisi. Nama alur kerja Anda.

    • WORKFLOW_FILE.YAML: wajib diisi. File sumber untuk alur kerja.

Contoh

Misalnya, alur kerja ini menggunakan blok tombol untuk mengontrol urutan eksekusi alur kerja:

YAML

  - getCurrentTime:
      call: http.get
      args:
          url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
      result: currentTime
  - conditionalSwitch:
      switch:
          - condition: ${currentTime.body.dayOfTheWeek == "Friday"}
            next: friday
          - condition: ${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}
            next: weekend
      next: workWeek
  - friday:
      return: "It's Friday! Almost the weekend!"
  - weekend:
      return: "It's the weekend!"
  - workWeek:
      return: "It's the work week."
    

JSON

    [
      {
        "getCurrentTime": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime"
        }
      },
      {
        "conditionalSwitch": {
          "switch": [
            {
              "condition": "${currentTime.body.dayOfTheWeek == "Friday"}",
              "next": "friday"
            },
            {
              "condition": "${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}",
              "next": "weekend"
            }
          ],
          "next": "workWeek"
        }
      },
      {
        "friday": {
          "return": "It's Friday! Almost the weekend!"
        }
      },
      {
        "weekend": {
          "return": "It's the weekend!"
        }
      },
      {
        "workWeek": {
          "return": "It's the work week."
        }
      }
    ]
      

Dalam contoh ini, blok switch memiliki dua kondisi. Parser mengevaluasi setiap kondisi secara berurutan, dan jika hasil ekspresi kondisi adalah true, langkah next kondisi tersebut akan dipanggil. Jika tidak ada kondisi yang terpenuhi, alur kerja akan memanggil langkah yang ditentukan oleh kolom next di luar blok switch, yang dalam contoh ini adalah langkah workWeek.

Misalnya, jika hari dalam seminggu adalah "Saturday", alur kerja akan beralih ke langkah weekend dan menampilkan pesan "It's the weekend!". Alur kerja tidak mengeksekusi langkah friday karena lompatan bersyarat melewatinya, dan alur kerja tidak mengeksekusi langkah workWeek karena return menghentikan eksekusi alur kerja di akhir langkah weekend.

Menggunakan loop for untuk melakukan iterasi

Anda dapat menggunakan loop for untuk melakukan iterasi pada urutan angka atau melalui kumpulan data, seperti daftar atau peta.

Anda dapat menelusuri setiap item dalam daftar atau peta menggunakan iterasi berbasis item. Jika memiliki rentang nilai numerik tertentu untuk di-iterasi, Anda dapat menggunakan iterasi berbasis rentang.

Untuk informasi dan contoh selengkapnya, lihat referensi sintaksis tentang iterasi.

Langkah selanjutnya