Projekt EST – Teil 03 – Logic App

Keine Kommentare zu Projekt EST – Teil 03 – Logic App

Wie in Teil 1 und Teil 2 beschrieben sieht es um meine Schedule Tweets Lösung garnicht so schlecht aus. Doch ein wichtiger Bestandteil fehlt noch: das versenden der Tweets…

To Flow or not to Flow…

Zunächst hatte ich überlegt das Versenden der Tweets über Microsoft Flow zu realisieren. Doch dann ist musste ich einige Dinge feststellen:

  • Flow ist nicht unlimitiert und hat ein eigenes Lizenzmodell … war mir persönlich neu … ist ja aber auch nicht mein Business
  • mit dem in O365 enthaltenen Flow erhält man maximal 2000 Ausführungen pro Monat
  • ich will meine Liste mehrmals pro Stunde prüfen … mal ausgehend von einem Check alle 15 Minuten = 4 x 24 x 30 = 2880 Runs
  • dazu die Einschränkung, dass im Free Tier keine Premium Connectoren verwendet werden können
  • das ist vermutlich nicht der letzte Flow … daher hätt ich gern noch etwas Spielraum

Also musste eine andere Lösung her…und da Flow im Hintergrund auch nur auf Logic Apps basiert…dann nehmen wir doch die…

Na logisch … Logic App

Dank des Consumption Modells kann ich in der Logic App machen was ich möchte…es wird regulär gegen meine Azure Subscription verrechnet…und gibt keine Limitierungen mehr.

Also los geht’s. Zunächst einmal eine Logic App anlegen und dann den Logic App Designer starten.

Der Grundaufbau war recht schnell klar….ich frage zyklisch die Listen-Elemente ab hole mit die Infos und arbeite dann die Elemente entsprechend ab:

Nun galt es einige Bedingungen abzufragen und Verzweigungen aufzubauen:

  • verarbeitet werden zunächst nur die Listen-Elemente die noch nicht versendet wurden –> es erfolgt also eine Prüfung auf den Bool-Wert von „Sent“
  • dann werden nur die Elemente weiter verarbeitet, der Sendedatum in der Vergangenheit liegt oder jetzt ist
  • dann muss für jedes aktuelle Element der entsprechende Grafikanhang ausgelesen werden
  • der Tweet muss gesendet werden
  • schlussendlich muss in der SharePoint Liste der „Sent“ Wert auf „true“ gesetzt werden

In Summe sieht das dann so aus. 

Und schon klappts mit den geplanten Tweets… Zur Sicherheit hier nochmal das Code meiner Logic App

{
    "$connections": {
        "value": {
            "sharepointonline": {
                HAVEYOUROWNCONNECTIONHERE            },
            "twitter": {
                HAVEYOUROWNCONNECTIONHERE            }
        }
    },
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Apply_to_each": {
                "actions": {
                    "Condition": {
                        "actions": {
                            "Condition_2": {
                                "actions": {
                                    "Apply_to_each_2": {
                                        "actions": {
                                            "Get_attachment_content": {
                                                "inputs": {
                                                    "host": {
                                                        "connection": {
                                                            "name": "@parameters('$connections')['sharepointonline']['connectionId']"
                                                        }
                                                    },
                                                    "method": "get",
                                                    "path": "/datasets/@{encodeURIComponent(encodeURIComponent('YOUR URL'))}/tables/@{encodeURIComponent(encodeURIComponent('YOUR UID'))}/items/@{encodeURIComponent(encodeURIComponent(items('Apply_to_each')?['ID']))}/attachments/@{encodeURIComponent(items('Apply_to_each_2')?['Id'])}/$value"
                                                },
                                                "metadata": {
                                                    "flowSystemMetadata": {
                                                        "swaggerOperationId": "GetAttachmentContent"
                                                    }
                                                },
                                                "runAfter": {},
                                                "type": "ApiConnection"
                                            },
                                            "Post_a_tweet": {
                                                "inputs": {
                                                    "body": "@body('Get_attachment_content')",
                                                    "host": {
                                                        "connection": {
                                                            "name": "@parameters('$connections')['twitter']['connectionId']"
                                                        }
                                                    },
                                                    "method": "post",
                                                    "path": "/posttweet",
                                                    "queries": {
                                                        "tweetText": "@{items('Apply_to_each')?['TweetText']}  @{items('Apply_to_each')?['Hashtags']}"
                                                    }
                                                },
                                                "metadata": {
                                                    "flowSystemMetadata": {
                                                        "swaggerOperationId": "Tweet"
                                                    }
                                                },
                                                "runAfter": {
                                                    "Get_attachment_content": [
                                                        "Succeeded"
                                                    ]
                                                },
                                                "type": "ApiConnection"
                                            },
                                            "Update_item": {
                                                "inputs": {
                                                    "body": {
                                                        "Hashtags": "@items('Apply_to_each')?['Hashtags']",
                                                        "Sent": true,
                                                        "Title": "@items('Apply_to_each')?['Title']",
                                                        "TweetText": "@items('Apply_to_each')?['TweetText']",
                                                        "When": "@items('Apply_to_each')?['When']"
                                                    },
                                                    "host": {
                                                        "connection": {
                                                            "name": "@parameters('$connections')['sharepointonline']['connectionId']"
                                                        }
                                                    },
                                                    "method": "patch",
                                                    "path": "/datasets/@{encodeURIComponent(encodeURIComponent('YOUR URL'))}/tables/@{encodeURIComponent(encodeURIComponent('YOUR UID'))}/items/@{encodeURIComponent(items('Apply_to_each')?['ID'])}"
                                                },
                                                "metadata": {
                                                    "flowSystemMetadata": {
                                                        "swaggerOperationId": "PatchItem"
                                                    }
                                                },
                                                "runAfter": {
                                                    "Post_a_tweet": [
                                                        "Succeeded"
                                                    ]
                                                },
                                                "type": "ApiConnection"
                                            }
                                        },
                                        "foreach": "@body('Get_attachments')",
                                        "runAfter": {
                                            "Get_attachments": [
                                                "Succeeded"
                                            ]
                                        },
                                        "type": "Foreach"
                                    },
                                    "Get_attachments": {
                                        "inputs": {
                                            "host": {
                                                "connection": {
                                                    "name": "@parameters('$connections')['sharepointonline']['connectionId']"
                                                }
                                            },
                                            "method": "get",
                                            "path": "/datasets/@{encodeURIComponent(encodeURIComponent('YOUR URL'))}/tables/@{encodeURIComponent(encodeURIComponent('YOUR UID'))}/items/@{encodeURIComponent(encodeURIComponent(items('Apply_to_each')?['ID']))}/attachments"
                                        },
                                        "metadata": {
                                            "flowSystemMetadata": {
                                                "swaggerOperationId": "GetItemAttachments"
                                            }
                                        },
                                        "runAfter": {},
                                        "type": "ApiConnection"
                                    }
                                },
                                "expression": "@lessOrEquals(items('Apply_to_each')?['When'], utcNow())",
                                "runAfter": {},
                                "type": "If"
                            }
                        },
                        "expression": "@equals(items('Apply_to_each')?['Sent'], bool(false))",
                        "runAfter": {},
                        "type": "If"
                    }
                },
                "foreach": "@body('Get_items')?['value']",
                "runAfter": {
                    "Get_items": [
                        "Succeeded"
                    ]
                },
                "type": "Foreach"
            },
            "Get_items": {
                "inputs": {
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['sharepointonline']['connectionId']"
                        }
                    },
                    "method": "get",
                    "path": "/datasets/@{encodeURIComponent(encodeURIComponent('YOUR URL'))}/tables/@{encodeURIComponent(encodeURIComponent('YOUR UID'))}/items"
                },
                "metadata": {
                    "flowSystemMetadata": {
                        "swaggerOperationId": "GetItems"
                    }
                },
                "runAfter": {},
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "Recurrence": {
                "recurrence": {
                    "frequency": "Minute",
                    "interval": 15,
                    "timeZone": "W. Europe Standard Time"
                },
                "type": "Recurrence"
            }
        }
    }
}

Dieser Post ist auch verfügbar auf: Englisch

Related Posts

Leave a comment

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Back to Top