Azure Logic Apps için Standart iş akışlarıyla satır içinde C# betikleri ekleme ve çalıştırma (Önizleme)
Şunlar için geçerlidir: Azure Logic Apps (Standart)
Not
Bu özellik önizleme aşamasındadır ve Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları'na tabidir.
Azure Logic Apps'te Standart iş akışınızla satır içinde özel tümleştirme görevleri gerçekleştirmek için doğrudan iş akışınızın içinden C# betikleri ekleyebilir ve çalıştırabilirsiniz. Bu görev için CSharp Betik Kodunu Yürüt adlı Satır içi Kod eylemini kullanın. Bu eylem, bu çıkışı iş akışınızın sonraki eylemlerinde kullanabilmeniz için betiğinizden sonuçları döndürür.
Bu özellik aşağıdaki avantajları sağlar:
Azure İşlevleri kullanmak zorunda kalmadan daha karmaşık tümleştirme zorluklarını çözebilmeniz için iş akışı tasarımcısında kendi betiklerinizi yazın. Başka hizmet planı gerekmez.
Bu avantaj, iş akışı geliştirmeyi kolaylaştırır ve daha fazla hizmet yönetimiyle karmaşıklığı ve maliyeti azaltır.
İş akışınızda kişiselleştirilmiş bir betik alanı sağlayan ayrılmış bir kod dosyası oluşturun.
betikleri iş akışlarınızla birlikte dağıtın.
Bu kılavuzda, eylemin iş akışınıza nasıl ekleneceği ve çalıştırmak istediğiniz C# betik kodunun nasıl ekleneceği gösterilir.
Önkoşullar
Bir Azure hesabı ve aboneliği Aboneliğiniz yoksa, ücretsiz bir Azure hesabı için kaydolun.
C# betiğinizi eklemek istediğiniz Standart mantıksal uygulama iş akışı. İş akışının zaten bir tetikleyiciyle başlaması gerekir. Daha fazla bilgi için bkz . Örnek Standart mantıksal uygulama iş akışları oluşturma.
Senaryonuz için herhangi bir tetikleyici kullanabilirsiniz, ancak örnek olarak bu kılavuz http isteği alındığında adlı İstek tetikleyicisini ve yanıt eyleminikullanır. İş akışı, başka bir uygulama veya iş akışı tetikleyicinin uç nokta URL'sine istek gönderdiğinde çalışır. Örnek betik, sonraki eylemlerde kullanabileceğiniz çıkış olarak kod yürütme sonuçlarını döndürür.
Örnek senaryolar
Aşağıdaki listede, belirli tümleştirme görevlerine yardımcı olması için betik kullanabileceğiniz bazı örnek senaryolar açıklanmaktadır:
Yerleşik ifadeler ve veri işlemleri özelliklerinin ötesinde bir yük üzerinde dönüştürmeleri veya işlemeleri ayrıştırın ve gerçekleştirin. Örneğin, aşağı akış işleme için değiştirilmiş bir şema döndürmek için bir betik kullanabilirsiniz.
Sanal makineler gibi Azure kaynaklarını yönetin ve bazı iş mantığına göre bunları başlatın veya adımlayın.
Bir zamanlamaya göre çalışması ve sonuçları SharePoint'te depolaması gereken bir SQL sunucusunda saklı yordamı çalıştırın.
Azure Depolama'ya kaydederek veya ekibinize e-posta göndererek veya bunu bildirerek ayrıntılı bilgilerle iş akışı hatalarını günlüğe kaydedin.
API güvenlik standartlarına uymak için verileri şifreleyin ve şifrelerini çözerek.
HTTP isteği için zip veya sıkıştırmayı açmak için betikte bir dosya geçirin.
Günlük raporlar oluşturmak için çeşitli API'lerden ve dosyalardan veri toplama
Dikkat edilmesi gereken noktalar
Azure portalı betiğinizi bir C# betik dosyası (.csx) olarak workflow.json dosyanızla aynı klasöre kaydeder ve bu klasör iş akışınızın JSON tanımını depolar ve dosyayı iş akışı tanımıyla birlikte mantıksal uygulama kaynağınıza dağıtır. Azure Logic Apps betiği yürütmeye hazır hale getirmek için bu dosyayı derler.
.csx dosya biçimi daha az "ortak" yazmanıza ve yalnızca bir C# işlevi yazmaya odaklanmanıza olanak tanır. Dağıtım sırasında daha kolay yönetim için .csx dosyasını yeniden adlandırabilirsiniz. Ancak, betiği her yeniden adlandırdığınızda, yeni sürüm önceki sürümün üzerine yazar.
Betik iş akışı için yereldir. Aynı betiği diğer iş akışlarında kullanmak için KuduPlus konsolunda betik dosyasını görüntüleyin ve ardından betiği diğer iş akışlarında yeniden kullanmak üzere kopyalayın.
Sınırlamalar
Veri Akışı Adı | Sınırla | Notlar |
---|---|---|
Betik çalıştırma süresi | 10 dakika | Daha uzun sürelere ihtiyaç duyan senaryolarınız varsa, gereksinimleriniz hakkında daha fazla bilgi sağlamak için ürün geri bildirimi seçeneğini kullanın. |
Çıkış boyutu | 100 MB | Çıkış boyutu, eylemler için çıkış boyutu sınırına bağlıdır ve bu sınır genellikle 100 MB'tır. |
CSharp Betik Kodunu Yürüt eylemini ekleme
Azure portalında Standart mantıksal uygulama kaynağınızı ve iş akışınızı tasarımcıda açın.
Tasarımcıda, iş akışınıza CSharp Betik Kodunu Yürüt adlı Satır içi Kod İşlemleri eylemini eklemek için bu genel adımları izleyin.
Eylem bilgileri bölmesi açıldıktan sonra, Parametreler sekmesindeki Kod Dosyası kutusunda, önceden doldurulmuş örnek kodu kendi betik kodunuzla güncelleştirin.
Betiğin en üstünde gerekli ad alanlarını içeri aktarın ve her zamanki gibi gerekli derleme başvurularını ekleyin.
Run
Yöntemini uygulayın:Yöntem
Run
adı önceden tanımlanmıştır ve iş akışınız yalnızca çalışma zamanında bu Run yöntemini çağırarak yürütülür.İş akışınızdan gelen verilere erişmek için yöntemi,
Run
WorkflowContext türüne sahip bir parametre aracılığıyla bu verileri kabul eder. WorkflowContext nesnesini aşağıdaki görevler için kullanabilirsiniz:Betiğin sonuçlarını veya diğer verileri iş akışınıza döndürmek için yöntemini bir dönüş türüyle uygulayın
Run
. Daha fazla bilgi için bkz . İş akışınıza veri döndürme.Betiğinizin çıkışını C# dilinde günlüğe kaydetmek için, türe sahip
ILogger
bir parametre aracılığıyla işlev günlükçüsüsü kabul etmek için yöntemini uygulayınRun
ve kolay tanımlama için bağımsız değişken adı olarak kullanınlog
. Betiğinize eklemektenConsole.Write
kaçının.Önemli
İşlev ana bilgisayarının kapanması durumunda düzgün sonlandırma gerektiren uzun süre çalışan bir betiğiniz varsa, işlev günlükçünüzle birlikte gerekli olan bir iptal belirteci ekleyin.
Daha fazla bilgi için aşağıdaki bölümlere bakın:
Aşağıdaki örnekte, örnek betik koduyla eylemin Parametreler sekmesi gösterilmektedir:
Aşağıdaki örnekte örnek betik kodu gösterilmektedir:
/// 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;} }
Daha fazla bilgi için bkz . "#r" - Dış derlemelere başvurma.
bitirdiğinizde iş akışınızı kaydedin.
İş akışınızı çalıştırdıktan sonra, etkinleştirilmişse Application Insights'ta iş akışı çıkışını gözden geçirebilirsiniz. Daha fazla bilgi için bkz . Application Insights'ta günlükleri görüntüleme.
Ad alanlarını içeri aktarma
Ad alanlarını içeri aktarmak için bunu her zamanki gibi yan tümcesiyle using
yapın. Aşağıdaki liste otomatik olarak içeri aktarılan ad alanlarını içerdiğinden betiğinize eklemeniz isteğe bağlıdır:
System
System.Collections.Generic
System.IO
System.Linq
System.Net.Http
System.Threading.Tasks
Microsoft.Azure.WebJobs
Microsoft.Azure.WebJobs.Host
Dış derlemelere başvuru ekleme
.NET Framework derlemelerine başvurmak için yönergesini #r "<assembly-name>
kullanın, örneğin:
/// 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
{
<...>
}
Aşağıdaki liste, Azure İşlevleri barındırma ortamı tarafından otomatik olarak eklenen derlemeleri içerir:
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
Akışın çıkışını günlüğe kaydetme
Yönteminize Run
tür ve log
ad olarak bir parametre ILogger
ekleyin, örneğin:
public static void Run(WorkflowContext context, ILogger log)
{
log.LogInformation($"C# script successfully executed.");
}
Application Insights'a günlük çıkışı
Application Insights'ta özel ölçümler oluşturmak için üzerinde ILogger
uzantı yöntemini kullanınLogMetric
.
Aşağıdaki örnekte örnek yöntem çağrısı gösterilmektedir:
logger.LogMetric("TestMetric", 1234);
Betiğinizdeki iş akışı tetikleyicilerine ve eylem çıkışlarına erişme
İş akışınızdaki verilere erişmek için bağlam nesnesi için WorkflowContext
aşağıdaki yöntemleri kullanın:
GetTriggerResults
yöntemTetikleyici çıkışlarına erişmek için bu yöntemi kullanarak tetikleyiciyi ve özelliği aracılığıyla kullanılabilen çıkışlarını temsil eden bir nesne döndürebilirsiniz
Outputs
. Bu nesnenin JObject türü vardır ve tetikleyici çıkışlarındaki çeşitli özelliklere erişmek için dizin oluşturucu olarak köşeli ayraçları ([]) kullanabilirsiniz.Aşağıdaki örnek, tetikleyici çıkışlarındaki özelliğinden
body
verileri alır: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 { <...> }
GetActionResults
yöntemEylem çıkışlarına erişmek için, bu yöntemi kullanarak eylemi ve özelliği aracılığıyla kullanılabilen çıkışlarını temsil eden bir nesne döndürebilirsiniz
Outputs
. Bu yöntem bir eylem adını parametre olarak kabul eder. Aşağıdaki örnek, çıkışlardaki özelliğindenbody
action-name adlı bir eylemin verilerini alır: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 { <...> }
Ortam değişkenlerine veya uygulama ayarı değerine erişme
Ortam değişkeni veya uygulama ayarı değeri almak için yöntemini kullanın System.Environment.GetEnvironmentVariable
, örneğin:
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);
}
verileri iş akışınıza döndürme
Bu görev için yönteminizi Run
bir dönüş türü ve return
deyimiyle uygulayın. Zaman uyumsuz bir sürüm istiyorsanız, yöntemini bir Task<return-type>
özniteliği ve async
anahtar sözcüğüyle uygulayınRun
. Dönüş değeri, sonraki iş akışı eylemlerinin başvurabileceği betik eyleminin outputs body
özelliğine ayarlanır.
Aşağıdaki örnekte özniteliği, anahtar sözcüğü ve deyimi olan Task<Results>
async
bir return
yöntem gösterilmektedirRun
:
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;}
}
Betik dosyasını görüntüleme
Azure portalında, istediğiniz iş akışını içeren Standart mantıksal uygulama kaynağınızı açın.
Mantıksal uygulama kaynak menüsünde, Geliştirme Araçları'nın altında Gelişmiş Araçlar'ı seçin.
Gelişmiş Araçlar sayfasında Git'i seçerek KuduPlus konsolunu açın.
Hata ayıklama konsolu menüsünü açın ve CMD'yi seçin.
Mantıksal uygulamanızın kök konumuna gidin: site/wwwroot
şu yol boyunca .csx dosyasını içeren iş akışınızın klasörüne gidin: site/wwwroot/{workflow-name}
Dosya adının yanındaki Düzenle'yi seçerek dosyayı açın ve görüntüleyin.
Application Insights'ta günlükleri görüntüleme
Azure portalındaki mantıksal uygulama kaynak menüsünde, Ayarlar'ın altında Application Insights'ı ve ardından mantıksal uygulamanızı seçin.
Application Insights menüsündeki İzleme'nin altında Günlükler'i seçin.
İş akışı yürütmenizdeki izlemeleri veya hataları bulmak için bir sorgu oluşturun, örneğin:
union traces, errors | project TIMESTAMP, message
Derleme hataları
Bu sürümde web tabanlı düzenleyici sınırlı IntelliSense desteği içeriyor ve bu destek hala geliştiriliyor. İş akışınızı kaydettiğinizde tüm derleme hataları algılandı ve Azure Logic Apps çalışma zamanı betiğinizi derler. Bu hatalar mantıksal uygulamanızın hata günlüklerinde görünür.
Çalışma zamanı hataları
Betiğiniz yürütürken bir hata oluşursa Azure Logic Apps şu adımları gerçekleştirir:
- Hatayı iş akışınıza geri geçirir.
- Betik eylemini Başarısız olarak işaretler.
- Betiğinizden oluşan özel durumu temsil eden bir hata nesnesi sağlar.
Aşağıdaki örnekte örnek bir hata gösterilmektedir:
'CSharp_MyLogicApp-InvalidAction_execute_csharp_script_code.csx' işlevi 'Yok' eylemi iş akışında yok' hatasıyla başarısız oldu. yürütülürken. lütfen işlev kodunun geçerli olduğunu doğrulayın.
Örnek betikler
Aşağıdaki örnek betikler, gerçekleştirebileceğiniz çeşitli görevleri gerçekleştirir
HTTP eyleminden metin dosyaları içeren zip dosyasını dize dizisine açma
// 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;
}
Uygulama ayarlarından bir anahtar kullanarak verileri şifreleme
// 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());
}
}
}
WorkflowContext sınıfı
bir iş akışı bağlamı temsil eder.
Yöntemler
GetActionResult(string actionName)
İş akışındaki belirli bir eylemin sonucunu alır.
Zaman uyumsuz sürüm, dönüş türü olarak Görev'i<> kullanır, örneğin:
Task<WorkflowOperationResult> GetActionResult(string actionName)
Parametreler
actionName
: Eylem adı.
Döndürülenler
Zaman uyumsuz sürüm, zaman uyumsuz işlemi temsil eden bir Task
nesne döndürür. Görev sonucu bir WorkflowOperationResult
nesne içeriyor. WorkflowOperationResult nesne özellikleri hakkında bilgi için bkz. WorkflowOperationResult sınıfı.
RunTriggerResult()
sonucu iş akışındaki tetikleyiciden alır.
Zaman uyumsuz sürüm, dönüş türü olarak Görev'i<> kullanır, örneğin:
Task<WorkflowOperationResult> RunTriggerResult()
Parametreler
Hiçbiri.
Döndürülenler
Zaman uyumsuz sürüm, zaman uyumsuz işlemi temsil eden bir Task
nesne döndürür. Görev sonucu bir WorkflowOperationResult
nesne içeriyor. WorkflowOperationResult nesne özellikleri hakkında bilgi için bkz. WorkflowOperationResult sınıfı.
WorkflowOperationResult sınıfı
bir iş akışı işleminin sonucunu temsil eder.
Properties
Adı | Tür | Açıklama |
---|---|---|
Adı | String | İşlem adını alır veya ayarlar. |
Giriş | JToken | İşlem yürütme girişlerini alır veya ayarlar. |
Çıkışlar | JToken | İşlem yürütme çıkışlarını alır veya ayarlar. |
StartTime | DateTime mı? | İşlemin başlangıç saatini alır veya ayarlar. |
EndTime | DateTime mı? | İşlemin bitiş saatini alır veya ayarlar. |
OperationTrackingId | String | İşlem izleme kimliğini alır veya ayarlar. |
Kod | String | Eylemin durum kodunu alır veya ayarlar. |
Statü | String | Eylemin durumunu alır veya ayarlar. |
Hata | JToken | Eylemin hatasını alır veya ayarlar. |
TrackedProperties | JToken | Eylemin izlenen özelliklerini alır veya ayarlar. |