Ejemplo: importar archivos como recursos web

 

Publicado: enero de 2017

Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Cuando desarrolle un gran número de archivos para usar como recursos web, puede ahorrarse el trabajo de agregarlos manualmente en toda la aplicación. Muchos recursos web pueden desarrollarse y probarse fuera de Microsoft Dynamics 365 (en línea y local) y luego se importan.

Esta muestra ofrece un ejemplo simplificado de este proceso. Para conocer una muestra más compleja que ofrece una aplicación WPF que puede usar para importar recursos web, consulte Ejemplo: utilidad de recurso web.

Este código de muestra es para Microsoft Dynamics CRM 2015 y actualización de Microsoft Dynamics CRM Online 2015.Descargue el paquete de SDK de Microsoft Dynamics CRM. Se puede encontrar en la siguiente ubicación en el paquete de descarga:

SDK\SampleCode\CS\Client\WebResources\ImportWebResources\

Requisitos

Para obtener más información acerca de los requisitos de ejecución del código de ejemplo proporcionado en este SDK, vea Usar el ejemplo y el código auxiliar.

El código de muestra que se incluye en el paquete de descarga de SDK incluye los siguientes archivos necesarios para esta muestra:

  • ImportJob.xml
    Este archivo proporciona datos de los registros de recursos web que se crearán. Contiene los siguientes datos para cada archivo:

    • ruta: La ruta de acceso de cada archivo de la carpeta FilesToImport.

    • displayName: El nombre del recurso web.

    • descripción: Una descripción de lo que hace cada archivo.

    • nombre: El nombre que se usará para el recurso web.

      Nota

      • Cada uno de estos nombres comienza con un carácter de subrayado. El prefijo de personalización del editor de soluciones se antepondrá al nombre cuando se cree el recurso web. En lugar de codificar rígidamente un prefijo de personalización específico, esta muestra detectará el prefijo de personalización actual para un registro de editor que ya existe en la organización.

      • Dado que cada uno de estos archivos se desarrolló fuera de Microsoft Dynamics 365 y dependen de las rutas relativas para acceder a la otra ruta, los nombres incluyen los caracteres de barra diagonal inversa "/" para crear una estructura de carpeta virtual de modo que los vínculos relativos seguirán funcionando dentro de Microsoft Dynamics 365.

    • tipo: Especifica el tipo de recurso web para crear mediante los valores enteros encontrados en Tipos de recursos web.

  • FilesToImport/ShowData.htm
    Este recurso web HTML requiere que cada uno de los demás archivos muestre la tabla siguiente.

    Nombre de pila

    Apellido

    Apurva

    Dalia

    Ofer

    Daliot

    Jim

    Daly

    Ryan

    Danner

    Mike

    Danseglio

    Alex

    Darrow

  • FilesToImport/CSS/Styles.css
    Este archivo proporciona los estilos CSS que se usan en ShowData.htm.

  • FilesToImport/Data/Data.xml
    Este archivo contiene la lista de nombres que se muestra en la tabla.

  • FilesToImport/script/Script.js
    Este archivo contiene una biblioteca JScript que contiene información sobre la ubicación relativa del archivo Data.xml y del archivo Transform.xslt. También contiene la función de showData que transforma los datos y los agrega a la página de ShowData.htm.

  • FilesToImport/XSL/Transform.xslt
    Este archivo contiene la definición de XSL sobre cómo transformar los datos en una tabla HTML.

Muestra

Creación de recursos web en el contexto de una solución

Los recursos web son registros propiedad de la organización por lo que se pueden crear utilizando el método IOrganizationService.Create o utilizando el mensaje CreateRequest y el método IOrganizationService.Execute. Este ejemplo muestra cómo usar el parámetro opcional de SolutionUniqueName para asociar un recurso web con una solución específica cuando se crea. Esto requiere el uso del mensaje CreateRequest.

Carga de archivos desde el disco

La propiedad WebResource.Content requiere una cadena de base 64 que representa los contenidos binarios del archivo. El siguiente ejemplo es el método usado para convertir el archivo en el tipo requerido.


//Encodes the Web Resource File
static public string getEncodedFileContents(String pathToFile)
{
    FileStream fs = new FileStream(pathToFile, FileMode.Open, FileAccess.Read);
    byte[] binaryData = new byte[fs.Length];
    long bytesRead = fs.Read(binaryData, 0, (int)fs.Length);
    fs.Close();
    return System.Convert.ToBase64String(binaryData, 0, binaryData.Length);
}

Combinar datos de registro del recurso web con datos de archivo

El archivo ImportJob.xml demuestra cómo se combinan los datos de los archivos que se importarán y los datos del recurso web que se creará. En especial, para que vínculos relativos entre los archivos relacionados sigan funcionando, el nombre de los recursos web que cree debe conservar la información acerca la posición relativa de los archivos en el disco mediante directorios simulados en el nombre de archivo. Debido a los datos en el archivo ImportJob.xml, todos estos archivos de recursos web relacionados se crearán en una carpeta virtual común.

Nota

No es necesario publicar los recursos web cuando se crean. No obstante, es necesario publicarlos cuando se actualizan.

Ejemplo

La siguiente parte del archivo ImportWebResources.cs espera las siguientes variables:

  • _customizationPrefix : El prefijo de personalización del editor de Ejemplos del SDK de Microsoft Dynamics 365. Si este editor no existe, se creará con el prefijo de personalización "ejemplo".

  • _ImportWebResourcesSolutionUniqueName: El nombre único Importar solución de muestra de recursos web creado en este ejemplo. El valor es ImportWebResourcesSample.



//Read the descriptive data from the XML file
XDocument xmlDoc = XDocument.Load("../../ImportJob.xml");

//Create a collection of anonymous type references to each of the Web Resources
var webResources = from webResource in xmlDoc.Descendants("webResource")
                   select new
                   {
                       path = webResource.Element("path").Value,
                       displayName = webResource.Element("displayName").Value,
                       description = webResource.Element("description").Value,
                       name = webResource.Element("name").Value,
                       type = webResource.Element("type").Value
                   };

// Loop through the collection creating Web Resources
int counter = 0;
foreach (var webResource in webResources)
{
    //Set the Web Resource properties
    WebResource wr = new WebResource
    {
        Content = getEncodedFileContents(@"../../" + webResource.path),
        DisplayName = webResource.displayName,
        Description = webResource.description,
        Name = _customizationPrefix + webResource.name,
        LogicalName = WebResource.EntityLogicalName,
        WebResourceType = new OptionSetValue(Int32.Parse(webResource.type))
    };

    // Using CreateRequest because we want to add an optional parameter
    CreateRequest cr = new CreateRequest
    {
        Target = wr
    };
    //Set the SolutionUniqueName optional parameter so the Web Resources will be
    // created in the context of a specific solution.
    cr.Parameters.Add("SolutionUniqueName", _ImportWebResourcesSolutionUniqueName);

    CreateResponse cresp = (CreateResponse)_serviceProxy.Execute(cr);
    // Capture the id values for the Web Resources so the sample can delete them.
    _webResourceIds[counter] = cresp.id;
    counter++;
    Console.WriteLine("Created Web Resource: {0}", webResource.displayName);
}

No es necesario publicar los recursos web cuando se crean. No obstante, es necesario publicarlos cuando se actualizan.

Ver también

Ejemplo: utilidad de recurso web
Mensajes y métodos de la entidad WebResource
Recursos web para Microsoft Dynamics 365

Microsoft Dynamics 365

© 2017 Microsoft. Todos los derechos reservados. Copyright