From d4e60c4c61c2201d228cdcd7007ef59c88125085 Mon Sep 17 00:00:00 2001 From: Franck Cornu Date: Tue, 8 Nov 2016 20:08:38 -0500 Subject: [PATCH] react-real-time - Replaced Microsoft Flow by Azure Logic Apps (#58) * Replaced Microsoft Flow with Azure Logic Apps * Update README.md --- samples/react-real-time/Deploy-Solution.ps1 | 2 ++ samples/react-real-time/README.md | 20 ++++++++------- samples/react-real-time/assets/flow.png | Bin 61697 -> 84598 bytes .../assets/solution_overview.png | Bin 49466 -> 19707 bytes samples/react-real-time/azure-deploy.json | 23 +++++++++++++++++- .../react-real-time/client/config/config.json | 2 +- .../components/RealTimeNewsFeed.tsx | 2 +- 7 files changed, 37 insertions(+), 12 deletions(-) diff --git a/samples/react-real-time/Deploy-Solution.ps1 b/samples/react-real-time/Deploy-Solution.ps1 index a06c51682..6d69a92d7 100644 --- a/samples/react-real-time/Deploy-Solution.ps1 +++ b/samples/react-real-time/Deploy-Solution.ps1 @@ -40,6 +40,7 @@ Login-AzureRmAccount $GitPublishingUserName = "tempdeployuser" + [Guid]::NewGuid(); $GitPublishingUserPassword = "socketio123!" +$LogicAppName = "LogicApp" + [Guid]::NewGuid(); $AzureSBNamespace = "ServiceBus" + [Guid]::NewGuid(); $AzureWebAppName = "WebApp" + [Guid]::NewGuid() $AppServicePlanName = "ServicePlan" + [Guid]::NewGuid() @@ -66,6 +67,7 @@ Try { # More information here: https://azure.microsoft.com/en-us/documentation/articles/resource-group-authoring-templates/#resources $TemplateParameters = @{ + "LogicAppName" = $LogicAppName "ServiceBusNameSpace"=$AzureSBNamespace; "AppServicePlanName"= $AppServicePlanName; "SiteName"=$AzureWebAppName; diff --git a/samples/react-real-time/README.md b/samples/react-real-time/README.md index e9c95f06c..e3b863c94 100644 --- a/samples/react-real-time/README.md +++ b/samples/react-real-time/README.md @@ -1,8 +1,8 @@ -# Real Time News Feed using Microsoft Flow, Azure and socket.io # +# Real Time News Feed using Azure Logic Apps, Node.js and socket.io # ## Summary -This sample shows you how to implement real time web parts using the SPFx, Microsoft Flow and [socket.io](http://socket.io/). +This sample shows you how to implement real time web parts using the SPFx, Azure Logic Apps, Node.js and [socket.io](http://socket.io/).

@@ -17,11 +17,11 @@ Here is the solution overview:

1. The SPFx Web Part first connects to the Azure web application via socket.io and subscribes to events (the web application have to be in https and allow cross domain calls (CORS)). -2. Microsoft Flow is used to catch new item creation events in the SharPoint list. +2. An Azure logic app is used to catch new item creation events in the SharPoint list. 3. When an item is added, the flow sends its id to an Azure service bus queue using JSON format. -4. A Node JS Azure web application listens to the queue and check for new messages every 5 ms. +4. A Node.js Azure web application listens to the queue and check for new messages every 5 ms. 5. When a new message is available, the web application emits the data to all subscribers via socket.io. -6. The SPFx Web Part notifies user there are new items available. Items are effectively retrieved via REST according to received ids when the user clicks on the notification. +6. The SPFx Web Part notifies user there are new items available. Items are effectively retrieved using REST according to received ids when the user clicks on the notification. ## Applies to @@ -52,6 +52,7 @@ react-real-time | Franck Cornu (MVP, [@franckcornu](https://twitter.com/FranckCo Version|Date|Comments -------|----|-------- 1.0|October 25, 2016 | Initial commit +1.1|November 4, 2016 | Replaced Microsoft Flow by Azure Logic Apps ## Disclaimer **THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** @@ -95,6 +96,7 @@ Version|Date|Comments $GitPublishingUserName = "tempdeployuser" + [Guid]::NewGuid(); $GitPublishingUserPassword = "socketio123!" + $LogicAppName = "LogicApp" + [Guid]::NewGuid(); $AzureSBNamespace = "ServiceBus" + [Guid]::NewGuid(); $AzureWebAppName = "WebApp" + [Guid]::NewGuid() $AppServicePlanName = "ServicePlan" + [Guid]::NewGuid() @@ -115,10 +117,10 @@ Version|Date|Comments You can let the `gulp serve` cmd running. -6. Because there is no automated mechanism to provision new template in the Microsoft Flow application, you have to manually create the flow on the SharePoint list in your developer site. - Go the 'NewsList' and create a new flow from scratch and add the following steps: +6. Because you have to configure your SharePoint connection with your own credentials, you need to create the worflow manually in the Azure logic app. + Go to your Azure portal, select the "*SPFxSocketIODemo*" resource group, and open the Logic App designer. From a blank template, add the following action. -- **[Condition]** *"SharePoint - When a new item is created"* +- **[Condition]** *"SharePoint - When a new item is created"*. Select 3 seconds interval. - **[Action]** *"Service Bus - Send Message"*

@@ -162,4 +164,4 @@ This Web Part illustrates the following concepts on top of the SharePoint Framew - Using PnP JS library (1.0.5) to get items from a list. - Using Office UI Fabric React components to build a beautiful design in minutes. - \ No newline at end of file + diff --git a/samples/react-real-time/assets/flow.png b/samples/react-real-time/assets/flow.png index 51dcef22168aab5beeb1b90096d9ec5037d54408..d9b45f80e0bda0b85297537e32dfe989d6cd24d9 100644 GIT binary patch literal 84598 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