Exportar definições de faixa de opções

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

Para definir efetivamente as alterações no RibbonXml padrão, você deverá conseguir consultar os dados do RibbonXml que definem as faixas de opções.

Acesse as definições da faixa de opções da organização

Se a faixa de opções da sua organização foi alterada, será necessário exportar as definições atuais se você pretende trabalhar com os elementos da faixa de opções personalizada. Para fazer isso, use o exemplo exportribbonxml localizado em SampleCode\CS\Client\Ribbon\ExportRibbonXml.

Acesse os dados da faixa de opções padrão

As definições da faixa de opções padrão para o Microsoft Dynamics 365 podem ser encontrados no pacote SDK: SDK\Resources\ExportedRibbonXml.Baixe o pacote do SDK do Microsoft Dynamics CRM.

O arquivo applicationRibbon.xml contém a definição das faixas de opções do aplicativo principal.

Os arquivos restantes contêm as definições usadas pelas entidades com definições da faixa de opções que diferem do modelo de entidade. Cada arquivo é chamado de acordo com o nome da entidade: nome da entidade lógica + Ribbon.xml.

Esses arquivos representam a saída de duas mensagens usando o Exemplo: Exportar definições de faixa de opções:

Descompactar os dados da faixa de opções

Os dados da faixa de opções são exportados como um arquivo compactado. Para descompactar o arquivo no XML, você precisa usar a classe System.IO.Packaging.ZipPackage. O exemplo a seguir é um método auxiliar usado no exemplo do SDK para descompactar o arquivo.


/// <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

Recupere os dados da faixa de opções do aplicativo

A faixa de opções do aplicativo pode ser recuperada usando RetrieveApplicationRibbonRequest conforme mostrado no exemplo a seguir.


//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 &amp; "\applicationRibbon.xml")
File.WriteAllBytes(applicationRibbonPath, unzipRibbon(appribResp.CompressedApplicationRibbonXml))

Recuperar as faixas de opções da entidade

Para recuperar a definição da faixa de opções das entidades, você pode apenas incluir o nome da entidade como um parâmetro para RetrieveEntityRibbonRequest.

Para recuperar as definições da faixa de opções para todas as entidades que oferecem suporte à faixa de opções, você precisa de uma lista dessas entidades do sistema que tenham as definições da faixa que podem variar com o modelo da faixa de opções da entidade. O exemplo a seguir mostra uma matriz de todas as entidades do sistema que têm definições da faixa de opções.


  //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"}

O exemplo a seguir mostra como recuperar as definições da faixa de opções de um conjunto de entidades.


//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 &amp; "\" &amp; entityName &amp; "Ribbon.xml")
 File.WriteAllBytes(entityRibbonPath, unzipRibbon(entRibResp.CompressedEntityXml))
 'Write the path where the file has been saved.
 Console.WriteLine(entityRibbonPath)
Next entityName

Todas as entidades personalizadas também sejam personalizações da faixa de opções. Para obter uma lista de entidades personalizadas, use RetrieveAllEntitiesRequest e recupere os nomes das entidades personalizadas. O exemplo a seguir mostra como recuperar as definições da faixa de opções de todas as entidades personalizadas.


 //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 &amp;&amp; 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 &amp; "\" &amp; em.LogicalName &amp; "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

Confira Também

Personalizar os comandos e a faixa de opções
Apresentação de comandos em barra ou em faixa de opções
Exportação, preparação para editar e importação da faixa de opções

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais