#ProjectOnline Risk to Issue Escalator built using #MicrosoftFlow #Office365 #SharePoint #JavaScript #PPM #ProjectManagement #MSProject #PMOT #PMO

July 11, 2019 at 11:35 pm | Posted in Administration, Functionality, Add-on, Customisation, Information, Configuration, App, Workflow | Leave a comment
Tags: , , , , ,

More Microsoft Flow action here in this post, this time building a Risk to Issue escalator for Office 365 Project Online. In project management risks sometimes unfortunately turn into issues. When this event occurs it’s useful to be able to copy over some useful information from the risk item and automatically create that issue item with some of the risk data. In this blog post I will show you a simple solution to do this using a combination of Microsoft Flow, Project Online, SharePoint and a tiny bit of JavaScript.

Firstly let’s take a quick look an example risks list on my test Project Online PWA site:

Risks List

This is pretty standard apart from two new columns Escalate? and EscalatedDate. The Escalate? column is used to tag the risks that need escalating and the EscalatedDate column is used to hold the date when the risk was escalated to an issue. The issues list in this example is just standard out of the box. On the Risks page I also have a button labelled “Escalate Risks” this is used to create an item on a central risk to issue escalation tracker list on the root PWA SharePoint site. There is a simple bit of JavaScript code behind the button as seen below:

JavaScript

This JavaScript file is added to a central library in PWA and added to the Project Sites on the Risks Allitems view page using a content editor web part. The code gets the project site title, Project GUID and Project Site URL from the associated Project Site then creates a list item on the central Project Risk to Issue Escalation Tracker list:

Risk to Issue Tracker

This simple example JavaScript code always creates items on the central list but in production you would only create the items if there were risks to escalate. EscalationDate defaults to today’s date, Completed defaults to No and the CountOfRisksEscalated is blank by default. The process of adding the escalation item here has two purposes, one to track the history of what risks are escalated so this can be reported on but also trigger the Microsoft Flow to carry out the escalation. The Microsoft Flow can be seen below:

Flow

The Flow trigger and actions are detailed below:

Flow Trigger

The Flow is trigger when an item is created in the Project Risk to Issue Escalation Tracker list then a SharePoint Get Items action is used. The ProjectSiteUrl property from the trigger action is used to dynamically set the correct site address. This action gets items from the risks list on the correct project site where the risks are tagged for escalation and have not yet been escalated.

Then an Apply to each action is used and the result from the Get Items action is passed in:

Apply to each

Inside the apply to action there is a SharePoint HTTP action to create the issue item using a REST call. Inside the body, JSON defines how to create the new item. For the issue columns in here, the values from the risks fields are used, this is where you can update this to map other risk columns to issue columns, the expression for the risk data is similar to this items(‘Apply_to_each’)[‘Category’][‘value’] for lookup columns or this for default text fields items(‘Apply_to_each’)[‘Description’]

Then another SharePoint HTTP action is used to update the risk item via REST:

RiskItem

The current risk ID is passed in to the Uri (items(‘Apply_to_each’)[‘Id’]). The only column updated is the EscalatedDate column on the risk list with the date the risk was escalated.

The final action in this Flow is a SharePoint Update Item action to update the SharePoint item on the central Project Risk to Issue Escalation Tracker list:

Tracker Update

The item Id and ProjectName are passed in from the Trigger data but these values have not changed. The Completed column is set to Yes and the CountOfRisksEscalated is set using the length expression to count the number of items in the array from the first action: length(body(‘Get_items’)?[‘value’])

That’s it, a simple low / no code configurable solution starter for Risk to Issue escalation in Office 365 Project Online. A video of this solution starter in action can be seen here: https://youtu.be/IgKxDuu1sng

Advertisements

#ProjectOnline custom #email notifications using #MSFlow #MicrosoftFlow #PPM #PMOT #MSProject #Exchange #Office365 #PowerPlatform Part 2

April 30, 2019 at 8:22 pm | Posted in Add-on, Administration, App, Configuration, Customisation, Functionality, Information, Workflow | Comments Off on #ProjectOnline custom #email notifications using #MSFlow #MicrosoftFlow #PPM #PMOT #MSProject #Exchange #Office365 #PowerPlatform Part 2
Tags: , , , , , , , ,

Following on from my last post on email notifications using Microsoft Flow, this post looks at further examples. Part 1 can be found here: https://pwmather.wordpress.com/2019/03/18/projectonline-custom-email-notifications-using-msflow-microsoftflow-ppm-pmot-msproject-exchange-office365-powerplatform-part-1/

