Bagikan melalui


Menambahkan dan menjalankan skrip C# sebaris dengan alur kerja Standar untuk Azure Logic Apps (Pratinjau)

Berlaku pada: Azure Logic Apps (Standar)

Catatan

Kemampuan ini masih dalam pratinjau dan mengacu pada Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Untuk melakukan tugas integrasi kustom sebaris dengan alur kerja Standar Anda di Azure Logic Apps, Anda dapat langsung menambahkan dan menjalankan skrip C# dari dalam alur kerja Anda. Untuk tugas ini, gunakan tindakan Kode Sebaris bernama Jalankan Kode Skrip CSharp. Tindakan ini mengembalikan hasil dari skrip Anda sehingga Anda dapat menggunakan output ini dalam tindakan alur kerja berikutnya.

Kemampuan ini memberikan manfaat berikut:

  • Tulis skrip Anda sendiri dalam perancang alur kerja sehingga Anda dapat menyelesaikan tantangan integrasi yang lebih kompleks tanpa harus menggunakan Azure Functions. Tidak ada paket layanan lain yang diperlukan.

    Manfaat ini menyederhanakan pengembangan alur kerja ditambah mengurangi kompleksitas dan biaya dengan mengelola lebih banyak layanan.

  • Buat file kode khusus, yang menyediakan ruang skrip yang dipersonalisasi dalam alur kerja Anda.

  • Sebarkan skrip bersama alur kerja Anda.

Panduan ini memperlihatkan cara menambahkan tindakan di alur kerja Anda dan menambahkan kode skrip C# yang ingin Anda jalankan.

Prasyarat

  • Akun dan langganan Azure. Jika Anda tidak memiliki langganan, daftar untuk mendapatkan akun Azure secara gratis.

  • Alur kerja aplikasi logika Standar tempat Anda ingin menambahkan skrip C#. Alur kerja harus sudah dimulai dengan pemicu. Untuk informasi selengkapnya, lihat Membuat contoh alur kerja aplikasi logika Standar.

    Anda dapat menggunakan pemicu apa pun untuk skenario Anda, tetapi sebagai contoh, panduan ini menggunakan pemicu Permintaan bernama Saat permintaan HTTP diterima dan juga tindakan Respons . Alur kerja berjalan ketika aplikasi atau alur kerja lain mengirim permintaan ke URL titik akhir pemicu. Skrip sampel mengembalikan hasil dari eksekusi kode sebagai output yang dapat Anda gunakan dalam tindakan berikutnya.

Skenario contoh

Daftar berikut ini menjelaskan beberapa contoh skenario di mana Anda bisa menggunakan skrip untuk membantu tugas integrasi tertentu:

  • Mengurai dan melakukan transformasi atau manipulasi pada payload di luar ekspresi bawaan dan kemampuan operasi data. Misalnya, Anda dapat menggunakan skrip untuk mengembalikan skema yang dimodifikasi untuk pemrosesan hilir.

  • Kelola sumber daya Azure seperti komputer virtual dan mulai atau langkahkan, berdasarkan beberapa logika bisnis.

  • Jalankan prosedur tersimpan di server SQL yang perlu dijalankan sesuai jadwal dan simpan hasilnya di SharePoint.

  • Mencatat kesalahan alur kerja dengan informasi terperinci dengan menyimpan ke Azure Storage atau untuk mengirim email atau memberi tahu tim Anda.

  • Mengenkripsi dan mendekripsi data untuk mematuhi standar keamanan API.

  • Teruskan file ke dalam skrip untuk zip atau unzip untuk permintaan HTTP.

  • Agregat data dari berbagai API dan file untuk membuat laporan harian

Pertimbangan

  • portal Azure menyimpan skrip Anda sebagai file skrip C# (.csx) di folder yang sama dengan file workflow.json Anda, yang menyimpan definisi JSON untuk alur kerja Anda, dan menyebarkan file ke sumber daya aplikasi logika Anda bersama dengan definisi alur kerja. Azure Logic Apps mengkompilasi file ini untuk membuat skrip siap untuk dieksekusi.

    Format file .csx memungkinkan Anda menulis lebih sedikit "boilerplate" dan fokus hanya pada penulisan fungsi C#. Anda dapat mengganti nama file .csx untuk manajemen yang lebih mudah selama penyebaran. Namun, setiap kali Anda mengganti nama skrip, versi baru menimpa versi sebelumnya.

  • Skrip bersifat lokal untuk alur kerja. Untuk menggunakan skrip yang sama di alur kerja lain, lihat file skrip di konsol KuduPlus, lalu salin skrip untuk digunakan kembali di alur kerja lain.

