Compartir a través de


del método Admin.ReadDepartments

Lee la lista de departamentos que se definen en una instancia de Project Web App.

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

Sintaxis

'Declaración
<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
'Uso
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
)

Parámetros

  • language
    Tipo: System.Int32

    Especifica el identificador de idioma principal (LCID) que indica el idioma de un país o región.

Valor devuelto

Tipo: WebSvcAdmin.DepartmentsDataSet

Comentarios

Puede definir los departamentos en la tabla de búsqueda de departamento, en la empresa campos y tablas de búsqueda página personalizada en Project Web App (https://ServerName/ProjectServerName/_layouts/pwa/Admin/CustomizeFields.aspx).

Permisos de Project Server

Permiso

Descripción

LogOnToProjectServerFromProjectProfessional

Permite a un usuario que carga la plantilla global de empresa. Permiso global.

ManageUsersAndGroups

Permite que un usuario agregar, modificar, o eliminar usuarios y administrar grupos de seguridad de Project Server. Permiso global.

ViewProjectCenter

Permite que un usuario acceder al centro de proyectos. Permiso global.

ViewResourceCenter

Permite que un usuario acceder al centro de recursos. Permiso global.

ManageEnterpriseCustomFields

Permite que un usuario modificar las definiciones de campos personalizados de empresa y los valores de tabla de búsqueda. Permiso global.

NewProject

Permite que un usuario agregar un nuevo proyecto a la base de datos de Project Server. Permiso global.

Ejemplos

El ejemplo siguiente muestra el uso del método ReadDepartments . En el ejemplo se usa el espacio de nombres SvcAdmin en el archivo de proxy projectserverservices.dll. El código que usa ReadDepartments devuelve una DepartmentsDataSet; la aplicación escribe los resultados en un archivo XML.

Nota

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 Prerequisites for WCF-Based Code Samples.

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

El siguiente es un ejemplo del archivo de salida DepartmentsDataSet.xml que guarda la aplicación de ejemplo.

Nota

Los nombres de departamento que se devuelven en el ejemplo son específicos a los departamentos que están definidos en la instancia de 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>

Vea también

Referencia

clase Admin

Miembros Admin

Espacio de nombres WebSvcAdmin