In case you missed it, I also published a video last week with a simple example Flow to send the project owner an email on project creation: https://youtu.be/CCdxUqBrhEA

In part 2 we will look another example email notification to email each resource the projects they are assigned to for the coming week. The Flow can be seen below:

image

This is triggered on schedule as seen below, update as needed:

image

The Flow then gets some date time values using the Date Time actions for the current date time and a future date time:

image

The Flow then fires off an HTTP request to SharePoint to get a list of resources with email addresses from the Project Online Odata Reporting API:

image

Then using an Apply to each action we send an email to the assigned resources. Firstly we pass in the output from the previous step, which is:

body(‘GetAllResourcesWithEmailAddresses’)[‘value’]

image

Then inside the loop we perform another HTTP call to SharePoint, this time to get the resource’s assignments for the week by querying the Project Online Odata Reporting API as seen below:

image

Here we are passing in 3 variables to the Odata query:

  • ResourceId which is the following expression added in: items(‘Apply_to_each’)[‘ResourceId’]
  • Current time and Future time to filter the data returned from the time phased resource demand endpoint to this week, these are the outputs from the previous date time actions:

image

The Flow then creates an HTML table from the data returned from the previous action:

body(‘GetAllResourceAssignments’)[‘value’]

image

Then the final action in the Flow is to send an email:

image

The To value is an expression: items(‘Apply_to_each’)[‘ResourceEmailAddress’]

Update the email body as needed and include the output from Create HTML table action.

This will result in an email being sent to all resources in Project Online with email addresses containing their weekly assignments detailing the projects that they are working on, here is an example email:

image

Another example that demonstrates how easily custom email notifications can be created for Project Online using Microsoft Flow.

#ProjectOnline custom #email notifications using #MSFlow #MicrosoftFlow #PPM #PMOT #MSProject #Exchange #Office365 #PowerPlatform Part 1

March 18, 2019 at 9:26 pm | Posted in Add-on, Administration, App, Configuration, Customisation, Functionality, Information, Workflow | 1 Comment
Tags: , , , , , , , ,

This blogs post has been delayed due to all of my blog posts on Microsoft’s new Roadmap service – summary post here with most of the posts: https://pwmather.wordpress.com/2019/03/01/project-roadmap-cds-app-overview-ppm-projectmanagement-msproject-projectonline-office365-powerplatfom-dynamics365/

This post continues the series of posts I started to do in December 2018 following on from a Microsoft Tech Sync session where I presented a session on Project Online and Flow better together. As it’s been a while, here are links to the previous posts:

Post 1: https://pwmather.wordpress.com/2018/12/06/projectonline-publish-all-projects-using-msflow-microsoftflow-ppm-pmot-office365-powerplatform-part-1/

Post 2: https://pwmather.wordpress.com/2018/12/12/projectonline-publish-all-projects-using-msflow-microsoftflow-ppm-pmot-office365-powerplatform-part-2/

Post 3: https://pwmather.wordpress.com/2018/12/14/projectonline-snapshot-data-to-sharepoint-list-using-msflow-microsoftflow-ppm-pmot-office365-powerplatform/

In this post we take a look at an option for building custom email notifications with a no code / low code solutions using Microsoft Flow. This example sends an email for projects that are running late. There are two simple versions for this, one with a details table in the email and one with just the project name but includes hyperlinks in the email to the project detail page. These are both very similar, the first one can be seen below:

image

This is triggered on the Recurrence trigger, set based on your requirement. This then uses the Sent an HTTP request to SharePoint action to query the Project Online OData Reporting API:

image

This will control the data that is included in the email, so this OData query can be updated based on your requirements. Next the Flow uses the Create an HTML table action:

image

For this action we pass in the project data array from the previous action using a custom expression:

image

The final action is to send the email:

image

In the body of the email here we are just using the output from the previous Create HTML table action:

image

This results in an email being sent with the data from the OData query used (these are just my test projects and not real projects!):

image

Very simple! Sticking with the same theme for late projects but this time the email contains hyperlinks into the projects, this Flow is slightly different:

image

The difference here is we do not use the Create HTML table action but instead use Select and Join from the Data Operations actions. Firstly the select actions looks like this:

image

The Select action is used to transform the data in the results array from the previous step. Just the same as the Create HTML table in the first example, we pass in the project data array value from the previous action into the From property. Then the Select action was changed to use the text mode using the toggle option outlined in red below:

image

In Map properties, transform the data as needed in the email such as:

image

Here we are building up a URL passing in the ProjectId for the PDP URL (update to the correct PDP) and the ProjectName for the URL title. Then we use the Join Data Operations action to put each project on a new row in the email:

image

The From property is just using the Output from the previous Select action:

image

Then the final action is the email:

image

Note the Is HTML property is set to Yes. In the Body we type the email body as required plus the Output from the previous Join action:

image

Then the email is sent on the defined schedule with clickable links to the Project Detail Pages (again, these are just my test projects and not real live projects!):

image

These are two simple examples but as you can see, it’s very easy to build Project Online related emails using Microsoft Flow. I have some more examples in my next posts coming soon.

#ProjectOnline Snapshot / data to #SharePoint list using #MSFLow #MicrosoftFlow #PPM #PMOT #Office365 #PowerPlatform

December 14, 2018 at 10:00 pm | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, Reporting, Workflow | 2 Comments
Tags: , , , , , , , ,

Next in my series of posts on using Microsoft Flow with Project Online is capturing Project Online data into a SharePoint list, this is a useful scenario for simple snapshot requirements. For example, if you want to snapshot some key project level data, the easiest place to store this data is in a SharePoint list. I have blogged simple code examples before that do this: https://pwmather.wordpress.com/2016/08/26/projectonline-data-capture-snapshot-capability-with-powershell-sharepoint-office365-ppm-bi/ & https://pwmather.wordpress.com/2018/01/27/projectonline-project-level-html-fields-to-a-sharepoint-list-powershell-ppm-office365/ Whilst these approaches work, the PowerShell does need to be run from somewhere, a server / Azure Function etc. This post provides the same end result with Project Online data in a SharePoint list but all from a Microsoft Flow. The Flow can be seen below:

image

This simple example makes use of the recurrence trigger to schedule the process, the “Send an HTTP Request to SharePoint” action to get the project data from Project Online and a SharePoint create item action inside an Apply to each loop. We will walkthrough the actions later in the post.

Firstly, the SharePoint list was created:

image

This was created in my Project Online Project Web App site collection. I created SharePoint columns on this list for each of the fields I wanted to capture from my Project Online dataset. As this is just an example, the number of fields and data is quite limited. Now back to the Flow. We will skip over the recurrence trigger to the first action that gets the Project Online data, this just uses the “Send an HTTP Request to SharePoint” action to call the Project Online OData REST API so that we can easily get all of the Project Online data. In this example we are accessing the Projects endpoint in this API and selecting a few example project level fields including an example custom field:

image

This action will get all of the data based on the Odata query used in the Uri input. We wont cover all of the settings here in this post as I covered this in the last post found here: https://pwmather.wordpress.com/2018/12/12/projectonline-publish-all-projects-using-msflow-microsoftflow-ppm-pmot-office365-powerplatform-part-2/

Next we need to loop through all of the projects in the results array to create a SharePoint list item for each project. To do this we need to use an “Apply to each” action:

image

In the output from the previous step we use body(‘ReadallProjects’)[‘value’] to use the data from the previous step which is all of our Project Online projects with some data minus the timesheet project in this example. Then for each project in the array we create a list item on our target SharePoint list using the create item action. In the create item action we just map the data from the array to the correct list column. The Project Online fields are accessed using an expression, for example for ProjectCost in this example Flow the expression is items(‘Apply_to_each’)[‘ProjectCost’] where apply to each is the name of the action and ProjectCost is the field / property in the results from the Odata query.

Once this Flow runs a few times you can then easily create snapshot / trend reports or even extend the SharePoint view to show what you need:

image

As you can see in this example, I’ve updated the SharePoint view to show the RAG icon in the Overall RAG column rather than the text value. This is very simple with the column formatting options available with the SharePoint modern UI using JSON.

Another example of extending Project Online with low / no code solutions in Office 365.

There will be further example solutions built for Project Online using Microsoft Flow in later posts.

#ProjectOnline Publish all projects using #MSFLow #MicrosoftFlow #PPM #PMOT #Office365 #PowerPlatform part 2

December 12, 2018 at 9:00 pm | Posted in Administration, Configuration, Customisation, Functionality, Information, Workflow | 4 Comments
Tags: , , , , , , ,

