Calendar.UpdateCalendars 方法
新增、 修改或刪除企業行事曆例外狀況。
命名空間: WebSvcCalendar
組件: ProjectServerServices (在 ProjectServerServices.dll 中)
語法
'宣告
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Calendar/UpdateCalendars", 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 Sub UpdateCalendars ( _
calendarDataSet As CalendarDataSet, _
validateOnly As Boolean, _
autoCheckIn As Boolean _
)
'用途
Dim instance As Calendar
Dim calendarDataSet As CalendarDataSet
Dim validateOnly As Boolean
Dim autoCheckIn As Boolean
instance.UpdateCalendars(calendarDataSet, _
validateOnly, autoCheckIn)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Calendar/UpdateCalendars", 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 void UpdateCalendars(
CalendarDataSet calendarDataSet,
bool validateOnly,
bool autoCheckIn
)
參數
calendarDataSet
類型:WebSvcCalendar.CalendarDataSetcalendarDataSet建立或刪除。
validateOnly
類型:System.Boolean如果True,執行測試,以確保資料要存回有效,但未完成 checkin。
autoCheckIn
類型:System.Boolean如果True,新建立的行事曆例外存回自動。
備註
UpdateCalendars方法會新增新的例外狀況,會刪除例外狀況,都不存在,並修改CalendarDataSet物件中所指定的例外狀況。
UpdateCalendars方法支援企業行事曆,不是所有 Project Server 中的企業行事曆功能僅行事曆例外狀況。您可以新增或刪除時間關閉 Project Server 資源行事曆例外狀況為使用WebSvcResource命名空間。
此方法不會修改企業行事曆例外狀況。若需要更新,您必須刪除並重新建立行事曆例外狀況。
發佈資料庫中沒有正規化回企業行事曆工作週。工作週資訊會儲存為二進位資料,所以沒有可載入所有的行事曆資訊來CalendarDataSet沒有直接查詢。
若要檢視已更新的例外狀況,請按一下 [ Edit CalendarProject Web App中。
Project Server 權限
權限 |
描述 |
---|---|
可讓使用者管理企業行事曆。通用權限。 |
範例
下列程式碼列出行事曆,讀取現有的行事曆例外取出更新行事曆、 行事曆,並檢查行事曆回新增的新例外規則。
For more information about running this code sample, 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);
}
}
}