إنشاء موصلات مضمنة مخصصة لتطبيقات المنطق القياسية في Azure Logic Apps أحادية المستأجر

ينطبق على: Azure Logic Apps (القياسي)

إذا كنت بحاجة إلى موصلات غير متوفرة في مهام سير عمل تطبيق المنطق القياسي، يُمكنك إنشاء الموصلات المضمنة الخاصة بك باستخدام نفس نموذج القابلية للتوسعة الذي تستخدمه الموصلات المضمنة المُستندة إلى موفر الخدمة والمتوفرة لسير العمل القياسي في Azure Logic Apps أحادي المستأجر. يَستند نموذج القابلية للتوسعة هذا إلى نموذج قابلية توسعة Azure Functions.

توضح هذه المقالة كيفية إنشاء مثال موصل Azure Cosmos DB مضمن مخصص، والذي يحتوي على مشغل واحد يستند إلى Azure Functions ولا يحتوي على أي إجراءات. يتم تشغيل المشغل عند إضافة مستند جديد إلى مجموعة التأجير أو الحاوية في Azure Cosmos DB ثم يقوم بتشغيل سير عمل يستخدم حمولة الإدخال كمستند Azure Cosmos DB.

‏‏التشغيل تفاصيل العملية الوصف
مشغّل عند تلقي مُستند يتم تشغيل عملية المشغل هذه عند حدوث عملية إدراج في قاعدة بيانات ومجموعة Azure Cosmos DB المحددة.
إجراء بلا لا يُحدد هذا الموصل أي عمليات إجراء.

يَستخدم هذا الموصل النموذجي نفس وظيفة مشغل قاعدة بيانات Azure Cosmos لـ Azure Functions، والذي يستند إلى مشغلات وروابط Azure Functions. للحصول على العينة الكاملة، راجع عينة موصل Azure Cosmos DB المضمن المخصص - ملحقات موصل Azure Logic Apps.

لمعرفة مزيد من المعلومات، راجع الوثائق التالية:

المتطلبات الأساسية

خطوات عالية المستوى

يَصف المخطط التفصيلي التالي الخطوات عالية المستوى لإنشاء موصل المثال:

  1. إنشاء مشروع مكتبة الفئات.

  2. في مَشروعك، أضف حزمة Microsoft.Azure.Workflows.WebJobs.Extension NuGet كمرجع NuGet.

  3. وفر العمليات للموصل المضمن باستخدام حزمة NuGet لتنفيذ أساليب الواجهات المسماة IServiceOperationsProviderوIServiceOperationsTriggerProvider.

  4. سَجل الموصل المضمن المخصص الخاص بك مع ملحق وقت تشغيل Azure Functions.

  5. ركب الموصل للاستخدام.

أنشئ مشروع مكتبة الفئات

  1. في Visual Studio Code، قم بإنشاء مَشروع مكتبة فئة .NET Core 3.1.

  2. في مشروعك، أضف حزمة NuGet المسماة Microsoft.Azure.Workflows.WebJobs.Extension كمرجع NuGet.

تَنفيذ واجهة موفر الخدمة

لتوفير عمليات عينة الموصل المضمن، في حزمة NuGet Microsoft.Azure.Workflows.WebJobs.Extension، قم بتنفيذ أساليب الواجهات التالية. يوضح الرسم التخطيطي التالي عمليات تنفيذ الأسلوب التي يتوقعها مصمم Azure Logic Apps ووقت التشغيل لموصل مُضمّن مخصص مع مشغّل يَستند إلى Azure Functions:

رسم تخطيطي للفئة المفاهيمية يوضح تنفيذ الأسلوب لعينة موصل Azure Cosmos DB المضمن المخصص.

IServiceOperationsProvider