Following on from my first blog post on Publishing all projects in Project Online using Microsoft Flow, here is the 2nd post. For those that missed the 1st part, it can be found here: https://pwmather.wordpress.com/2018/12/06/projectonline-publish-all-projects-using-msflow-microsoftflow-ppm-pmot-office365-powerplatform-part-1/

In this post we will look at achieving the same publish all functionality but using different actions than we used in the last example. Previously we used the actions available with the Project Online connector, in this example we do not use the Project Online connector when accessing Project Online. The Project Online connector actions used previously to get the projects, check the projects out and then publish and check in the projects have been replaced with a SharePoint action where we can call the Project Online REST APIs. This is to show another example of working with Project Online using Flow. This approach does require an understanding of the Project Online REST APIs but this approach offers so much more capability for Project Online when using Microsoft Flow. The Flow can be seen below:

image

The difference between this Publish all flow and the example from part 1 is that we have replaced all of the Project Online connector native actions with the SharePoint “Send an HTTP Request to SharePoint” action and removed the Filter action as that is not required now. The “Send an HTTP Request to SharePoint” action can be used to work with the Project Online REST CSOM API and the Odata Reporting API directly from Microsoft Flow – this opens up so many more options for working with Project Online using Flow! This Flow assumes you have set up the connection for SharePoint Online using an account that has publish access to all projects and access to the Odata Reporting API in Project Online. This example is still triggered using the schedule action so I wont cover that part. Once triggered, the first action is to get all of the Project Online projects:

image

Enter the Project Online PWA site URL in the Site Address, select the HTTP Method – GET in this case. Then add the Uri, in this case we are using the Odata API to return all project Id’s and filter out the timesheet project but this could be updated to select only projects based on your logic such as projects with a certain custom field value or projects not published in a certain number of days / weeks etc. Then add the HTTP headers as seen. This action will get all of the projects based on the Odata query. Next we need to loop through all of the projects in the array to check them out, publish them then check them back in. To do this we need to use an “Apply to each” action:

image

In the output from the previous step we use body(‘Send_an_HTTP_request_to_SharePoint_-_get_projects’)[‘value’] to use the data from the previous step which is all of our Project Online projects minus the timesheet project in this example. Then for each project in the array we check out the project using another “Send an HTTP request to SharePoint” action:

image

This time the HTTP Method is a POST and the Uri is set to use the REST CSOM API to check out the project. We pass in the ProjectId from the current item in the array using items(‘Apply_to_each’)[‘ProjectId’]

The final action is to publish the project and check it in, this is done using another “Send an HTTP request to SharePoint” action:

image

The HTTP Method is a POST and the Uri is set to use the REST CSOM API to publish the project and check it in – the check in is performed using the true parameter. We pass in the ProjectId from the current item in the array using items(‘Apply_to_each’)[‘ProjectId’]

The final variation of this publish all example is only very slightly different, the only difference is that it is manually triggered rather than on a schedule. We have removed the schedule action and replaced it with a SharePoint trigger to trigger when an item is created on a list:

image

I have a list on my PWA site that only PWA admins can access, here an admin user creates a new item, this then triggers the publish all flow:

image

We then have a history of who triggered the publish all jobs and when.

This post will hopefully give you some ideas on how Microsoft Flow can now really compliment Project Online and offer some scenarios for low / no code customisations.

In the next post we will look at more examples for building low / no code solutions for Project Online using Microsoft Flow.

#ProjectOnline Publish all projects using #MSFLow #MicrosoftFlow #PPM #PMOT #Office365 #PowerPlatform part 1

December 6, 2018 at 12:00 am | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, Performance, Reporting, Workflow | 1 Comment
Tags: , , , , ,

I recently had the opportunity to present at a Microsoft Tech Sync session where I presented a session on Project Online and Flow. During this session gave examples of how Microsoft Flow compliments Project Online by enabling no / low code solutions to extend the Project Online features. I plan to do several blog posts over the next month or so where I will share some of these Microsoft Flows. Hopefully this will give you some ideas of how Microsoft Flow can be used to simplify some of those customisations for Project Online.

The first Flow example I want to share with you is a publish all projects flow. I have published examples before for Project Server and Project Online as found here:

These all required a basic understanding of the Project Server / Project Online APIs and somewhere to run the code from – I thought this would be a good example to move over to a Microsoft Flow. In this blog post I will walkthrough the first example I have for publishing all projects as seen here:

image

This is built using only actions from the Project Online connector in Flow – so there is no need to understand the Project Online APIs! This Flow assumes you have setup the connection to Project Online using an account that has publish access to all projects. This Flow is triggered using a schedule as seen here:

