/// <summary> /// /// </summary> /// <example> /// viewId;entityLogicalName;viewName;ViewType;Type;LCID1;LCID2;...;LCODX /// </example> /// <param name="entities"></param> /// <param name="languages"></param> /// <param name="sheet"></param> public void Export(List <EntityMetadata> entities, List <int> languages, ExcelWorksheet sheet, IOrganizationService service, ExportSettings settings) { var line = 0; var cell = 0; AddHeader(sheet, languages); var crmViews = new List <CrmView>(); foreach (var entity in entities.OrderBy(e => e.LogicalName)) { if (!entity.MetadataId.HasValue) { continue; } var views = RetrieveViews(entity.LogicalName, entity.ObjectTypeCode.Value, service); foreach (var view in views) { var crmView = crmViews.FirstOrDefault(cv => cv.Id == view.Id); if (crmView == null) { crmView = new CrmView { Id = view.Id, Entity = view.GetAttributeValue <string>("returnedtypecode"), Type = view.GetAttributeValue <int>("querytype"), Names = new Dictionary <int, string>(), Descriptions = new Dictionary <int, string>() }; crmViews.Add(crmView); } RetrieveLocLabelsRequest request; RetrieveLocLabelsResponse response; if (settings.ExportNames) { // Names request = new RetrieveLocLabelsRequest { AttributeName = "name", EntityMoniker = new EntityReference("savedquery", view.Id) }; response = (RetrieveLocLabelsResponse)service.Execute(request); foreach (var locLabel in response.Label.LocalizedLabels) { crmView.Names.Add(locLabel.LanguageCode, locLabel.Label); } } if (settings.ExportDescriptions) { // Descriptions request = new RetrieveLocLabelsRequest { AttributeName = "description", EntityMoniker = new EntityReference("savedquery", view.Id) }; response = (RetrieveLocLabelsResponse)service.Execute(request); foreach (var locLabel in response.Label.LocalizedLabels) { crmView.Descriptions.Add(locLabel.LanguageCode, locLabel.Label); } } } } foreach (var crmView in crmViews.OrderBy(cv => cv.Entity).ThenBy(cv => cv.Type)) { if (settings.ExportNames) { line++; cell = 0; ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Id.ToString("B"); ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Entity; ZeroBasedSheet.Cell(sheet, line, cell++).Value = _viewTypes.ContainsKey(crmView.Type) ?_viewTypes[crmView.Type] : crmView.Type.ToString(); ZeroBasedSheet.Cell(sheet, line, cell++).Value = "Name"; foreach (var lcid in languages) { var name = crmView.Names.FirstOrDefault(n => n.Key == lcid); if (name.Value != null) { ZeroBasedSheet.Cell(sheet, line, cell++).Value = name.Value; } else { cell++; } } } if (settings.ExportDescriptions) { line++; cell = 0; ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Id.ToString("B"); ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Entity; ZeroBasedSheet.Cell(sheet, line, cell++).Value = _viewTypes.ContainsKey(crmView.Type) ? _viewTypes[crmView.Type] : crmView.Type.ToString(); ZeroBasedSheet.Cell(sheet, line, cell++).Value = "Description"; foreach (var lcid in languages) { var desc = crmView.Descriptions.FirstOrDefault(n => n.Key == lcid); if (desc.Value != null) { ZeroBasedSheet.Cell(sheet, line, cell++).Value = desc.Value; } else { cell++; } } } } // Applying style to cells for (int i = 0; i < (4 + languages.Count); i++) { StyleMutator.TitleCell(ZeroBasedSheet.Cell(sheet, 0, i).Style); } for (int i = 1; i <= line; i++) { for (int j = 0; j < 4; j++) { StyleMutator.HighlightedCell(ZeroBasedSheet.Cell(sheet, i, j).Style); } } }
/// <summary> /// /// </summary> /// <example> /// viewId;entityLogicalName;viewName;ViewType;Type;LCID1;LCID2;...;LCODX /// </example> /// <param name="entities"></param> /// <param name="languages"></param> /// <param name="sheet"></param> public void Export(List<EntityMetadata> entities, List<int> languages, ExcelWorksheet sheet, IOrganizationService service) { var line = 1; AddHeader(sheet, languages); var crmViews = new List<CrmView>(); foreach (var entity in entities.OrderBy(e => e.LogicalName)) { if (!entity.MetadataId.HasValue) continue; var views = RetrieveViews(entity.LogicalName, entity.ObjectTypeCode.Value, service); foreach (var view in views) { var crmView = crmViews.FirstOrDefault(cv => cv.Id == view.Id); if (crmView == null) { crmView = new CrmView { Id = view.Id, Entity = view.GetAttributeValue<string>("returnedtypecode"), Type = view.GetAttributeValue<int>("querytype"), Names = new Dictionary<int, string>(), Descriptions = new Dictionary<int, string>() }; crmViews.Add(crmView); } // Names var request = new RetrieveLocLabelsRequest { AttributeName = "name", EntityMoniker = new EntityReference("savedquery", view.Id) }; var response = (RetrieveLocLabelsResponse)service.Execute(request); foreach (var locLabel in response.Label.LocalizedLabels) { crmView.Names.Add(locLabel.LanguageCode, locLabel.Label); } // Descriptions request = new RetrieveLocLabelsRequest { AttributeName = "description", EntityMoniker = new EntityReference("savedquery", view.Id) }; response = (RetrieveLocLabelsResponse)service.Execute(request); foreach (var locLabel in response.Label.LocalizedLabels) { crmView.Descriptions.Add(locLabel.LanguageCode, locLabel.Label); } } } foreach (var crmView in crmViews.OrderBy(cv => cv.Entity).ThenBy(cv => cv.Type)) { var cell = 0; ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Id.ToString("B"); ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Entity; ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Type; ZeroBasedSheet.Cell(sheet, line, cell++).Value = "Name"; foreach (var lcid in languages) { var name = crmView.Names.FirstOrDefault(n => n.Key == lcid); if (name.Value != null) ZeroBasedSheet.Cell(sheet, line, cell++).Value = name.Value; else { cell++; } } line++; cell = 0; ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Id.ToString("B"); ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Entity; ZeroBasedSheet.Cell(sheet, line, cell++).Value = crmView.Type; ZeroBasedSheet.Cell(sheet, line, cell++).Value = "Description"; foreach (var lcid in languages) { var desc = crmView.Descriptions.FirstOrDefault(n => n.Key == lcid); if (desc.Value != null) ZeroBasedSheet.Cell(sheet, line, cell++).Value = desc.Value; else { cell++; } } line++; } // Applying style to cells for (int i = 0; i < (4 + languages.Count); i++) { StyleMutator.TitleCell(ZeroBasedSheet.Cell(sheet, 0, i).Style); } for (int i = 1; i < line; i++) { for (int j = 0; j < 4; j++) { StyleMutator.HighlightedCell(ZeroBasedSheet.Cell(sheet, i, j).Style); } } }