تتضمن هذه الواجهة الطرق التالية التي توفر بيان العملية وتنفذ المهام المحددة لموفر الخدمة أو منطق العمل الفعلي في الموصل المُضمن المخصص. لمزيدٍ من المعلومات، راجع IServiceOperationsProvider.

  • GetService()

    يتطلب المصمم في Azure Logic Apps أسلوب GetService() لاسترداد بيانات التعريف عالية المستوى للخدمة المُخصصة، بما في ذلك وصف الخدمة ومعلمات إدخال الاتصال المطلوبة على المُصمم والقدرات ولون العلامة التجارية وعنوان URL الأيقونة وما إلى ذلك.

  • GetOperations()

    يتطلب المُصمم في Azure Logic Apps أسلوب GetOperations() لاسترداد العمليات التي تنفذها الخدمة المخصصة. تَستند قائمة العمليات إلى مخطط Swagger. يَستخدم المصمم أيضاً بيانات تعريف العملية لفهم معلمات الإدخال لعمليات محددة وإنشاء المخرجات كرموز مميزة للخاصية، استناداً إلى مُخطط إخراج العملية.

  • GetBindingConnectionInformation()

    إذا كان المشغّل الخاص بك هو نوع مشغّل يستند إلى Azure Functions، يَستخدم وقت التشغيل في Azure Logic Apps الأسلوب GetBindingConnectionInformation() لتوفير معلومات معلمات الاتصال المطلوبة لربط مُشغّل Azure Functions.

  • InvokeOperation()

    إذا كان الموصل يحتوي على إجراءات، يَستخدم وقت التشغيل الأسلوب InvokeOperation() لاستدعاء كل إجراء في الموصل الذي يتم تشغيله أثناء تنفيذ سير العمل. إذا لم يكن للموصل إجراءات، فلن تحتاج إلى تنفيذ أسلوب InvokeOperation().

    في هذا المثال، لا يحتوي موصل Azure Cosmos DB المخصص المضمن على إجراءات. ومع ذلك، يتم تضمين الأسلوب في هذا المِثال للاكتمال.

للمزيد من المَعلومات حول هذه الأساليب وتنفيذها، راجع قسم أساليب التنفيذ لاحقاً في هذه المقالة.

IServiceOperationsTriggerProvider

يُمكنك إضافة مشغل أو إجراء Azure Functions أو كشفه كمشغل موفر خدمة في الموصل المُضمن المخصص. لاستخدام نوع المشغّل المستند إلى Azure Functions وربط Azure Functions نفسها مثل مشغّل الموصل المُدار من Azure، قم بتنفيذ الأساليب التالية لتوفير معلومات الاتصال وروابط المشغّل كما هو مَطلوب من Azure Functions. للمزيد من المعلومات، راجع IServiceOperationsTriggerProvider.

  • الأسلوب GetFunctionTriggerType() مَطلوب لإرجاع السلسلة التي هي نفس معلمة النوع في ربط مشغّل Azure Functions.

  • يحتوي الأسلوب GetFunctionTriggerDefinition() على تنفيذ افتراضي، لذلك لا تحتاج إلى تنفيذ هذا الأسلوب بشكل صَريح. ومع ذلك، إذا كنت ترغب في تحديث السلوك الافتراضي للمشغّل، مثل توفير معلمات إضافية لا يعرضها المصمم، يمكنك تنفيذ هذا الأسلوب وتجاوز السلوك الافتراضي.

أساليب التَنفيذ

تصف الأقسام التالية الأساليب التي يُنفذها موصل المثال. للحصول على العينة الكاملة، راجع Sample CosmosDbServiceOperationProvider.cs.

GetService()

يتطلب المُصمم الأسلوب التالي للحصول على وصف عالي المستوى للخدمة الخاصة بك:

public ServiceOperationApi GetService()
{
   return this.CosmosDBApis.ServiceOperationServiceApi();
}

GetOperations()

يتطلب المصمم الأسلوب التالي للحصول على العمليات التي تنفذها الخدمة الخاصة بك. تَستند قائمة العمليات إلى مُخطط Swagger.

