共用方式為


Calendar.ListCalendars Method

Gets a list of all enterprise calendars.

Namespace:  [Calendar Web service]
Service reference: http://ServerName:32843/[Project Service Application GUID]/PSI/Calendar.svc
Web service reference: http://ServerName/ProjectServerName/_vti_bin/PSI/Calendar.asmx?wsdl

Syntax

'Declaration
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Calendar/ListCalendars", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Calendar/",  _
    ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Calendar/",  _
    Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Function ListCalendars As CalendarDataSet
'Usage
Dim instance As Calendar
Dim returnValue As CalendarDataSet

returnValue = instance.ListCalendars()
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Calendar/ListCalendars", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Calendar/", 
    ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Calendar/", 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public CalendarDataSet ListCalendars()

Return Value

Type: [Calendar Web service].CalendarDataSet

Remarks

Project Server Permissions

One of the following permissions is required.

Permission

Description

ManageEnterpriseCalendars

Allows a user to manage enterprise calendars. Global permission.

LogOnToProjectServerFromProjectProfessional

Allows a user to connect to the Project Server database from Project Professional. Global permission.

ManageUsersAndGroups

Allows a user to manage Project Server users and groups. Global permission.

NewResource

Allows a user to create a new resource. Global permission.

EditEnterpriseResourceData

Allows a user to edit or delete the specified resource. Category permission.

Examples

The following code lists the calendars, reads the existing calendar exceptions, checks out a calendar to update, adds a new exception to the calendar, and checks the calendar back in.

For information about running this code, see Prerequisites for WCF-Based Code Samples.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.ServiceModel;
using PSLibrary = Microsoft.Office.Project.Server.Library;

namespace Microsoft.SDK.Project.Samples.TestCalendars
{

  class Calendar
  {
    private static SvcCalendar.CalendarClient calendarClient;
    private static SvcResource.ResourceClient resourceClient;
    private const string OUTPUT_FILES = @"C:\Projects\Samples\Output\";
    private const string ENDPOINT = "basicHttp_Calendar";
    private const string RES_ENDPOINT = "basicHttp_Resource";
    private static string outFilePath;
    private static string outExceptionsPath;

    static void Main(string[] args)
    {
      Guid[] calendarID = new Guid[3];
      calendarID[0] = new Guid("B6635B2E-E747-4771-A78B-24F7509629D0");
      calendarID[1] = new Guid("27FB4A18-00C4-491F-9C68-5C68C2B231F2");
      calendarID[2] = new Guid("8283C310-0877-49A2-9264-29A9EDA84CED");

      try
      {
        // Use the endpoints that are defined in app.config to configure the client.
        ConfigClientEndpoints(ENDPOINT);
        SetClientEndpoints(RES_ENDPOINT);

        // If directory does not exist, create it.
        if (!Directory.Exists(OUTPUT_FILES))
        {
          Directory.CreateDirectory(OUTPUT_FILES);
        }
        
        // Assign the path where the output XML file will be saved.
        outFilePath = OUTPUT_FILES + "CalendarList.xml";
        outExceptionsPath = OUTPUT_FILES + "ExceptionsList.xml";

        // Create a dataset.
        SvcCalendar.CalendarDataSet calendarDS =
          new SvcCalendar.CalendarDataSet();
        
        // Get the list of calendars.
        calendarDS = ListOfCalendars(calendarDS);
        
        // Read calendar exceptions.
        calendarDS = ReadCalendarExceptions(calendarDS);
        
        // Get the ID of the user.
        Guid me = resourceClient.GetCurrentUserUid();
        
        // Read the calendar rows.
        calendarDS = ReadCalendarRows(calendarDS);

        bool checkedOut = false;  

        // Check whether the calendar to be updated is checked out.
        foreach (SvcCalendar.CalendarDataSet.CalendarsRow calRow in calendarDS.Calendars)
        {
          if (calRow.CAL_UID == new Guid("8283C310-0877-49A2-9264-29A9EDA84CED"))
          {
            if (calRow.IsNull("CAL_CHECKOUTBY"))
            {
              // Check out the calendar.
              calendarClient.CheckOutCalendars(new Guid[] { calRow.CAL_UID });
              checkedOut = true;
              Console.WriteLine("Calendar checked out.....");
              break;
            }
            else
            {
              // Check whether the calendar is checked out by you.
              if (calRow.CAL_CHECKOUTBY == me)
              {
                checkedOut = true;
                Console.WriteLine("The calendar is already checked out by you");
                break;
              }
              else
              {
                checkedOut = false;
                Console.WriteLine("This calendar has already been checked out");
                Console.ReadLine();
                break;
              }
            }
          }
        }

        if (checkedOut)
        {
          // Copy the calendar to a new dataset for editing.
          string tableName = calendarDS.Calendars.TableName;
          string uidColumn = calendarDS.Calendars.CAL_UIDColumn.ColumnName;
          string nameColumn = calendarDS.Calendars.CAL_NAMEColumn.ColumnName;

          PSLibrary.Filter calFilter = new PSLibrary.Filter();
          
          calFilter.FilterTableName = tableName;
          calFilter.Fields.Add(new PSLibrary.Filter.Field(
            tableName, 
            nameColumn, 
            PSLibrary.Filter.SortOrderTypeEnum.None));
          calFilter.Fields.Add(new PSLibrary.Filter.Field(uidColumn));
          PSLibrary.Filter.FieldOperator foCalendar = new PSLibrary.Filter.FieldOperator(
            PSLibrary.Filter.FieldOperationType.Equal, 
            uidColumn, 
            "8283C310-0877-49A2-9264-29A9EDA84CED");
          calFilter.Criteria = foCalendar;
          
          SvcCalendar.CalendarDataSet returnedCalendarDataSet = 
            calendarClient.ReadCalendars(calFilter.GetXml(), false);
          
          // Update the calendar.
          Guid calID = new Guid("8283C310-0877-49A2-9264-29A9EDA84CED");
          UpdateCalendarException(calID, returnedCalendarDataSet);
          Console.WriteLine("Calendar updated successfully...");
        }
        
        // Check in calendars.
        calendarClient.CheckInCalendars(new Guid[] { calendarID[2] }, true);
        Console.WriteLine("Calendar has been checked in.....");
        
        // To see the updated calendar, call the read calendar exceptions method again.
        calendarDS = ReadCalendarExceptions(calendarDS);
      }

      catch (CommunicationException e)
      {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("\n***System.ServiceModel.CommunicationException:");
        Console.WriteLine(e.ToString());
        Console.ResetColor();
      }
      finally
      {
        Console.Write("\r\n\r\nPress any key....");
        Console.ReadKey();
      }
    }
    
    // Read the calendar rows into a dataset.
    private static SvcCalendar.CalendarDataSet ReadCalendarRows(SvcCalendar.CalendarDataSet calendarDS)
    {
      PSLibrary.Filter cfilter = new PSLibrary.Filter();

      cfilter.FilterTableName = calendarDS.Calendars.TableName;
      cfilter.Fields.Add(new PSLibrary.Filter.Field(calendarDS.Calendars.TableName,
        calendarDS.Calendars.CAL_UIDColumn.ColumnName,
        PSLibrary.Filter.SortOrderTypeEnum.None));
      cfilter.Fields.Add(new PSLibrary.Filter.Field(calendarDS.Calendars.TableName,
        calendarDS.Calendars.CAL_CHECKOUTBYColumn.ColumnName,
        PSLibrary.Filter.SortOrderTypeEnum.None));

      calendarDS = calendarClient.ReadCalendars(cfilter.GetXml(), false);
      return calendarDS;
    }
        
    // Add a new exception to the exceptions table and update the calendar.
    private static void UpdateCalendarException(Guid cID, SvcCalendar.CalendarDataSet calDS)
    {
      SvcCalendar.CalendarDataSet.CalendarExceptionsRow calendarExceptionsRow = 
        calDS.CalendarExceptions.NewCalendarExceptionsRow();

      calendarExceptionsRow.CAL_UID = cID;
      calendarExceptionsRow.Name = "Stand Up Meeting";
      calendarExceptionsRow.Start = new DateTime(2010, 2, 2);
      calendarExceptionsRow.Finish = new DateTime(2010, 2, 4);
      calendarExceptionsRow.RecurrenceFrequency = 1;
      calendarExceptionsRow.RecurrenceType = 0; // 0 implies daily recurrence.
      try
      {
        calDS.CalendarExceptions.AddCalendarExceptionsRow(calendarExceptionsRow);
        calendarClient.UpdateCalendars(calDS, false, false);
      }
      catch (Exception e)
      {
        Console.WriteLine(e.ToString());
      }
    }

    // Read the calendar exceptions.
    private static SvcCalendar.CalendarDataSet ReadCalendarExceptions(SvcCalendar.CalendarDataSet calendarDS)
    {
      PSLibrary.Filter filter = new PSLibrary.Filter();

      filter.FilterTableName = calendarDS.CalendarExceptions.TableName;
      filter.Fields.Add(new PSLibrary.Filter.Field(calendarDS.CalendarExceptions.TableName,
        calendarDS.CalendarExceptions.CAL_UIDColumn.ColumnName,
        PSLibrary.Filter.SortOrderTypeEnum.None));
      filter.Fields.Add(new PSLibrary.Filter.Field(calendarDS.CalendarExceptions.TableName,
        calendarDS.CalendarExceptions.NameColumn.ColumnName,
        PSLibrary.Filter.SortOrderTypeEnum.None));
      
      calendarDS = calendarClient.ReadCalendars(filter.GetXml(), false);
      calendarDS.WriteXml(outExceptionsPath);
      Console.WriteLine("\nSee XML output of calendar exceptions at {0}",
        outExceptionsPath);

      return calendarDS;
    }

    // Get the list of calendars.
    private static SvcCalendar.CalendarDataSet ListOfCalendars(SvcCalendar.CalendarDataSet calendarDS)
    {
      // Get the list of calendars.
      calendarDS = calendarClient.ListCalendars();
      calendarDS.WriteXml(outFilePath);
      
      // Write the list of calendars to an XML file.
      Console.WriteLine("\nSee XML output of the CalendarDataSet at {0}",
          outFilePath);

      return calendarDS;
    }
    
    // Configure the client endpoints.
    public static void ConfigClientEndpoints(string endpt)
    {
      calendarClient = new SvcCalendar.CalendarClient(endpt);
    }
    
    // Configure the client endpoints.
    public static void SetClientEndpoints(string ept)
    {
      resourceClient = new SvcResource.ResourceClient(ept);
    }
  }
}

See Also

Reference

Calendar Class

Calendar Members

Calendar Web Service