Поделиться через


Метод Admin.ReadDepartments

Считывает списка отделов, определенных в экземпляре Project Web App.

Пространство имен:  WebSvcAdmin
Сборка:  ProjectServerServices (в ProjectServerServices.dll)

Синтаксис

'Декларация
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Admin/ReadDepartments", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Admin/",  _
    ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Admin/",  _
    Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Function ReadDepartments ( _
    language As Integer _
) As DepartmentsDataSet
'Применение
Dim instance As Admin
Dim language As Integer
Dim returnValue As DepartmentsDataSet

returnValue = instance.ReadDepartments(language)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Admin/ReadDepartments", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Admin/", 
    ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Admin/", 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public DepartmentsDataSet ReadDepartments(
    int language
)

Параметры

  • language
    Тип: System.Int32

    Указывает идентификатор основного языка (LCID), который указывает язык, страну или регион.

Возвращаемое значение

Тип: WebSvcAdmin.DepartmentsDataSet

Замечания

Можно определить отделы в таблице подстановки отдела корпоративных настраиваемых полей и таблиц подстановки в страницы Project Web App (https://ServerName/ProjectServerName/_layouts/pwa/Admin/CustomizeFields.aspx).

Разрешения Project Server

Разрешение

Описание

LogOnToProjectServerFromProjectProfessional

Разрешает пользователям загружать глобальный корпоративный шаблон. Глобальное разрешение.

ManageUsersAndGroups

Позволяет пользователям для добавления, изменения, или удалить пользователей и управление группами безопасности Project Server. Глобальное разрешение.

ViewProjectCenter

Позволяет пользователям открывать центр проектов. Глобальное разрешение.

ViewResourceCenter

Позволяет пользователям получить доступ к центра ресурсов. Глобальное разрешение.

ManageEnterpriseCustomFields

Позволяет пользователям изменять определения корпоративных настраиваемых полей и значения таблицы подстановки. Глобальное разрешение.

NewProject

Позволяет пользователю добавить новый проект в базу данных Project Server. Глобальное разрешение.

Примеры

Следующий пример показывает использование метода ReadDepartments . В примере используется пространство имен SvcAdmin в сборке ProjectServerServices.dll прокси-сервера. Код, использующий ReadDepartments возвращает DepartmentsDataSet; приложение записывает результаты в XML-файл.

Примечание

The ConfigClientEndpoints method uses an app.config file for setting the WCF binding, behavior, and endpoint. For information about creating a PSI proxy assembly and an app.config file, 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.TestAdmin
{
    class Program
    {
        private const string ENDPOINT_ADMIN = "basicHttp_Admin";
        // Change the output directory to match the output directory of your computer.
        private const string OUTPUT_FILES = @"E:\Project\Samples\Output\";

        private static SvcAdmin.AdminClient adminClient;

        private static string outFilePath;
 
        static void Main(string[] args)
        {

            outFilePath = OUTPUT_FILES + "DepartmentsDataSet.xml";
            ConfigClientEndpoints(ENDPOINT_ADMIN);

            int lcid = 1033;  // The Department lookup table is in English.
            
            try
            {
                // Here is the thing that we are trying to do.
                SvcAdmin.DepartmentsDataSet deptDS = adminClient.ReadDepartments(lcid);
                deptDS.WriteXml(outFilePath);

            }
            catch(FaultException fault)
            {
                // Use the WCF FaultException, because the ASMX SoapException does not 
                // exist in a WCF-based application.
                WriteFaultOutput(fault);
            }
            Console.Write("\nPress any key to exit... ");
            Console.ReadKey();
        }


        // 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;

            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 that are defined in app.config to configure the client.
        public static void ConfigClientEndpoints(string endpt)
        {
            if (endpt == ENDPOINT_ADMIN)
                adminClient = new SvcAdmin.AdminClient(ENDPOINT_ADMIN);
        }            
    }


    // Helper method: GetPSClientError.
    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;
        }
    }
}

Ниже приведен пример выходного файла DepartmentsDataSet.xml, который сохраняет учебное приложение.

Примечание

Имена отдел, возвращенных в примере специфичны для отделов, определенных в экземпляре Project Web App.

<?xml version="1.0" standalone="yes"?>
<DepartmentsDataSet xmlns="https://schemas.microsoft.com/office/project/server/webservices/DepartmentsDataSet/">
  <Departments>
    <DEPARTMENT_UID>83125fbf-5c09-4b93-800a-09681bbf7612</DEPARTMENT_UID>
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
    <DEPARTMENT_FULLNAME>Marketing</DEPARTMENT_FULLNAME>
  </Departments>
  <Departments>
    <DEPARTMENT_UID>a47930d6-b89d-4f3a-b4e3-522015fe82a1</DEPARTMENT_UID>
    <DEPARTMENT_NAME>Testing</DEPARTMENT_NAME>
    <DEPARTMENT_FULLNAME>Testing</DEPARTMENT_FULLNAME>
  </Departments>
  <Departments>
    <DEPARTMENT_UID>cca85763-9376-4ef7-b4f2-a2b661b9846b</DEPARTMENT_UID>
    <DEPARTMENT_NAME>UA</DEPARTMENT_NAME>
    <DEPARTMENT_FULLNAME>UA</DEPARTMENT_FULLNAME>
  </Departments>
  <Departments>
    <DEPARTMENT_UID>41d056ca-497f-4e4a-8855-e118b667fcc8</DEPARTMENT_UID>
    <DEPARTMENT_NAME>Planning</DEPARTMENT_NAME>
    <DEPARTMENT_FULLNAME>Planning</DEPARTMENT_FULLNAME>
  </Departments>
  <Departments>
    <DEPARTMENT_UID>96e4522f-2d4e-4026-9ec0-ede9c182dda8</DEPARTMENT_UID>
    <DEPARTMENT_NAME>Development</DEPARTMENT_NAME>
    <DEPARTMENT_FULLNAME>Development</DEPARTMENT_FULLNAME>
  </Departments>
</DepartmentsDataSet>

См. также

Справочные материалы

Admin класс

Элементы Admin

Пространство имен WebSvcAdmin