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

  1. Project Server 2010 - Psi - Calendar Exceptions (Addcalendarexceptionsrow, Removecalendarexceptionsrow) >>>>> Download Now

    >>>>> Download Full

    Project Server 2010 - Psi - Calendar Exceptions (Addcalendarexceptionsrow, Removecalendarexceptionsrow) >>>>> Download LINK

    >>>>> Download Now

    Project Server 2010 - Psi - Calendar Exceptions (Addcalendarexceptionsrow, Removecalendarexceptionsrow) >>>>> Download Full

    >>>>> Download LINK Uy

    ReplyDelete

Post a Comment

Popular posts from this blog

Azure DevOps - Gantt Chart

It's been a while since my last post - in the past couple of weeks I have played around with some videos of topics I find interesting. One of these topics are a very cool way of displaying a Gantt Chart upon your Azure DevOps board's. Check it out here!

Sharepoint/Project Server App with javascript and Web Part

Getting Project Server code to run in a AppPart Today I tried to get project server CSOM/javascript code to run within an app part. This caused a lot of troubleshooting and guessing to get it to work. By simply adding the ps.js library to the app part page I kept getting an error. Library: <script type="text/javascript" src="/_layouts/15/ps.js"></script> Error: "executeordelayuntilscriptloaded is undefined" Then I tried to use ScriptLink to load the library but got the same error. <SharePoint:ScriptLink runat="server" Name="ps.js" Localizable="false" OnDemand="False" LoadAfterUI="True"></SharePoint:ScriptLink> The code I was trying to run was very simpel and worked fine if I added it to a normal aspx page.  $(document).ready(function () {     var projContext = PS.ProjectContext.get_current();       var projects = projContext.get_projects();     projContext.load(projects...

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, ...