image

When this Flow is triggered, the first action is to get all the Project Online projects using the List Projects action:

image

All you need to do is provide the PWA site URL. This List Projects action also includes project templates so these need to be filtered out, to do this we filter the results returned from the List Projects action using a Filter Array action:

image

In the From field we enter body(‘List_projects’)[‘value’] to get the data from the previous action, which in this case is the List projects action. In the filter we use item()[‘ProjectType’] is not equal to 1, Project Type 1 being the Project Templates. In advanced edit mode it looks like this:

image

Next we need to loop through all of the projects in the array to check them out, publish them then check them back in. To do this we need to use an Apply to each action:

image

In the output from the previous step we use body(‘Filter_array’) to use the data from the previous step which is all of our Project Online projects minus the project templates. Then for each project in the array we check out the project using the default Checkout project action:

image

Enter the Project Online PWA URL then in the Project Id property pass in the Project ID from the current item in the array using items(‘Apply_to_each’)[‘Id’]

The final action is to publish the project and check it in, this is done using the default Checkin and publish project action:

image

Enter the Project Online PWA URL then in the Project Id property pass in the Project ID from the current item in the array using items(‘Apply_to_each’)[‘Id’]

That is it, when this flow executes it will publish all of your Project Online projects. A simple no code serverless solution!

In part 2 we will look at two other variations for publishing all projects in Office 365 Project Online using Microsoft Flow.

Running #ProjectOnline #PowerShell in #Azure using #AzureFunctions #PPM #Cloud #Flow #LogicApp Part2

August 1, 2017 at 4:32 pm | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, PowerShell, Workflow | Comments Off on Running #ProjectOnline #PowerShell in #Azure using #AzureFunctions #PPM #Cloud #Flow #LogicApp Part2
Tags: , , , , , , ,

Following on from part 1 where I introduced the idea of automating certain Microsoft 365 PPM Project Online customisations using PowerShell, Microsoft Flow / Azure Logic Apps and Azure Functions, in part 2 I will set up an example automation for creating a Project Online event driven snapshot application on project published without having to set up any server or write any complied code! If you missed part 1 where this concept was introduced, see the link below:

https://pwmather.wordpress.com/2017/07/28/running-projectonline-powershell-in-azure-using-azurefunctions-ppm-cloud-flow-logicapp-part1/

Firstly I created an Azure Function app in my Azure subscription then created a new function based on the HttpTrigger – PowerShell template:

image

Give the function a name and set the Authorisation level – set the authorisation level to the correct setting for your function. Click Create. For details on Azure Functions, start here: https://docs.microsoft.com/en-us/azure/azure-functions/

You will then be presented with the function and sample code:

image

We will now create the PowerShell script to create the snapshot. This is based on a script I published a while back: https://pwmather.wordpress.com/2016/08/26/projectonline-data-capture-snapshot-capability-with-powershell-sharepoint-office365-ppm-bi/

The script has been updated to work in an Azure Function but also modified to use a parameter so that it only captures data for the published project, the PowerShell script can be seen further on in the post.

Firstly upload the SharePoint CSOM DLLs using the upload button:

image

I used the SharePoint CSOM DLLs from the SharePoint Online Management Shell:

image

Then enter the PowerShell code – screen shots below and code pasted below the images:

image

image

image

Code sample used in function:

# POST method: $req
$requestBody = Get-Content $req -Raw | ConvertFrom-Json
$projID = $requestBody.projID

# GET method: each querystring parameter is its own variable
if ($req_query_name) 
{
    $projID = $req_query_name 
}

#add SharePoint Online DLL - update the location if required
Import-Module "D:\home\site\wwwroot\ProjectSiteUserSyncHTTPTrigger\Microsoft.SharePoint.Client.dll"
Import-Module "D:\home\site\wwwroot\ProjectSiteUserSyncHTTPTrigger\Microsoft.SharePoint.Client.Runtime.dll"

#set the environment details
$PWAInstanceURL = "https://mod497254.sharepoint.com/sites/PWA2"
$username = "admin@MOD497254.onmicrosoft.com" 
$password = "password"
$securePass = ConvertTo-SecureString $password -AsPlainText -Force
#create the SharePoint list on the PWA site and add the correct columns based on the data required
$listname = "ProjectSnapShots"
$results1 = @()

#set the Odata URL with the correct project fields needed
$url = $PWAInstanceURL + "/_api/ProjectData/Projects()?`$Filter=ProjectId eq GUID'$projID'&`$Select=ProjectId,ProjectName,ProjectPercentCompleted"

#get all of the data from the OData URL
while ($url){
    [Microsoft.SharePoint.Client.SharePointOnlineCredentials]$spocreds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePass);    
    $webrequest = [System.Net.WebRequest]::Create($url)
    $webrequest.Credentials = $spocreds
    $webrequest.Accept = "application/json;odata=verbose"
    $webrequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f")
    $response = $webrequest.GetResponse()
    $reader = New-Object System.IO.StreamReader $response.GetResponseStream()
    $data = $reader.ReadToEnd()
    $results = ConvertFrom-Json -InputObject $data
    $results1 += $results.d.results
        if ($results.d.__next){
        $url=$results.d.__next.ToString()
    }
    else {
        $url=$null
    }
}

#add data to snapshot list
#get PWA site client context
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($PWAInstanceURL) 
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePass) 
$ctx.Credentials = $credentials 
$ctx.ExecuteQuery()  
 
#get the target list 
$List = $ctx.Web.Lists.GetByTitle($listname) 
$ctx.Load($List) 
$ctx.ExecuteQuery() 

#for each project, create the list item - update the newitem with the correct list columns and project data
foreach ($projectrow in $results1) 
{ 
   $itemcreationInfo = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation 
   $newitem = $List.AddItem($itemcreationInfo) 
   $newitem["Title"] = $projectrow.ProjectName
   $newitem["ProjectId"] = $projectrow.ProjectId
   $newitem["PercentCompleted"] = $projectrow.ProjectPercentCompleted
   $newitem.Update() 
   $ctx.ExecuteQuery() 
} 

The PowerShell code would need to be updated with your environment details: (PWAInstanceUrl, username, password and listname variables). Also the OData URL will need to be updated to include the project level fields that you want to snapshot.The target SharePoint list will also need to be set up in the PWA site collection for the project fields the script uses. This is the list I set up for this example:

image

SnapshotDate is set to Todays date so we don’t need to set that in the code.

The code is simple to follow but in summary the first part will get the projID from request body – we will pass in the ProjectID for the published project from the Flow / Logic App trigger. Then the SharePoint Online CSOM DLLs are imported in. Then the specific PWA environment details are set for the variables. The OData URL is then added to the url variable. Here notice we are filtering for the ProjectID and passing in the $projID variable we get from the request body. The Select part of the query will need to be updated for your project level fields. Next the code gets the data from the OData feed using the web request and adds the data into the results array. Once we have the data, we connect to the SharePoint list, in the example it is the ProjectSnapShots as set in the $listname variable. Lastly the new item is created in the list using the data from the results array.

Now the Azure Function is ready to be used. It can be tested using the Test option in the right hand panel, update the Request body:

image

Update it for a valid project ID. Then click Run above the function code:

image

The Logs window below will help you debug any errors etc.:

image

Then check the SharePoint list in the PWA site and the new item should have been created:

image

We now know the Azure Function is working as expected, now we need to call the Azure function when a project is published. All we need from the Azure Function is the URL to use, use the </>Get function URL button:

image

Select the correct Key, in this example I used the default function key. Copy the URL as it will be needed later.

To call the Azure Function when a project is published, the choice here for a no code option would be Microsoft Flow or Azure Logic App. For this I will use Microsoft Flow but the same steps (triggers , actions etc.) would be used in the Azure Logic App. Create a new Flow and search for Project Online:

image

Then select the Project Online – When a project is published trigger.

Enter the PWA URL:

image

Then click the ellipsis and set the connection for the PWA URL or create a new connection if needed:

image

Click + New step then Add an Action and search Http:

image

Select HTTP – HTTP:

image

Complete the HTTP action:

Method is POST, the Uri is the URL for the function that we copied earlier, Headers are not required. The Body is where we pass in the project ID from the published project trigger:

image

The Flow is now completed:

SNAGHTML55ecdca7

Now click Save flow.

In PWA, Publish a project or projects and see the snapshot data created on the configured snapshot list once the Flow has run:

Flow run:

image

Data added to the list for the project I published – in this example it was the Office 2016 rollout project:

image

This just shows a simple example and the some of the possibilities for extending the Project Online capability when making use of simple PowerShell scripts and other Microsoft 365 / Azure services for cloud / serverless solutions. Look out for more examples in the future.

