#ProjectOnline – 1 PWA site collection for all or 1 per department? #O365 #PPM #PMOT #Office365 #MSProject

March 20, 2017 at 6:55 pm | Posted in App, Configuration, Customisation, Functionality, Information, Installation | Leave a comment
Tags: , , , , ,

A question I hear a few times from organisations is “We have a new department or business unit coming on-board with Project Online, do we need a new PWA instance for them or can we use the one we already have?” The answer isn’t normally a straightforward yes or no. This post aims to cover most of the questions you need to ask when considering using the existing PWA site collection or creating a new one for a new department / business unit.

The first thing to consider is the Project Online limitations for the data such as number of projects per PWA site, check out the limits here: https://support.office.com/en-us/article/Project-Online-software-boundaries-and-limits-5a09dbce-1e68-4a7b-b099-d5f1b21ba489. Check how many projects you currently have in the PWA site collection and how many more the new business unit expect to add into the PWA site collection – if you are going to be reaching the limits on a PWA site collection then consider a dedicated PWA site collection for the new business unit. The number of PWA site collections in each Office 365 tenant will not be an issue – you can have up to 9,999. Just because you can have lots of PWA site collection doesn’t automatically mean the answer is a new PWA site collection each time!

One PWA site collection will support different PWA configurations for each business unit or department (custom fields , Enterprise Project Types etc.) by making use of the Department functionality to separate those configuration items. So for example, the R&D department only see configuration items relevant to them. So if the new business unit has different custom field / EPT requirements, that shouldn’t be a problem using a single PWA instance.

Whilst talking about configuration items, there are some items that are at the PWA site collection level that can’t be configured / tailored to each business unit or department. These would be some of the Time and Task Management options such as Time Reporting Periods, Timesheet settings and Task settings. Also some settings under the Operational Policies such as Additional Server Settings. If the new business unit has different requirements for time capturing they would need a dedicated PWA instance.

Another important aspect to consider is – will these different business units require access to the same enterprise resources to assign to tasks? Will they need to view the true resource demand / availability for these resources in one place? If this is the case then the easiest option is for the new business unit to use the same PWA site collection.

If there is a requirement to see the data from each business unit together in PWA, for example in a project center view then a single PWA site collection would be required. Similarly, if both business units projects needed to be included in the organisations portfolio strategic analysis for cost and resource requirements, a single PWA site collection will be required.

Reporting is another key factor, if the reports need to show data from all business units / departments then a single PWA instance is easier but it is still possible to generate reports that use data from multiple PWA site collections. With multiple PWA site collections this is something that can be worked around providing there was common metadata between the PWA site collections to enable projects from both PWA site collections to be viewed in the same report.

Then there is the management of the PWA site collection/s. It might be that the organisation has a central PMO function that administers the PWA site collection – adding another PWA site collection will increase their workload.

This is by no means an exhaustive list, here are just a few of the things to consider when deciding on using the existing PWA site collection or a new PWA site collection when a new business unit / department are coming on board.

#ProjectServer and #SharePoint 2013 / 2016 March 2017 Cumulative Update #PS2013 #SP2013 #PS2016 #SP2016 #MSProject

March 15, 2017 at 1:38 pm | Posted in Administration, Configuration, Fixes, Functionality, Information | Leave a comment
Tags: , , , , , , ,

The Office 2016 March 2017 updates and cumulative updates are now available, please see the links below:

https://support.microsoft.com/en-us/kb/4013886

Project 2016 March 2017 update:
https://support.microsoft.com/en-us/kb/3178669

SharePoint Server 2016 / Project Server 2016 March 2017 update: 
https://support.microsoft.com/en-us/kb/3178675 & https://support.microsoft.com/en-us/kb/3178672

The Office 2013 March 2017 updates and cumulative updates are now available, please see the links below:

https://support.microsoft.com/en-us/kb/4013886

Project Server 2013 March 2017 CU Server Roll up package:
https://support.microsoft.com/en-us/kb/3172462

Project Server 2013 March 2017 update:
https://support.microsoft.com/en-us/kb/3178625

Project 2013 March 2017 update:
https://support.microsoft.com/en-us/kb/3178650

Also worth noting, if you haven’t done so already, install Service Pack 1 http://support2.microsoft.com/kb/2880556 first if installing the March 2017 CU on 2013.

As always, fully test these updates on a replica test environment before deploying to production.

#ProjectOnline #PowerBI Currency Conversion Project Cost Report Part 2 #PPM #BI #Office365 #PowerQuery

March 9, 2017 at 5:32 pm | Posted in Administration, Configuration, Customisation, Functionality, Information, Reporting | Leave a comment
Tags: , , , , ,

Following on from my first post on currency conversion found below:

https://pwmather.wordpress.com/2017/03/06/projectonline-powerbi-currency-conversion-project-cost-report-part-1-ppm-bi-office365/

This post walks through a different option for working with multiple currencies. This post will create a similar report as seen below:

image

This report enables the project cost to be calculated based on project currency and rate for the year. In this example I have two projects that should be reporting costs in Euros,the PWA site is set up using Pounds (GBP) as are the resources that are used on those projects. So for those two projects in PWA the projects display a EUR symbol but there is no conversion to calculate the Euro rate from the GBP resource rates used.

In the steps below we walkthrough how to set up this example. Firstly in the Power BI Desktop client add the Projects OData feed:

  • Click Get Data > OData Feed and add the Odata URL for your PWA site: <PWASite>/_api/ProjectData/Projects and click OK
  • Click Edit to launch the Power BI Query Editor then click Choose Columns and uncheck Select All to deselect all the columns then select at least ProjectId, ProjectName, ProjectCurrency and ProjectType and click OK
  • Click the dropdown menu on the ProjectType column and uncheck 7.
  • Change the table from Query1 to Projects

The Projects table is now completed.

Now we need to create a currency table, still within the Query Editor see these steps:

  • Click Enter Data and create 4 columns, Currency, Master, Date and Rate then enter the data as required and click OK, for the purpose of the blog post here is the data I entered:
  • image
  • On my PWA instance, GBP is the default currency used for this demo / blog post so this is set to 1.00 then I have a example currencies / rates for Euros. The project data in my PWA instance ranges from 2016 to 2018 so I need rates to cover those years
  • Click Add Column > Custom and enter the name “Year” with the formula of  Column Date.Year([Date]) and click OK
  • Right click on Master column and change the type to True / False
  • Change the table name to CurrencyData

The currency table is now completed.

Now we need to get the Task Timephased data, still within the Query Editor opened from creating the currency table table, see these steps:

  • New Source > OData Feed and add the OData URL for your PWA site: <PWASite>/_api/ProjectData/TaskTimephasedDataSet and click OK then OK again
  • Click Choose Columns and uncheck Select All to deselect all the columns then select at least ProjectId, TaskCost, TaskIsProjectSummary and TimeByDay and click OK
  • Change the table from Query2 to TaskData
  • Click the dropdown menu on the TaskCost column, if it states “List may be incomplete” click load more and then uncheck 0. In the advanced editor check the filter is ([TaskCost] <> 0)
  • Click the dropdown menu on the TaskIsProjectSummary column and uncheck false
  • Click Add Column > Custom Column and enter the name “Year” with the formula of Date.Year([TimeByDay]) and click OK
  • Click Merge Queries > Merge Queries, in the Merge window select Projects then select ProjectId in the TaskData table and ProjectId in Projects table:
  • image
  • Click OK
  • In the New Column column heading, click the Expand button, select just ProjectCurrency and uncheck the use original column name option:
  • image
  • Click OK
  • Click Merge Queries > Merge Queries, in the Merge window select CurrencyData then  hold the Ctrl key down and click Year and then ProjectCurrency in the TaskData table and then Year and then Currency in the CurrencyData table like below:
  • image
  • Click OK
  • In the New Column column heading, click the Expand button, select just Rate and uncheck the use original column name option:
  • image
  • Click OK
  • Click Add Custom > Custom Column and enter the name “TaskCost_Converted” with the formula of [TaskCost] * [Rate] and click OK
  • Right Click the column heading for TaskCost_Converted column and click Change Type > Decimal Number:
  • image 

The TaskData table is now complete. Click Close & Apply > Close & Apply. Check the table relationships are correct, it should just be Projects linked to TaskData using ProjectId.

Now design the report as required. For the purpose of this blog post I created one table with the following fields:

image

Ensure TaskCost and TaskCost_Converted fields are set to Sum and all other fields on the table are set to Don’t summarize. If you need to work with multiple currencies in reports, try this out and extend it for your specific needs.

#ProjectOnline #PowerBI Currency Conversion Project Cost Report Part 1 #PPM #BI #Office365

March 6, 2017 at 7:52 pm | Posted in Administration, Configuration, Customisation, Functionality, Information, Reporting | 1 Comment
Tags: , , , ,

