Suche

über alle News und Events

 

Alle News

 

Wir haben während unseres...

Weiterlesen

Azure Functions benötigen oft einen...

Weiterlesen

In der heutigen Zeit nehmen Erreichbarkeit,...

Weiterlesen

Viele unserer Kunden überlegen derzeit, was sie in...

Weiterlesen

Lösungsansatz – was benötigt man dafür:

  • Einen...
Weiterlesen

Es gibt im Preview die Möglichkeit Azure Blob...

Weiterlesen

Die wichtigste Konferenz zu Integration auf der...

Weiterlesen

In diesem Blogeintrag werden wir drei sichere und...

Weiterlesen

Im vergangenen Jahr war bei uns in Hamburg viel in...

Weiterlesen

Heutzutage werden Token für die Authentifizierung...

Weiterlesen

How-to: Wie man eine Visual Studio Code-Extension entwickeln kann, die im Azure Portal erstellte Logic App (Standard) Workflows runterlädt und in ein Workflow-Projekt integriert

Ausgangslage: Es wurden diverse Logic App Workflows im Azure Portal Designer zusammengeklickt. Das Ganze ist in der Development Umgebung passiert. Jetzt sollen diese Workflows aber auf Staging und Production deployed werden...

Man kann nun den Code der einzelnen Workflows als workflow.json Dateien herunterladen und in ein Logic App Workflow Projekt integrieren. Das ist aber gerade bei vielen Workflows sehr unhandlich. Außerdem müssen zusätzlich die Parameter und Connections in die anderen Umgebungen übernommen werden. Diese werden ebenfalls als parameters.json und connections.json heruntergeladen.

Lösung

Wir bauen uns eine Visual Studio Code-Extension um diesen Prozess zu vereinfachen. Dafür nutzen wir den Generator namens  „yo“. Dazu muss man yo und den VS Code-Generator mit npm installieren:

npm i -g yo generator-code

Nun kann man mit yo code den Generator starten und sich durch den Assistenten navigieren, wobei wir New Extension (TypeScript) wählen:

Wie man genau eine Extension aufbaut, findet sich u.a. hier in der offiziellen Dokumentation.
Anschließend installieren wir folgende Azure-Packages:

npm i @azure/identity-vscode @azure/arm-subscriptions @azure/identity @azure/ms-rest-nodeauth

Die Lösung sieht dann so aus, dass wir per API (SubscriptionClient) auf das File-System der Logic App zugreifen und uns dort alle notwendigen Dateien rekursiv in das lokale Projekt downloaden.

 

public static importLogicApp = async (tenantId: string, logicAppUri: string, fileSystem: FileSystem,
    rootWorkspacePath: string): Promise<void> => {
 const subscriptionClient = new SubscriptionClient(new Token(tenantId));
    const baseUrl = `${logicAppUri}/hostruntime/admin/vfs/site/wwwroot`;

    await this.importImpl(subscriptionClient, baseUrl, fileSystem, rootWorkspacePath, "");
  };

  private static importImpl = async (client: SubscriptionClient, baseUrl: string, fileSystem: FileSystem,
    rootWorkspacePath: string, remoteFolder: string) => {
    const rootFolder = await client.sendRequest({
      pathTemplate: `${baseUrl}${remoteFolder.replace("//", "/")}`,
      method: "GET",
      queryParameters: { "api-version": "2021-03-01" }
    });
    const parsedBody = rootFolder.parsedBody;
    if (!parsedBody) {
      return;
    }
    await Promise.all(parsedBody.map(async (file: any) => {
      if (file.mime === "inode/directory") {
        await LogicAppApi.importImpl(client, baseUrl, fileSystem, rootWorkspacePath, `/${remoteFolder}/${file.name}`);
      } else {
        try {
          const rf = remoteFolder.replace("//", "/");
          const rfile = `/${rf}/${file.name}`.replace("//", "/");
          const fileContent = await client.sendRequest({
            pathTemplate: `${baseUrl}${rfile}`,
            method: "GET",
            queryParameters: { "api-version": "2021-03-01" }
          });

          const localDir = posix.join(rootWorkspacePath, rf);
          await fileSystem.createDirectory(Uri.file(localDir));
          const localFile = posix.join(rootWorkspacePath, rfile);
          await fileSystem.writeFile(Uri.file(localFile), Buffer.from(fileContent.bodyAsText!));
        }

        catch (e) {
          console.log(e);
        }

      }
    }));
  };


Verwendung

Um die entwickelte Extension zu nutzen, erstellen wir zunächst ein neues Logic App Workflow-Projekt in Visual Studio Code. Dazu benötigt man die „Azure Logic Apps (Standard)“ Extension aus dem Visual Studio Marketplace.

Nun ruft man mit STRG+SHIFT+P die Command Palette auf und erstellt ein neues Logic App Projekt:

Anschließend faltet sich folgende Projektstruktur auf, wobei „Stateful1“ der erste automatisch angelegte Workflow ist. Diesen können wir löschen.

Ab hier kann unsere neue Extension genutzt werden. Dazu rufen wir wieder die Command-Palette auf (STRG+SHIFT+P) und suchen nach unserem neuen Befehl:

Im nächsten Schritt wählen wir den Tenant, die Subscription und die Logic App aus, aus dem die Workflows importiert werden sollen. Die Authentifizierung erfolgt dabei durch die Azure Account Extension, die durch die Logic Apps Extension ebenfalls installiert wird.

Anschließend werden die Workflows inklusive der Parameter und den Connections importiert:

Fertig ist die Extension!

Wenn man dann nicht nur einen, sondern viele Workflows hat, ist das eine sehr gute Zeitersparnis.

Dieser quiteq-Tipp kommt von Marco Wiedemeyer, QUIBIQ Hamburg.

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz