So as everyone already know now with 2016 PowerShell is the way to go for all Project Server related deployment operations, below is the step by step guide to install & deploy Project Server 2016, assuming you all know how to deploy SharePoint 2016, refer to install details here (https://technet.microsoft.com/en-us/library/ff608031(v=office.16).aspx)

For the below installation I am using a single server VM in a Hyper-V environment

  • Hardware
    • 10GB RAM
    • 4 virtual proc assigned
    • 120 GB Disk space
  • Software
    • Windows Server 2012 Enterprise with latest SP
    • SQL Server 2014 SP1
    • SharePoint Server 2016 Beta2 (only because I wanted to upgrade to RC)
    • Domain Controller
    • Visual Studio 2015 Community edition (Optional)


  • Assumptions
    • You already have managed account set up
    • Project Server Application proxy has been setup
    • Managed Path has been setup


As you can see unlike 2013 now you cannot PWA (Project Web Access) creation menus are not available, hence we will use a combination of PowerShell & GUI interface to deploy the Project Server though everything performed via GUI can also be done with PowerShell however it’s just my personal preference to use a combination

0 - PWA Deploy CA Check

Step 1: Make sure you have Project Server License enabled, in my case I have already activate the project server license key, to get a key for Beta refer here

“When you create a Project Server site on SharePoint Server 2016 Release Candidate, you need a Project Server 180-day trial key. If you attempt to enable the Project site, the following error appears: “The farm does not have a product key for Project Server. You can add your key by using Enable-ProjectServerLicense.

Use the following 180-day trial key for Project Server:

1 - Check License


Step 2: Create a Web Application

In this case, I chose to use GUI to create a new Web App which will host the PWA site collection

2 - Create Web App

Step 4: Create a root site collection

3 - Create Site Collection

Error in my trial and error thing I had created a root site collection from the UI, however was again trying to do it from the PowerShell, you can use either to do so, in my case I deleted the one I created earlier using GUI and created new one with PowerShell

6 - Error Site Coll Already Exists

Step 5: to create PWA site collection use the command below

New-SPSite -ContentDatabase -OwnerAlias   -Name "Project Web App Demo" -Template "pwa#0"

Important is to use the required template else you will have to activate the PWA features later 😉
7 - Deploy Site Coll PWA

Fairly straight forward, isn’t it ? you get your new PWA provisioned

8 - PWA Instance Created

Last thing though optional I wanted to get my permission mode changed to Project Server instead of SharePoint

9 - PS Security Missing

Set-SPProjectPermissionMode -Url -Mode ProjectServer

10 - Change PS Security

11 - PS Security Mode available

Recently had a requirement to update the title of the document with the same name as of document irrespective of what user sets, thought to do it via javascript but then given 2013 changed my mind to give it a try with ECMA script, it took an hour(most of it in finding the name of the document:( ) of troubleshooting but got it working 🙂

Could have done it in lesser steps may be only one query load, but left it in a raw state for others to read through and refine as required 😉

in case someone want to go through some extra steps


<script type='text/javascript'>

function getContext()




        var context = new SP.ClientContext.get_current(); 

        var list = context.get_web().get_lists().getByTitle('Documents');; 

        var camlQuery = new SP.CamlQuery();


        this.collListItem = list.getItems(camlQuery);


        context.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));        







function onQuerySucceeded(sender, args) {



        var listItemInfo = '';

        var listItemEnumerator = collListItem.getEnumerator();

        while (listItemEnumerator.moveNext()) {

            var oListItem = listItemEnumerator.get_current();

            alert("Updating item with ID-->"+oListItem.get_item('ID')+" with Title-->"+oListItem.get_item('Title')+" To new Title -->"+oListItem.get_item('FileLeafRef'));


            updateListItem(oListItem.get_item('ID'), oListItem.get_item('FileLeafRef'));






function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());


function updateListItem(ItemID, title) {

    var clientContext = new SP.ClientContext.get_current();

    var oList = clientContext.get_web().get_lists().getByTitle('Documents');

    this.oListItem = oList.getItemById(ItemID);

    oListItem.set_item('Title', title);


    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededUpdate), Function.createDelegate(this, this.onQueryFailedUpdate));


function onQuerySucceededUpdate() {

    alert('Item updated!');


function onQueryFailedUpdate(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());




Scenario : You have to track all those tasks which if delayed by 3 days (you can change the Total Slack value say 5 days) would fall on the ciritcal tasks path. So, these could be termed as the near critical tasks which need to be monitored closely along with the Critical path in the project to adhere to the commited timelines.

Total Slack is defined as : The amount of time a task’s finish could be delayed without delaying the Project’s finish date. Critical Tasks by default have 0 Total Slack.

Let’s create a view for these second level critical tasks, it could be done even directly in Gantt View itself, yet let’s create a view.

We want to define a view which :
•Displays the true Critical Path in the project using red Gantt bars for all tasks that have 0 days of Total Slack.
•Displays the “nearly Critical” Path for the tasks that have Total Slack less than 3 days.
•Highlight these tasks using in the table by background formatting.
•Display bars in the Gantt chart for these tasks in different color.

Create a Table named “Second level critical path.” You can either copy the current Entry table or create a new as needed.

Create a Filter “Second level critical path.” Give below parameters :

Create a View “Second Level Critical path.”
1. Table – Second level critical path
2. Group – No Group
3. Filter – Second level critical path
4. Select – Highlight Filter checkbox.

All ground work done for the view, once you apply this view you can see that all tasks with Total Slack less than 3 (but more than 0 to exclude critical tasks). Now when you apply this all near critical tasks get highlighted in the view.


Now we need to format the Gantt chart to display these tasks in different colored bars. Copied Total Slack into Number1 by using formula, then created Flag1 with formula as – IIf(([Number1]<3 And [Number1]0),1,0).

Now go to chart section -> right click -> bar styles give following values :
You can chose color from the below secction of the bars tab.


Now here comes an overall view where in the table we see tasks which have Total Slack less than 3days and can become critical if delayed beyond 3 days. In chart we can view Critical tasks, regular tasks and near critical tasks which if delayed beyond 3 days will fall on Critical path.


Scenario : I want to run a report to show that since the Start Date of the project how many working days would have elapsed until the finish date of a task. This is instrumental in projects with tight deadline wherein we try to assess that how many working days would fall before we really finish the tasks.
Create a text type task custom field and add the formula – ProjDateDiff([Project Start],[Finish])/480. This will give the exact working days from Project start date that goes into finish the task.

NOTE : In-case your work hours/day are different than Standard Calendar and you are using different project calendar, please add Calendar name as 3rd parameter in the formula within bracket and [Minutes per day] to divide instead of 480.

Project Start Date – 5/5 I have added 5/6-5/7 as the holiday.

Refer to the task ID – 3 which starts on 5/5 (which is also project start date) and ends on 5/8 ( which shows that calculation has considered 5/5 and 5/8 as the working days count for calculations).

Highlighted are the tasks where the difference could easily be assessed.


Scenario : You want to assess the peak units (assignments) of various resources month-wise to better do the capacity planning, you can open your resource usage view – in that add Peak Units in the timephased area by right clicking and seleting it from list of the fields and then zoom in the timephased view to reach to month-wise details and here you have the peak unit assignments done on the resources month-wise. An excellent way to assess the current resource allocation to ensure that resourcing is done effectively.


Assignment Delay field can be used to show the delays on a task on which multiple resources are assigned yet some starts the task as on the task’s start date while few may start it on a later date. This field helps in tracking the number of days an assignment got delayed.

I’m adding the futher details on one of the question I answered on the Forum related to it; wherein Vendors resources assigned on the task started it late while the internal resources started the task on time. So, the user needed the report to track the delayed tasks and days it was delayed.

Say for a task Meeting which should start on 1st May and end on 7th May internal resource Kim and Vendor resources Tim & Ko were assigned. Kim started the task on time while Tim started 2 days late and Ko started a day late as their engagement was only for that span. So, Vendor resources were given Group name – Vendor in resource sheet and then Group by was created filtering first on the Group and second on the assignment delay. This created an overall snapshot of the delay.


How do we handle a resource when we got to deal with Vendor side SPOC who is just acting as the Supervisior/SPOC or Reporting Manager on the tasks getting assigned to his team mates. He won’t be actually working on them. This is the scenario when we are just using the standalone Project for scheduling and reporting purpose.

He can’t be assigned on the tasks with 0% unit as then his data would get pulled on all usage reports and other assignment related reports. He is just a dummy resource actually not working on the task yet crucial for been the point of contact.

For this purpose MS Project has a wonderful option of “Contact” field which is a task oriented field basically visible in Gantt and other task related views like Task Usage. Wherein we can just add the name of vendor SPOC for the artifact credentials. This is clean way to add him without complicating our assignment reports.

Hope this help!!