Delen via


Aangepaste ingebouwde connectors maken voor standaardlogica-apps in Azure Logic Apps met enkele tenant

Van toepassing op: Azure Logic Apps (Standard)

Als u connectors nodig hebt die niet beschikbaar zijn in standaardwerkstromen voor logische apps, kunt u uw eigen ingebouwde connectors maken met hetzelfde uitbreidbaarheidsmodel dat wordt gebruikt door de ingebouwde connectors op basis van de serviceprovider die beschikbaar zijn voor Standard-werkstromen in Azure Logic Apps met één tenant. Dit uitbreidbaarheidsmodel is gebaseerd op het Azure Functions-uitbreidbaarheidsmodel.

In dit artikel wordt beschreven hoe u een aangepaste, aangepaste, ingebouwde Azure Cosmos DB-connector maakt, met één azure Functions-trigger en geen acties. De trigger wordt geactiveerd wanneer een nieuw document wordt toegevoegd aan de leaseverzameling of container in Azure Cosmos DB en vervolgens een werkstroom uitvoert die de invoerpayload gebruikt als het Azure Cosmos DB-document.

Operation Bewerkingsdetails Beschrijving
Activator Wanneer een document wordt ontvangen Deze triggerbewerking wordt uitgevoerd wanneer een invoegbewerking plaatsvindt in de opgegeven Azure Cosmos DB-database en -verzameling.
Actie Geen Met deze connector worden geen actiebewerkingen gedefinieerd.

Deze voorbeeldconnector maakt gebruik van dezelfde functionaliteit als de Azure Cosmos DB-trigger voor Azure Functions, die is gebaseerd op Azure Functions-triggers en -bindingen. Bekijk voorbeeld van aangepaste ingebouwde Azure Cosmos DB-connector - Azure Logic Apps Connector Extensions voor het volledige voorbeeld.

Raadpleeg de volgende documentatie voor meer informatie:

Vereisten

Stappen op hoog niveau

In het volgende overzicht worden de stappen op hoog niveau beschreven voor het bouwen van de voorbeeldconnector:

  1. Maak een klassebibliotheekproject.

  2. Voeg in uw project het NuGet-pakket Microsoft.Azure.Workflows.WebJobs.Extension toe als nuGet-verwijzing.

  3. Geef de bewerkingen voor uw ingebouwde connector op met behulp van het NuGet-pakket om de methoden voor de interfaces met de naam IServiceOperationsProvider en IServiceOperationsTriggerProvider te implementeren.

  4. Registreer uw aangepaste ingebouwde connector met de Azure Functions-runtime-extensie.

  5. Installeer de connector voor gebruik.

Uw klassebibliotheekproject maken

  1. Maak in Visual Studio Code een .NET Core 3.1-klassebibliotheekproject.

  2. Voeg in uw project het NuGet-pakket met de naam Microsoft.Azure.Workflows.WebJobs.Extension toe als nuGet-verwijzing.

De interface van de serviceprovider implementeren

Als u de bewerkingen voor de ingebouwde voorbeeldconnector wilt leveren, implementeert u in het NuGet-pakket Microsoft.Azure.Workflows.WebJobs.Extension de methoden voor de volgende interfaces. In het volgende diagram ziet u de interfaces met de methode-implementaties die de Ontwerpfunctie en runtime van Azure Logic Apps verwachten voor een aangepaste ingebouwde connector met een trigger op basis van Azure Functions:

Conceptueel klassediagram met methode-implementatie voor een aangepaste ingebouwde Azure Cosmos DB-voorbeeldconnector.

IServiceOperationsProvider