Whilst Microsoft’s Office 365 PPM tool Project Online supports projects using different currencies, there is no conversion based on a currency rate. The project has a currency set and the correct currency symbol is displayed for cost data. In the reports and views there is no conversion based on an exchange rate between currencies. This blog post shows a simple way using Power BI to have a report calculate the project cost based on the defined currency as seen below:

image

In the steps below we walkthrough how to set up this simple example. Firstly in the Power BI Desktop client add the Projects OData feed:

  • Click Get Data > OData Feed and add the Odata URL for your PWA site: <PWASite>/_api/ProjectData/Projects and click OK
  • Click Edit to launch the Power BI Query Editor then click Choose Columns and uncheck Select All to deselect all the columns then select at least ProjectName, ProjectCost and  ProjectType and click OK
  • Click the dropdown menu on the ProjectType column and uncheck 7.
  • Change the table from Query1 to Projects

The Projects table is now completed.

Now we need to create a table for the different currencies and rates we want to use.

  • Click Enter Data to launch the Create Table window and create the columns “Currency” and “Rate”. Enter the data as needed and call the table Currency then click OK. I created the following:
  • image
  • On my PWA instance, GBP is the currency used for this demo / blog post so this is set to 1.00 then I have a example currencies / rates for Euros and USD

The Currency table is now completed. Click Close & Apply > Close & Apply. Create a table with the project data on then a slicer for the currency values from the currency table like below:

image

Now right click on the Projects table in the fields pane and click New measure:

image

Enter the following in the formula / query bar:

image

This gets the selected currency from our slicer as a value in the Projects table. This is then used in the next new measure we create. Right click on the Projects table in the fields pane and click New measure again:

image

Enter the following in the formula / query bar:

image

Now add the ProjectCost_Converted field into the table with the project data and change the slicer selection and notice the ProjectCost_Converted values change, as seen below for Euros (EUR):

image

For Pounds (GBP):

image

For US Dollars (USD):

image

This simple version doesn’t take into account for projects that span multiple years where different rates will apply, it could be extended to support that though. In part 2 later this week we look at pre-calculating the project cost so that the portfolio cost is correct based on the currency defined by the project, look out for that towards the end of the week.

#ProjectOnline #PPM #PowerBI Report Pack Publish #BI #Reporting #PowerQuery #DAX #Office365

February 10, 2017 at 8:33 pm | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, Reporting | Leave a comment
Tags: , , , ,

Following on from my recent Project Online Power BI report pack post / release, this post looks at publishing the Report pack to the Power BI service, creating an example Dashboard and then finally creating an organisational content pack. For those of you that missed the previous post, please find a link below:

https://pwmather.wordpress.com/2017/01/03/projectonline-ppm-powerbi-report-pack-bi-reporting-powerquery-dax-office365/

Open up the report pack in Power BI Desktop as seen below:

image

Click the Publish button on the Home ribbon or Click File > Publish > Publish to Power BI:

image

Sign in to Power BI if prompted to do so. If you have more than workspace in the Power BI Service it will prompt you to select the destination. Select the destination “My Workspace” as required and click Select, you will then see the following:

image

Once completed you will see:

image

Click Got it to close the window. Open up the browser and navigate to https://app.powerbi.com. You will then see the published report under the Reports heading in My Workspace and also the report dataset under the Datasets heading. Click the report name under the reports heading and the published report will load:

image

You can then schedule a refresh of the data. Click the ellipsis next to the report under the Datasets heading:

image

Click Schedule Refresh. You will then see that you need to enter the credentials used for each OData endpoint used in the reports:

image

Click Edit credentials and select OAuth2 on the window that opens:

image

Click Sign In then enter the credentials / select the account as required. Repeat this for all of the OData connections.

**********NOTE: There is currently an issue with updating the credentials in Power BI when the Project Online OData URL contains [], you will probably receive the following message “Failed to update data source credentials.”

image

I’m not sure when this will be resolved. Alternatively, if your PWA site default language is English you could update all of the report queries to remove the /[en-US] from the OData URL. To do this, click Edit Queries > Edit Queries to open the Query Editor. Select a query from the Queries menu on the left then click Advanced Editor. This will open the Advanced Editor window. In Source remove /[en-US] from the OData URL and click Done. Repeat this for all queries that contain the PWA OData URL, once completed click Close & Apply > Close & Apply. Then follow the steps to publish the report to the Power BI service. **********

Once the credentials are all updated and correct, expand Schedule Refresh and enable this as required:

image

Click Apply.

Now click the report name under the Reports heading. From here you can pin visualizations on to a dashboard. See an example below:

image

Click the pin in the top right corner of the visualization then click New Dashboard and give the dashboard a name:

image

Click Pin.

Repeat this for other visualizations on other pages in the report as required but on the Pin to dashboard menu select Existing dashboard and select the dashboard you just created:

image

Once you have added all the visualizations you want, click on the new dashboard from the Dashboards heading:

image 

Now you could create the organisational content pack to make this report and dashboard available to others in the organisation. This does require the Power BI Pro license.

Click the Settings Cog in the top right corner:

image

Click Create content pack:

image

Complete the form as required and upload an image if needed then select your dashboard – this will automatically include the correct report and dataset. Once completed, click Publish. You will then see a success message in the top right corner:

image

Other users with a Power BI Pro license will then be able to consume the content pack once logged into their Power BI workspace by clicking Get Data > My Organization > Get:

image

Click Get it now. It will then add the content pack to their workspace.

Before creating the content pack it would be best to wait until the data source credentials issue is resolved in the Power BI service so that the data in the content pack will update on the schedule. Or alternatively, if your PWA site default language is English, remove the /[en-US] from each dataset query as described in this post.

#ProjectServer 2016 environment migration / rollover steps #PowerShell #PS2016 #MSProject #SP2016

January 19, 2017 at 3:48 pm | Posted in Administration, Configuration, Functionality, Information, Installation | Leave a comment
Tags: , , ,

This blog post will detail the PowerShell commands required to carry out an environment rollover / migration using Windows PowerShell where possible. The steps below use the database approach to rollover the Production environment to the Test / Development environment.

As a prerequisite I would recommend taking full backups of the Test / Dev farm to enable the environment to be rolled back if required. Use your usual farm backup procedures.

Test / Dev environment Prep

Firstly connect to the Test / Dev Application server and launch the SharePoint 2016 Management shell.

Type the following:

Remove-SPSite -Identity ‘<TEST/DEV PWA Site URL>’

You can check in Central admin in the Project Server Service Application to check that the PWA site has been removed.

Using the SharePoint 2016 Management Shell, remove the existing content database from the web application that hosted the PWA site collection that was removed in the previous step.

Type the following:

Dismount-SPContentDatabase ‘<Content database name>’

Test / Dev environment SQL Prep

Take a backup of the PWA Content database from the Production environment and copy this over to the Test / Dev SQL server and restore the database. The database required is:

  • Content database that contains the Production PWA site and Project Sites

Make a note of the database name used when this database is restored as it will be required later.

Test / Dev environment configuration

Using the SharePoint Management Shell, mount the restored content database to the web application that will host the PWA site collection.

Type the following:

Mount-SPContentDatabase ‘<content database name restored in previous step>’ -DatabaseServer ‘<Test / DEV SQL Server>’ –WebApplication <web application URL>

Post Provisioning

The Project Server Cube settings will need to be updated – update the SQL AS server / cube name.

Any Excel based reports in PWA will need to be updated to use the ODC files / connection strings from the Test / Dev environment as they will currently point to the Production ODC files / connection strings. This is done by opening the Excel reports in Excel, changing the ODC file / connection strings then saving the file back to the library.

All projects will need to be republished on the test / dev instance so that the project site features such as the issues and risks sync works as expected. There are other ways to fix that but republishing the projects is the easiest / safest option from what i have found.

Security trim Project data in #ProjectOnline #PowerBI #Excel #PowerQuery reports part 2 #PPM #Odata #REST #BI

December 12, 2016 at 5:46 pm | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, Reporting | 1 Comment
Tags: , , , , , , ,

Further to my last post on an example method to security trim the Project data in a Power BI report for Microsoft’s Project Online PPM tool, another option is to merge the datasets / tables. If you didn’t see the first post, a link can be found below:

https://pwmather.wordpress.com/2016/12/09/security-trim-project-data-in-projectonline-powerbi-reports-ppm-odata-rest-bi/

For this post, I have the same two ODATA / REST queries used, the ODATA one for the Milestones (/_api/ProjectData/Tasks()?$Filter=TaskIsMilestone eq true) which is not security trimmed and the REST one for the Projects (/_api/ProjectServer/Projects) which is security trimmed. With both of these datasets loaded into the Power BI Query Editor, select the Milestone dataset and click Merge from the Home ribbon tab and set the following:

image

This is merging my two tables based on ProjectId from the Milestone dataset and Id from the Projects dataset using a Left Outer join. You can see from that screen shot that I don’t actually have access to the Agile Product Development project in PWA as it is not returned in the list of projects in the REST dataset. Clicking OK will show a NewColumn:

image

Click expand and select Name:

image

That returns nulls for the project names you do not have access to:

image

These rows should be filtered out, click the Name column heading dropdown and de-select null:

image

Click OK and the Milestone dataset table will match the list of projects you have access to in PWA – the rows with nulls in the Name column will be removed from the table. I then renamed the Milestones – ODATA dataset to Filtered Milestones:

image

Click Close & Apply then the load a couple of visualisations on to the report and you can see that now the data is security trimmed as part of the query and not in the report:

image

In this simple example there is no need for the report level filter to remove the nulls at the report level like there was in the previous post. The same applies as with the previous post, if your users know Power BI  / Power Query they can easily undo all of this and access all the data but this might be an option to explore.

Security trim Project data in #ProjectOnline #PowerBI reports #PPM #Odata #REST #BI

December 9, 2016 at 1:29 pm | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, Reporting | 5 Comments
Tags: , , , , , , ,

The reporting API for Microsoft’s PPM solution – Project Online doesn’t filter the data based on the access model in PWA. For some organisations this can be problematic. In this blog post I show a simple report example to filter only projects and project milestones that I have access to in PWA.

In this example I have a very simple Power BI Report that is only using ODATA (_api/ProjectData), the Projects resource path to populate the Projects slicer / filter and the Tasks resource path to populate the Milestones for the selected Project:

image

I have access to a long list of projects (see the scroll bar on the slicer). Using the Audit Tracking project as an example, I can currently see this project in PWA as shown below:

image

I will change the access model so I get access denied to this project:

image

I only see these 6 projects projects in an unfiltered Project Center view:

image

Yet if I refresh my Power BI report I still see the full list as expected (the ODATA reporting API is not data security trimmed, you either access all data or none). One option is to use the REST (_api/ProjectServer) to filter the datasets that use the ODATA API as the source. The REST API is security trimmed to only show the data you have access to based on the access model in PWA. For example, I will get the list of Projects from REST to populate the Projects slicer / filter in Power BI, this only shows the projects I have access to in PWA. I have added a new data source to my simple Power BI report for the REST API:

image

The join is then set up on Id from the Projects REST dataset to the ProjectId in the Milestones OData dataset:

image

I now switch my slicer / filter to use the Projects – REST dataset

image

As you can see the list of projects matches what I see in the Project Center but there is a also a blank option there. The blank value is for rows it can’t join with on the Milestone ODATA dataset, these are the projects I no longer have permission to access in PWA! To resolve this, select the page and add a report level filter like below where Name is not blank:

image

This report filter will not show any blank values for the Name field on any visualisation in the report:

image

The blank value is now removed. My data is now security trimmed to match what I have access to in PWA! Obviously if you know what you are doing you can just undo all of this and see all data but for some it might be a workable solution! You can do the same with Resources too.

#ProjectOnline new #OData resource path for Resource Demand #Reporting #BI #O365 #PPM

November 22, 2016 at 9:35 am | Posted in Administration, Configuration, Functionality, Information, Reporting | Leave a comment
Tags: , , , , , ,

This post covers a new resource path in the OData endpoint for Microsoft’s PPM tool Project Online to give you the data you need for true resource demand for project assignments and resource engagement assignments. Before resource engagements were introduced, you could have assignments in the project plans or in the resource plans. For reporting, the data was available in the Assignments and the AssignmentTimephasedDataSet resource path feeds, normal project assignments data would be in the AssignmentWork field and resource plan work was in the AssignmentResourcePlanWork field. There was also an AssignmentCombinedWork in the AssignmentTimephasedDataSet feed that displayed the correct resource demand for the resource when you used both resource plans and project plans. The AssignmentCombinedWork field would take into account for the project resource utilisation calculation options. With the introduction of resource engagements there wasn’t a single field that gave you this same resource demand data – until now!

If you regularly view the Project OData service root URL (_api/ProjectData) you might have noticed a new feed, ResourceDemandTimephasedDataSet. This feed has the following properties:

image

The ResourcePlanUtilizationType type will display either a 0, 1 or 2. This is the property to indicate the project resource utilisation calculation options for the project. The enumeration for these values is below:

  • o = Project Plan
  • 1 = Resource Engagements
  • 2 = Project Plan Until

The ResourcePlanUtilizationDate property will only contain a date when the “Project Plan Until” resource utilisation calculation option is set.

This new ResourceDemandTimephasedDataSet feed will show the true resource demand for the project resource utilisation calculation option when using both project assignments and resource engagements. Some scenarios below show when data would and wouldn’t be included in this new feed:

Scenario 1: Project plan has resource assignments and resource engagements. The “Calculate Resource Utilization from:” option is set to Project Plan. In this scenario only the project assignments will be included in the ResourceDemandTimephasedDataSet feed.

Scenario 2: Project plan has resource assignments and resource engagements. The “Calculate Resource Utilization from:” option is set to Resource Engagements. In this scenario only the resource engagement assignments will be included in the ResourceDemandTimephasedDataSet feed.

Scenario 3: Project plan has resource assignments and resource engagements. The project assignments start from the 20th November to the 10th December 2016. The Resource engagements start from the 25th November to the 20th December 2016. The “Calculate Resource Utilization from:” option is set to Project Plan until with a date set to 1st December 2016. In this scenario only the project assignments will be included from the 20th November 2016 up to and including the 1st December 2016 and only resource engagement assignments from the 2nd December to 20th December 2016  will be included in the ResourceDemandTimephasedDataSet feed.

Example data can be seen below:

image

That makes things far easier for reporting resource demand, without this new feed you had to use the AssignmentTimephasedDataSet feed and the EngagementsTimephasedDataSet feed and join the datasets.

Update #ProjectOnline Resource custom field values using #PowerShell with data from #AzureAD user attributes #PPM #Offce365 #ProjectServer #CSOM

November 7, 2016 at 9:40 pm | Posted in Add-on, Administration, Configuration, Customisation, Functionality, Information, PowerShell, Reporting | Leave a comment
Tags: , , , , , , , ,

This blog post will demonstrate a simple example of how Microsoft’s PPM tool, Project Online, can include / sync metadata from Azure AD user attributes to resource custom fields in Project Online. This example script will update the resource custom field “Job Title” on my test tenant with the data from the Azure AD user “Title” attribute.

This script example can be downloaded here: https://gallery.technet.microsoft.com/Update-Online-Resource-83137b7f

The script does require some additional modules / DLLs to work. Firstly you will need the Azure AD module installed, this can be downloaded here: http://connect.microsoft.com/site1164/Downloads/DownloadDetails.aspx?DownloadID=59185. You will also need the SharePoint Online and Project Online CSOM DLLs. The DLL’s used are from the NuGet package here: https://www.nuget.org/packages/Microsoft.SharePointOnline.CSOM/16.1.5521.1200. There are later version available, check here: https://www.nuget.org/packages/Microsoft.SharePointOnline.CSOM. Download those as required. These modules can be seen here on line 3,5 and 14 in the example script, the location will need to be updated to reference the correct location for your SP / PS Online CSOM DLLs.

The user setting up the script will need to update the correct location to the DLLs required, the AD username, AD password, CSV file location, PWA instance URL, username, password and the custom field internal name. The PWA account specified will need edit access to all of the resources in PWA and the AD account will need access to read all the users in Azure AD. Ensure the variables have been updated correctly, placeholder values seen below:

image_thumb.png

In this example all users in the Azure AD will be exported, clearly if you have a large organisation it would be efficient the filter for only those users that exist in Project Online. The code matches users and resources based on the AD display name and PWA resource name when updating the resources in PWA.

To get the correct custom field internal ID I use the REST API, <PWA Site URL> + /_api/ProjectServer/CustomFields. Find the resource level custom field and copy the InternalName as seen below:

image_thumb.png

Once the PowerShell script has been updated, save it and it can then be tested on a test / non-production environment. Once executed in PowerShell, each resource found in the CSV file will be outputted as seen in the example below. In this example there are many AD users in the CSV export that do not exist in the PWA instance.

image_thumb.png

Checking in the Resource Center after the script has run you can see for the resources that exist in the CSV file created, the Job Title has been updated with the values found in Azure AD / the export CSV file:

image_thumb.png

The CSV file generated can be seen here:

image_thumb.png

This PowerShell script could be run on a schedule from a server on-prem or even in Azure / webjob. The script would just need access to save / access a CSV file and the DLLs / modules required. Fully test this script on a test / non-production PWA instance before running on a Production PWA instance.

The script is provided “As is” with no warranties etc.

Next Page »

Blog at WordPress.com.
Entries and comments feeds.