自定義控制檯程序導出Dynamics 365實體信息到Excel中。

本人微信公衆號:微軟動態CRM專家羅勇 ,回覆281或者20181116可方便獲取本文,同時能夠在第一間獲得我發佈的最新博文信息,follow me!個人網站是 www.luoyong.me 。微信

有時候我想將系統中的實體信息導出來,如果多語言,一個實體會有多個顯示名稱,有時候對應起來不方便,我便寫了個程序導出來,實例是導出簡體中文和英文的顯示名稱,架構名稱,XrmtoolsBox也能夠導出,不過導出時候是實體的邏輯名稱,架構名稱有時候更有用,架構名稱轉成邏輯名稱方便,全小寫就好了。很少說了,上代碼,主要參考官方的 RetrieveAllEntitiesRequest Class 官方實例更加詳細,導出的是XML文件,我這裏轉成Excel,你們用這個更多點。架構

 1 using Microsoft.Crm.Sdk.Messages;  2 using Microsoft.Xrm.Sdk;  3 using Microsoft.Xrm.Sdk.Client;  4 using Microsoft.Xrm.Sdk.Messages;  5 using Microsoft.Xrm.Sdk.Metadata;  6 using Microsoft.Xrm.Sdk.Query;  7 using System;  8 using System.Configuration;  9 using System.Linq;  10 using System.ServiceModel.Description;  11 using Excel = Microsoft.Office.Interop.Excel;  12 
 13 namespace ExportEntityMetadata  14 {  15     class Program  16  {  17         static void Main(string[] args)  18  {  19             IServiceManagement<IOrganizationService> orgServiceMgr = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(ConfigurationManager.AppSettings["orgUrl"]));  20             AuthenticationCredentials orgAuCredentials = new AuthenticationCredentials();  21             orgAuCredentials.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["userName"];  22             orgAuCredentials.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["passWord"];  23             using (OrganizationServiceProxy orgSvc = GetProxy<IOrganizationService, OrganizationServiceProxy>(orgServiceMgr, orgAuCredentials))  24  {  25                 WhoAmIRequest whoReq = new WhoAmIRequest();  26                 WhoAmIResponse whoRep = orgSvc.Execute(whoReq) as WhoAmIResponse;  27                 var userEntity = orgSvc.Retrieve("systemuser", whoRep.UserId, new ColumnSet("fullname"));  28                 Console.WriteLine(string.Format("登陸組織{0}成功,歡迎{1},繼續操做請輸入y!", ConfigurationManager.AppSettings["orgUrl"], userEntity.GetAttributeValue<string>("fullname")));  29                 var input = Console.ReadLine().ToString().ToUpper();  30                 if (input == "Y")  31  {  32                     Console.WriteLine(string.Format("程序開始處理 - {0}", DateTime.Now.ToString()));  33                     RetrieveAllEntitiesRequest request = new RetrieveAllEntitiesRequest()  34  {  35                         EntityFilters = EntityFilters.Entity,  36                         RetrieveAsIfPublished = true
 37  };  38                     RetrieveAllEntitiesResponse response = (RetrieveAllEntitiesResponse)orgSvc.Execute(request);  39                     var excelApp = new Excel.Application();  40                     excelApp.Visible = false;  41                     Excel.Workbook metadataWorkbook = excelApp.Workbooks.Add();  42                     Excel.Worksheet rolesWorksheet = (Excel.Worksheet)excelApp.ActiveSheet;  43                     rolesWorksheet.Name = "實體信息";  44                     int row = 1;  45                     rolesWorksheet.Cells[1, 1] = "實體架構名稱";  46                     rolesWorksheet.Cells[1, 2] = "全部者類型";  47                     rolesWorksheet.Cells[1, 3] = "是否活動實體";  48                     rolesWorksheet.Cells[1, 4] = "實體顯示名稱(中文)";  49                     rolesWorksheet.Cells[1, 5] = "實體顯示名稱(英文)";  50                     rolesWorksheet.Cells[1, 6] = "實體說明";  51                     rolesWorksheet.Rows[1].Font.Bold = true;//字體加粗
 52                     row++;  53 
 54                     foreach (EntityMetadata currentEntity in response.EntityMetadata)  55  {  56                         rolesWorksheet.Cells[row, 1] = currentEntity.SchemaName;  57                         rolesWorksheet.Cells[row, 2] = currentEntity.OwnershipType.Value.ToString();  58                         rolesWorksheet.Cells[row, 3] = currentEntity.IsActivity.Value.ToString();  59                         rolesWorksheet.Cells[row, 4] = currentEntity.DisplayName.LocalizedLabels.Where(a => a.LanguageCode == 2052).Count() >= 1 ? currentEntity.DisplayName.LocalizedLabels.Where(a => a.LanguageCode == 2052).FirstOrDefault().Label : string.Empty;  60                         rolesWorksheet.Cells[row, 5] = currentEntity.DisplayName.LocalizedLabels.Where(a => a.LanguageCode == 1033).Count() >= 1 ? currentEntity.DisplayName.LocalizedLabels.Where(a => a.LanguageCode == 1033).FirstOrDefault().Label : string.Empty;  61                         rolesWorksheet.Cells[row, 6] = currentEntity.Description.LocalizedLabels.Where(a => a.LanguageCode == 2052).Count() >= 1 ? currentEntity.Description.LocalizedLabels.Where(a => a.LanguageCode == 2052).FirstOrDefault().Label : string.Empty; ;  62                         row++;  63                         Console.WriteLine(string.Format("第{0}行處理完畢 - {1}", row - 1, DateTime.Now.ToString()));  64  }  65                     rolesWorksheet.Columns[1].AutoFit();//自動列寬
 66                     rolesWorksheet.Columns[2].AutoFit();//自動列寬
 67                     rolesWorksheet.Columns[3].AutoFit();//自動列寬
 68                     rolesWorksheet.Columns[4].AutoFit();//自動列寬
 69                     rolesWorksheet.Columns[5].AutoFit();//自動列寬
 70                     rolesWorksheet.Columns[6].AutoFit();//自動列寬
 71                     metadataWorkbook.SaveAs(Filename: @"D:\CRMMetadata.xlsx", FileFormat: Excel.XlFileFormat.xlWorkbookDefault);  72  metadataWorkbook.Close();  73  excelApp.Quit();  74  }  75  }  76             Console.Write("程序執行完畢!");  77  Console.ReadKey();  78  }  79 
 80         private static TProxy GetProxy<TService, TProxy>(  81 IServiceManagement<TService> serviceManagement,  82 AuthenticationCredentials authCredentials)  83             where TService : class
 84             where TProxy : ServiceProxy<TService>
 85  {  86             Type classType = typeof(TProxy);  87 
 88             if (serviceManagement.AuthenticationType !=
 89  AuthenticationProviderType.ActiveDirectory)  90  {  91                 AuthenticationCredentials tokenCredentials =
 92  serviceManagement.Authenticate(authCredentials);  93                 return (TProxy)classType  94                     .GetConstructor(new Type[] { typeof(IServiceManagement<TService>), typeof(SecurityTokenResponse) })  95                     .Invoke(new object[] { serviceManagement, tokenCredentials.SecurityTokenResponse });  96  }  97             return (TProxy)classType  98                 .GetConstructor(new Type[] { typeof(IServiceManagement<TService>), typeof(ClientCredentials) })  99                 .Invoke(new object[] { serviceManagement, authCredentials.ClientCredentials }); 100  } 101  } 102 }
相關文章
相關標籤/搜索