TimeSheet.ReadTimesheetByPeriod - Méthode
Obtient l'en-tête de feuille de temps, des éléments de ligne et des données chronologiques en fonction de la période spécifiée et des ressources.
Espace de noms : WebSvcTimeSheet
Assembly : ProjectServerServices (dans ProjectServerServices.dll)
Syntaxe
'Déclaration
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/TimeSheet/ReadTimesheetByPeriod", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/TimeSheet/", _
ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/TimeSheet/", _
Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Function ReadTimesheetByPeriod ( _
resUID As Guid, _
periodUID As Guid, _
select As Navigation _
) As TimesheetDataSet
'Utilisation
Dim instance As TimeSheet
Dim resUID As Guid
Dim periodUID As Guid
Dim select As Navigation
Dim returnValue As TimesheetDataSet
returnValue = instance.ReadTimesheetByPeriod(resUID, _
periodUID, select)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/TimeSheet/ReadTimesheetByPeriod", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/TimeSheet/",
ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/TimeSheet/",
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public TimesheetDataSet ReadTimesheetByPeriod(
Guid resUID,
Guid periodUID,
Navigation select
)
Paramètres
resUID
Type : System.GuidL'ID unique de la ressource.
periodUID
Type : System.GuidL'ID unique de la période de temps.
select
Type : WebSvcTimeSheet.NavigationLa valeur Navigation indiquant quelle période est demandée.
Valeur renvoyée
Type : WebSvcTimeSheet.TimesheetDataSet
Remarques
Cette méthode utilise l'objet QueueSystem . La propriété CorrelationGUID pour le travail est égale à la valeur de la propriété TS_UID .
Autorisations Project Server
Autorisation |
Description |
---|---|
Non standard |
L'utilisateur actuel est le propriétaire de la feuille de temps. |
Permet à un utilisateur d'afficher les feuilles de temps pour une ressource. S'applique uniquement si l'utilisateur actuel n'est pas le propriétaire de la feuille de temps. Autorisation globale. |
|
Autorise l'utilisateur à accepter les feuilles de temps pour approbation. S'applique uniquement si l'utilisateur actuel n'est pas le responsable de feuille de temps. Autorisation globale. |
Exemples
L'exemple de code suivant détermine si une feuille de temps existe pour la première période en cours. Si c'est le cas, l'exemple lit la feuille de temps. Si la feuille de temps n'existe pas, l'exemple crée une feuille de temps avec la valeur par défaut des lignes de feuille de temps qui sont spécifiés sur le serveur.
For critical information about running this code sample, see Prerequisites for Reference Code Samples.
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Data;
using System.Web.Services.Protocols;
using PSLibrary = Microsoft.Office.Project.Server.Library;
namespace Microsoft.SDK.Project.Samples.CreateTimesheet
{
class Program
{
[STAThread]
static void Main()
{
try{
#region Setup
const string PROJECT_SERVER_URI = "http:// ServerName/ProjectServerName/"; // <<--Change to be the name of your server running Project Server and the name of your directory.
const string TIMESHEET_SERVICE_PATH = "_vti_bin/psi/timesheet.asmx";
const string RESOURCE_SERVICE_PATH = "_vti_bin/psi/resource.asmx";
const string ADMIN_SERVICE_PATH = "_vti_bin/psi/admin.asmx";
TimeSheetWebSvc.TimesheetDataSet timesheetDs;
// Set up the services.
TimeSheetWebSvc.TimeSheet timeSheetSvc = new TimeSheetWebSvc.TimeSheet();
timeSheetSvc.UseDefaultCredentials = true;
timeSheetSvc.Url = PROJECT_SERVER_URI + TIMESHEET_SERVICE_PATH;
ResourceWebSvc.Resource resourceSvc = new ResourceWebSvc.Resource();
resourceSvc.Url = PROJECT_SERVER_URI + RESOURCE_SERVICE_PATH;
resourceSvc.UseDefaultCredentials = true;
AdminWebSvc.Admin adminSvc = new AdminWebSvc.Admin();
adminSvc.Url = PROJECT_SERVER_URI + ADMIN_SERVICE_PATH;
adminSvc.UseDefaultCredentials = true;
Guid myUid = resourceSvc.GetCurrentUserUid();
#endregion
#region Read Timesheet
// Time periods must be created by the admin to use timesheets.
// We are just reading the first open period here.
AdminWebSvc.TimePeriodDataSet timeperiodDs = adminSvc.ReadPeriods(AdminWebSvc.PeriodState.Open);
Guid periodUid = timeperiodDs.TimePeriods[0].WPRD_UID;
// If timesheet already exists, read it.
// (To delete an existing unsubmitted timesheet,
// go to the My Timesheet area of the Project Web Access site.)
timesheetDs = timeSheetSvc.ReadTimesheetByPeriod(myUid,periodUid,TimeSheetWebSvc.Navigation.Current);
#endregion
#region CreateTimesheet if it doesn't exist, then read it
// If the timesheet does not exist, create it.
if(timesheetDs.Headers.Count<1)
{
timesheetDs = new TimeSheetWebSvc.TimesheetDataSet();
TimeSheetWebSvc.TimesheetDataSet.HeadersRow headersRow = timesheetDs.Headers.NewHeadersRow();
headersRow.RES_UID = myUid;
headersRow.TS_UID = Guid.NewGuid();
headersRow.WPRD_UID = periodUid;
headersRow.TS_CREATOR_RES_UID = myUid;
headersRow.TS_NAME = "Timesheet ";
headersRow.TS_COMMENTS = "Random comment text here";
headersRow.TS_ENTRY_MODE_ENUM = (byte)PSLibrary.TimesheetEnum.EntryMode.Weekly;
timesheetDs.Headers.AddHeadersRow(headersRow);
// Create the timesheet with the default line types that are specified by the admin.
timeSheetSvc.CreateTimesheet(timesheetDs, TimeSheetWebSvc.PreloadType.Default);
timesheetDs = timeSheetSvc.ReadTimesheet(headersRow.TS_UID);
}
CodeSampleUtilities.WriteTablesFormated("Timesheet after create:" ,timesheetDs.Tables);
#endregion
}
catch (SoapException ex)
{
ExceptionHandlers.HandleSoapException(ex);
}
catch (WebException ex)
{
ExceptionHandlers.HandleWebException(ex);
}
catch (Exception ex)
{
ExceptionHandlers.HandleException(ex);
}
finally
{
ExceptionHandlers.ResetConsole();
}
}
class ExceptionHandlers
{
public static void HandleSoapException(SoapException ex)
{
PSLibrary.PSClientError error = new PSLibrary.PSClientError(ex);
PSLibrary.PSErrorInfo[] errors = error.GetAllErrors();
string errMess = "==============================\r\nError: \r\n";
for (int i = 0; i < errors.Length; i++)
{
errMess += "\n" + ex.Message.ToString() + "\r\n";
errMess += "".PadRight(30, '=') + "\r\nPSCLientError Output:\r\n \r\n";
errMess += errors[i].ErrId.ToString() + "\n";
for (int j = 0; j < errors[i].ErrorAttributes.Length; j++)
{
errMess += "\r\n\t" + errors[i].ErrorAttributeNames()[j] + ": "
+ errors[i].ErrorAttributes[j];
}
errMess += "\r\n".PadRight(30, '=');
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(errMess);
}
public static void HandleWebException(WebException ex)
{
string errMess = ex.Message.ToString() +
"\n\nLog on, or check the Project Server Queuing Service";
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Error: " + errMess);
}
public static void HandleException(Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Error: " + ex.Message);
}
public static void ResetConsole()
{
Console.ResetColor();
Console.WriteLine("\r\n\r\nPress any key...");
Console.ReadKey();
}
}
class CodeSampleUtilities
{
// Write all contents of a table collection to the console.
public static void WriteTablesToConsole(System.Data.DataTableCollection theTables)
{
Console.ForegroundColor = ConsoleColor.DarkGreen;
foreach (System.Data.DataTable table in theTables)
{
int[] columnWidths = new int[table.Columns.Count];
int tableWidth = 0;
string dataString;
Console.WriteLine("Table: " + table.TableName);
// Write out the column names and get their spacing.
StringBuilder tableRow = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
columnWidths[i] = GetColumnWidth(table.Columns[i]);
tableRow.Append(table.Columns[i].ColumnName.PadRight(columnWidths[i]));
tableWidth += columnWidths[i];
}
// Add a space so that it will not wrap.
tableWidth += 1;
// Make the console as wide as the widest table.
Console.BufferWidth = (Console.BufferWidth > tableWidth ? Console.BufferWidth : tableWidth);
tableRow.Append("\r\n");
Console.Write(tableRow.ToString());
// Write out the data.
foreach (DataRow row in table.Rows)
{
tableRow = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
dataString = row[i].ToString();
// Truncate output, if it is wider than
// the desired column width.
if (dataString.Length >= columnWidths[i])
{
dataString = dataString.Substring(0, columnWidths[i] - 1);
}
// Add the output to the stringbuilder and pad right to fill
// up to the column width.
tableRow.Append(dataString.PadRight(columnWidths[i]));
}
tableRow.Append("\r\n");
Console.Write(tableRow.ToString());
}
Console.Write("\r\n".PadLeft(tableWidth, '-'));
}
Console.ResetColor();
}
// A helper function for WriteTablesToConsole.
private static int GetColumnWidth(DataColumn column)
{
// Note: Might not handle byte[]data types well.
const int MAX_COL_WIDTH = 40;
int dataWidth = 0;
// Return 12 for numbers, 30 for dates, and string width for strings.
switch (column.DataType.UnderlyingSystemType.ToString())
{
case "System.Boolean":
case "System.Byte":
case "System.Byte[]":
case "System.Char":
case "System.Decimal":
case "System.Double":
case "System.Int16":
case "System.Int32":
case "System.Int64":
case "System.SByte":
case "System.Single":
case "System.UInt16":
case "System.UInt32":
case "System.UInt64":
dataWidth = 12;
break;
case "System.DateTime":
case "System.TimeSpan":
dataWidth = 30;
break;
case "System.Guid":
dataWidth = 37;
break;
case "System.String":
// If it has a maxlength, use it.
if (column.MaxLength > 0)
{
dataWidth = column.MaxLength;
}
else
{
// Otherwise, use the max col width.
dataWidth = MAX_COL_WIDTH;
}
break;
default:
dataWidth = column.ColumnName.Length;
break;
}
// Truncate, if over the maxlength.
if (dataWidth > MAX_COL_WIDTH)
{
dataWidth = MAX_COL_WIDTH;
}
// Always be at least as wide as the colum name.
return (column.ColumnName.Length > (dataWidth) ? column.ColumnName.Length + 1 : dataWidth);
}
public static void WriteTablesFormated(string Title, System.Data.DataTableCollection theTables)
{
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("".PadRight(Console.BufferWidth, '='));
Console.ResetColor();
Console.WriteLine(Title);
CodeSampleUtilities.WriteTablesToConsole(theTables);
}
public static void WriteSeparator()
{
}
}
}
}