More On SharePoint 2013 REST API With Fiddler And SPD
Click Here >>> https://urllio.com/2t2El6
Its interesting I can perform the same api call using java but not succeed with SPD. I need to get this working with SPD, this needs to work using OOTB. So I'm still stuck as to why one server works and the other one does not. But I'm still investigating.....
SharePoint 2013 has a completely new workflow engine. With that engine we got some new actions and options that help us in creating our bussiness process using workflows. One of them is Call HTTP serviceaction that enables us to leverage an external web service from our workflow.On the other hand Sharepoint 2013 comes with a new REST interface that enables us to access and use its resources.When we combine these two new features we get powerful new ways for using our SharePoint workflows.In this post I will show you how you can use this new action to POST new data to your SharePoint site.I have created a SharePoint list named WorkflowItems to use for example. We will create items in this list from a workflow using SharePoint REST services. To keep it simple I will leave it with only one column (Title).Now we can open our SharePoint Designer and create a new site workflow and call it WorkflowItemWizard.In our new workflow first we will create couple of dictionaries. Dictionary is a new variable type in SharePoint workflows that is used for defining collections of key/pair values and is very important for the Call HTTP service action.To create a dictionary add Build Dictionary action to you workflow. Using that action specify two new keys Accept and Content-Type and set the values for both of them to application/json; odata=verbose like in the image below
Set the output to a dictionary with a more meaningful name, call it "header". This dictionary will be used as a header for our request.Next create another dictionary that you will call metadata and in it add a key called type with value SP.Data.WorkflowItemsListItem. And finally you will need one more dictionary that will contain your request data. Call it parameters, add key __metadata and set its value to the previously created dictionary metadata
Now you can deploy your workflow and run it. Once it is over you should have a new item created in your list.From this example you can continue building your solutions, you can add more fields, or use other available REST services for updating list items or deleting them. One of the biggest advantages using this method to create or update list items is it is not limited to the site in which you workflow runs. Using REST services you can now access and create items in lists on other sites.If you want to know more about SharePoint 2013 REST you should check this out :Programming using the SharePoint 2013 REST serviceAlso check this excellent post on getting data into your workflow from SharePoint
Thanks for your helpful post, Lee. I tried to set up a POST request using Fiddler but ended with 403 FORBIDDEN error. -handling-http-403-forbidden-when-querying-the-search-rest-service-using-the-postquery-method/
The only debugging option that is available in every type of SharePoint deployment is writing log messages to the workflow history list. By using this method, you can use either the Log to History List action in SharePoint Designer 2013 or the WriteToHistory activity in Visual Studio 2012 to write a string message as a new item to the list, specified in the workflow association, which is the container for all history logging messages. These can be simple strings or constructed by concatenating the contents of variables within the workflow.
Another debugging option is to take advantage of breakpoints. Breakpoints are available only for workflows created using Visual Studio 2012, since SharePoint Designer 2013 has no capability to set breakpoints or to attach a debugger to the running process. These are available in both SharePoint on-premises and hosted deployments such as Office 365. In this scenario, you would set a breakpoint on an activity within the workflow and then start the workflow in debug mode.
This debugging option is not available for workflows created using SharePoint Designer 2013, because there is no action that maps to the WriteLine activity. Unfortunately, this debugging option is available only to SharePoint on-premises installations, since the port used by the Test Service Host utility is typically not publically accessible outside an on-premises network. This is also true for Office 365. The ports SharePoint uses to connect to Workflow Manager are the same ones used by the Test Service Host, and those are only accessible within the trusted network. However, this does not mean that you need to change their workflows to remove any WriteLine activities before deployment to Office 365. These activities can be left in the workflow as they are not seen unless the Test Service Host is connected to Workflow Manager.
Notice that the second result is the one we used by default: sts, for a Team Site.Scroll to the bottom to find custom templates that have been saved for the site collection:Find the Name of the template you want to use, and right-click on it to select CopyUse this value in your SPD 2013 callParams dictionary for the WebTemplate item, when using the Call HTTP Web Service action to create a site.Be sure to remove the Name= portion highlighted in the image.Now when your App Step runs, it will use this custom template when creating new sites.In SharePoint, there is always (or usually) more than one way to do things.
Therefore the preferred method is to use install Fiddler onto the workflow manager server, and configure it to trace HTTP calls from workflow manager. This method is more reliable and easier to work with, but is relatively tricky to set it all up. Luckily for all of us, Andrew Connell wrote comprehensive and clear instructions for using this approach.
Thank you for this. After finding this blog, I found some other references to using CAML with GetItems and using the CAML as the request body (no more encoding spaces!). Anatoly Mironov described its use here -caml-with-sharepoint-rest-api/ and referenced the MSDN documentation here -us/library/office/dn531433%28v=office.15%29.aspx#bk_ListGetItems.
Remote SharePoint development is getting more important. Especially with SharePoint Apps. To speed up development, find hidden lists/items/documents, discover the structure or specific artifact properties use the SharePoint Client Browser which supports SharePoint 2010, SharePoint 2013 and SharePoint Online (Office 365)
In the above post I will take a Publicly Available REST API probably the Weather API or Twitter API and use the HTTP Web Request along with the Dictionary Variable in SPD 2013 to surface it in a SharePoint Promoted Links App (List)
Some things that you must know about Workflows in SharePoint 2013 is that unlike SharePoint 2010 that was built on the platform of Windows Workflow Foundations 3.0 (WWF3) this version of SharePoint is built on Windows Workflow Foundation 4.0 (WWF4) and .NET Framework 4.5, it also employs a new Installer/Manager called Workflow Manager 1.0. Now you have the ability to design and create complete declarative workflows, REST and Service Bus messaging. You should also be aware that the SharePoint 2013 features and capabilities only comes available to you and your tooling after you download and install the Workflow Manger 1.0 Service and configure it to communicate with your Site Collection. For more on the Workflow Manager 1.0 please see Start: Set up and configure SharePoint 2013 Workflow Manager Finally with Visio Professional 2013 add-in provides you with a Visual Workflow Development experience both inside SPD2013 and outside inside Visio Professional 2013.
'use strict';var express = require('express');var request = require('request');var http = require('http');var path = require('path');var passport = require('passport');var AzureAdOAuth2Strategy = require('passport-azure-ad-oauth2');var engine = require('ejs-locals');var app = express();var config = { // Enter the App ID URI of your application. To find this value in the Windows Azure Management Portal, // click Active Directory, click Integrated Apps, click your app, and click Configure. // The App ID URI is at the bottom of the page in the Single Sign-On section. realm: ' :4000', // Enter the endpoint to which your app sends sign-on and sign-out requests when using WS-Federation protocol. // To find this value in the Windows Azure Management Portal, click Active Directory, click Integrated Apps, // and in the black menu bar at the bottom of the page, click View endpoints. // Then, copy the value of the WS-Federation Sign-On Endpoint. // Note: This field is ignored if you specify an identityMetadata url identityProviderUrl: ' -8647-xxxxxxx/wsfed', // Enter the logout url of your application. The user will be redirected to this endpoint after // the auth token has been revoked by the WSFed endpoint. logoutUrl: 'http:/localhost:4000/', // Enter the URL of the federation metadata document for your app or the cert of the X.509 certificate found // in the X509Certificate tag of the RoleDescriptor with xsi:type="fed:SecurityTokenServiceType" in the federation metadata. // If you enter both fields, the metadata takes precedence identityMetadata: ' -8647-4dc7-xxxxxxxx/federationmetadata/2007-06/federationmetadata.xml'};var graphConfig = {// Enter the domain for your Active directory subscription, such as contoso.onmicrosoft.com tenant: '8b87af7d-8647-4dc7-xxxxxxxxxxxxxxx', // Enter the Client ID GUID of your app. // In the Windows Azure Management Portal, click Active Directory, click your tenant, // click Integrated Apps, click your app, and click Configure. // The Client ID is on this app configuration page. clientid: '2462ee60-5695-xxxxxxxxxxxxxx', //Enter the value of the key for the app. You can create the key on the Configure page for the app. // The value appears only when you first save the key. Enter the saved value. clientsecret: 'xxxxxxxxxxxxxxxx'};// array to hold logged in usersvar users = [];// AAD Graph Client for AAD queriesvar graphClient = null;var aToken;// use ejs-locals for all ejs templates:app.engine('ejs', engine);app.configure(function(){ app.set('port', process.env.PORT || 4000); app.set('views',__dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session({ secret: 'keyboard cat' })); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public')));});app.configure('development', function(){ app.use(express.errorHandler());});var findByEmail = function (email, fn) { for (var i = 0, len = users.length; i < len; i++) { var user = users[i]; if (user.email === email) { return fn(null, user); } } return fn(null, null);};// Simple route middleware to ensure user is authenticated.// Use this route middleware on any resource that needs to be protected. If// the request is authenticated (typically via a persistent login session),// the request will proceed. Otherwise, the user will be redirected to the// login page.var ensureAuthenticated = function(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/login');};//var RESOURCE = " "; //var REST_CALL = ' ' + graphConfig.tenant + '/Users()';var RESOURCE = " -my.sharepoint.com";var REST_CALL = " -my.sharepoint.com/personal/satish_ramjee_xxxxxx_co_uk/_api/files";//passport.use(wsfedStrategy);passport.use(new AzureAdOAuth2Strategy ({ clientID: graphConfig.clientid, clientSecret: graphConfig.clientsecret, tenant: graphConfig.tenant, resource: RESOURCE, callbackURL: " :4000/callback", }, function(accessToken, refreshToken, params, profile, done) { console.log("access token ---> " + accessToken); aToken = accessToken; console.log("done ---> " + JSON.stringify(done)); var waadProfile = profile || jwt.decode(params.id_token, '', true); console.log("waad ---> " + JSON.stringify(waadProfile)); // _res.redirect("/ok");// User.findOrCreate({ id: waadProfile.upn }, function (err, user) { return done();// });}));var sp_files = function(callback) { var headers = { 'Authorization': 'Bearer ' + aToken, 'Accept': 'application/json', }; if (RESOURCE.indexOf("graph") != -1) { headers[ 'x-ms-dirapi-data-contract-version'] = '0.5'; } console.log("CALL___________________ "+REST_CALL); request({ url: REST_CALL,// qs: qs, headers: headers }, function(err, resp, body) { console.log("Body " + body); console.log("Err " + err);// if (err) return callback(err, null); if (resp && resp.statusCode != 200) { return callback(new Error(body), null); } else if (!resp) { return callback(null, null); }// { results: // [ { __metadata: [Object],// Manager: [Object],// DirectReports: [Object], var d = JSON.parse(body).d, users = d.results;// meta = buildMetadata(d); console.log("users" + users); return callback(users); }) console.log("Sent request---->");}http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port'));});var graphQuery = function(res, user) { graphClient.getUsers(function(err, result) { if(err) { res.end('GraphClient.getUsers error:' + err + '\n'); } else { console.log("User " + JSON.stringify(result) ); //res.render('index', { user: user, data: JSON.stringify(result) }); } // get user properties (user.DisplayName, user.Mail, etc.) });};var doWaad = function(res, user) { if(graphClient === null) { waad.getGraphClientWithClientCredentials2(graphConfig.tenant, graphConfig.clientid, graphConfig.clientsecret, function(err, client) { if(err) { res.end('waad.getGraphClientWithClientCredentials2 error:' + err + '\n'); } else { graphClient = client; graphQuery(res, user); } }); } else { graphQuery(res, user); }};app.get('/cb', function(req, res) { console.log("cb");});app.get('/fail', function(req, res) { console.log("fail");});app.get('/ok', function(req, res) { console.log("*************** ok ", req.user); //doWaad(res, req.user);});app.get('/', function(req, res){ if (aToken) { console.log("T: " + aToken); sp_files(function(d) { var mail = []; if (d) for (var i=0; i< d.length; i++) { console.log(i + ">>>> " + d[i]);// if (d[i].Mail)// mail.push(d[i].Mail); if (d[i]) mail.push(JSON.stringify(d[i])); } res.render('result', { user: d, data: mail, oauth: aToken}); }); } else { res.render('index', { user: null}); }});app.get('/account', ensureAuthenticated, function(req, res){ res.render('account', { user:req.user });});app.get('/login', passport.authenticate('azure_ad_oauth2', { failureRedirect: '/fail' }));app.get('/callback', passport.authenticate('azure_ad_oauth2', { failureRedirect: '/', failureFlash: true }), function(req, res) { // Successful authentication, redirect home. console.log("================= callback"); res.redirect('/ok'); });app.get('/logout', function(req, res){// clear the passport session cookies req.logout();// We need to redirect the user to the WSFED logout endpoint so the// auth token will be revoked wsfedStrategy.logout({}, function(err, url) { if(err) { res.redirect('/'); } else { res.redirect(url); } });});// Passport session setup.// To support persistent login sessions, Passport needs to be able to// serialize users into and deserialize users out of the session. Typically,// this will be as simple as storing the user ID when serializing, and finding// the user by ID when deserializing.passport.serializeUser(function(user, done) { done(null, user.email);});passport.deserializeUser(function(id, done) { findByEmail(id, function (err, user) { done(err, user); });}); 2b1af7f3a8
https://sway.office.com/PsN3y2VRapDtB2ol
https://sway.office.com/eQ4Vx0cFdNmPy7Kx
https://sway.office.com/L8fr4vg51jRj0g7G
https://sway.office.com/YfJHHKBz56Ate5kR
https://sway.office.com/9YFldTP23q7c7Ryd
https://sway.office.com/efkfUB0dgupPfA9G
https://sway.office.com/6rFUTpCRu5ajYK90
https://sway.office.com/LQnDfF9KPaHCHTe6
https://sway.office.com/VOcpTAWtZEoflvoJ
https://sway.office.com/VwFzfzuRT2aR1D8l
https://sway.office.com/vj1zIf99D2AA6kiA
https://sway.office.com/QjDD92Y38SyEZA6T
https://sway.office.com/DMox3yRnElbJMWoH
https://sway.office.com/8WCtmAFiEcZHAjsV
https://sway.office.com/YNHAQNlmSNXuIodo
https://sway.office.com/aqcT9QkOk4HvZwSZ
https://sway.office.com/0gPLWEqDd5TFSbXF
https://sway.office.com/ECW7GPiaW3f5FK0b
https://sway.office.com/NAbLBgnEyqofBDUE
https://sway.office.com/jyRLKBDlLFAyWs6f
https://sway.office.com/x5sp8HNWi3BzKX7w
https://sway.office.com/t0LXobDGsmK0FWt1
https://sway.office.com/Jgk4TQH3WmteaqpI
https://sway.office.com/fV8ZFjxngG9PLDwt
https://sway.office.com/pHMnM2VJzaK0G8i7
https://sway.office.com/LwCussln1c5g9pwO
https://sway.office.com/BgZ3zoIpZ7xUJe87
https://sway.office.com/5JEqTUzgwU6SgdcL
https://sway.office.com/zfaBMNrveTe5YO4g
https://sway.office.com/1FwsbYNR0M5RG6WK
https://sway.office.com/Jfvm3BUr14jyKIEh
https://sway.office.com/wpjgrEa1Hi5yXWVE
https://sway.office.com/1XOaKpyL3NCK2Aot
https://sway.office.com/cygjyGE72JzWsnTC
https://sway.office.com/3LqzmCExA5FdjsNx
https://sway.office.com/oUq4zB4lwzJ1liMg
https://sway.office.com/Pu4mnkJBlX0HwF3W
https://sway.office.com/BDOSBARgY0CenQhj
https://sway.office.com/Bos5N910FwlEPwhJ
https://sway.office.com/xQB5b0RNa0p0ZtBI
https://sway.office.com/OmyXI90vBBT8Kb6M
https://sway.office.com/beIX3xgZMPUqeqEu
https://sway.office.com/PSC9FZ18fFXZcchj
https://sway.office.com/dVOVBTEAuCVNFD10
https://sway.office.com/MeLQfqbaOEYrvvkA
https://sway.office.com/vXbOjmD3ffozmLUd
https://sway.office.com/XB1nbrK2QA9jl6Dr
https://sway.office.com/2nJaQBPYH0D9YX6j
https://sway.office.com/yU6ViyLcy9Vqt6VA
https://sway.office.com/wWwlyNXPeBEz7Iqf
https://sway.office.com/l6Eu1xnhcvG2HA4J
https://sway.office.com/UASnQDrnrAege0Ic
https://sway.office.com/4GFN3W2mHGrlstNN
https://sway.office.com/abNX02yNsHqTc4eM
https://sway.office.com/Mpl18o1Cwp9LkzAW
https://sway.office.com/wQdGt7vwHONpMQCI
https://sway.office.com/6GFGF4VzwvAzJEnv
https://sway.office.com/UiNckOSeoiJlNBDn
https://sway.office.com/t3s3SnhqSO8K5SnP
https://sway.office.com/yGjRa1UQ7NWLj4oK
https://sway.office.com/ZkIsNQdj3JzSRtAN
https://sway.office.com/INqWEXRGQRBw5t5L
https://sway.office.com/EfMLkxesEwYE5PvF
https://sway.office.com/Lq5vTTXtLl8CKwL2
https://sway.office.com/e8yRQdK95izTkVb4
https://sway.office.com/VfYNfT9U1n80qPkP
https://sway.office.com/bOJFjvweWdMA4x5b
https://sway.office.com/GwrZ6QYVayAbAZXA
https://sway.office.com/0eOu2QRj4DPHmS5D
https://sway.office.com/8ujUks06FBQbcXR5
https://sway.office.com/FZaBCmeUYfNI3imw
https://sway.office.com/iuFf5nDed4CngNYp
https://sway.office.com/E1QkrLorT3sn4Ycm
https://sway.office.com/ewHjz0hA5fRsfeiF
https://sway.office.com/5ctW5O2E7FdvDEVZ
https://sway.office.com/JFBXzyT7kgrvXcA6
https://sway.office.com/l7ozIvLZYBKDtCln
https://sway.office.com/nvCjF3iNx60YTEaL
https://sway.office.com/eJBpeVKsoCZXCuQ3
https://sway.office.com/6KRPDtuH9WcAR2Nl
https://sway.office.com/o12iAk6n3eshcOb2
https://sway.office.com/aUJA7qrIGYXHf3gB
https://sway.office.com/H0PcoMBrJZYwpKMF
https://sway.office.com/khWy4v02WiedNaOP
https://sway.office.com/avqeeUha4HxZa3vL
https://sway.office.com/VBMlstha0aK3oFif
https://sway.office.com/GReFLyCiPaKXRORF
https://sway.office.com/PffWswrUBcMzynZX
https://sway.office.com/90FkOP1LkGOgBtAd
https://sway.office.com/RBeX28obP1NRtbNw
https://sway.office.com/yOO1BrXoThfTD8wg
https://sway.office.com/QEwfGY895GbNIyy1
https://sway.office.com/eaxkVuD0HDnSgbR9
https://sway.office.com/DCLVpbBEPhOnQGgj
https://sway.office.com/DT6DfDMJmCkh5dSU
https://sway.office.com/DrIXRDROh7uqEP4R
https://sway.office.com/sYqp3cZxF9DrWl8H
https://sway.office.com/MjBgBLkeexHmpCGN
https://sway.office.com/9fucmNBg5TzjXxwn
https://sway.office.com/180ZI3UAemJlfoAt
https://sway.office.com/SFRQLxIh7Nl8FeeT
https://sway.office.com/xFD4GAXkDRHgDrJe
https://sway.office.com/VvEmlQU3r3T1rDEW
https://sway.office.com/P2J7grWOLjPPU6lg
https://sway.office.com/k5fDErSOy64Kl0rE
https://sway.office.com/n6mYPgnOJh17jzKg
https://sway.office.com/n4zGdb4w3Cqt0HNX
https://sway.office.com/ZECesglShSntD6mY
https://sway.office.com/3G11vMxVnSDgpZCd
https://sway.office.com/JHp6FnXsxVM4L1CP
https://sway.office.com/0DUYkieYpWRU4ZsH
https://sway.office.com/jCwcB36cDdis7QRb
https://sway.office.com/vkCWxnMa3dQkceud
https://sway.office.com/fb908mXgOsZTJ0sJ
https://sway.office.com/KqMNw94LejYTA84q
https://sway.office.com/oCJClV7YwMfUs24r
https://sway.office.com/1VZmQjbdXeukDd3Q
https://sway.office.com/LX3hb9WtssSFYhz6
https://sway.office.com/QwacN9mS5pjWF6Y4
https://sway.office.com/EnA7r3hrO83HrvmC
https://sway.office.com/DYkuvQF6X2qR0dzh
https://sway.office.com/D9aQfiosCCiXT7Un
https://sway.office.com/zB5tyNPmFvzTwBWS
https://sway.office.com/qT7CJ9fW62lGMCMy
https://sway.office.com/cCeV0mNuKjbftDWX
https://sway.office.com/vqAaNpU5RC2SV6sc
https://sway.office.com/jkbUNpc0HI3OYv8a
https://sway.office.com/BGzfArgixeIx4idC
https://sway.office.com/243FEUfEG0vIOwia
https://sway.office.com/QiBkAHXk86pHcU4i
https://sway.office.com/pOgHBcexa0XYqOHy
https://sway.office.com/mErSPHSGVHHGcQc8
https://sway.office.com/KGFAtZKygHZiaxTf
https://sway.office.com/vDE1DtPSq8zQajx1
https://sway.office.com/CFSy95Lsq1GgqGFQ
https://sway.office.com/WYmksEyB7sGIs7mE
https://sway.office.com/5KxaeBFoCC67BWMx
https://sway.office.com/32F6o0sZXdNTjk0r
https://sway.office.com/LKhxpMdJHTKLagxd
https://sway.office.com/KsEge2kOBkTO0FJP
https://sway.office.com/Gi5xusGZyeVyct5w
https://sway.office.com/dsxnPqwsuXMEVIMg
https://sway.office.com/WrGxbBVMMtRk8TyE
https://sway.office.com/8b8mf4wn3bpKSWtc
https://sway.office.com/7mAAqi8DT75opLLe
https://sway.office.com/l3YVjr7vR8PZGAMa
https://sway.office.com/ELSm7fsTOSRaZREB
https://sway.office.com/MDeFrUR4an5TW6E2
https://sway.office.com/0yNaOD0R7aPluBeL
https://sway.office.com/r2MFYwwhWI7ug4VW
https://sway.office.com/51HD8kZ9qM5CHZyI
https://sway.office.com/vU1NuJH5ggmM2zfz
https://sway.office.com/1vbSoqcd2vvxn3Sq
https://sway.office.com/dT9pQnROYdcGrB1j
https://sway.office.com/4fYB8TsWURJ2tqlH
https://sway.office.com/yuaOvEVyRyC7uCf2
https://sway.office.com/gKip4OPBjyHy3s4L
https://sway.office.com/YO8lT1wrlUBAu9WI
https://sway.office.com/KuKw4mh5dF3l2zF2
https://sway.office.com/2UB5RcXuiujDaZD1
https://sway.office.com/JSbeqC36jzAnBI00
https://sway.office.com/hiCKnQWiAVVtU1Ap
https://sway.office.com/GA5BJdZYw1HjL7tq
https://sway.office.com/iutaqJe2HLGLt8Kx
https://sway.office.com/1ABhHQw2y0ygBlq9
https://sway.office.com/YoNlMSR2UBsjZH6a
https://sway.office.com/s1QU82qRQXOHQkvS
https://sway.office.com/HLx812lDvCURrKMD
https://sway.office.com/JJt2BBfDI9LG4ef6
https://sway.office.com/89HllJ04tSn6Ckut
https://sway.office.com/CtUAZbVBrJESeMnm
https://sway.office.com/aG7Y0yOo5evWXAbJ
https://sway.office.com/MEJV6mWrmKCBwFs4
https://sway.office.com/p4oCEWZcMg8xi0HX
https://sway.office.com/OZFkKBgH1QkaESTt
https://sway.office.com/TboQt2SGAdcPX72p
https://sway.office.com/cYz2s74eTlTXHEm1
https://sway.office.com/qfp026GPcMvoGNpA
https://sway.office.com/cPnBJ4K2TImME8fn
https://sway.office.com/PZxHniMNjLokWZ4j
https://sway.office.com/3LWZpyqi3qEC99s2
https://sway.office.com/BulJhVa9BfJ3n0BC
https://sway.office.com/JfwFd3u8BYQGfnkQ
https://sway.office.com/jVEDfMKw8ACpNg9K
https://sway.office.com/Zb0cB0aIwBXNKL93
https://sway.office.com/pug35P1ughAUPvr8
https://sway.office.com/Bij49xo7twpCLghh
https://sway.office.com/wVowVFRuHEkptSOQ
https://sway.office.com/7sCBY4ZPgRtxF2Uv
https://sway.office.com/dt9fw6wNcUXS4h0s
https://sway.office.com/UQkbOwiiSZinWhtv
https://sway.office.com/acUVuPIL1to7inFl
https://sway.office.com/ymgGHzBHbiHs2oBN
https://sway.office.com/D309M44TLqCD5J2u
https://sway.office.com/EAl4ddzuK5JFNBBs
https://sway.office.com/bGkOu42IN6Lig7pH
https://sway.office.com/A7fImsCCSfQXBiFC
https://sway.office.com/Zj6KolOjDYADnhMP
https://sway.office.com/QcikF3LjsBDvYwdS
https://sway.office.com/iQevKwMpm7vCfhU4
https://sway.office.com/EGZTgzmUWztmJNEI
https://sway.office.com/2pHupBl3ObDMDQBM
https://sway.office.com/pVRTOUK13FFPj56e
https://sway.office.com/6mGRipCx4Aep7zeI
https://sway.office.com/GVgNnBrsMXv39eH5
https://sway.office.com/GF2aNNqbaTQQrpSG
https://sway.office.com/GLLHQ2u5GJ5r39EO
https://sway.office.com/EHjMUMGviiMliU1Q
https://sway.office.com/qcqZlCx63x88xTYm
https://sway.office.com/EYMEa7ddH6NH9GTt
https://sway.office.com/8DZI8iyuRindmJae
https://sway.office.com/mbu5DMeuKjTqNsnC
https://sway.office.com/WQhzB04eaPD1vRtL
https://sway.office.com/FqNA0vXsTpmtSSQi
https://sway.office.com/QlDq05orFvkcpjiA
https://sway.office.com/37cAKt3YKSUSDPGR
https://sway.office.com/3VBPcIbfLnx3EK4c
https://sway.office.com/RFnfwNVI7iSneTdm
https://sway.office.com/b5z8upHm9XMTuE65
https://sway.office.com/MUvm3jk2DBy0xrEC