Visual Studio Code kullanarak Azure Logic Apps Kural Altyapısı projesi oluşturma

Şunlar için geçerlidir: Azure Logic Apps (Standart)

İş mantığını Azure Logic Apps'teki Standart iş akışlarınızla tümleştirmek istediğinizde, Visual Studio Code kullanarak bir Azure Logic Apps Kural Altyapısı projesi oluşturabilir ve oluşturabilirsiniz. Kurallar, iş süreçlerinin çalışma şekline ilişkin iş mantığını yönetir.

Bu kılavuzda Azure Logic Apps Kural Altyapısı projesinin nasıl oluşturulacağı gösterilmektedir:

  • Microsoft Rules Composer ile projeniz için iş kuralları oluşturma da dahil olmak üzere Azure Logic Apps Kural Altyapısı projenizi oluşturmaya yönelik önkoşullar ve kurulum.

  • Varsa, mevcut kuralları Microsoft BizTalk Server'dan dışarı aktarın.

  • Visual Studio Code kullanarak Azure Logic Apps Kural Altyapısı için bir Standart mantıksal uygulamalar projesi oluşturun.

Önkoşullar

Projenizi oluşturmadan önce

Başarılı bir kural altyapısı projesinden emin olmanıza yardımcı olmak için aşağıdaki genel görevleri ve en iyi yöntemleri gözden geçirin ve gerçekleştirin:

  1. İş kurallarının iş süreçlerinize nasıl uygun olduğunu belirleyin.

  2. uygulamanıza iş kurallarının nasıl dahil yapılacağını planlayın.

  3. Uygulamanızdaki kurallarla temsil etmek istediğiniz iş mantığını belirleyin.

    "İş mantığı" terimi birçok şeye başvurabilir. Örneğin, iş mantığı "500 dolardan büyük satın alma siparişleri için yönetici onayı gerekiyor" olabilir.

  4. Kural öğeleriniz için veri kaynaklarını tanımlayın. İsteğe bağlı olarak, temel bağlamaları temsil eden etki alanına özgü sıfat olan sözlükleri tanımlayabilirsiniz.

  5. Sözlük tanımlarından veya doğrudan veri bağlamalarından kullanılacak kuralları tanımlayın. Bu kurallardan, iş mantığınızı temsil eden bir kural kümesi oluşturun.

Microsoft BizTalk Server'dan kuralları dışarı aktarma

Microsoft BizTalk Server'daki mevcut kuralları yeniden kullanmak için bunları dışarı aktarabilirsiniz. Ancak, veritabanı bilgileri şu anda desteklenmiyor. Kurallarınızı dışarı aktarmadan önce, Microsoft BizTalk Rules Composer'ı kullanarak bunları diğer olgu türlerine kaldırın veya yeniden düzenleyebilirsiniz.

  1. Microsoft BizTalk Server'dan İş Kuralları Altyapısı Dağıtım Sihirbazı'nı başlatın.

  2. Kural Altyapısı Dağıtım Sihirbazı'na Hoş Geldiniz sayfasında İleri'yi seçin.

  3. Dağıtım Görevi sayfasında İlkeyi/Sözcük Dağarcığını veritabanından dosyaya aktar'ı ve ardından İleri'yi seçin.

  4. İlke Deposu sayfasındaki SQL Server Adı listesinde SQL sunucunuzu seçin. Seçili sunucudaki Yapılandırma Veritabanı listesinde BizTalkRuleEngineDb'yi ve ardından İleri'yi seçin.

  5. Politika/Sözcük Dağarcığı Dışa Aktarma sayfasında, Politika listesinde istediğiniz politikayı seçin. Tanım dosyasını bulmak ve seçmek için Gözat'ı seçin.

  6. Hazır olduğunuzda İleri'yi seçin.

  7. Sunucu, veritabanı ve ilke veya sözlük bilgilerini onaylayın ve İleri'yi seçin.

  8. İçeri veya dışarı aktarma işlemi tamamlandıktan sonra İleri'yi seçin.

  9. İçeri veya dışarı aktarma işleminin tamamlanma durumunu gözden geçirin ve Son'u seçin.

