PSVR2010: QueueCreateProject using an Enterprise Project Type

An interesting question came in this week from a couple of different directions – though may have started with the same customer – but I learned something new so thought it worthwhile to share.  The problem was that when the PSI Project Web Service method QueueCreateProject is used with an Enterprise Project Type (EPT) and that EPT is set to use a project plan template, then the create was failing with an EnterpriseProjectTypeInvalidData error.  To be honest I didn’t even realize you could use an EPT with that method – so started researching…  I could certainly see that we have a property you can set in the dataset you pass to that method – ProjectDataSet..::..ProjectRow..::..ENTERPRISE_PROJECT_TYPE_UID Property – but could also envisage that some of the other contents of the dataset migth conflict with the data in the other tables in the dataset – so this might cause the failure.

Thanks Bia for coming up with the definitive answer!  You can use the EPT UID (which you find by drilling in to the specific EPT on the Enterprise Project Types page of Server Settings, then looking at the System Identification Data at the foot of the page) BUT you must ensure a couple of things. 

  • You CANNOT have any of the following tables existing in the project dataset – ·
    • Task
    • TaskCustomFields
    • ProjectResource
    • ProjectResourceCustomFields
    • Assignment
    • AssignmentCustomFields
    • Dependency
  • In the Project Row of the dataset you must ONLY set the following columns
    • PROJ_UID
    • ProjectOwnerID

And the error you will get if you don’t follow these rules is:

w3wp.exe (0x0604)                           0x0628    SharePoint Foundation             Runtime                           tkau    Unexpected    System.Web.Services.Protocols.SoapException: ProjectServerError(s) LastError=EnterpriseProjectTypeInvalidData Instructions: Pass this into PSClientError constructor to access all error information    at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(…

Thanks too to Klaudia and Sebastian for raising the issue.