Batasan

Nama Batas Catatan
Durasi eksekusi skrip 10 menit Jika Anda memiliki skenario yang membutuhkan durasi lebih lama, gunakan opsi umpan balik produk untuk memberikan informasi selengkapnya tentang kebutuhan Anda.
Ukuran output 100 MB Ukuran output tergantung pada batas ukuran output untuk tindakan, yang umumnya 100 MB.

Menambahkan tindakan Jalankan Kode Skrip CSharp

  1. Di portal Azure, buka sumber daya dan alur kerja aplikasi logika Standar Anda di perancang.

  2. Di perancang, ikuti langkah-langkah umum ini untuk menambahkan tindakan Operasi Kode Sebaris bernama Jalankan Kode Skrip CSharp ke alur kerja Anda.

  3. Setelah panel informasi tindakan terbuka, pada tab Parameter , dalam kotak File Kode, perbarui kode sampel yang telah diisi sebelumnya dengan kode skrip Anda sendiri.

    • Di bagian atas skrip, impor namespace yang diperlukan dan tambahkan referensi rakitan yang diperlukan seperti biasa.

    • Terapkan Run metode :

      • Run Nama metode telah ditentukan sebelumnya, dan alur kerja Anda hanya dijalankan dengan memanggil metode Jalankan ini saat runtime.

      • Untuk mengakses data yang berasal dari alur kerja Anda, Run metode menerima data ini melalui parameter dengan jenis WorkflowContext . Anda bisa menggunakan objek WorkflowContext untuk tugas-tugas berikut:

      • Untuk mengembalikan hasil skrip atau data lain ke alur kerja Anda, terapkan Run metode dengan jenis pengembalian. Untuk informasi selengkapnya, lihat Mengembalikan data ke alur kerja Anda.

      • Untuk mencatat output dari skrip Anda di C#, terapkan Run metode untuk menerima pencatat fungsi melalui parameter dengan ILogger jenis, dan gunakan log sebagai nama argumen untuk identifikasi yang mudah. Hindari menyertakan Console.Write dalam skrip Anda.

        Penting

        Jika Anda memiliki skrip jangka panjang yang memerlukan penghentian yang anggun jika host fungsi dimatikan, sertakan token pembatalan, yang diperlukan, dengan pencatat fungsi Anda.

        Untuk informasi selengkapnya, lihat bagian berikut ini:

    Contoh berikut menunjukkan tab Parameter tindakan dengan kode skrip sampel:

    Cuplikan layar memperlihatkan portal Azure, perancang alur kerja Standar, Pemicu permintaan, tindakan Jalankan Kode Skrip CSharp dengan panel informasi terbuka, dan Tindakan respons. Panel informasi memperlihatkan contoh skrip C#.

    Contoh berikut menunjukkan contoh kode skrip:

    /// Add the required libraries.
    #r "Newtonsoft.Json"
    #r "Microsoft.Azure.Workflows.Scripting"
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Microsoft.Extensions.Logging;
    using Microsoft.Azure.Workflows.Scripting;
    using Newtonsoft.Json.Linq;
    
    /// <summary>
    /// Executes the inline C# code.
    /// </summary>
    /// <param name="context">The workflow context.</param>
    /// <remarks> The entry-point to your code. The function signature should remain unchanged.</remarks>
    public static async Task<Results> Run(WorkflowContext context, ILogger log)
    {
        var triggerOutputs = (await context.GetTriggerResults().ConfigureAwait(false)).Outputs;
    
        /// Dereferences the 'name' property from the trigger payload.
        var name = triggerOutputs?["body"]?["name"]?.ToString();
    
        /// To get the outputs from a preceding action, you can uncomment and repurpose the following code.
        // var actionOutputs = (await context.GetActionResults("<action-name>").ConfigureAwait(false)).Outputs;
    
        /// The following logs appear in the Application Insights traces table.
        // log.LogInformation("Outputting results.");
        // var name = null;
    
        return new Results
        {
            Message = !string.IsNullOrEmpty(name) ? $"Hello {name} from CSharp action" : "Hello from CSharp action."
        };
    }
    
    public class Results
    {
        public string Message {get; set;}
    }
    

    Untuk informasi selengkapnya, lihat "#r" - Referensi rakitan eksternal.

  4. Setelah selesai, simpan alur kerja Anda.

Setelah menjalankan alur kerja, Anda dapat meninjau output alur kerja di Application Insights, jika diaktifkan. Untuk informasi selengkapnya, lihat Menampilkan log di Application Insights.

Mengimpor namespace layanan

Untuk mengimpor namespace layanan, lakukan dengan using klausul seperti biasa. Daftar berikut menyertakan namespace yang diimpor secara otomatis, sehingga opsional untuk Anda sertakan dalam skrip Anda:

System
System.Collections.Generic
System.IO
System.Linq
System.Net.Http
System.Threading.Tasks
Microsoft.Azure.WebJobs
Microsoft.Azure.WebJobs.Host

Menambahkan referensi ke rakitan eksternal

Untuk mereferensikan rakitan .NET Framework, gunakan direktif #r "<assembly-name> , misalnya:

/// Add the required libraries.
#r "Newtonsoft.Json"
#r "Microsoft.Azure.Workflows.Scripting"
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.Workflows.Scripting;
using Newtonsoft.Json.Linq;

public static async Task<Results> Run(WorkflowContext context)
{
    <...>
}

public class Results
{
    <...>
}

Daftar berikut ini mencakup rakitan yang secara otomatis ditambahkan oleh lingkungan hosting Azure Functions:

mscorlib
System
System.Core
System.Xml
System.Net.Http
Microsoft.Azure.WebJobs
Microsoft.Azure.WebJobs.Host
Microsoft.Azure.WebJobs.Extensions
System.Web.Http
System.Net.Http.Formatting
Newtonsoft.Json

Output log ke aliran

Dalam metode Anda Run , sertakan parameter dengan ILogger jenis dan log sebagai nama, misalnya:

public static void Run(WorkflowContext context, ILogger log)
{
    log.LogInformation($"C# script successfully executed.");
}

Output log ke Application Insights

Untuk membuat metrik kustom di Application Insights, gunakan LogMetric metode ekstensi pada ILogger.

Contoh berikut menunjukkan contoh panggilan metode:

logger.LogMetric("TestMetric", 1234);

Mengakses pemicu alur kerja dan output tindakan dalam skrip Anda

Untuk mengakses data dari alur kerja Anda, gunakan metode berikut yang tersedia untuk WorkflowContext objek konteks:

  • metode GetTriggerResults

    Untuk mengakses output pemicu, gunakan metode ini untuk mengembalikan objek yang mewakili pemicu dan outputnya, yang tersedia melalui Outputs properti . Objek ini memiliki jenis JObject , dan Anda dapat menggunakan kurung siku ([]) sebagai pengindeks untuk mengakses berbagai properti dalam output pemicu.

    Contoh berikut mendapatkan data dari body properti dalam output pemicu:

    public static async Task<Results> Run(WorkflowContext context, ILogger log)
    {
    
        var triggerOutputs = (await context.GetTriggerResults().ConfigureAwait(false)).Outputs;
        var body = triggerOutputs["body"];
    
        return new Results;
    
    }
    
    public class Results
    {
        <...>
    }
    
  • metode GetActionResults

    Untuk mengakses output tindakan, gunakan metode ini untuk mengembalikan objek yang mewakili tindakan dan outputnya, yang tersedia melalui Outputs properti . Metode ini menerima nama tindakan sebagai parameter. Contoh berikut mendapatkan data dari body properti dalam output dari tindakan bernama action-name:

    public static async Task<Results> Run(WorkflowContext context, ILogger log)
    {
    
        var actionOutputs = (await context.GetActionResults("action-name").ConfigureAwait(false)).Outputs;
        var body = actionOutputs["body"];
    
        return new Results;
    
    }
    
    public class Results
    {
        <...>
    }
    

Mengakses variabel lingkungan atau nilai pengaturan aplikasi

Untuk mendapatkan variabel lingkungan atau nilai pengaturan aplikasi, gunakan System.Environment.GetEnvironmentVariable metode , misalnya:

public static void Run(WorkflowContext context, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
    log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}

public static string GetEnvironmentVariable(string name)
{
    return name + ": " +
    System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

Mengembalikan data ke alur kerja Anda

Untuk tugas ini, terapkan metode Anda Run dengan jenis dan return pernyataan pengembalian. Jika Anda menginginkan versi asinkron, terapkan Run metode dengan Task<return-type> atribut dan async kata kunci. Nilai pengembalian diatur ke properti output body tindakan skrip, yang kemudian dapat direferensikan oleh tindakan alur kerja berikutnya.

Contoh berikut menunjukkan Run metode dengan Task<Results> atribut, async kata kunci, dan return pernyataan:

public static async Task<Results> Run(WorkflowContext context, ILogger log)
{
    return new Results
    {
        Message = !string.IsNullOrEmpty(name) ? $"Returning results with status message."
    };
}

public class Results
{
    public string Message {get; set;}
}

Menampilkan file skrip

  1. Di portal Azure, buka sumber daya aplikasi logika Standar yang memiliki alur kerja yang Anda inginkan.

  2. Pada menu sumber daya aplikasi logika, di bawah Alat Pengembangan, pilih Alat Tingkat Lanjut.

  3. Pada halaman Alat Tingkat Lanjut, pilih Buka, yang membuka konsol KuduPlus .

  4. Buka menu konsol Debug, dan pilih CMD.

  5. Buka lokasi akar aplikasi logika Anda: site/wwwroot

  6. Buka folder alur kerja Anda, yang berisi file .csx, di sepanjang jalur ini: site/wwwroot/{workflow-name}

  7. Di samping nama file, pilih Edit untuk membuka dan menampilkan file.

Melihat log di Application Insights

  1. Di portal Azure, pada menu sumber daya aplikasi logika, di bawah Pengaturan, pilih Application Insights, lalu pilih aplikasi logika Anda.

  2. Pada menu Application Insights , di bawah Pemantauan, pilih Log.

  3. Buat kueri untuk menemukan jejak atau kesalahan dari eksekusi alur kerja Anda, misalnya:

    union traces, errors
    | project TIMESTAMP, message
    

Kesalahan kompilasi

Dalam rilis ini, editor berbasis web mencakup dukungan IntelliSense terbatas, yang masih dalam penyempurnaan. Kesalahan kompilasi apa pun terdeteksi saat Anda menyimpan alur kerja, dan runtime Azure Logic Apps mengkompilasi skrip Anda. Kesalahan ini muncul di log kesalahan aplikasi logika Anda.

Kesalahan runtime

Jika kesalahan terjadi saat skrip Anda dijalankan, Azure Logic Apps melakukan langkah-langkah berikut:

  • Meneruskan kesalahan kembali ke alur kerja Anda.
  • Menandai tindakan skrip sebagai Gagal.
  • Menyediakan objek kesalahan yang mewakili pengecualian yang dilemparkan dari skrip Anda.

Contoh berikut menunjukkan contoh kesalahan:

Fungsi 'CSharp_MyLogicApp-InvalidAction_execute_csharp_script_code.csx' gagal dengan kesalahan 'Tindakan 'tidak ada' tidak ada dalam alur kerja.' saat mengeksekusi. Pastikan kode fungsi valid.

Contoh skrip

Contoh skrip berikut melakukan berbagai tugas yang mungkin Anda lakukan

Mendekompresi file ZIP dengan file teks dari tindakan HTTP ke dalam array string

// Add the required libraries.
#r "Newtonsoft.Json"
#r "Microsoft.Azure.Workflows.Scripting"
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Azure.Workflows.Scripting;
using System;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Collections.Generic;

/// <summary>
/// Executes the inline C# code.
/// </summary>
/// <param name="context">The workflow context.</param>
public static async Task<List<string>> Run(WorkflowContext context)
{

    var outputs = (await context.GetActionResults("HTTP_1").ConfigureAwait(false)).Outputs;
    var base64zipFileContent = outputs["body"]["$content"].ToString();

    // Decode base64 to bytes.
    byte[] zipBytes = Convert.FromBase64String(base64zipFileContent);

    List<string> fileContents = new List<string>();

    // Creates an in-memory stream from the zip bytes.
    using (MemoryStream zipStream = new MemoryStream(zipBytes))
    {

        // Extracts files from the zip archive.
        using (ZipArchive zipArchive = new ZipArchive(zipStream))
        {

            foreach (ZipArchiveEntry entry in zipArchive.Entries)
            {

                // Read each file's content.
                using (StreamReader reader = new StreamReader(entry.Open()))
                {
                    string fileContent = reader.ReadToEnd();
                    fileContents.Add(fileContent);
                }
            }
        }
    }

    return fileContents;
}

Mengenkripsi data menggunakan kunci dari pengaturan aplikasi

// Add the required libraries.
#r "Newtonsoft.Json"
#r "Microsoft.Azure.Workflows.Scripting"
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Azure.Workflows.Scripting;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

/// <summary>
/// Executes the inline csharp code.
/// </summary>
/// <param name="context">The workflow context.</param>
public static async Task<string> Run(WorkflowContext context)
{

    var compose = (await context.GetActionResults("compose").ConfigureAwait(false)).Outputs;
    var text = compose["sampleData"].ToString();

    return EncryptString(text);

}

public static string EncryptString(string plainText)
{

    var key = Environment.GetEnvironmentVariable("app-setting-key");
    var iv = Environment.GetEnvironmentVariable("app-setting-iv");

    using (Aes aesAlg = Aes.Create())
    {

        aesAlg.Key = Encoding.UTF8.GetBytes(key);
        aesAlg.IV = Encoding.UTF8.GetBytes(iv);
        ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

        using (MemoryStream msEncrypt = new MemoryStream())
        {

            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {

                using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                {
                    swEncrypt.Write(plainText);
                }

            }

             return Convert.ToBase64String(msEncrypt.ToArray());

        }
    }
}

Kelas WorkflowContext

Mewakili konteks alur kerja.

Metode

GetActionResult(string actionName)

Mendapatkan hasil dari tindakan tertentu dalam alur kerja.

Versi asinkron menggunakan Tugas<> sebagai jenis pengembalian, misalnya:

Task<WorkflowOperationResult> GetActionResult(string actionName)

Parameter

actionName: Nama tindakan.

Mengembalikan

Versi asinkron mengembalikan Task objek yang mewakili operasi asinkron. Hasil tugas berisi WorkflowOperationResult objek. Untuk informasi tentang properti objek WorkflowOperationResult , lihat Kelas WorkflowOperationResult.

RunTriggerResult()

Mendapatkan hasil dari pemicu dalam alur kerja.

Versi asinkron menggunakan Tugas<> sebagai jenis pengembalian, misalnya:

Task<WorkflowOperationResult> RunTriggerResult()

Parameter

Tidak ada.

Mengembalikan

Versi asinkron mengembalikan Task objek yang mewakili operasi asinkron. Hasil tugas berisi WorkflowOperationResult objek. Untuk informasi tentang properti objek WorkflowOperationResult , lihat Kelas WorkflowOperationResult.

Kelas WorkflowOperationResult

Mewakili hasil dari operasi alur kerja.

Properti

Nama Tipe Deskripsi
Nama String Mendapatkan atau mengatur nama operasi.
Input JToken Mendapatkan atau mengatur input eksekusi operasi.
Output JToken Mendapatkan atau mengatur output eksekusi operasi.
StartTime TanggalWaktu? Mendapatkan atau mengatur waktu mulai operasi.
EndTime TanggalWaktu? Mendapatkan atau mengatur waktu akhir operasi.
OperationTrackingId String Mendapatkan atau mengatur ID pelacakan operasi.
Kode String Mendapatkan atau mengatur kode status untuk tindakan tersebut.
Keadaan String Mendapatkan atau mengatur status untuk tindakan tersebut.
Kesalahan JToken Mendapatkan atau mengatur kesalahan untuk tindakan tersebut.
TrackedProperties JToken Mendapatkan atau mengatur properti terlacak untuk tindakan tersebut.

Menambahkan dan menjalankan cuplikan kode JavaScript