public IEnumerable<ServiceOperation> GetOperations(bool expandManifest)
{
   return expandManifest ? serviceOperationsList : GetApiOperations();
}

GetBindingConnectionInformation()

إذا كنت ترغب في استخدام نوع المشغّل المستند إلى Azure Functions، يوفر هذا الأسلوب معلومات معلمات الاتصال المَطلوبة لربط مُشغّل Azure Functions.

public string GetBindingConnectionInformation(string operationId, InsensitiveDictionary<JToken> connectionParameters)
{
   return ServiceOperationsProviderUtilities
      .GetRequiredParameterValue(
         serviceId: ServiceId,
         operationId: operationID,
         parameterName: "connectionString",
         parameters: connectionParameters)?
      .ToValue<string>();
}

InvokeOperation()

لا يحتوي مثال موصل Azure Cosmos DB المخصص على إجراءات، ولكن يتم تضمين الأسلوب التالي للاكتمال:

public Task<ServiceOperationResponse> InvokeOperation(string operationId, InsensitiveDictionary<JToken> connectionParameters, ServiceOperationRequest serviceOperationRequest)
{
   throw new NotImplementedException();
}

GetFunctionTriggerType()

لاستخدام مُشغّل يستند إلى Azure Functions كمشغّل في الموصل الخاص بك، يَجب عليك إرجاع السلسلة التي هي نفس معلمة النوع في ربط مشغّل Azure Functions.

يَرجع المثال التالي السلسلة لمشغّل Azure Cosmos DB المُضمّن غير التقليدي، "type": "cosmosDBTrigger":

public string GetFunctionTriggerType()
{
   return "CosmosDBTrigger";
}

GetFunctionTriggerDefinition()

يَحتوي هذا الأسلوب على تنفيذ افتراضي، لذلك لا تحتاج إلى تنفيذ هذا الأسلوب بشكل صريح. ومع ذلك، إذا كنت ترغب في تحديث السلوك الافتراضي للمشغّل، مثل توفير معلمات إضافية لا يعرضها المُصمم، يُمكنك تنفيذ هذا الأسلوب وتجاوز السلوك الافتراضي.

تسجيل المُوصل الخاص بك

لتحميل ملحق الموصل المضمن المُخصص أثناء عملية بدء وقت تشغيل Azure Functions، يجب إضافة تسجيل مُلحق Azure Functions كوظيفة بدء تشغيل وتسجيل الموصل كموفر خدمة في قائمة موفري الخدمة. استنادًا إلى نوع البيانات التي يحتاجها المشغل المضمن كمدخلات، أضف المحول اختياريا. يحول هذا المثال نوع بيانات المستند لمستندات Azure Cosmos DB إلى صفيف JObject .

توضح الأقسام التالية كيفية تسجيل الموصل المُضمن المُخصص كملحق Azure Functions.

إنشاء مُهمة بدء التشغيل

  1. إنشاء فئة بدء تشغيل باستخدام سمة التجميع المسمّاة [assembly:WebJobsStartup].

  2. قم بتطبيق واجهة IWebJobsStartup. في أسلوب Configure() سجل الملحق وأدخل مُوفر الخدمة.

    على سبيل المثال، تعرض القصاصة البرمجية التالية تنفيذ فئة بدء التشغيل لعينة موصل Azure Cosmos DB المضمن المخصص:

    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Hosting;
    using Microsoft.Extensions.DependencyInjection.Extensions;
    
    [assembly: Microsoft.Azure.WebJobs.Hosting.WebJobsStartup(typeof(ServiceProviders.CosmosDb.Extensions.CosmosDbTriggerStartup))]
    
    namespace ServiceProviders.CosmosDb.Extensions
    {
       public class CosmosDbServiceProviderStartup : IWebJobsStartup
       {
          // Initialize the workflow service.
          public void Configure(IWebJobsBuilder builder)
          {
                // Register the extension.
                builder.AddExtension<CosmosDbServiceProvider>)();
    
                // Use dependency injection (DI) for the trigger service operation provider.
                builder.Services.TryAddSingleton<CosmosDbTriggerServiceOperationsProvider>();
          }
       }
    }
    

    للمزيد من المعلومات، راجع Register services - استخدم إدخال التبعية في .NET Azure Functions.