Azure Logic Apps Kural Altyapısı projesi oluşturma

  1. Visual Studio Code'daki Etkinlik Çubuğu'nda Azure simgesini seçin. (Klavye: Shift+Alt+A)

  2. Açılan Azure penceresinde, Çalışma Alanı bölüm araç çubuğunda, Azure Logic Apps menüsünden Yeni mantıksal uygulama çalışma alanı oluştur'u seçin.

    Visual Studio Code, Azure penceresi, Çalışma Alanı bölüm araç çubuğu ve Yeni mantıksal uygulama çalışma alanı oluştur seçeneğini gösteren ekran görüntüsü.

  3. Klasör seç kutusunda, projeniz için oluşturduğunuz yerel klasöre göz atın ve seçin.

  4. Yeni mantıksal uygulama çalışma alanı oluştur istemi kutusu görüntülendiğinde, çalışma alanınız için bir ad belirtin:

    Çalışma alanı adını girme istemiyle Visual Studio Code'u gösteren ekran görüntüsü.

    Bu örnek MyLogicAppRulesWorkspace ile devam eder.

  5. Mantıksal uygulama çalışma alanınız için proje şablonu seçin istemi kutusu görüntülendiğinde, Kural altyapısı projesi ile mantıksal uygulama'yı seçin.

    Visual Studio Code'u gösteren ekran görüntüsü, mantıksal uygulama çalışma alanı için proje şablonu seçme istemini gösterir.

  6. Aşağıdaki örnek değerleri sağlamak için sonraki istemleri izleyin:

    Öğe Örnek değer
    İşlevler projesi için işlev adı RulesFunction
    İşlevler projesinin ad alanı ismi Contoso
    Mantıksal Uygulama: LogicApp
    İş akışı şablonu:
    - Durumlu İş Akışı
    - Durum Bilgisi Olmayan İş Akışı
    Durumlu İş Akışı
    İş akışı adı MyRulesWorkflow
  7. Geçerli pencerede aç'ı seçin.

    Bu adımı tamamladıktan sonra Visual Studio Code, varsayılan olarak bir işlev projesi ve mantıksal uygulama kuralları altyapısı projesi içeren çalışma alanınızı oluşturur, örneğin:

    Oluşturulan çalışma alanı ile Visual Studio Code'un gösterildiği ekran görüntüsü.

    Düğüm Açıklama
    < çalışma alanı-adı> hem işlev projenizi hem de mantıksal uygulama iş akışı projenizi içerir.
    İşlev İşlev projenizin artefaktlarını içerir. Örneğin işlev <adı>.cs dosyası, kodunuzu yazabileceğiniz kod dosyasıdır.
    LogicApp Mantık uygulamanızın kurallar motoru projesinin, iş akışı dahil, öğelerini içerir.

Kural motoru kodunuzu yazın

  1. Çalışma alanınızda, henüz genişletilmemişse İşlevler düğümünü genişletin.

  2. < function-name>.cs dosyasını açın, bu örnekte RulesFunction.cs olarak adlandırılmıştır.

    Varsayılan olarak, bu dosya aşağıdaki kod öğelerinin yanı sıra uygun yerlerde önceden sağlanan örnek değerleri içeren örnek kodu içerir:

    • Ad alanı adı
    • Sınıf adı
    • İşlev adı
    • İşlev parametreleri
    • Dönüş türü
    • Karmaşık tür

    Aşağıdaki örnekte adlı RulesFunctionişlevin tam örnek kodu gösterilmektedir:

    //------------------------------------------------------------
    // Copyright (c) Microsoft Corporation. All rights reserved.
    //------------------------------------------------------------
    
    namespace Contoso
    {
         using System;
         using System.Collections.Generic;
         using System.Threading.Tasks;
         using Microsoft.Azure.Functions.Extensions.Workflows;
         using Microsoft.Azure.WebJobs;
         using Microsoft.Azure.Workflows.RuleEngine;
         using Microsoft.Azure.Workflows.RuleEngine.Common;
         using Microsoft.Extensions.Logging;
         using System.Xml;
         using System.Text;
    
         /// <summary>
         /// Represents the RulesFunction flow invoked function.
         /// </summary>
         public class RulesFunction
         {
             private readonly ILogger<RulesFunction> logger;
    
             private FileStoreRuleExplorer ruleExplorer;
    
             public RulesFunction(ILoggerFactory loggerFactory)
             {
                 logger = loggerFactory.CreateLogger<RulesFunction>();
                 this.ruleExplorer = new FileStoreRuleExplorer(loggerFactory); 
             }
    
             /// <summary>
             /// Executes the logic app workflow.
             /// </summary>
             /// <param name="ruleSetName">The rule set name.</param>
             /// <param name="documentType">document type of input xml.</param>
             /// <param name="inputXml">input xml type fact</param>
             /// <param name="purchaseAmount">purchase amount, value used to create .NET fact </param>
             /// <param name="zipCode">zip code value used to create .NET fact .</param>
             [FunctionName("RulesFunction")]
             public Task<RuleExecutionResult> RunRules(
                 [WorkflowActionTrigger] string ruleSetName, 
                 string documentType, 
                 string inputXml, 
                 int purchaseAmount, 
                 string zipCode)
             {
             /***** Summary of steps below *****
                  * 1. Get the rule set to Execute 
                  * 2. Check if the rule set was retrieved successfully
                  * 3. create the rule engine object
                  * 4. Create TypedXmlDocument facts for all xml document facts
                  * 5. Initialize .NET facts
                  * 6. Execute rule engine
                  * 7. Retrieve relevant updates facts and send them back
             */
    
                 try
                 {
                     var ruleSet = this.ruleExplorer.GetRuleSet(ruleSetName);
    
                     // Check if ruleset exists
                     if(ruleSet == null)
                     {
                         // Log an error in finding the rule set
                         this.logger.LogCritical($"RuleSet instance for '{ruleSetName}' was not found(null)");
                         throw new Exception($"RuleSet instance for '{ruleSetName}' was not found.");
                     }             
    
                     // Create rule engine instance
                     var ruleEngine = new RuleEngine(ruleSet: ruleSet);
    
                     // Create a typedXml Fact(s) from input xml(s)
                     XmlDocument doc = new XmlDocument();
                     doc.LoadXml(inputXml);
                     var typedXmlDocument = new TypedXmlDocument(documentType, doc);
    
                     // Initialize .NET facts
                     var currentPurchase = new ContosoNamespace.ContosoPurchase(purchaseAmount, zipCode);
    
                     // Provide facts to rule engine and run it
                     ruleEngine.Execute(new object[] { typedXmlDocument, currentPurchase });
    
                     // Send the relevant results(facts) back
                     var updatedDoc = typedXmlDocument.Document as XmlDocument;
                     var ruleExectionOutput = new RuleExecutionResult()
                     {
                         XmlDoc = updatedDoc.OuterXml,
                         PurchaseAmountPostTax = currentPurchase.PurchaseAmount + currentPurchase.GetSalesTax()
                     };
    
                     return Task.FromResult(ruleExectionOutput);
                 }
                 catch(RuleEngineException ruleEngineException)
                 {
                     // Log any rule engine exceptions
                     this.logger.LogCritical(ruleEngineException.ToString());
                     throw;
                 }
                 catch(XmlException xmlException)
                 {
                     // Log any xml exceptions
                     this.logger.LogCritical("Encountered exception while handling xml. " + xmlException.ToString());
                     throw;
                 }
                 catch(Exception ex)
                 {
                     // Log any other exceptions
                     this.logger.LogCritical(ex.ToString());
                     throw;
                 }
             }
    
             /// <summary>
             /// Results of the rule execution
             /// </summary>
             public class RuleExecutionResult
             {
                 /// <summary>
                 /// rules updated xml document
                 /// </summary>
                 public string XmlDoc { get; set;}
    
                 /// <summary>
                 /// Purchase amount post tax
                 /// </summary>
                 public int PurchaseAmountPostTax { get; set;}
             }
         }
    }
    

    İşlev tanımı RulesFunction için, kullanmaya başlamak amacıyla kullanabileceğiniz varsayılan bir RunRules yöntemi içerir. Bu örnek RunRules yöntem, parametrelerin Azure Logic Apps kurallar motoruna nasıl geçirileceğini gösterir. Bu örnekte yöntem kural kümesi adını, giriş belgesi türünü, XML olgusunu ve daha fazla işleme için diğer değerleri geçirir.

    İşlev-ismi<>.cs dosyası, bir Application Insights kaynağına olayları günlüğe kaydetmek için destek sağlayan ILogger arabirimini de içerir. Application Insights'a izleme bilgileri gönderebilir ve bu bilgileri iş akışlarınızdaki izleme bilgileriyle birlikte depolayabilirsiniz. < >.cs dosyası, kural kümesine FileStoreRuleExplorer erişen nesneyi de içerir. Gözlemleyebileceğiniz gibi, FileStoreRuleExplorer için oluşturucu, loggerFactory kullanarak telemetri bilgilerini Application Insights'a da gönderir.

    private readonly ILogger<RulesFunction> logger;
    
    private FileStoreRuleExplorer ruleExplorer;
    
    public RulesFunction(ILoggerFactory loggerFactory)
         {
             logger = loggerFactory.CreateLogger<RulesFunction>();
             this.ruleExplorer = new FileStoreRuleExplorer(loggerFactory); 
         }
    
        <...>
    
    

    Azure Logic Apps Kural Altyapısı aşağıdaki adımlarda açıklandığı gibi çalışır:

    1. Motor, kural kümesine erişmek için FileStoreRuleExplorer nesnesini kullanır. Kural kümesi dosyası, Standart mantıksal uygulamanızın Kurallar dizininde depolanır.

      Bu örnek için, Microsoft Kural Oluşturucu ile oluşturulan veya Microsoft BizTalk Server kullanılarak dışa aktarılan, olarak adlandırılan kural kümesi dosyası.

    var ruleSet = this.ruleExplorer.GetRuleSet(ruleSetName);
    
    // Check if ruleset exists
    if(ruleSet == null)
    {
    // Log an error in finding the rule set
      this.logger.LogCritical($"RuleSet instance for '{ruleSetName}' was not found(null)");
      throw new Exception($"RuleSet instance for '{ruleSetName}' was not found.");
    }             
    

    Önemli

    Kural kümeleri, olgularına referanslar tutar. Microsoft Kural Oluşturucu, düzenleme kural kümesini doğrulamak için olguların derlemelerini arar. Microsoft Rules Composer gibi SampleRuleSet.xmlkural kümelerini açmak için bunları ilgili .NET olgu derlemeleriyle yerleştirmeniz gerekir. Aksi takdirde, bir istisna alırsınız.

    1. Motor, ruleSet nesnesini kullanarak RuleEngine nesnesinin bir örneğini oluşturur.

    2. Kuralın olgularını RuleEngine nesnesi, Execute yöntemini kullanarak alır.

      Bu örnekte, Execute yöntemi iki olgu alır: adlı typedXmlDocument bir XML olgu ve adlı currentPurchasebir .NET olgu.

      Motor çalıştıktan sonra, olguların değerleri, motorun çalışmasından elde edilen değerlerle güncellenir.

    // Create rule engine instance
    var ruleEngine = new RuleEngine(ruleSet: ruleSet);
    // Create a typedXml Fact(s) from input xml(s)
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(inputXml);
    var typedXmlDocument = new TypedXmlDocument(documentType, doc);
    // Initialize .NET facts
    var currentPurchase = new ContosoNamespace.ContosoPurchase(purchaseAmount, zipCode);
    // Provide facts to rule engine and run it
    ruleEngine.Execute(new object[] { typedXmlDocument, currentPurchase });
    // Send the relevant results(facts) back
       var updatedDoc = typedXmlDocument.Document as XmlDocument;
    
    1. Motor, değerleri RunRules yöntemine iade etmek için RuleExecutionResult özel sınıfını kullanır.
    var ruleExectionOutput = new RuleExecutionResult()
                 {
                     XmlDoc = updatedDoc.OuterXml,
                     PurchaseAmountPostTax = currentPurchase.PurchaseAmount + currentPurchase.GetSalesTax()
                 };
    
                 return Task.FromResult(ruleExectionOutput);
    
    1. Örnek işlev kodunu kendinizle değiştirin ve kendi senaryolarınız için varsayılan RunRules yöntemi düzenleyin.

      Bu örnek, herhangi bir değişiklik yapmadan örnek kodu kullanmaya devam eder.

Kodunuzu derleyin ve oluşturun

Kodunuzu yazmayı bitirdikten sonra derleme hatası olmadığından emin olmak için derleyin. İşlev projeniz otomatik olarak derleme görevleri içerir ve ardından .NET olgu derlemeleriniz de dahil olmak üzere özel kod kitaplıklarınızdan herhangi birini iş akışlarının çalıştırılacak özel işlevleri aradığı mantıksal uygulama projenizdeki lib\custom klasörüne ekler. Bu görevler derlemeleri lib\custom\net472 klasörüne koyar.

  1. Visual Studio Code'da, Terminal menüsünden Yeni Terminal'i seçin.

  2. Görüntülenen çalışma dizini listesinden, yeni terminal için geçerli çalışma dizininiz olarak İşlevler'i seçin.

    Visual Studio Code' u, geçerli çalışma dizinini ve seçili İşlevler dizinini gösteren ekran görüntüsü.

    Visual Studio Code, komut istemi içeren bir terminal penceresi açar.

  3. Terminal penceresinde, komut istemine dotnet restore .\RulesFunction.csproj girin.

    Visual Studio Code, Terminal penceresi ve tamamlanmış dotnet restore komutunu gösteren ekran görüntüsü.

  4. Komut istemi yeniden gösterildikten sonra dotnet build .\RulesFunction.csproj girin.

    Derlemeniz başarılı olursa, Terminal penceresi Derlemenin başarılı olduğunu bildirir.

  5. Mantıksal uygulama projenizde aşağıdaki öğelerin mevcut olduğunu onaylayın:

    • Çalışma alanınızda şu klasörleri genişletin: LogicApp>lib\custom>net472. net472 adlı alt klasörün, kodunuzun çalışması için gereken birden fazla derlemeyi içerdiğini ve <fonksiyon-adi>.dll adlı dosyayı da içerdigi̇ni̇ doğrulayın.

    • Çalışma alanınızda şu klasörleri genişletin: LogicApp>lib\custom><function-name.> < function-name> adlı alt klasörün, yazdığınız işlev koduyla ilgili meta verileri içeren bir function.json dosyası içerdiğini onaylayın. İş akışı tasarımcısı, kodunuzu çağırırken gerekli girişleri ve çıkışları belirlemek için bu dosyayı kullanır.

    Aşağıdaki örnek, mantıksal uygulama projesinde örnek oluşturulan derlemeleri ve diğer dosyaları gösterir:

    Şimdi oluşturulan derlemeler ve diğer gerekli dosyalar ile birlikte işlev projesi ve mantıksal uygulama projesi içeren mantıksal uygulama çalışma alanını gösteren ekran görüntüsü.