Running #ProjectOnline #PowerShell in #Azure using #AzureFunctions #PPM #Cloud #Flow #LogicApp Part1

July 28, 2017 at 4:50 pm | Posted in Add-on, Administration, App, Configuration, Customisation, Fixes, Functionality, Information, PowerShell, Workflow | 4 Comments
Tags: , , , , , ,

Following on from my last post where I published an example solution starter PowerShell script for adding project team users to the Project Site, here I mentioned about running the script in an Azure Function and even running this sync from a Project Online event. The blog post can be seen below if you missed that:

https://pwmather.wordpress.com/2017/07/07/projectonline-project-user-sync-to-project-sites-ppm-o365-powershell-sharepoint/

Whilst I will use that example PowerShell script from my last blog post as an example, the concept will work for any PowerShell script.

I wont cover the details in setting up the Azure Function in part 1 as there is plenty of support out there for this – for this example I created an Http Trigger – PowerShell function.

image

I then uploaded the SharePoint DLLs and copied in the PowerShell script into the editor:

image

The project site user sync script didn’t work as is as I had to make some minor changes to get this to run from the Azure Function. This included change the way the SharePoint CSOM DLLs where loaded in. In the example script I used Add-Type to load the DLLs but in the Azure Function I had to switch this out to use Import-Module:

image

The next change I had to make was to comment out all of the feedback to the console, so all of the write-hosts. I also had to remove the functions within the script so that is was one block. After these changes I could execute the PowerShell script to add the project team members from my example project into the associated project site from the Azure Function. As this was an HTTP Trigger Azure Function, you can get the URL to the function and access that URL to execute the function.

This opens up lots of possibilities to easily execute this Azure Function from other applications that can make the HTTP call. For example you build easily execute this script once the project has been published either using a remote event receiver (RER) or a Microsoft Flow / Azure Logic App. The example script would need to be made generic and pass in a variable into the Azure Function for it to be a workable solution.

In part 2 of this blog post we will look at make a full event driven solution that is fired on project publish then executing the Azure Function and passing in a variable.

Introduction to #Microsoft Flow with #ProjectOnline #IFTTT #WebHooks #OfficeDev #Yammer #Office365

May 6, 2016 at 12:11 pm | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, Workflow | Comments Off on Introduction to #Microsoft Flow with #ProjectOnline #IFTTT #WebHooks #OfficeDev #Yammer #Office365
Tags: , , ,

At the end of April Microsoft’s Flow was made available as preview. Microsoft Flow is an If This Then That (IFTTT) service with many built in web hooks or connections to different services. You can connect to services like SharePoint Online, CRM or Twitter to name a few. A blog post from Microsoft can be found here.

In this post we will see an example of using Microsoft’s Flow service with Project Online – Microsoft’s Office 365 PPM application. When a project is created we will post a message in Yammer. Once signed in, click on My Flows from the top navigation bar:

image

From here you can view preconfigured templates or create from blank. Currently there aren’t any templates for Project Online so click create from blank. On this page you will see all of the services you can work with currently in the preview version:

image

Either start typing Project or scroll down the list to Project:

image

For this example I will choose “Project Online – When a new project is created”. You then need to sign into the Project Online PWA site:

image

Enter your credentials for the target Office 365 tenant when requested. Then enter the URL of the PWA site:

image

Now click the + button to either add an action or add a condition:

image

For this example we will just add an action without any conditions. You can add conditions in if needed though like below, if the project name contains “delivery” do something:

image

Also notice the advance mode where you can type the query condition:

image

For this demo we don’t need any conditions so I will remove that and just add an action and search Yammer:

image

Then select “Yammer – Post message” and click the sign in link then follow the steps to allow the access:

image

It’s your call to allow the access or not for services for this demo I have but only do this if you accept the terms of service. Then you can complete the details for the Yammer post:

image

This is what I have done:

image

Then give the Flow a name:

image

Click Create Flow and after a few seconds you will see the message stating this was created:

image

Click Done and the wizard is complete:

image

You can edit / delete the Flow from the My Flows page:

image

Now if I create a Project in that Project Online instance a new post will be created in the Yammer group. There maybe a minute or so delay before you see the post in the Yammer group once you create the project but here it is:

The project – “Paul Mathers test project”:

image

In Yammer, the post including the project name:

image

Notice the post if from Microsoft PowerApps.

You can check the Flow runs from the My Flow pages, click the i button at the end:

image

You will then see the following:

image

