CONNECTED Conference 2023 - Aufzeichnungen jetzt hier verfügbar +++                     

Suche

über alle News und Events

 

Alle News

 

Messaging mit dem Service Bus ermöglicht die...

Weiterlesen

Sebastian Meyer, Microsoft & SAP...

Weiterlesen

Für Entwickler, Architekten, Projektleiter und...

Weiterlesen

In der Welt der Softwareentwicklung ist die...

Weiterlesen

QUIBIQ spendet für den guten Zweck – und für...

Weiterlesen

Eine bestimmte Antwort auf einen HTTP Request zu...

Weiterlesen

In einer Welt, die von stetigem Wandel geprägt...

Weiterlesen

In einem unserer Kundenprojekte, war das Ziel eine...

Weiterlesen

QUIBIQ Hamburg wird mit dem Hamburger...

Weiterlesen

Zwei Tage lang wurde vom 14.-15.11 wieder das...

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