Skip to main content

Project Server 2010 - PSI - Calendar Exceptions (AddCalendarExceptionsRow, RemoveCalendarExceptionsRow)

In the recent week we were creating an integration with vacation information from an external system into Project Server (2010).
We wanted to replicate all the calendar exceptions from the external system into Project Server.

This task looked quite simple until we got started using the PSI interface. We encountered a couple of problems and strange documentation. In our scenario we could not update the Project Server to the latest service pack so i do not know if these errors already are fixed.

In the following I will demonstrate how to delete all calendar exceptions on a resource and add only one new exception. This program was only created to outline how the PSI interface worked with calendar exceptions (creating one random exception does not make a lot of sense).




//The resource uid on the resource we want to change.
Guid resUID = new Guid("10b4d15c-4b62-417b-9b4d-924000c14cac");

WS_Resources.Resource wsresource = new WS_Resources.Resource();
wsresource.Url = "http://MyPWA/PWA/" + "/_vti_bin/psi/resource.asmx";
wsresource.Credentials = new System.Net.NetworkCredential("Administrator", "pass@word1", "CONTOSO");
WS_Resources.ResourceDataSet resDS = wsresource.ReadResources(""/*no filter*/, false);

WS_Resources.ResourceDataSet.CalendarExceptionsRow[] calExceptions = null;

//Not needed, only part of test
foreach (WS_Resources.ResourceDataSet.ResourcesRow rrow in resDS.Resources)
{
    if (rrow.RES_UID == resUID)
    {
        //Find exceptions so we can call RemoveCalendarExceptionsRow on each row
        calExceptions = rrow.GetCalendarExceptionsRows();
        break;
    }
}
foreach (WS_Resources.ResourceDataSet.CalendarExceptionsRow row in calExceptions)
{
    if (row.RES_UID == resUID)
    {
        //You would think this will do the trick, however this actually caused
        // an Unhandled Comunication Error when we called UpdateResources().
        //resDS.CalendarExceptions.RemoveCalendarExceptionsRow(row);
        //row.Delete();
        break;
    }

}
           
foreach (WS_Resources.ResourceDataSet.CalendarExceptionsRow calexrow in resDS.CalendarExceptions)
{
    if (calexrow.RES_UID == resUID)
    {
        //This is what works
        calexrow.Delete();
    }
}

WS_Resources.ResourceDataSet.CalendarExceptionsRow newCE = resDS.CalendarExceptions.NewCalendarExceptionsRow();
newCE.RES_UID = resUID;
newCE.Start = new DateTime(2013, 08, 12);
newCE.Finish = new DateTime(2013, 08, 16);
newCE.Name = "Vacation";
newCE.RecurrenceFrequency = 1;
newCE.RecurrenceType = (int)PSLibrary.CalendarConstants.CalendarRecurrenceType.Daily;
resDS.CalendarExceptions.AddCalendarExceptionsRow(newCE);
try
{
    wsresource.CheckOutResources(new Guid[] { resUID });
    wsresource.UpdateResources(resDS, false, false);
    wsresource.CheckInResources(new Guid[] { resUID }, false);
}
catch (Exception Ex) { wsresource.CheckInResources(new Guid[] { resUID }, true); throw Ex; }
finally {  }

Comments

Popular posts from this blog

Error occurred in deployment step 'Add Solution': Attempted to perform an unauthorized operation.

Received this error today when trying to create a SharePoint solution against a newly created site.


My first problem was the site was configured to use a port which was already used by another web site. Therefore the site could not start at all.

In my case both Default Web Site and SharePoint - 2000 was both using port 2000. Changing the port of Default Web Site and I was able to start the site.

However now I still received the same error message. When browsing the site I realized I did not have access to the site.

Giving access to my user and I was able to deploy the solution.

To sum up this post:
 - Check the site can start
 - Check the site can be browsed
 - Check your user have access to the site

SharePoint 2013 : Cannot connect to the targeted site.

On my Contoso environment I was trying to create a sandboxed solution. I have already configured my app domain and app management services. But when I tried to validate the site I got the following error message.
Error

Cannot connect to the targeted site. This error can occur if the specified site is not hosted on the local system. SharePoint solutions work only with locally-installed versions of SharePoint Foundation or SharePoint Server. Remote development is supported only for apps for SharePoint 2013.
If you search around the internet you will find many people suggesting to change your host file from 127.0.0.1 to the actual IP.

Solution However the solution, at least on a Contoso environment, is to type in the actual IP address in the host file.
(the IP 192.168.150.1 is the special IP for Contoso, I have 2 network adapters)
And do not forget to clear/flush the DNS cache. Now the solution can be created and validates.


PowerShell results size unlimited/truncated - $FormatEnumerationLimit/Width

Ever experienced the problem where you run a Powershell command and you cannot see the whole result because the result is truncated.

Problem: If you for example run the Test-SPsite command you might see something like the following:


Site : SPSite Url=http://atlas/pwa Results : { SPSiteHealthResult Status=Passed RuleName="Conflicting Content Types" RuleId=befe203b-a8c0-48c2-b5f0-27c10f9e1622, SPSiteHealthResult Status=FailedWarning RuleName="Customized Files" RuleId=cd839b0d-9707-4950-8fac-f306cb920f6c, SPSiteHealthResult Status=Passed RuleName="Missing Galleries" RuleId=ee967197-ccbe-4c00-88e4-e6fab81145e1, SPSiteHealthResult Status=Passed RuleName="Missing Parent Content Types" RuleId=a9a6769f-7289-4b9f-ae7f-5db4b997d284, SPSiteHealthResult Status=FailedError RuleName="Missing Site Templates" RuleId=5258ccf5-e7d6-4df7-b8ae-12fcc0513ebd, …