This is just a simple example – there is so much you can do even in the preview version of Flow – I’m sure more and more web hooks and functionality will be added before this is GA. Take a look today, it is very easy to use as you can see.

Getting started with #ProjectOnline #Workflow Part 1 #PS2013 #Office365 #Project #PPM #PMOT

February 9, 2016 at 1:09 am | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, Workflow | 2 Comments
Tags: , , , ,

Following on from a very popular series of posts on getting started with Project Online, Microsoft’s Office 365 PPM cloud offering, round up found here. I started a mini series towards the end of last year where I covered getting started with the Portfolio Analysis functionality, part 1 here and part 2 here. I mentioned here that I would also do the same for workflow. I have finally got around to creating the workflow version – sorry for the delay, it has been a busy few months.

In this series of posts I will touch on some of the workflow capabilities that are available for Project Online and show you how to getting started.

For the purpose of this post I have already configured a project ideas type list in my PWA site collection, the portfolio strategy / analysis piece, some enterprise project types and have some custom fields.

The first post in this series will look at creating a project from the project ideas list. The workflow will assign a task to a SharePoint group for the approval, once approved a project will be created in Project Online using the correct Enterprise Project Type.

The project ideas list on my test environment looks like this:

image

image

Very simple, with a couple of SharePoint fields. I have mapped these fields to Project Online custom fields:

image

This is so that the metadata captured from the idea is copied over to custom field when the project is created.

I have also created some new Enterprise Project Types in this test environment:

image

Some of these will be used in later posts for this getting started series.

We will now look at creating an approval workflow for this ProjectIdeas list. Launch SharePoint Designer 2013 and open the target PWA site.

image

Click Workflow from Navigation pane:

image

Click List Workflow then choose the list:

image

Complete the details as required:

image

Click OK.

image

Now you can start creating the workflow in the designer. For this example I will firstly insert two more stages using the Stage button:

image

Then rename the stages:

image

Starting with the Initiated stage, click where is states “Start typing…” and more options will be enabled in the ribbon:

image

Click the Action button and scroll down to the “Assign a task” action and click:

image

Now click this user:

image

In the dialog box that appears complete the details, for the Participant I selected the Administrators group:

image

For the task title I used the string builder and added the following with a lookup to the item:

image

For the description I used the string builder to create the following:

image

Once the details are completed:

image

Click OK.

Now click in the transition to stage section:

image

Using the condition ribbon menu button, select if any value equals value:

image

Now click the first value:

image

Then click the fx button:

image

In the box that appears set the following:

image

Click OK.

Click the second value and choose Approved:

image

Now select the Insert go-to under the If and select Go to a stage on the Action menu:

image

image

Click a stage and select Approved:

image

Do the same for Else but select the Rejected stage:

image

In the Approved stage I will insert a parallel block:

image

In this parallel block I will insert four If conditions:

image

The If conditions are then configured like below:

image

The action for each If will be “Create Project from Current Item”:

image

Then you can choose the Enterprise Project Type:

image

Set this up to match to correct EPTs:

image

I then added two further actions:

image

To send ad email and to set a field on the list.

The email was configured as below:

image

The workflow then set the Approval Date field to Today:

image

The transition to stage was then update to end the workflow:

image

The final stage to configure is the Reject stage, in this stage we just send and email to the user that created the item then end the workflow:

image

Once completed, save the workflow and check for any errors.

Using the navigation bar, click the workflow name:

image

Then set the start options for the workflow:

image

Once you are happy with it publish the workflow to the list.

Back in SharePoint, if we look at the Workflow settings for the list we should see the workflow name:

image

Now if I create a new item on the list the workflow will fire and create a task for one of the administrators to approve, the item shows as in the initiated stage:

image

As a PWA administrator I would receive a email notifying me that I had a task assigned, I could then approve that item or reject it. In this example I will approve it:

image

When the workflow fires the item will update to Approved, a project will get created in Project Online, an email will be sent to the user who created the idea and the Approval Date will be set on the list item.

The updated project idea item can be seen below:

image

The project can be seen below in the project center with the correct Enterprise Project Type:

image

The data from the Project Ideas list has been copied to the correct Project Custom fields:

image

That’s it for the simple project ideas list workflow – there is lots more that can be done but hopefully that gives you a good idea on how to get started. Next up we will take a look at getting started with the project life cycle workflow and progress a project through various stages and phases.

Create a free website or blog at WordPress.com.
Entries and comments feeds.