سجل موفر الخدمة

الآن، سجل تنفيذ موفر الخدمة كملحق Azure Functions باستخدام محرك Azure Logic Apps. يستخدم هذا المثال مشغل Azure Cosmos DB المضمن لـ Azure Functions كمشغل جديد. يسجل هذا المثال أيضا موفر خدمة Azure Cosmos DB الجديد لقائمة موجودة من موفري الخدمات، والتي تعد بالفعل جزءا من ملحق Azure Logic Apps. راجع تسجيل ملحقات الربط لوظائف Azure للحصول على مزيد من المعلومات.

using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs.Description;
using Microsoft.Azure.WebJobs.Host.Config;
using Microsoft.Azure.Workflows.ServiceProviders.Abstractions;
using Microsoft.WindowsAzure.ResourceStack.Common.Extensions;
using Microsoft.WindowsAzure.ResourceStack.Common.Json;
using Microsoft.WindowsAzure.ResourceStack.Common.Storage.Cosmos;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

namespace ServiceProviders.CosmosDb.Extensions
{
   [Extension("CosmosDbServiceProvider", configurationSection: "CosmosDbServiceProvider")]
   public class CosmosDbServiceProvider : IExtensionConfigProvider
   {
      // Initialize a new instance for the CosmosDbServiceProvider class.
      public CosmosDbServiceProvider(ServiceOperationsProvider serviceOperationsProvider, CosmosDbTriggerServiceOperationsProvider operationsProvider)
      {
         serviceOperationsProvider.RegisterService(serviceName: CosmosDBServiceOperationsProvider.ServiceName, serviceOperationsProviderId: CosmosDBServiceOperationsProvider.ServiceId, serviceOperationsProviderInstance: operationsProvider);
      }

      // Convert the Azure Cosmos DB Document array to a generic JObject array.
      public static JObject[] ConvertDocumentToJObject(IReadOnlyList<Document> data)
      {
         List<JObject> jobjects = new List<JObject>();

         foreach(var doc in data)
         {
            jobjects.Add((JObject)doc.ToJToken());
         }

         return jobjects.ToArray();
      }

      // In the Initialize method, you can add any custom implementation.
      public void Initialize(ExtensionConfigContext context)
      {
         // Convert the Azure Cosmos DB Document list to a JObject array.
         context.AddConverter<IReadOnlyList<Document>, JObject[]>(ConvertDocumentToJObject);
      }
   }
}

أضف محول

لدى Azure Logic Apps طريقة عامة للتعامل مع أي مُشغل مُضمن في وظائف Azure باستخدام صفيف JObject. ومع ذلك، إذا كنت تريد تحويل قائمة القراءة فقط لمُستندات Azure Cosmos DB إلى صفيف JObject، يمكنك إضافة محول. عندما يكون المحول جاهزا، سجل المحول كجزء من ExtensionConfigContext كما هو موضح سابقا في هذا المثال:

// Convert the Azure Cosmos DB  document list to a JObject array.
context.AddConverter<IReadOnlyList<Document>, JObject[]>(ConvertDocumentToJObject);

رسم تخطيطي لمكتبة الفئات للفئات المُنفذة

عند الانتهاء، راجع الرسم التخطيطي للفئة التالية الذي يُظهر التنفيذ لجميع الفئات في حزمة ملحق Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll:

  • CosmosDbServiceOperationsProvider
  • CosmosDbServiceProvider
  • CosmosDbServiceProviderStartup

رسم تخطيطي لتعيين التعليمة البرمجية المفاهيمية يوضح التنفيذ الكامل للفئة.