İş akışından kurallarınızı çağırma

Kodunuzun derlendiğini ve mantıksal uygulama kuralları altyapısı projenizin kodunuzun çalışması için gerekli dosyalara sahip olduğunu onayladıktan sonra mantıksal uygulama projenize dahil edilen varsayılan iş akışını açın.

  1. Çalışma alanınızda LogicApp altında iş akışı adını genişletin, workflow.json için kısayol menüsünü açın ve Tasarımcıyı Aç seçeneğini seçin.

    Açılan iş akışı tasarımcısında, mantıksal uygulama projenize dahil edilen varsayılan iş akışı aşağıdaki tetikleyici ve eylemlerle birlikte görüntülenir:

  2. Bu mantıksal uygulamada Yerel kurallar işlevini çağır adlı eylemi seçin.

    Eylemin bilgi bölmesi sağ tarafta açılır.

    Tetikleyici ve eylemler içeren Visual Studio Code, iş akışı tasarımcısı ve varsayılan iş akışını gösteren ekran görüntüsü.

  3. İşlev Adı parametre değerinin çalıştırmak istediğiniz rules işlevine ayarlandığını gözden geçirin ve onaylayın. İşlevinizin kullandığı diğer parametre değerlerini gözden geçirin veya değiştirin.

Kodunuzda ve iş akışınızda hata ayıklama

  1. Azurite depolama öykünücüsü'ne üç kez başlamak için aşağıdaki adımları yineleyin: Aşağıdaki Azure Depolama hizmetleri için her biri bir kez:

    • Azure Blob Hizmeti
    • Azure Kuyruk Hizmeti
    • Azure Tablo Hizmeti
    1. Visual Studio Code Görünümü menüsünden Komut Paleti'ni seçin.

    2. Görüntülenen istemde Azurite: Blob Hizmetini Başlat'ı bulun ve seçin.

    3. Görüntülenen çalışma dizini listesinden LogicApp'i seçin.

    4. Azurite için şu adımları yineleyin: Kuyruk Hizmetini Başlat ve Azurite: Tablo Hizmetini Başlat.

    Ekranın alt kısmındaki Visual Studio Code görev çubuğu çalışan üç depolama hizmetini gösterdiğinde başarılısınızdır, örneğin:

    Azure Blob Hizmeti, Azure Kuyruk Hizmeti ve Azure Tablo Hizmeti'nin çalıştığı Visual Studio Code görev çubuğunu gösteren ekran görüntüsü.

  2. Visual Studio Code Etkinlik Çubuğu'nda Çalıştır ve Hata Ayıkla'yı seçin. (Klavye: Ctrl+Shift+D)

    Çalıştır ve Hata Ayıkla'nın seçili olduğu Visual Studio Code Etkinlik Çubuğu'nu gösteren ekran görüntüsü.

  3. Çalıştır ve Hata Ayıkla listesinden Mantıksal uygulamaya bağlan (LogicApp) seçeneğini belirleyin (henüz seçili değilse) ve ardından Çalıştır (yeşil ok) seçeneğini seçin.

    Mantıksal uygulamaya ekle ve Yürüt düğmesinin seçili olduğu Çalıştır ve Hata Ayıkla listesini gösteren ekran görüntüsü.

    Terminal penceresi açılır ve başlatılan hata ayıklama işlemini gösterir. Ardından Hata Ayıklama Konsolu penceresi görüntülenir ve hata ayıklama durumlarını gösterir. Visual Studio Code'un en altında görev çubuğu turuncuya döner ve .NET hata ayıklayıcısının yüklendiğini gösterir.

  4. Kesme noktalarını ayarlamak için işlev tanımınızda (<.cs) veya iş akışı tanımınızda (>), kesme noktasını istediğiniz satır numarasını bulun ve sol taraftaki sütunu seçin, örneğin:

    Visual Studio Code'un ve koddaki bir satır için kesme noktasının ayarlandığı açık işlev kodu dosyasını gösteren ekran görüntüsü.

  5. İstek tetikleyicisini iş akışınızda el ile çalıştırmak için iş akışının Genel Bakış sayfasını açın.

    1. Mantıksal uygulama projenizde workflow.json dosyasının kısayol menüsünü açın ve Genel Bakış'ı seçin.

      İş akışının Genel Bakış sayfasında, iş akışını el ile başlatmak istediğinizde tetikleyiciyi çalıştır düğmesi kullanılabilir. İş Akışı Özellikleri'nin altında Geri Arama URL'si değeri, iş akışınızdaki İstek tetikleyicisi tarafından oluşturulan çağrılabilir uç noktanın URL'sidir. Diğer mantıksal uygulama iş akışları da dahil olmak üzere diğer uygulamalardan iş akışınızı tetikleme amacıyla bu URL'ye istek gönderebilirsiniz.

      Visual Studio Code'un ve iş akışının Genel Bakış sayfasının açıldığını gösteren ekran görüntüsü.

  6. Genel Bakış sayfası araç çubuğunda Tetikleyiciyi çalıştır'ı seçin.

    İş akışınız çalışmaya başladıktan sonra hata ayıklayıcı ilk kesme noktanızı etkinleştirir.

  7. Çalıştır menüsünde veya hata ayıklayıcı araç çubuğunda bir hata ayıklama eylemi seçin.

    İş akışı çalıştırması tamamlandıktan sonra, Genel Bakış sayfası tamamlanmış çalıştırmayı ve bu çalıştırmayla ilgili temel ayrıntıları gösterir.

  8. İş akışı çalıştırması hakkında daha fazla bilgi gözden geçirmek için tamamlanan çalıştırmayı seçin. Alternatif olarak, Süre sütununun yanındaki listeden Çalıştırmayı göster'i seçin.

    Visual Studio Code'u ve tamamlanan iş akışı çalıştırmalarını gösteren ekran görüntüsü.

  9. Kural Altyapısı projesiyle mantıksal uygulamalarınızı Azure Logic Apps'e dağıtmak için Dağıtıma hazırlanma adımlarını izleyin.