2015/06/09

Create Project status update Part 2

In the previous post ( Create Project status update Part 1 ) we created all the parts needed to Create a project status update, in this post we will put it all together and see how it works ,

Go ahead start your SharePoint 2013 designer and create a Project Server workflow, in the workflow insert the Status update stage and add the following steps

  1. Wait for Event when a project is submitted (very very very important) .
  2. Create item in the list that we have created and map the project fields to the list field (again do not forget the Project UID) 
  3. in the end in the transition to stage send the workflow back to the same stage it will look something like below 
Project Server Workflow

The reason wait for event is so important is if you dont have it the workflow will run infinitely, so the wait for will stop it. 

and this is how my test mapping looks something like this 
Mapping Project data to status update list 

that is it save and publish, next step is associate that workflow with an EPT , create a project and fill in all the data required, then hit the workflow submit button, the workflow will kick-off , your Status update PDP will look something like this after couple of runs 

Status update list

Next post will talk about the limitations and how to improve this 

Create Project status update Part 1

Today we will work on a very basic and easy way to create a Project status update report without the need for a complicated info-path forms or creating multiple lists and workflows. 

so the issue i was working on a very basic implementation for a client who wanted a straight forward Project Online implementation, the only non standard feature they asked for is a weekly status update report. i have done that before using infopath and suctom code but this is Project Online things are a bit different. so i did some search didn't take me long to find a post by Andrew Lavinsky  creating status reports with project online and sharepoint designer and i wanted to start working with it but it was a bit longer than i wanted and i thought there might be a way to simplify it it took me a while but i got there :) , a simple and quick to implement solution so lets start in this part we will create all the.

Keep in mind in this case the client do not require a workflow for their projects (with some creativity it can be incorporated)

Step 1 : The list 

we start with the basic create a share point custom list and add all the fields that you wish to report on, make sure that you include the Project GUID in that list 

Step 2:  The PDP 

Go to your PWA and create a new PDP give it a name , and add the following items to it 
a query string filter to capture the project guid from the URL. then add the list that we just created above, In the Query string webpart create capture the ProjUID from the URL

Create Status update PDP
next send the captured Project UID to the list to make sure only project related items will be in display, form the query string webpart create a connection to the list on the page 
Link the Project uid filter 

Save the PDP and then change its type to Workflow Status,That all we need from this PDP at this stage save it and we will get back to it later. 

Step 3: The Stage

Go to your PWA and create a stage, i have created a stage and called it status update stage under a phase that i also called status update (feel free to name it as you wish) 
Create Project status update Stage 

That is it , in the post i will write on how we will put the pieces together and have a nice and simple way of logging our status updates

2015/04/28

Project Online Workflow Issue (HTTP InternalServerError)

Hi

Just a quick post about an issue that i have had this week and i just managed to get to the bottom of it, I was working on one of my clients sites trying to create what you can consider the most straightforward WF it was a sequential workflow with no approvals, when i created the first project the workflow wouldn't move with and was stuck with the following status


Workflow Stage Status

The workflow is still processing. Refresh the page and try again.


when i went to check the workflow status it was in started for a while with the following error

The environment im working on is a test PWA (not the default PWA URL) and with SharePoint permission mode.

to resolve this issue or better to workaround this issue I have found that I had the Project site create ion settings is set to Do not create a site , and when I switched that to automatically create a site and I attached a project site to my project and restarted the workflow it did work fine with no issues.

I have a case open with Microsoft I will keep you all updated on this

have a nice day :)
Malek

2015/04/17

Playbook tool and Project Online

Hi Again

its Friday end of day so i will make it as short and fast as possible

If you have been working with Project Server for the last couple of years , you know that it was relatively easy to move Project Server on premise  instance between environments, data base migration was specifically useful when moving from development or test environment to production environment.

that didn't come without limitations especially when the migration required is a partial migration for some newly developed configuration, again there was a solution The Microsoft Project Server 2010 Server Settings Backup/Restore tool is part of the Microsoft Project Server 2010 Resource Kit (PRK).

The tool enabled us to backup the configurations from one environment to another, it even allowed to  merge or replace the settings.

That bring us to Project Online, as we all know database migration is simply not an option, some looking around will lead us to one conclusion there is some 3rd party tools , the tools available do provide all the required functionality to migrate configurations and data, and they are supported  but there is one tiny issue they are not free :)

so i needed a quick solution to migrate some basic configurations and settings between Project online environments the configurations were some custom fields (with lookup tables),  security configurations , Quick launch and views i started the manual process and then i got an idea why not to use the same tools for Project 2010 for project online, technically it is possible (with limitations)

so i downloaded and installed Project Server Playbooks, if you just simply start it and tried to login using windows authentication or even Form Authentication you will get the error below


The error basicaly is that the tool do not support authentication  to office 365, so to come around that issue i remembered a nice trick that i came across before when i was trying to connect my LINQPad to Project Server Odata, the solution basically use Fidler to take over the authentication cookie and reuse it again 

so first step go and download fidler, then follow the steps from this link  you will be interested in this section 


"Our “solution”: we will “cache” the authentication cookies from an Internet Explorer session, then inject the same cookies to the LINQPad sessions.
Start Fiddler, choose Roles / Customize Rules…, and edit the CustomRules.js file (don’t forget to create a backup!).
Before the OnBeforeRequest function add this code:
static var authCookies = "";
static var o365Site = "yourO365Site.sharepoint.com"; // modify this value!

At the beginning of the OnBeforeRequest function add this code:
if (oSession.HostnameIs(o365Site)) {
  var cookie = oSession.oRequest["Cookie"];
  if ((cookie == "") && (authCookies != "")) {
    //oSession.oRequest["Accept"] = "text/html, application/xhtml+xml, */*";
    oSession.oRequest["Cookie"] = authCookies;
  }
}

At the beginning of the OnBeforeResponse function add this code:
if (oSession.HostnameIs(o365Site)) {
  var cookie = oSession.oRequest["Cookie"];
  if (cookie != "") {
    authCookies = cookie;
  }
}

Done! Save the changes of CustomRules.js. Then (having Fiddler running and capturing network traffic!) start IE, navigate to your O365 site, and authenticate yourself when requested. Cookies are cached in Fiddler at this point."

now once you have the configurations done correctly run playbooks , feed in your project on-line URL and hit ok , in a minute or two you will get the lovely view below 




enjoy backing up and restoring, i did notice some limitations around some configurations backup but still the tool can do about 80% of the job and its free :) 

  • It goes without saying but i will say it over and over and over , this is not a supported method by Microsoft , i DO NOT  recommend using it on any production environment
  • I do recommend the official recommended methods by Microsoft 
  • another warning , when you take a backup make sure that the XML was downloaded successful with no errors or warnings before you attempt to restore it back 



Have a good day

Malek 

2015/04/01

Project Online Timesheet Issue

Hi Again,

Recently we have noticed an issue with the Timesheet page and with the Timesheet web part.

 the issue occur when the Timesheet is not yet created  and users try to access a page that contains a webpart to display that webpart

 the page will not load and you will get the ugly message
(Sorry Something went wrong)



at the moment Microsoft is aware of this issue and the team is working on a solution for the issue , until then the only workaround is to remove any link that will lead users to the pwa/timesheet.aspx page, direct users to the manage timehseets page so they have to click on click to create the timesheet


hopefully this will help you :)


2013/10/03

Quick Tip Project Server 2013 Online PDP

Hi
I have been working on this Project Server 2013 environment for the last week , yesterday i have had this problem that almost made me pull my hair out

simply i have a costume field that is linked to a lookup table , the custom field is a RAG so it should display graphical indicator... simply  i created  it and added the custom field to the PDP ... open the project to edit to find this


This Web Part was unable to load.
Information that may be useful in solving this problem was written to the Unified Logging Service (ULS) log 
an error in the web part with a nice GUID that to a ULS entry that i don't have access to ( i have opened a Support request with Microsoft) meanwhile i couldn't just wait around so i started trying to figure out what is the problem , i have noticed that the web-part do show normally when the project is in read only mode the problem only happen when i open the project in edit mode , so it must be a problem when project server try to read the custom field and what all of those custom fields have in common they are new and empty

to fix this i went to the lookup table added a new entry (N/A) and from the custom field i selected the new value as a default , that did solve the issue for me

hope this help
have fun

2013/09/30

Force Check-in Enterprise Objects page is not working

Hi Again

last week i got a very strange support request form one of my clients that says (we wanted to force check in a project we went as instructed Server settings under database administration clicked on Force Check-in Enterprise Objects link and we got the error below)

















This is a Project Server 2010 installation .

it wasn't a security issue , or SharePoint problem , i started digging in the ULS log and found the entry below

Exception occurred in method
Microsoft.Office.Project.Server.BusinessLayer.Admin.AdminReadCheckedOutEnterpriseProjects
System.IndexOutOfRangeException: Index was outside the bounds of the array. at Microsoft.Office.Project.Server.BusinessLayer.Admin.ReadCheckedOutEnterpriseProjects()
at Microsoft.Office.Project.Server.Wcf.Implementation.
PWAImpl.AdminReadCheckedOutEnterpriseProjects()

The problem
in my case the EGlobal project was checked out to a user that was deleted form the system causing the method to return an exception, in other cases it might be another project in this case it will be a bit more complicated to discover if that was the case leave me a comment will answer it for you

Solution is two parts
PLEASE PLEASE PLEASE PLEASE Take a back up of all of your databases before you start
1- the quick fix (Not supported by Microsoft)

run the script below against your published database , this will reset the checked out by column (basically
force check-in)

UPDATE [MSP_PROJECTS]
SET PROJ_CHECKOUTBY=null
WHERE PROJ_NAME='EGlobal'

2- the second and most important please install the latest updates by Microsoft


hope that helps

Malek

2013/07/09

PDP Security

Hi ,

Im a bit in a rush so i will keep this simple and straight forward

A client asked me if they can hide a Project Detail Page (PDP) from certain users, i know that there is no out of the box settings to achieve that so i lunched Google and the first result was a blog for Andrew Lavinsky  (http://azlav.umtblog.com/2011/06/15/applying-security-to-a-pdp-redux/) the idea was to disable security inheritance on the PDP document level and assigning unique permission (Simple enough)  but if you already followed the link you will notice Andrew comment that there is an issue with that approach that it will only work under a very specific case

so i approached it a little bit different instead of setting up and changing permissions on the PDP level i simple created a SharePoint group (group who is allowed to view that PDP) and configured target audience for the Project Server Custom field web-part to target only that group.

and that is it , not the cleanest way the PDP name and link will still appear but it is the only way for the moment , please let me know if you have any better ideas

Cheers
Malek 

2013/01/30

SQL Parameter Selector

Hi

This is something that i came across couple of times while working on a reporting project , and i hope it might help someone else 

We have a data set that we need to select form the database based on list of parameter , the client requirements was to have a selector that identify which filed to filter against with  start and finish date parameters 

table structure

UserID     ActionID    StartDate   FinishDate

the selection criteria was the user can select if they want to filter based on the start date or on the finish date , that means on the report there is only two date parameter

@startDate  and @EndDate

the solution was simple enough


  • I added a parameter called @filterselector of type boolean in the report 
  • in my query i added the following where 
((@filterselector = 1 OR 
 (dbo.I1_Storm_ProcessInstBuisnessArea.StartDate BETWEEN @StartDAte AND @FinishDate))
 AND
(@filterselector = 0 OR 
 (dbo.I1_Storm_ProcessInstBuisnessArea.FinishDate BETWEEN @StartDAte AND @FinishDate)))


simple and easy solution , please if you know a better way let me know :) 


cheers
Malek 

2012/09/27

Project Server 2010 : FOREIGN KEY constraint Error

Hello again ,

Today we are having a n interesting project Server Issue , I dont have a clear idea on the cause of this Issue but Microsoft calims its a bug that will cause some of your GUID to change when you try to use the save and send feature .... anyway when you try to publish you r project you will end up with this error



General
Reporting message processor failed:
ReportingProjectChangeMessageFailed (24006) - The INSERT statement conflicted with the FOREIGN KEY constraint "FK_MSP_EpmTaskBaseline_ProjectUID_TaskUID". The conflict occurred in database "ProjectServer_Reporting", table "dbo.MSP_EpmTask". The statement has been terminated.



so what this error basically say that there is  foreign key want found when it was trying to insert a task with a foreign key UID from another table , in another words less technical there is some data missing from the database ...


so the bad news is you cant really know what is the cause behind this , the good news is there is a solution

actually to make it better the solution is easy
 backup ..backup..backup 


run the following script against your draft database and against your published database
select PROJ_NAME, MTB.PROJ_UID,TASK_UID,TB_BASE_NUM from MSP_TASK_BASELINES MTB


inner join MSP_PROJECTS MP on MTB.proj_uid=MP.proj_uid

where TASK_UID not in (select TASK_UID from MSP_TASKS)

    if and you should get some raws with this command those tasks are the origin of your Issue to resolve it run the following command againest your draft and puplished databes


DELETE FROM MSP_TASK_BASELINES WHERE TASK_UID not in (SELECT TASK_UID FROM MSP_TASKS)


once you run this make sure that you clean the project cashe from the user machine and republish it again

hope this help
regards