Voorbeeld: Importbestanden gebruiken als webresources
Gepubliceerd: januari 2017
Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Als u een groot aantal bestanden ontwikkelt om te gebruiken als webresources, hoeft u ze niet handmatig toe te voegen via de toepassing. Veel webresources kunnen worden ontwikkeld en getest buiten Microsoft Dynamics 365 (online en on-premises) en vervolgens worden geïmporteerd.
Dit is een vereenvoudigd voorbeeld van dit proces. Voor een complexer voorbeeld met een WPF-toepassing die u kunt gebruiken om webresources te importeren, raadpleegt u Voorbeeld: Hulpprogramma Webresource.
Deze voorbeeldcode is voor Microsoft Dynamics CRM 2015 en Microsoft Dynamics CRM Online 2015 Update.Download het Microsoft Dynamics CRM SDK-pakket. U vindt deze op de volgende locatie in het download-pakket:
SDK\SampleCode\CS\Client\WebResources\ImportWebResources\
Vereisten
Voor meer informatie over de vereisten voor het uitvoeren van de voorbeeldcode in deze SDK, zie Het voorbeeld en de helpercode gebruiken.
De voorbeeldcode die is opgenomen in het SDK-downloadpakket, bevat de volgende bestanden die door dit voorbeeld worden vereist:
ImportJob.xml
Dit bestand bevat gegevens over de webresourcerecords die worden gemaakt. Voor elk bestand bevat het de volgende gegevens:pad: Het pad van elk bestand in de map FilesToImport.
displayName: de weergavenaam van de webresource.
description: een beschrijving van wat elk bestand doet.
naam: de naam die voor de webresource wordt gebruikt.
Notitie
-
Elk van deze namen begint met een onderstrepingsteken. Het aanpassingsprefix van de oplossingsuitgever wordt vooraan de naam toegevoegd wanneer de webresource wordt gemaakt. In plaats van een specifiek aanpassingsprefix hard te coderen detecteert dit voorbeeld het huidige aanpassingsprefix voor een uitgeversrecord die al in de organisatie kan bestaan.
-
Omdat elk van deze bestanden is ontwikkeld buiten Microsoft Dynamics 365 en afhankelijk is van relatieve paden om toegang tot elkaar te krijgen, bevatten de namen backslashes ("/") om een virtuele mapstructuur te maken, zodat de relatieve koppelingen blijven werken in Microsoft Dynamics 365.
-
type: geeft het type op van de webresource die moet worden gemaakt met behulp van de geheelgetalwaarden in Types webresource.
FilesToImport/ShowData.htm
Deze HTML-webresource vereist dat elk van de overige bestanden de volgende tabel weergeven.voornaam
achternaam
Apurva
Dalia
Ofer
Daliot
Jim
Daly
Ryan
Danner
Mike
Danseglio
Alex
Darrow
FilesToImport/CSS/Styles.css
Dit bestand bevat de CSS-stijlen die in ShowData.htm worden gebruikt.FilesToImport/Data/Data.xml
Dit bestand bevat de lijst met namen die in de tabel wordt weergegeven.FilesToImport/Script/Script.js
Dit bestand bevat een JScript-bibliotheek die informatie bevat over de relatieve locatie van het Data.xml-bestand en het Transform.xslt-bestand. Het bevat ook de showData-functie die de gegevens transformeert en toevoegt aan de pagina ShowData.htm.FilesToImport/XSL/Transform.xslt
Dit bestand bevat de XSL-definitie van hoe de gegevens moeten worden getransformeerd in een HTML-tabel.
Demonstreert
Webresources maken in de context van een oplossing
Webresources zijn records die eigendom zijn van de organisatie, zodat ze kunnen worden gemaakt met ofwel de methode IOrganizationServiceCreate of door middel van het bericht CreateRequest en de IOrganizationService.Execute-methode. In dit voorbeeld wordt getoond hoe u de optionele parameter SolutionUniqueName gebruikt om een webresource te koppelen aan een specifieke oplossing wanneer deze wordt gemaakt. Dit vereist het gebruik van het bericht CreateRequest.
Bestanden van schijf uploaden
De eigenschap WebResource.Content vereist een Base 64-tekenreeks die de binaire inhoud van het bestand vertegenwoordigt. Het volgende voorbeeld is de methode die wordt gebruikt om het bestand naar het vereiste type te converteren.
//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);
}
Webresourcerecordgegevens combineren met bestandsgegevens
Het bestand ImportJob.xml demonstreert hoe de gegevens over de bestanden die worden geïmporteerd, en de gegevens over de te maken webresource worden gecombineerd. Als u wilt zorgen dat relatieve koppelingen tussen gerelateerde bestanden blijven werken, moet de naam van de webresource die u maakt, informatie bevatten over de relatieve positie van de bestanden op schijf, met behulp van gesimuleerde mappen in de bestandsnaam. Vanwege de gegevens in het bestand ImportJob.xml worden al deze gerelateerde Webresourcebestanden gemaakt in een gemeenschappelijke virtuele map.
Notitie
Het is niet noodzakelijk webresources te publiceren wanneer ze zijn gemaakt. Het is wel noodzakelijk ze te publiceren als ze worden bijgewerkt.
Voorbeeld
Het volgende gedeelte van het bestand ImportWebResources.cs verwacht de volgende variabelen:
_customizationPrefix : Het aanpassingsvoorvoegsel van de uitgever Microsoft Dynamics 365 SDK-voorbeelden. Als deze uitgever niet bestaat, wordt deze gemaakt met het aanpassingsprefix "sample".
_ImportWebResourcesSolutionUniqueName : de unieke naam van de voorbeeldoplossing Webresources importeren die in dit voorbeeld wordt gemaakt. De waarde is 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);
}
Het is niet noodzakelijk webresources te publiceren wanneer ze zijn gemaakt. Het is wel noodzakelijk ze te publiceren als ze worden bijgewerkt.
Zie ook
Voorbeeld: Hulpprogramma Webresource
Berichten en methoden van de entiteit WebResource
Webresources voor Microsoft Dynamics 365
Microsoft Dynamics 365
© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht