Метод CustomFields.ReadCustomFields2
Получает корпоративного настраиваемого поля определения, которых формул в виде зависит от языка.
Пространство имен: WebSvcCustomFields
Сборка: ProjectServerServices (в ProjectServerServices.dll)
Синтаксис
'Декларация
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/ReadCustomFields2", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/", _
ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/", _
Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Function ReadCustomFields2 ( _
xmlFilter As String, _
autoCheckOut As Boolean _
) As CustomFieldDataSet
'Применение
Dim instance As CustomFields
Dim xmlFilter As String
Dim autoCheckOut As Boolean
Dim returnValue As CustomFieldDataSet
returnValue = instance.ReadCustomFields2(xmlFilter, _
autoCheckOut)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/ReadCustomFields2", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/",
ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/",
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public CustomFieldDataSet ReadCustomFields2(
string xmlFilter,
bool autoCheckOut
)
Параметры
xmlFilter
Тип: System.StringОграничивает количество возвращаемых данных.
autoCheckOut
Тип: System.BooleanЕсли true, извлечение настраиваемых полей для внесения изменений.
Возвращаемое значение
Тип: WebSvcCustomFields.CustomFieldDataSet
Замечания
Это новый метод Project Server 2010. Если настраиваемое поле или графических индикаторов вычисляется по формуле, метод ReadCustomFields2 преобразует формулы в возвращенные CustomFieldDataSet в формат, который зависит от языкового стандарта, указанного в панели управления язык и региональные стандарты компьютера с Project Server. Для сравнения метод ReadCustomFields возвращает CustomFieldDataSet где формулы не зависят от языкового стандарта.
Примечание
Для Project Server 2010 возвращенные CustomFieldDataSet может включать настраиваемого поля Relative Importance и Project Impact настраиваемого поля. Project Web App не отображает настраиваемые поля на странице Корпоративные настраиваемые поля и таблицы подстановки, так как они встроенные для анализа портфеля и не может изменить или удалить.
. For more information, see How to: Use a Filter Parameter with PSI Methods
Разрешения Project Server
Разрешение |
Описание |
---|---|
Нестандартные |
Необходимо иметь глобальное разрешение ManageWorkflow или ChangeWorkflow глобальное разрешение. Если у вас есть разрешение ChangeWorkflow , также требуется разрешение категории OpenProject и разрешение категории SaveProject . |
Позволяет пользователю подключиться к базе данных Project Server из профессионального выпуска Project. Глобальное разрешение. |
|
Позволяет пользователям изменять определения корпоративных настраиваемых полей и значения таблицы подстановки. Глобальное разрешение. |
|
Позволяет пользователю управлять Project Server пользователей и групп. Глобальное разрешение. |
|
Позволяет пользователю создать проект. Глобальное разрешение. |
|
Позволяет пользователям просматривать данные о выделении ресурсов. Глобальное разрешение. |
Примеры
Пример ReadCustomFieldsTest выполняет следующие действия:
Считывает все настраиваемые поля в установке Project Web App, заданного с адреса конечной точки в файле app.config, а затем записывает XML-файл CustomFieldDataSet.
Считывает данные таблицы подстановки для указанного языка, а затем записывает XML-файл LookupTableDataSet. В таблице подстановки XML-данных включает в себя семейств сайтов из следующих таблиц: LookupTables, LookupTableMasksи LookupTableTrees.
For information about using the code sample in a Microsoft Visual Studio 2010 project and creating an app.config file for configuration of the WCF endpoints, see Необходимые условия для примеров кода на основе WCF в Project 2013.
using System;
using System.Text;
using System.ServiceModel;
using System.Xml;
using PSLibrary = Microsoft.Office.Project.Server.Library;
namespace Microsoft.SDK.Project.Samples.ReadCustomFieldsTest
{
class Program
{
private const string ENDPOINT_CUSTOMFIELDS = "basicHttp_CustomFields";
private const string ENDPOINT_LOOKUPTABLE = "basicHttp_LookupTable";
// Change the output directory for your computer.
private const string OUTPUT_FILES = @"C:\Project\Samples\Output\";
private static SvcCustomFields.CustomFieldsClient customFieldsClient;
private static SvcLookupTable.LookupTable lookupTableClient;
private static string outFileCustomFieldsDs;
private static string outFileLookupTableDs;
private static int language = 1033; // Use the English LCID by default.
static void Main(string[] args)
{
if (args.Length > 0 && args.Length < 3)
{
if (args[0].ToLower() == "-lcid")
{
language = Convert.ToInt32(args[1]);
}
}
outFileCustomFieldsDs = OUTPUT_FILES + "CustomFieldDataSet.xml";
outFileLookupTableDs = OUTPUT_FILES + "LookupTableDataSet.xml";
ConfigClientEndpoints(ENDPOINT_CUSTOMFIELDS);
ConfigClientEndpoints(ENDPOINT_LOOKUPTABLE);
try
{
Console.WriteLine("Reading custom fields...");
SvcCustomFields.CustomFieldDataSet customFieldDs =
customFieldsClient.ReadCustomFields2(string.Empty, false);
Console.WriteLine(
"\nXML output of the CustomFieldDataSet:\n\t{0}",
outFileCustomFieldsDs);
customFieldDs.WriteXml(outFileCustomFieldsDs);
Console.WriteLine("Reading lookup tables...");
SvcLookupTable.LookupTableDataSet lookupTableDs =
lookupTableClient.ReadLookupTables(string.Empty, false, language);
Console.WriteLine(
"\nXML output of the LookupTableDataSet:\n\t{0}",
outFileCustomFieldsDs);
lookupTableDs.WriteXml(outFileLookupTableDs);
}
catch (FaultException fault)
{
// Use the WCF FaultException, because the ASMX SoapException does not
// exist in a WCF-based application.
WriteFaultOutput(fault);
}
catch (EndpointNotFoundException ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("\nInnerException: \n" + ex.InnerException.Message);
}
Console.Write("\nPress any key to exit... ");
Console.ReadKey(true);
}
// Extract a PSClientError object from the WCF FaultException object, and
// then display the exception details and each error in the PSClientError stack.
private static void WriteFaultOutput(FaultException fault)
{
string errAttributeName;
string errAttribute;
string errOut;
string errMess = "".PadRight(30, '=') + "\r\n"
+ "Error details: " + "\r\n";
PSLibrary.PSClientError error = Helpers.GetPSClientError(fault, out errOut);
errMess += errOut;
if (error != null)
{
PSLibrary.PSErrorInfo[] errors = error.GetAllErrors();
PSLibrary.PSErrorInfo thisError;
for (int i = 0; i < errors.Length; i++)
{
thisError = errors[i];
errMess += "\r\n".PadRight(30, '=') + "\r\nPSClientError output:\r\n";
errMess += thisError.ErrId.ToString() + "\n";
for (int j = 0; j < thisError.ErrorAttributes.Length; j++)
{
errAttributeName = thisError.ErrorAttributeNames()[j];
errAttribute = thisError.ErrorAttributes[j];
errMess += "\r\n\t" + errAttributeName
+ ": " + errAttribute;
}
}
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(errMess);
Console.ResetColor();
}
// Use the endpoints defined in app.config to configure the client.
public static void ConfigClientEndpoints(string endpt)
{
if (endpt == ENDPOINT_CUSTOMFIELDS)
customFieldsClient = new SvcCustomFields.CustomFieldsClient(endpt);
else if (endpt == ENDPOINT_LOOKUPTABLE)
lookupTableClient = new SvcLookupTable.LookupTableClient(endpt);
}
}
// Helper methods
class Helpers
{
/// <summary>
/// Extract a PSClientError object from the ServiceModel.FaultException,
/// for use in output of the GetPSClientError stack of errors.
/// </summary>
/// <param name="e"></param>
/// <param name="errOut">Shows that FaultException has more information
/// about the errors than PSClientError has. FaultException can also contain
/// other types of errors, such as failure to connect to the server.</param>
/// <returns>PSClientError object, for enumerating errors.</returns>
public static PSLibrary.PSClientError GetPSClientError(FaultException e,
out string errOut)
{
const string PREFIX = "GetPSClientError() returns null: ";
errOut = string.Empty;
PSLibrary.PSClientError psClientError = null;
if (e == null)
{
errOut = PREFIX + "Null parameter (FaultException e) passed in.";
psClientError = null;
}
else
{
// Get a ServiceModel.MessageFault object.
var messageFault = e.CreateMessageFault();
if (messageFault.HasDetail)
{
using (var xmlReader = messageFault.GetReaderAtDetailContents())
{
var xml = new XmlDocument();
xml.Load(xmlReader);
var serverExecutionFault = xml["ServerExecutionFault"];
if (serverExecutionFault != null)
{
var exceptionDetails = serverExecutionFault["ExceptionDetails"];
if (exceptionDetails != null)
{
try
{
errOut = exceptionDetails.InnerXml + "\r\n";
psClientError =
new PSLibrary.PSClientError(exceptionDetails.InnerXml);
}
catch (InvalidOperationException ex)
{
errOut = PREFIX + "Unable to convert fault exception info ";
errOut += "a valid Project Server error message. Message: \n\t";
errOut += ex.Message;
psClientError = null;
}
}
else
{
errOut = PREFIX + "The FaultException e is a ServerExecutionFault, "
+ "but does not have ExceptionDetails.";
}
}
else
{
errOut = PREFIX + "The FaultException e is not a ServerExecutionFault.";
}
}
}
else // No detail in the MessageFault.
{
errOut = PREFIX + "The FaultException e does not have any detail.";
}
}
errOut += "\r\n" + e.ToString() + "\r\n";
return psClientError;
}
}
}
См. также
Справочные материалы
Пространство имен WebSvcCustomFields
ReadCustomFields(String, Boolean)