Deze interface bevat de volgende methoden die het bewerkingsmanifest bieden en de specifieke taken of de werkelijke bedrijfslogica van uw serviceprovider uitvoeren in uw aangepaste ingebouwde connector. Raadpleeg IServiceOperationsProvider voor meer informatie.

  • GetService()

    Voor de ontwerpfunctie in Azure Logic Apps is de GetService() -methode vereist om de metagegevens op hoog niveau voor uw aangepaste service op te halen, waaronder de beschrijving van de service, verbindingsinvoerparameters die vereist zijn voor de ontwerper, mogelijkheden, merkkleur, pictogram-URL, enzovoort.

  • GetOperations()

    Voor de ontwerpfunctie in Azure Logic Apps is de Methode GetOperations() vereist om de bewerkingen op te halen die zijn geïmplementeerd door uw aangepaste service. De lijst met bewerkingen is gebaseerd op het Swagger-schema. De ontwerpfunctie gebruikt ook de metagegevens van de bewerking om inzicht te hebben in de invoerparameters voor specifieke bewerkingen en de uitvoer te genereren als eigenschapstokens, op basis van het schema van de uitvoer voor een bewerking.

  • GetBindingConnectionInformation()

    Als uw trigger een op Azure Functions gebaseerd triggertype is, vereist de runtime in Azure Logic Apps de methode GetBindingConnectionInformation() om de vereiste verbindingsparameters op te geven aan de Azure Functions-triggerbinding.

  • InvokeOperation()

    Als uw connector acties heeft, vereist de runtime in Azure Logic Apps de methode InvokeOperation() om elke actie aan te roepen in uw connector die wordt uitgevoerd tijdens de uitvoering van de werkstroom. Als uw connector geen acties heeft, hoeft u de methode InvokeOperation() niet te implementeren.

    In dit voorbeeld heeft de aangepaste ingebouwde Azure Cosmos DB-connector geen acties. De methode is echter opgenomen in dit voorbeeld voor volledigheid.

Raadpleeg deze methoden verderop in dit artikel voor meer informatie over deze methoden en hun implementatie.

IServiceOperationsTriggerProvider

U kunt een Azure Functions-trigger of -actie toevoegen of beschikbaar maken als een serviceprovidertrigger in uw aangepaste ingebouwde connector. Als u het triggertype op basis van Azure Functions en dezelfde Azure Functions-binding als de trigger voor de beheerde Azure-connector wilt gebruiken, implementeert u de volgende methoden om de verbindingsgegevens en triggerbindingen op te geven zoals vereist door Azure Functions. Raadpleeg IServiceOperationsTriggerProvider voor meer informatie.

  • De methode GetFunctionTriggerType() is vereist om de tekenreeks te retourneren die hetzelfde is als de typeparameter in de Azure Functions-triggerbinding.

  • De GetFunctionTriggerDefinition() heeft een standaardimplementatie, dus u hoeft deze methode niet expliciet te implementeren. Als u echter het standaardgedrag van de trigger wilt bijwerken, zoals extra parameters opgeven die de ontwerper niet beschikbaar maakt, kunt u deze methode implementeren en het standaardgedrag overschrijven.

Methoden om te implementeren

In de volgende secties worden de methoden beschreven die door de voorbeeldconnector worden geïmplementeerd. Bekijk voorbeeld CosmosDbServiceOperationProvider.cs voor het volledige voorbeeld.

Belangrijk

Wanneer u gevoelige informatie hebt, zoals verbindingsreeks s die gebruikersnamen en wachtwoorden bevatten, moet u ervoor zorgen dat u de veiligste verificatiestroom gebruikt die beschikbaar is. Microsoft raadt u bijvoorbeeld aan om toegang tot Azure-resources te verifiëren met een beheerde identiteit wanneer ondersteuning beschikbaar is en een rol toe te wijzen die de minst vereiste bevoegdheid heeft.

Als deze mogelijkheid niet beschikbaar is, moet u verbindingsreeks beveiligen via andere metingen, zoals Azure Key Vault, die u kunt gebruiken met app-instellingen. U kunt vervolgens rechtstreeks verwijzen naar beveiligde tekenreeksen, zoals verbindingsreeks s en sleutels. Net als bij ARM-sjablonen, waar u omgevingsvariabelen tijdens de implementatie kunt definiëren, kunt u app-instellingen definiëren binnen de werkstroomdefinitie van uw logische app. Vervolgens kunt u dynamisch gegenereerde infrastructuurwaarden vastleggen, zoals verbindingseindpunten, opslagreeksen en meer. Zie Toepassingstypen voor het Microsoft Identity Platform voor meer informatie.

GetService()

Voor de ontwerpfunctie is de volgende methode vereist om de beschrijving op hoog niveau voor uw service op te halen:

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

GetOperations()

De ontwerpfunctie vereist de volgende methode om de bewerkingen op te halen die door uw service worden geïmplementeerd. Deze lijst met bewerkingen is gebaseerd op het Swagger-schema.

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

GetBindingConnectionInformation()

Als u het triggertype op basis van Azure Functions wilt gebruiken, biedt de volgende methode de vereiste informatie over verbindingsparameters voor de Azure Functions-triggerbinding.

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