ثبت الموصل الخاص بك

لإضافة مرجع NuGet من القسم السابق، في مجموعة المُلحقات المُسماة Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll، قم بتحديث ملف extensions.json. للمزيد من المعلومات، انتقل إلى مستودع Azure/logicapps-connector-extensions، وراجع برنامج PowerShell النصي المسمى add-extension.ps1.

  1. قم بتحديث مجموعة الملحقات لتضمين الموصل المُضمن المُخصص.

  2. في Visual Studio Code، والتي يجب أن تحتوي على Azure Logic Apps (Standard) لملحق Visual Studio Code مثبتا، قم بإنشاء مَشروع تطبيق منطقي، وتثبيت حِزمة الملحق باستخدام أمر PowerShell التالي:

    PowerShell

    dotnet add package "Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB" --version 1.0.0  --source $extensionPath
    

    بدلاً من ذلك، من دليل مشروع تطبيق المنطق الخاص بك باستخدام موجه PowerShell، قم بتشغيل البرنامج النصي PowerShell المسمى add-extension.ps1:

    .\add-extension.ps1 {Cosmos-DB-output-bin-NuGet-folder-path} CosmosDB
    

    Bash

    لاستخدام Bash بدلاً من ذلك، من دليل مشروع تطبيق المنطق الخاص بك، شغل البرنامج النصي PowerShell باستخدام الأمر التالي:

    powershell -file add-extension.ps1 {Cosmos-DB-output-bin-NuGet-folder-path} CosmosDB
    

    إذا تم تثبيت ملحق الموصل المضمن المخصص بنجاح، فسوف تحصل على مخرجات تبدو مشابهة للمثال التالي:

    C:\Users\{your-user-name}\Desktop\demoproj\cdbproj>powershell - file C:\myrepo\github\logicapps-connector-extensions\src\Common\tools\add-extension.ps1 C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\CosmosDB
    
    Nuget extension path is C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\
    Extension dll path is C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\netcoreapp3.1\Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll
    Extension bundle module path is C:\Users\{your-user-name}\.azure-functions-core-tools\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle.Workflows1.1.9
    EXTENSION PATH is C:\Users\{your-user-name}\.azure-functions-core-tools\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle.Workflows\1.1.9\bin\extensions.json and dll Path is C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\netcoreapp3.1\Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll
    SUCCESS: The process "func.exe" with PID 26692 has been terminated.
       Determining projects to restore...
       Writing C:\Users\{your-user-name}\AppData\Local\Temp\tmpD343.tmp`<br>
    info : Adding PackageReference for package 'Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB' into project 'C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj'.
    info : Restoring packages for C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj...
    info : Package 'Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB' is compatible with all the specified frameworks in project 'C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj'.
    info : PackageReference for package 'Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB' version '1.0.0' updated in file 'C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj'.
    info : Committing restore...
    info : Generating MSBuild file C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\obj\cdbproj.csproj.nuget.g.props.
    info : Generating MSBuild file C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\obj\cdbproj.csproj.nuget.g.targets.
    info : Writing assets file to disk. Path: C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\obj\project.assets.json.
    log : Restored C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\cdbproj.csproj (in 1.5 sec).
    Extension CosmosDB is successfully added.
    
    C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\>
    
  3. إذا كانت هناك أي عملية func.exe قيد التشغيل، فتأكد من إغلاق هذه العملية أو الخروج منها قبل المتابعة إلى الخطوة التالية.

اختبر الموصل الخاص بك

  1. في Visual Studio Code، افتح تطبيق المنطق القياسي وسير العمل الفارغ في المُصمم.

  2. على سطح المُصمم، حدد اختيار عملية لفتح منتقي عمليات الموصل.

  3. ضِمن مربع البحث العمليات، حدد مضمن. في مربع البحث، قم بإدخال cosmos db.

    يَعرض منتقي العمليات الموصل والمشغل المضمنين المُخصصين، على سبيل المثال:

    لقطة شاشة تعرض Visual Studio Code والمصمم لسير عمل تطبيق المنطق القياسي مع موصل Azure Cosmos DB المضمن الجديد المخصص.

  4. من قائمة المشغلات، حدد المشغل المضمن المُخصص لبدء سير العمل.

  5. في جزء الاتصال، قم بتوفير قيم الخاصية التالية لإنشاء اتصال، على سَبيل المثال:

    الخاصية مطلوب القيمة الوصف
    ⁩اسم الاتصال⁧ نعم <Azure-Cosmos-DB-connection-name> اسم اتصال Azure Cosmos DB المراد إنشاؤه
    سلسلة الاتصال نعم <سلسلة اتصال Azure Cosmos DB-DB> سلسلة الاتصال لمجموعة قاعدة بيانات Azure Cosmos DB أو مجموعة التأجير حيث تريد إضافة كل مُستند جديد تم تلقيه.

    لقطة شاشة توضح جزء الاتصال عند استخدام الموصل لأول مرة.

  6. عند الانتهاء، حدد "Create" .

  7. في جزء خصائص المُشغل، قم بتوفير قيم الخصائص التالية للمشغل الخاص بك، على سبيل المثال:

    الخاصية مطلوب القيمة الوصف
    اسم قاعدة البيانات نعم <اسم قاعدة بيانات Azure-Cosmos-DB> اسم قاعدة بيانات Azure Cosmos DB المراد استخدامها
    اسم المجموعة نعم <Azure-Cosmos-DB-collection-name> اسم مجموعة Azure Cosmos DB حيث تريد إضافة كل مستند جديد تم تلقيه.

    لقطة شاشة تعرض جزء خصائص المشغل.

    على سبيل المثال، في طريقة عرض التعليمات البرمجية، يحتوي تعريف سير العمل، الموجود في ملف workflow.json، على عنصر JSON يبدو مشابها triggers للعينة التالية:

    {
       "definition": {
          "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
          "actions": {},
          "contentVersion": "1.0.0.0",
          "outputs": {},
          "triggers": {
             "When_a_document_is_received": {
                "inputs":{
                   "parameters": {
                      "collectionName": "States",
                      "databaseName": "SampleCosmosDB"
                   },
                   "serviceProviderConfiguration": {
                      "connectionName": "cosmosDb",
                      "operationId": "whenADocumentIsReceived",
                      "serviceProviderId": "/serviceProviders/CosmosDb"
                   },
                   "splitOn": "@triggerOutputs()?['body']",
                   "type": "ServiceProvider"
                }
             }
          }
       },
       "kind": "Stateful"
    }
    

    يحتوي تعريف الاتصال الموجود في ملف connections.json على عنصر JSON يبدو مشابهًا serviceProviderConnections للعينة التالية:

    {
       "serviceProviderConnections": {
          "cosmosDb": {
             "parameterValues": {
                "connectionString": "@appsetting('cosmosDb_connectionString')"
             },
             "serviceProvider": {
                "id": "/serviceProviders/CosmosDb"
             },
             "displayName": "myCosmosDbConnection"
          }
       },
       "managedApiConnections": {}
    }
    
  8. في Visual Studio Code، في قائمة Run، حدد بدء تصحيح الأخطاء. (اضغط F5)

  9. لتشغيل سير العمل الخاص بك، في مَدخل Microsoft Azure، افتح حساب Azure Cosmos DB الخاص بك. في قائمة الحساب، قم بتحديد مستكشف البيانات. استعرض للوصول إلى قاعدة البيانات والمجموعة التي قمت بتحديدها في المشغل. أضف عنصر إلى المجموعة.

    لقطة شاشة تعرض مدخل Microsoft Azure وحساب Azure Cosmos DB ومستكشف البيانات مفتوحة على قاعدة البيانات والمجموعة المحددة.

الخطوات التالية