Partager via


Exemple : Importer des fichiers en tant que ressources web

Lorsque vous développez un grand nombre de fichiers à utiliser comme ressources web, vous pouvez éviter de les ajouter manuellement via l’application. De nombreuses ressources Web peuvent être développées et testées en dehors des applications pilotées par modèle, puis importées.

Cet exemple fournit un exemple simplifié de ce processus.

Téléchargez l'exemple : Importer des fichiers en tant que ressources Web.

Prérequis

Une connexion Internet est requise pour télécharger l’exemple de projet et restaurer les packages NuGet utilisés dans l’exemple de projet.

Configuration requise

L’exemple de code inclus dans le package de téléchargement du Kit de développement logiciel (SDK) contient les fichiers suivants requis par cet exemple :

ImportJob.xml
Ce fichier contient des données sur les enregistrements de ressource web qui seront créés. Pour chaque fichier, il contient les données suivantes :

  • path : chemin d’accès à chaque fichier dans le dossier FilesToImport.

  • displayName : nom complet de la ressource web.

  • description : description du rôle de chaque fichier.

  • name : nom utilisé pour la ressource web.

    Note

    • Chacun de ces noms commence par un trait de soulignement. Le préfixe de personnalisation de l’éditeur de solutions est ajouté au nom lorsque la ressource web est créée. Au lieu de coder en dur un préfixe de personnalisation spécifique, cet exemple détecte le préfixe de personnalisation actuel pour un enregistrement d’éditeur qui peut déjà exister dans l’organisation.
      • Étant donné que chacun de ces fichiers a été développé en dehors des applications pilotées par modèle et dépend des chemins d’accès relatifs pour permettre un accès mutuel, les noms contiennent des barres obliques inverses « / » pour créer une structure de dossier virtuelle afin que les liens relatifs continuent à fonctionner dans les applications pilotées par modèle.
  • type: : spécifie le type de ressource Web à créer à l’aide des valeurs d’entier disponibles dans Types de ressource Web.

    FilesToImport/ShowData.htm
    Cette ressource web HTML nécessite que chacun des autres fichiers affiche le tableau suivant.

Prénom Nom
Apurva Dalia
Ofer Daliot
Jim Daly
Ryan Danner
Mike Danseglio
Alex Darrow

FilesToImport/CSS/Styles.css
Ce fichier contient les styles CSS utilisés dans ShowData.htm.

FilesToImport/Data/Data.xml
Ce fichier contient la liste des noms affichés dans le tableau.

FilesToImport/Script/Script.js
Ce fichier contient une bibliothèque JScript qui contient des informations sur l’emplacement relatif du fichier Data.xml et du fichier Transform.xslt. Il contient également la fonction showData qui transforme les données et les ajoute à la page ShowData.htm.

FilesToImport/XSL/Transform.xslt
Ce fichier contient la définition XSL de la transformation des données dans un tableau HTML.

Montre ce qui suit

Création de ressources web dans le contexte d’une solution

Les ressources web sont des enregistrements appartenant à l’organisation, elles peuvent donc être créées en utilisant soit la méthode IOrganizationService.Create, soit le message CreateRequest et la méthode IOrganizationService.Execute. Cet exemple explique comment utiliser le paramètre facultatif SolutionUniqueName pour associer une ressource web à une solution spécifique lors de sa création. L’utilisation d’un paramètre facultatif nécessite d’utiliser le message CreateRequest.

Téléchargement de fichiers à partir du disque

La propriété WebResource.Content nécessite une chaîne en base 64 représentant le contenu binaire du fichier. L’exemple suivant est la méthode utilisée pour convertir le fichier dans le type requis.

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

Association des données d’enregistrement de ressources web aux données de fichier

Le fichier ImportJob.xml montre comment les données relatives aux fichiers importés et les données relatives à la ressource web à créer sont associées. En particulier, pour que les liens relatifs entre les fichiers associés continuent à fonctionner, le nom des ressources web que vous créez doit conserver les informations sur la position relative des fichiers sur le disque à l’aide des répertoires simulés dans le nom de fichier. En raison des données du fichier ImportJob.xml, tous ces fichiers de ressource web associés sont créés dans un dossier virtuel commun.

Note

Il n’est pas nécessaire de publier les ressources web lors de leur création. Vous devez les publier lors de leur mise à jour.

Exemple

La partie suivante du fichier ImportWebResources.cs attend les variables suivantes :

  • _customizationPrefix : Le préfixe de personnalisation de l’éditeur Exemples SDK. Si cet éditeur n’existe pas, il est créé avec le préfixe de personnalisation « exemple ».
  • _ImportWebResourcesSolutionUniqueName : nom unique de l’exemple de solution d’importation de ressources web créé dans cet exemple. La valeur est 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);
}

Il n’est pas nécessaire de publier les ressources web lors de leur création. Vous devez les publier lors de leur mise à jour.

Voir aussi

Référence de table de ressource Web
Ressources Web