Exportieren von Menübanddefinitionen
Veröffentlicht: Januar 2017
Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Wenn Sie Änderungen am Standard-RibbonXml effektiv definieren wollen, müssen Sie die RibbonXml-Daten referenzieren können, die diese Menübänder definieren.
Zugriff auf die Menübanddefinitionen für Ihre Organisation
Wenn für Ihre Organisation das Menüband geändert wurde, sollten Sie die aktuellen Definitionen exportieren, wenn mit den benutzerdefinierten Menübandelementen arbeiten möchten. Verwenden Sie dazu das exportribbonxml-Beispiel unter SampleCode\CS\Client\Ribbon\ExportRibbonXml.
Zugriff auf die Menüband-Standarddaten
Die Standard-Menübanddefnitionen für Microsoft Dynamics 365 finden Sie im SDK-Paket: SDK\Resources\ExportedRibbonXml.Laden Sie das Microsoft Dynamics CRM SDK-Paket herunter.
Die applicationRibbon.xml-Datei enthält die Definition der Kernanwendungsmenübänder.
Der übrigen Dateien enthalten die Definitionen, die von Entitäten verwendet werden, die Menübanddefinitionen haben, die von der Entitätsvorlage abweichen. Jede Datei wird gemäß dem Namen der Entität benannt: logischer Entitätsname + Ribbon.xml.
Diese Dateien repräsentieren die Ausgabe zweier Meldungen mit den Beispiel: Exportieren von Menübanddefinitionen:
RetrieveApplicationRibbonRequest
Diese Meldung ruft die Menübänder der Kernanwendung ab, einschließlich der Entitätsvorlage.RetrieveEntityRibbonRequest
Diese Meldung ruft die Menübanddefinition ab, die für eine bestimmte Entität verwendet wird.
Dekomprimieren der Menübanddaten
Die Menübanddaten werden als komprimierte Datei exportiert. Zur Dekomprimierung der Datei in XML müssen Sie die Klasse System.IO.Packaging.ZipPackage verwenden. Das folgende Beispiel ist eine Hilfsmethode, die im SDK-Beispiel verwendet wird, um die Datei zu dekomprimieren.
/// <summary>
/// A helper method that decompresses the the Ribbon data returned
/// </summary>
/// <param name="data">The compressed ribbon data</param>
/// <returns></returns>
public byte[] unzipRibbon(byte[] data)
{
System.IO.Packaging.ZipPackage package = null;
MemoryStream memStream = null;
memStream = new MemoryStream();
memStream.Write(data, 0, data.Length);
package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open);
ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/RibbonXml.xml", UriKind.Relative));
using (Stream strm = part.GetStream())
{
long len = strm.Length;
byte[] buff = new byte[len];
strm.Read(buff, 0, (int)len);
return buff;
}
}
''' <summary>
''' A helper method that decompresses the the Ribbon data returned
''' </summary>
''' <param name="data">The compressed ribbon data</param>
''' <returns></returns>
Public Function unzipRibbon(ByVal data() As Byte) As Byte()
Dim package As System.IO.Packaging.ZipPackage = Nothing
Dim memStream As MemoryStream = Nothing
memStream = New MemoryStream()
memStream.Write(data, 0, data.Length)
package = CType(ZipPackage.Open(memStream, FileMode.Open), ZipPackage)
Dim part As ZipPackagePart = CType(package.GetPart(New Uri("/RibbonXml.xml", UriKind.Relative)), ZipPackagePart)
Using strm As Stream = part.GetStream()
Dim len As Long = strm.Length
Dim buff(CInt(len - 1)) As Byte
strm.Read(buff, 0, CInt(len))
Return buff
End Using
End Function
Abrufen der Anwendungsmenübanddaten
Das Anwendungsmenüband kann mithilfe von RetrieveApplicationRibbonRequest wie im folgenden Beispiel angezeigt abgerufen werden.
//Retrieve the Appliation Ribbon
RetrieveApplicationRibbonRequest appribReq = new RetrieveApplicationRibbonRequest();
RetrieveApplicationRibbonResponse appribResp = (RetrieveApplicationRibbonResponse)_serviceProxy.Execute(appribReq);
System.String applicationRibbonPath = Path.GetFullPath(exportFolder + "\\applicationRibbon.xml");
File.WriteAllBytes(applicationRibbonPath, unzipRibbon(appribResp.CompressedApplicationRibbonXml));
'Retrieve the Appliation Ribbon
Dim appribReq As New RetrieveApplicationRibbonRequest()
Dim appribResp As RetrieveApplicationRibbonResponse = CType(_serviceProxy.Execute(appribReq), RetrieveApplicationRibbonResponse)
Dim applicationRibbonPath As String = Path.GetFullPath(exportFolder & "\applicationRibbon.xml")
File.WriteAllBytes(applicationRibbonPath, unzipRibbon(appribResp.CompressedApplicationRibbonXml))
Abrufen von Entitätsmenübändern
Um die Menübanddefinition für Entitäten abzurufen, können Sie einfach den Namen der Entität als Parameter in RetrieveEntityRibbonRequest einschließen.
Zum Abrufen der Menübanddefinitionen für alle Entitäten, die das Menüband unterstützen, benötigen Sie eine Liste der Systementitäten, die Menübanddefinitionen haben, die von der Entitätsmenübandvorlage abweichen. Das folgende Beispiel zeigt eine Reihe aller Systementitäten, die Menübanddefinitionen haben.
//This array contains all of the system entities that use the ribbon.
public System.String[] entitiesWithRibbons = {"account",
"activitymimeattachment",
"activitypointer",
"appointment",
"bulkoperation",
"calendar",
"campaign",
"campaignactivity",
"campaignresponse",
"competitor",
"connection",
"contact",
"contract",
"contractdetail",
"convertrule",
"convertruleitem",
"customeraddress",
"discount",
"discounttype",
"email",
"emailserverprofile",
"entitlement",
"entitlementchannel",
"entitlementtemplate",
"entitlementtemplatechannel",
"fax",
"goal",
"goalrollupquery",
"importfile",
"incident",
"invoice",
"invoicedetail",
"kbarticle",
"kbarticlecomment",
"lead",
"letter",
"list",
"listmember",
"mailbox",
"metric",
"opportunity",
"opportunityproduct",
"partnerapplication",
"phonecall",
"postfollow",
"pricelevel",
"product",
"productpricelevel",
"queue",
"queueitem",
"quote",
"quotedetail",
"recurringappointmentmaster",
"report",
"rollupfield",
"routingrule",
"routingruleitem",
"salesliterature",
"salesliteratureitem",
"salesorder",
"salesorderdetail",
"service",
"serviceappointment",
"sharepointdocument",
"sharepointdocumentlocation",
"sharepointsite",
"site",
"sla",
"slaitem",
"socialactivity",
"socialprofile",
"systemuser",
"task",
"team",
"teamtemplate",
"territory",
"uom",
"uomschedule",
"userquery"};
'This array contains all of the system entities that use the ribbon.
Public entitiesWithRibbons() As String = {"account", "activitymimeattachment", "activitypointer", "appointment", "bulkoperation", _
"campaign", "campaignactivity", "campaignresponse", "competitor", "connection", "contact", _
"contract", "contractdetail", "customeraddress", "discount", "discounttype", "email", "fax", "goal", _
"importfile", "incident", "invoice", "invoicedetail", "kbarticle", "kbarticlecomment", "lead", _
"letter", "list", "listmember", "metric", "opportunity", "opportunityproduct", "phonecall", _
"pricelevel", "product", "productpricelevel", "queueitem", "quote", "quotedetail", _
"recurringappointmentmaster", "report", "salesliterature", "salesorder", "salesorderdetail", _
"service", "serviceappointment", "sharepointdocumentlocation", "sharepointsite", "systemuser", _
"task", "team", "territory", "uom", "uomschedule", "userquery"}
Das folgende Beispiel zeigt, wie Sie die Menübanddefinitionen für einen Satz von Entitäten abrufen.
//Retrieve system Entity Ribbons
RetrieveEntityRibbonRequest entRibReq = new RetrieveEntityRibbonRequest() { RibbonLocationFilter = RibbonLocationFilters.All };
foreach (System.String entityName in entitiesWithRibbons)
{
entRibReq.EntityName = entityName;
RetrieveEntityRibbonResponse entRibResp = (RetrieveEntityRibbonResponse)_serviceProxy.Execute(entRibReq);
System.String entityRibbonPath = Path.GetFullPath(exportFolder + "\\" + entityName + "Ribbon.xml");
File.WriteAllBytes(entityRibbonPath, unzipRibbon(entRibResp.CompressedEntityXml));
//Write the path where the file has been saved.
Console.WriteLine(entityRibbonPath);
}
'Retrieve system Entity Ribbons
Dim entRibReq As New RetrieveEntityRibbonRequest() With {.RibbonLocationFilter = RibbonLocationFilters.All}
For Each entityName As String In entitiesWithRibbons
entRibReq.EntityName = entityName
Dim entRibResp As RetrieveEntityRibbonResponse = CType(_serviceProxy.Execute(entRibReq), RetrieveEntityRibbonResponse)
Dim entityRibbonPath As String = Path.GetFullPath(exportFolder & "\" & entityName & "Ribbon.xml")
File.WriteAllBytes(entityRibbonPath, unzipRibbon(entRibResp.CompressedEntityXml))
'Write the path where the file has been saved.
Console.WriteLine(entityRibbonPath)
Next entityName
Alle benutzerdefinierten Entitäten unterstützen auch Menübandanpassungen. Zum Anzeigen einer Liste von benutzerdefinierten Entitäten verwenden Sie RetrieveAllEntitiesRequest, und rufen Sie die Namen von benutzerdefinierten Entitäten ab. Das folgende Beispiel zeigt, wie Sie die Menübanddefinitionen für alle benutzerdefinierten Entitäten abrufen.
//Check for custom entities
RetrieveAllEntitiesRequest raer = new RetrieveAllEntitiesRequest() { EntityFilters = EntityFilters.Entity };
RetrieveAllEntitiesResponse resp = (RetrieveAllEntitiesResponse)_serviceProxy.Execute(raer);
foreach (EntityMetadata em in resp.EntityMetadata)
{
if (em.IsCustomEntity == true && em.IsIntersect == false)
{
entRibReq.EntityName = em.LogicalName;
RetrieveEntityRibbonResponse entRibResp = (RetrieveEntityRibbonResponse)_serviceProxy.Execute(entRibReq);
System.String entityRibbonPath = Path.GetFullPath(exportFolder + "\\" + em.LogicalName + "Ribbon.xml");
File.WriteAllBytes(entityRibbonPath, unzipRibbon(entRibResp.CompressedEntityXml));
//Write the path where the file has been saved.
Console.WriteLine(entityRibbonPath);
}
}
}
'Check for custom entities
Dim raer As New RetrieveAllEntitiesRequest() With {.EntityFilters = EntityFilters.Entity}
Dim resp As RetrieveAllEntitiesResponse = CType(_serviceProxy.Execute(raer), RetrieveAllEntitiesResponse)
For Each em As EntityMetadata In resp.EntityMetadata
If em.IsCustomEntity = True AndAlso em.IsIntersect = False Then
entRibReq.EntityName = em.LogicalName
Dim entRibResp As RetrieveEntityRibbonResponse = CType(_serviceProxy.Execute(entRibReq), RetrieveEntityRibbonResponse)
Dim entityRibbonPath As String = Path.GetFullPath(exportFolder & "\" & em.LogicalName & "Ribbon.xml")
File.WriteAllBytes(entityRibbonPath, unzipRibbon(entRibResp.CompressedEntityXml))
'Write the path where the file has been saved.
Console.WriteLine(entityRibbonPath)
End If
Next em
End Using
Siehe auch
Anpassen von Befehlen und des Menübands
Darstellen von Befehlsleisten und Menübändern
Exportieren, Vorbereitung der Bearbeitung und Importieren des Menübands
Microsoft Dynamics 365
© 2017 Microsoft. Alle Rechte vorbehalten. Copyright