Compartir a través de


del método Calendar.ReadCalendars

Obtiene las excepciones del calendario que coinciden con el conjunto de filtros.

Espacio de nombres:  WebSvcCalendar
Ensamblado:  ProjectServerServices (en ProjectServerServices.dll)

Sintaxis

'Declaración
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Calendar/ReadCalendars", 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 ReadCalendars ( _
    filter As String, _
    autoCheckOut As Boolean _
) As CalendarDataSet
'Uso
Dim instance As Calendar
Dim filter As String
Dim autoCheckOut As Boolean
Dim returnValue As CalendarDataSet

returnValue = instance.ReadCalendars(filter, _
    autoCheckOut)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Calendar/ReadCalendars", 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 ReadCalendars(
    string filter,
    bool autoCheckOut
)

Parámetros

  • autoCheckOut
    Tipo: System.Boolean

    Si True, se comprueba el calendario o calendarios para su edición.

Valor devuelto

Tipo: WebSvcCalendar.CalendarDataSet

Comentarios

Advertencia

Si el parámetro filter es String.Empty, ReadCalendars devuelve un error que se van CalendarFilterInvalid en System.ServiceModel.CommunicationException.

Para obtener una lista de todos los calendarios de empresa, use el método ListCalendars() .

El método ReadCalendars admite sólo las excepciones de calendario para calendarios de empresa, no toda la funcionalidad de calendario empresarial en Project Server. Puede obtener la hora para los recursos de Project Server como excepciones de calendario con el espacio de nombres WebSvcResource .

Semanas de trabajo en los calendarios de empresa no se normalizan en la base de datos publicada. Información de la semana de trabajo se almacena como datos binarios, por lo que no hay ninguna consulta directa disponible para toda la información de calendario a un CalendarDataSetde carga.

Nota

El parámetro filter funciona con los operadores de Criteria para filtrar filas únicamente en el principal CalendarsDataTable. Por ejemplo, no puede usar filter con el método ReadCalendars para filtrar filas en la CalendarExceptionsDataTable. Si intenta filtrar filas en un secundario DataTable, la interfaz PSI devuelve una excepción FilterInvalid .

However, you can use the Fields.Add method to filter columns in the primary CalendarsDataTable and in the secondary CalendarExceptionsDataTable. For more information, see How to: Use a Filter Parameter with PSI Methods.

Permisos de Project Server

Permiso

Descripción

ManageEnterpriseCalendars

Permite a un usuario Administrar calendarios de empresa. Permiso global.

Ejemplos

El código siguiente enumera los calendarios, lee las excepciones de calendario existente, desprotege un calendario que se va a actualizar, se agrega una nueva excepción en el calendario, y vuelve a proteger el calendario.

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);
    }
  }
}

Vea también

Referencia

clase Calendar

Miembros Calendar

Espacio de nombres WebSvcCalendar

Otros recursos

How to: Use a Filter Parameter with PSI Methods