InvokeOperation()

Het voorbeeld van een aangepaste ingebouwde Azure Cosmos DB-connector heeft geen acties, maar de volgende methode is opgenomen voor volledigheid:

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

GetFunctionTriggerType()

Als u een op Azure Functions gebaseerde trigger wilt gebruiken als een trigger in uw connector, moet u de tekenreeks retourneren die hetzelfde is als de typeparameter in de Azure Functions-triggerbinding.

In het volgende voorbeeld wordt de tekenreeks geretourneerd voor de standaard ingebouwde Azure Cosmos DB-trigger: "type": "cosmosDBTrigger"

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

GetFunctionTriggerDefinition()

Deze methode heeft een standaard implementatie, dus u hoeft deze methode niet expliciet te implementeren. Als u echter het standaardgedrag van de trigger wilt bijwerken, zoals extra parameters opgeven die de ontwerper niet beschikbaar maakt, kunt u deze methode implementeren en het standaardgedrag overschrijven.

De connector registreren

Als u uw aangepaste ingebouwde connectorextensie wilt laden tijdens het startproces van de Azure Functions-runtime, moet u de Registratie van de Azure Functions-extensie toevoegen als opstarttaak en uw connector registreren als serviceprovider in de lijst met serviceproviders. Voeg eventueel het conversieprogramma toe op basis van het type gegevens dat uw ingebouwde trigger nodig heeft als invoer. In dit voorbeeld wordt het gegevenstype Document voor Azure Cosmos DB-documenten geconverteerd naar een JObject-matrix .

In de volgende secties ziet u hoe u uw aangepaste ingebouwde connector registreert als een Azure Functions-extensie.

De opstarttaak maken

  1. Maak een opstartklasse met behulp van het assemblykenmerk met de naam [assembly:WebJobsStartup]..

  2. Implementeer de interface IWebJobsStartup . Registreer in de methode Configure() de extensie en injecteer de serviceprovider.

    In het volgende codefragment ziet u bijvoorbeeld de implementatie van de opstartklasse voor de aangepaste ingebouwde Azure Cosmos DB-voorbeeldconnector:

    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>();
          }
       }
    }
    

    Raadpleeg Register-services : afhankelijkheidsinjectie gebruiken in .NET Azure Functions voor meer informatie.

De serviceprovider registreren

Registreer nu de implementatie van de serviceprovider als een Azure Functions-extensie met de Azure Logic Apps-engine. In dit voorbeeld wordt de ingebouwde Azure Cosmos DB-trigger voor Azure Functions gebruikt als een nieuwe trigger. In dit voorbeeld wordt ook de nieuwe Azure Cosmos DB-serviceprovider geregistreerd voor een bestaande lijst met serviceproviders, die al deel uitmaakt van de Azure Logic Apps-extensie. Raadpleeg Azure Functions-bindingsextensies registreren voor meer informatie.

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);
      }
   }
}

Een conversieprogramma toevoegen

Azure Logic Apps biedt een algemene manier om een ingebouwde Azure Functions-trigger te verwerken met behulp van de JObject-matrix . Als u echter de alleen-lezenlijst met Azure Cosmos DB-documenten wilt converteren naar een JObject-matrix , kunt u een conversieprogramma toevoegen. Wanneer het conversieprogramma gereed is, registreert u het conversieprogramma als onderdeel van ExtensionConfigContext , zoals eerder in dit voorbeeld wordt weergegeven:

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

Klassebibliotheekdiagram voor geïmplementeerde klassen

Wanneer u klaar bent, bekijkt u het volgende klassediagram met de implementatie voor alle klassen in de Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll uitbreidingsbundel:

  • CosmosDbServiceOperationsProvider
  • CosmosDbServiceProvider
  • CosmosDbServiceProviderStartup

Conceptueel codekaartdiagram met volledige klasse-implementatie.

De connector installeren

Als u de NuGet-verwijzing uit de vorige sectie wilt toevoegen, werkt u in de extensiebundel met de naam Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll het extensions.json-bestand bij. Ga voor meer informatie naar de opslagplaats Azure/logicapps-connector-extensions en bekijk het PowerShell-script met de naam add-extension.ps1.

  1. Werk de extensiebundel bij om de aangepaste ingebouwde connector op te nemen.

  2. In Visual Studio Code moet de Azure Logic Apps-extensie (Standard) voor de Visual Studio Code-extensie zijn geïnstalleerd, een logic app-project maken en het extensiepakket installeren met behulp van de volgende PowerShell-opdracht:

    Powershell

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

    U kunt ook vanuit de map van uw logische app-project met behulp van een PowerShell-prompt het PowerShell-script met de naam add-extension.ps1 uitvoeren:

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

    Bash

    Als u in plaats daarvan Bash wilt gebruiken, voert u vanuit de map van uw logische app-project het PowerShell-script uit met de volgende opdracht:

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

    Als de extensie voor uw aangepaste ingebouwde connector is geïnstalleerd, krijgt u uitvoer die lijkt op het volgende voorbeeld:

    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. Als een func.exe proces wordt uitgevoerd, moet u dit proces sluiten of afsluiten voordat u verdergaat met de volgende stap.

Uw connector testen

  1. Open in Visual Studio Code uw standaard logische app en een lege werkstroom in de ontwerpfunctie.

  2. Selecteer op het ontwerpoppervlak Een bewerking kiezen om de verbindingslijnbewerkingenkiezer te openen.

  3. Selecteer Ingebouwd in het zoekvak voor bewerkingen. Voer cosmos db in het zoekvak in.

    In de bewerkingskiezer ziet u uw aangepaste ingebouwde connector en trigger, bijvoorbeeld:

    Schermopname van Visual Studio Code en de ontwerpfunctie voor een standaardwerkstroom voor logische apps met de nieuwe aangepaste ingebouwde Azure Cosmos DB-connector.

  4. Selecteer in de lijst Triggers uw aangepaste ingebouwde trigger om uw werkstroom te starten.

  5. Geef in het verbindingsvenster de volgende eigenschapswaarden op om een verbinding te maken, bijvoorbeeld:

    Eigenschappen Vereist Weergegeven als Beschrijving
    Verbindingsnaam Ja <Azure-Cosmos-DB-connection-name> De naam voor de Azure Cosmos DB-verbinding die moet worden gemaakt
    Verbindingsreeks Ja <Azure Cosmos DB-connection-string> De verbindingsreeks voor de Azure Cosmos DB-databaseverzameling of leaseverzameling waar u elk nieuw ontvangen document wilt toevoegen.

    Schermopname van het verbindingsvenster wanneer u de connector voor de eerste keer gebruikt.

  6. Selecteer Maken als u klaar bent.

  7. Geef in het deelvenster Met triggereigenschappen de volgende eigenschapswaarden voor uw trigger op, bijvoorbeeld:

    Eigenschappen Vereist Weergegeven als Beschrijving
    Databasenaam Ja <Azure-Cosmos-DB-databasenaam> De naam voor de Azure Cosmos DB-database die moet worden gebruikt
    Naam van verzameling Ja <Azure-Cosmos-DB-collection-name> De naam voor de Azure Cosmos DB-verzameling waar u elk nieuw ontvangen document wilt toevoegen.

    Schermopname van het deelvenster Triggereigenschappen.

    Voor dit voorbeeld heeft in de codeweergave de werkstroomdefinitie, die zich in het bestand workflow.json bevindt, een triggers JSON-object dat lijkt op het volgende voorbeeld:

    {
       "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"
    }
    

    De verbindingsdefinitie, die zich in het bestand connections.json bevindt, heeft een serviceProviderConnections JSON-object dat lijkt op het volgende voorbeeld:

    {
       "serviceProviderConnections": {
          "cosmosDb": {
             "parameterValues": {
                "connectionString": "@appsetting('cosmosDb_connectionString')"
             },
             "serviceProvider": {
                "id": "/serviceProviders/CosmosDb"
             },
             "displayName": "myCosmosDbConnection"
          }
       },
       "managedApiConnections": {}
    }
    
  8. Selecteer in Visual Studio Code in het menu Uitvoeren de foutopsporing starten. (Druk op F5)

  9. Als u uw werkstroom wilt activeren, opent u uw Azure Cosmos DB-account in Azure Portal. Selecteer Data Explorer in het accountmenu. Blader naar de database en verzameling die u hebt opgegeven in de trigger. Voeg een item toe aan de verzameling.

    Schermopname van de Azure-portal, het Azure Cosmos DB-account en de Data Explorer die zijn geopend voor de opgegeven database en verzameling.

Volgende stappen