示例#1
0
        private byte[] ExportApplicationRibbonByteArray()
        {
            RetrieveApplicationRibbonRequest  appribReq  = new RetrieveApplicationRibbonRequest();
            RetrieveApplicationRibbonResponse appribResp = (RetrieveApplicationRibbonResponse)_service.Execute(appribReq);

            string fileName  = "ApplicationRibbon.zip";
            string directory = FileOperations.GetConnectionIntellisenseDataFolderPath(this._service.ConnectionData.ConnectionId);

            string filePath = Path.Combine(directory, fileName);

            var arrayXml = FileOperations.UnzipRibbon(appribResp.CompressedApplicationRibbonXml);

            try
            {
                File.WriteAllBytes(filePath, appribResp.CompressedApplicationRibbonXml);

                using (var memStream = new MemoryStream())
                {
                    memStream.Write(arrayXml, 0, arrayXml.Length);

                    memStream.Position = 0;

                    XDocument doc = XDocument.Load(memStream);

                    _service.ConnectionData.RibbonIntellisense.ApplicationRibbonData.LoadDataFromRibbon(doc);
                }
            }
            catch (Exception ex)
            {
                DTEHelper.WriteExceptionToOutput(this._service.ConnectionData, ex);
            }

            return(arrayXml);
        }
        private byte[] ExportApplicationRibbonByteArray()
        {
            RetrieveApplicationRibbonRequest  appribReq  = new RetrieveApplicationRibbonRequest();
            RetrieveApplicationRibbonResponse appribResp = (RetrieveApplicationRibbonResponse)_service.Execute(appribReq);

            return(appribResp.CompressedApplicationRibbonXml);
        }
        /// <summary>
        /// This method first connects to the Organization service. Afterwards,
        /// basic create, retrieve, update, and delete entity operations are performed.
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptforDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete)
        {
            try
            {
                // Connect to the Organization service.
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    //Create export folder for ribbon xml files if not already exist.
                    if (!Directory.Exists(exportFolder))
                    {
                        Directory.CreateDirectory(exportFolder);
                    }

                    //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));
                    //Write the path where the file has been saved.
                    Console.WriteLine(applicationRibbonPath);
                    //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);
                    }

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

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> )
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
        /// <summary>
        /// This method first connects to the Organization service. Afterwards,
        /// basic create, retrieve, update, and delete entity operations are performed.
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptforDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete)
        {
            try
            {
                //<snippetExportRibbonXml1>
                // Connect to the Organization service.
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = ServerConnection.GetOrganizationProxy(serverConfig))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    //Create export folder for ribbon xml files if not already exist.
                    if (!Directory.Exists(exportFolder))
                    {
                        Directory.CreateDirectory(exportFolder);
                    }

                    //<snippetExportRibbonXml3>
                    //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));
                    //</snippetExportRibbonXml3>
                    //Write the path where the file has been saved.
                    Console.WriteLine(applicationRibbonPath);
                    //<snippetExportRibbonXml4>
                    //Retrieve system Entity Ribbons
                    RetrieveEntityRibbonRequest entRibReq = new RetrieveEntityRibbonRequest()
                    {
                        RibbonLocationFilter = RibbonLocationFilters.All
                    };

                    #region retrieval code

                    bool isDone = false;
                    while (!isDone)
                    {
                        Console.WriteLine("\nRetrieve all ribbons or specific ribbons? (a)ll/(s)pecific: ");
                        string input = Console.ReadLine();

                        if (input == "a")
                        {
                            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);
                            }

                            //</snippetExportRibbonXml4>

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

                            isDone = true;
                        }
                        else if (input == "s")
                        {
                            // first do system entities
                            int i = 0;
                            foreach (System.String entityName in entitiesWithRibbons)
                            {
                                Console.WriteLine("[{0}] {1}", i++, entityName);
                            }
                            Console.WriteLine("Enter the numbers of the entities to download, separated by commas: ");
                            string   entityNums    = Console.ReadLine();
                            string[] entityNumsArr = entityNums.Split(new char[] { ',' });

                            foreach (string numStr in entityNumsArr)
                            {
                                int num;
                                if (Int32.TryParse(numStr, out num))
                                {
                                    if (num >= 0 && num < entitiesWithRibbons.Length)
                                    {
                                        string entityName = entitiesWithRibbons[num];
                                        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);
                                    }
                                    else
                                    {
                                        Console.WriteLine("No element index {0} in entitiesWithRibbons, skipping...", num);
                                    }
                                }
                            }

                            // next check for custom entities
                            RetrieveAllEntitiesRequest raer = new RetrieveAllEntitiesRequest()
                            {
                                EntityFilters = EntityFilters.Entity
                            };
                            RetrieveAllEntitiesResponse resp = (RetrieveAllEntitiesResponse)_serviceProxy.Execute(raer);

                            i = 0;
                            foreach (EntityMetadata em in resp.EntityMetadata)
                            {
                                if (em.IsCustomEntity == true && em.IsIntersect == false)
                                {
                                    Console.WriteLine("[{0}] {1}", i, em.LogicalName);
                                }
                                i++;
                            }
                            Console.WriteLine("Enter the numbers of the entities to download, separated by commas: ");
                            entityNums    = Console.ReadLine();
                            entityNumsArr = entityNums.Split(new char[] { ',' });

                            //foreach (EntityMetadata em in resp.EntityMetadata)
                            foreach (string numStr in entityNumsArr)
                            {
                                int index;
                                if (Int32.TryParse(numStr, out index))
                                {
                                    if (index >= 0 && index < resp.EntityMetadata.Length)
                                    {
                                        EntityMetadata em = resp.EntityMetadata[index];
                                        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);
                                        }
                                    }
                                }
                            }
                            Console.WriteLine("");


                            isDone = true;
                        }
                    }
                    #endregion
                }
                //</snippetExportRibbonXml5>
                //</snippetExportRibbonXml1>
            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> )
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }