public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value == null) { return(Binding.DoNothing); } string propertyName = parameter as string; if (String.IsNullOrEmpty(propertyName)) { return(new ArgumentNullException(nameof(parameter)).ToString()); } if (!(value is SolutionComponentViewItem viewItem)) { return(Binding.DoNothing); } if (viewItem.SolutionComponent == null || viewItem.SolutionComponent.ComponentType == null || !viewItem.SolutionComponent.ObjectId.HasValue) { return(Binding.DoNothing); } var entity = _descriptor.GetEntity <Entity>(viewItem.SolutionComponent.ComponentType.Value, viewItem.SolutionComponent.ObjectId.Value); if (entity != null) { return(EntityDescriptionHandler.GetAttributeStringShortEntityReferenceAndPicklist(entity, propertyName)); } return(Binding.DoNothing); }
public static bool IsEntityDifferentInField(Entity entity1, Entity entity2, string fieldName) { if (entity1.Contains(fieldName) && entity1.Attributes[fieldName] != null && entity1.Attributes[fieldName] is EntityReference && (entity1.Attributes[fieldName] as EntityReference).Id == Guid.Empty ) { entity1.Attributes.Remove(fieldName); } if (entity2.Contains(fieldName) && entity2.Attributes[fieldName] != null && entity2.Attributes[fieldName] is EntityReference && (entity2.Attributes[fieldName] as EntityReference).Id == Guid.Empty ) { entity2.Attributes.Remove(fieldName); } if (entity1.Contains(fieldName) && entity1.Attributes[fieldName] != null && !entity2.Contains(fieldName)) { return(true); } if (entity2.Contains(fieldName) && entity2.Attributes[fieldName] != null && !entity1.Contains(fieldName)) { return(true); } if (!entity1.Contains(fieldName) && !entity2.Contains(fieldName)) { return(false); } string str1 = EntityDescriptionHandler.GetAttributeString(entity1, fieldName); string str2 = EntityDescriptionHandler.GetAttributeString(entity2, fieldName); return(str1 != str2); }
private async Task <string> CheckContractTemplates() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingContractTemplatesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); Task <List <ContractTemplate> > task1 = _comparerSource.GetContractTemplate1Async(); Task <List <ContractTemplate> > task2 = _comparerSource.GetContractTemplate2Async(); List <ContractTemplate> list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Contract Templates in {0}: {1}", Connection1.Name, list1.Count())); List <ContractTemplate> list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Contract Templates in {0}: {1}", Connection2.Name, list2.Count())); if (list1.Count == 0 && list2.Count == 0) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } List <string> fieldsToCompare = new List <string>() { ContractTemplate.Schema.Attributes.abbreviation , ContractTemplate.Schema.Attributes.allotmenttypecode , ContractTemplate.Schema.Attributes.billingfrequencycode //, ContractTemplate.Schema.Attributes.componentstate , ContractTemplate.Schema.Attributes.contractservicelevelcode //, ContractTemplate.Schema.Attributes.contracttemplateid //, ContractTemplate.Schema.Attributes.contracttemplateidunique //, ContractTemplate.Schema.Attributes.createdby //, ContractTemplate.Schema.Attributes.createdon //, ContractTemplate.Schema.Attributes.createdonbehalfby , ContractTemplate.Schema.Attributes.description , ContractTemplate.Schema.Attributes.effectivitycalendar //, ContractTemplate.Schema.Attributes.importsequencenumber //, ContractTemplate.Schema.Attributes.introducedversion , ContractTemplate.Schema.Attributes.iscustomizable //, ContractTemplate.Schema.Attributes.ismanaged //, ContractTemplate.Schema.Attributes.modifiedby //, ContractTemplate.Schema.Attributes.modifiedon //, ContractTemplate.Schema.Attributes.modifiedonbehalfby , ContractTemplate.Schema.Attributes.name //, ContractTemplate.Schema.Attributes.organizationid //, ContractTemplate.Schema.Attributes.overriddencreatedon //, ContractTemplate.Schema.Attributes.overwritetime //, ContractTemplate.Schema.Attributes.solutionid //, ContractTemplate.Schema.Attributes.supportingsolutionid , ContractTemplate.Schema.Attributes.usediscountaspercentage //, ContractTemplate.Schema.Attributes.versionnumber }; List <string> xmlFieldsToCompare = new List <string>() { //ContractTemplate.Schema.Attributes.body //, ContractTemplate.Schema.Attributes.presentationxml //, ContractTemplate.Schema.Attributes.subjectpresentationxml }; FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Name", "Id"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Name", "Id"); Dictionary <Tuple <string, string>, List <string> > dictDifference = new Dictionary <Tuple <string, string>, List <string> >(); foreach (ContractTemplate template1 in list1) { { ContractTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 != null) { continue; } } string name1 = template1.Name; tableOnlyExistsIn1.AddLine(name1, template1.Id.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.ContractTemplate, template1.Id); } foreach (ContractTemplate template2 in list2) { { ContractTemplate template1 = list1.FirstOrDefault(template => template.Id == template2.Id); if (template1 != null) { continue; } } string name2 = template2.Name; tableOnlyExistsIn2.AddLine(name2, template2.Id.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.ContractTemplate, template2.Id); } foreach (ContractTemplate template1 in list1) { ContractTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 == null) { continue; } FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); foreach (string fieldName in fieldsToCompare) { if (ContentCoparerHelper.IsEntityDifferentInField(template1, template2, fieldName)) { string str1 = EntityDescriptionHandler.GetAttributeString(template1, fieldName, Connection1); string str2 = EntityDescriptionHandler.GetAttributeString(template2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } foreach (string fieldName in xmlFieldsToCompare) { string xml1 = template1.GetAttributeValue <string>(fieldName) ?? string.Empty; string xml2 = template2.GetAttributeValue <string>(fieldName) ?? string.Empty; if (!ContentCoparerHelper.CompareXML(xml1, xml2).IsEqual) { string reason = string.Empty; ContentCopareResult compare = ContentCoparerHelper.CompareXML(xml1.ToLower(), xml2.ToLower(), true); if (!compare.IsEqual) { reason = "InCase"; } else { reason = compare.GetCompareDescription(); } tabDiff.AddLine(fieldName, string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, reason)); } } if (tabDiff.Count > 0) { string name1 = template1.Name; var diff = tabDiff.GetFormatedLines(false); this.ImageBuilder.AddComponentDifferent((int)ComponentType.ContractTemplate, template1.Id, template2.Id, string.Join(Environment.NewLine, diff)); dictDifference.Add(Tuple.Create(name1, template1.Id.ToString()), diff); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Contract Templates ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Contract Templates ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Contract Templates DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("Title", "Id"); foreach (KeyValuePair <Tuple <string, string>, List <string> > template in dictDifference) { tableDifference.CalculateLineLengths(template.Key.Item1, template.Key.Item2); } foreach (KeyValuePair <Tuple <string, string>, List <string> > template in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(template.Key.Item1, template.Key.Item2)); foreach (string str in template.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in Contract Templates."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "Contract Templates"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckMailMergeTemplates() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingMailMergeTemplatesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); Task <List <MailMergeTemplate> > task1 = _comparerSource.GetMailMergeTemplate1Async(); Task <List <MailMergeTemplate> > task2 = _comparerSource.GetMailMergeTemplate2Async(); List <MailMergeTemplate> list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Mail Merge Templates in {0}: {1}", Connection1.Name, list1.Count())); List <MailMergeTemplate> list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Mail Merge Templates in {0}: {1}", Connection2.Name, list2.Count())); if (list1.Count == 0 && list2.Count == 0) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("AssociatedEntity", "Name", "Language", "File Name", "Mail Merge Type", "Viewable By", "Owner", "Id"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("AssociatedEntity", "Name", "Language", "File Name", "Mail Merge Type", "Viewable By", "Owner", "Id"); Dictionary <Tuple <string, string, string, string>, List <string> > dictDifference = new Dictionary <Tuple <string, string, string, string>, List <string> >(); foreach (MailMergeTemplate template1 in list1) { { MailMergeTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 != null) { continue; } } string name1 = template1.Name; string entityName1 = template1.TemplateTypeCode; int language1 = template1.LanguageCode.Value; string filename = template1.FileName; string reportType = template1.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.mailmergetype) ? template1.FormattedValues[MailMergeTemplate.Schema.Attributes.mailmergetype] : string.Empty; Microsoft.Xrm.Sdk.EntityReference ownerRef = template1.OwnerId; string owner = string.Empty; if (ownerRef != null) { owner = ownerRef.Name; } string ispersonal = template1.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.ispersonal) ? template1.FormattedValues[MailMergeTemplate.Schema.Attributes.ispersonal] : string.Empty; tableOnlyExistsIn1.AddLine(entityName1, name1, LanguageLocale.GetLocaleName(language1), filename, reportType, ispersonal, owner, template1.Id.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.MailMergeTemplate, template1.Id); } foreach (MailMergeTemplate template2 in list2) { { MailMergeTemplate template1 = list1.FirstOrDefault(template => template.Id == template2.Id); if (template1 != null) { continue; } } string name2 = template2.Name; string entityName2 = template2.TemplateTypeCode; int language2 = template2.LanguageCode.Value; string filename = template2.FileName; string templateType = template2.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.mailmergetype) ? template2.FormattedValues[MailMergeTemplate.Schema.Attributes.mailmergetype] : string.Empty; Microsoft.Xrm.Sdk.EntityReference ownerRef = template2.OwnerId; string owner = string.Empty; if (ownerRef != null) { owner = ownerRef.Name; } string ispersonal = template2.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.ispersonal) ? template2.FormattedValues[MailMergeTemplate.Schema.Attributes.ispersonal] : string.Empty; tableOnlyExistsIn2.AddLine(entityName2, name2, LanguageLocale.GetLocaleName(language2), filename, templateType, ispersonal, owner, template2.Id.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.MailMergeTemplate, template2.Id); } foreach (MailMergeTemplate template1 in list1) { MailMergeTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 == null) { continue; } FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); foreach (string fieldName in _fieldsToCompareMailMergeTemplateOrdinal) { if (ContentCoparerHelper.IsEntityDifferentInField(template1, template2, fieldName)) { string str1 = EntityDescriptionHandler.GetAttributeString(template1, fieldName, Connection1); string str2 = EntityDescriptionHandler.GetAttributeString(template2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } foreach (string fieldName in _fieldsToCompareMailMergeTemplateXml) { string xml1 = template1.GetAttributeValue <string>(fieldName) ?? string.Empty; string xml2 = template2.GetAttributeValue <string>(fieldName) ?? string.Empty; if (!ContentCoparerHelper.CompareXML(xml1, xml2).IsEqual) { string reason = string.Empty; ContentCopareResult compare = ContentCoparerHelper.CompareXML(xml1.ToLower(), xml2.ToLower(), true); if (!compare.IsEqual) { reason = "InCase"; } else { reason = compare.GetCompareDescription(); } tabDiff.AddLine(fieldName, string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, reason)); } } if (tabDiff.Count > 0) { string name1 = template1.Name; string entityName1 = template1.TemplateTypeCode; int language1 = template1.LanguageCode.Value; var diff = tabDiff.GetFormatedLines(false); this.ImageBuilder.AddComponentDifferent((int)ComponentType.MailMergeTemplate, template1.Id, template2.Id, string.Join(Environment.NewLine, diff)); dictDifference.Add(Tuple.Create(entityName1, name1, LanguageLocale.GetLocaleName(language1), template1.Id.ToString()), diff); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Mail Merge Templates ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Mail Merge Templates ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Mail Merge Templates DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("AssociatedEntity", "Name", "Language", "Id"); foreach (KeyValuePair <Tuple <string, string, string, string>, List <string> > template in dictDifference) { tableDifference.CalculateLineLengths(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4); } foreach (KeyValuePair <Tuple <string, string, string, string>, List <string> > template in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) .ThenBy(w => w.Key.Item3) .ThenBy(w => w.Key.Item4) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4)); foreach (string str in template.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in Mail Merge Templates."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "Mail Merge Templates"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckConnectionRoles() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingConnectionRolesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); var taskRole1 = _comparerSource.GetConnectionRole1Async(); var taskRole2 = _comparerSource.GetConnectionRole2Async(); var listRole1 = await taskRole1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRolesInConnectionFormat2, Connection1.Name, listRole1.Count)); var listRole2 = await taskRole2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRolesInConnectionFormat2, Connection2.Name, listRole2.Count)); if (!listRole1.Any() && !listRole2.Any()) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } var taskRoleAssociation1 = _comparerSource.GetConnectionRoleAssociation1Async(); var taskRoleAssociation2 = _comparerSource.GetConnectionRoleAssociation2Async(); var taskRoleObjectTypeCode1 = _comparerSource.GetConnectionRoleObjectTypeCode1Async(); var taskRoleObjectTypeCode2 = _comparerSource.GetConnectionRoleObjectTypeCode2Async(); var listRoleAssociation1 = await taskRoleAssociation1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleAssociationsInConnectionFormat2, Connection1.Name, listRoleAssociation1.Count)); var listRoleAssociation2 = await taskRoleAssociation2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleAssociationsInConnectionFormat2, Connection2.Name, listRoleAssociation2.Count)); var listRoleObjectTypeCode1 = await taskRoleObjectTypeCode1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleObjectTypeCodesInConnectionFormat2, Connection1.Name, listRoleObjectTypeCode1.Count)); var listRoleObjectTypeCode2 = await taskRoleObjectTypeCode2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleObjectTypeCodesInConnectionFormat2, Connection2.Name, listRoleObjectTypeCode2.Count)); var commonRolesList = new List <LinkedEntities <ConnectionRole> >(); var dictDifference = new Dictionary <LinkedEntities <ConnectionRole>, List <string> >(); FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Category", "Name", "Id", "IsManaged"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Category", "Name", "Id", "IsManaged"); foreach (var role1 in listRole1) { { var role2 = listRole2.FirstOrDefault(role => role.Id == role1.Id); if (role2 != null) { commonRolesList.Add(new LinkedEntities <ConnectionRole>(role1, role2)); continue; } } var category1 = role1.FormattedValues[ConnectionRole.Schema.Attributes.category]; var name1 = role1.Name; tableOnlyExistsIn1.AddLine(category1, name1, role1.Id.ToString(), role1.IsManaged.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.ConnectionRole, role1.Id); } foreach (var role2 in listRole2) { { var role1 = listRole1.FirstOrDefault(role => role.Id == role2.Id); if (role1 != null) { continue; } } var name2 = role2.Name; var category2 = role2.FormattedValues[ConnectionRole.Schema.Attributes.category]; tableOnlyExistsIn2.AddLine(category2, name2, role2.Id.ToString(), role2.IsManaged.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.ConnectionRole, role2.Id); } content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRolesCommonFormat3, Connection1.Name, Connection2.Name, commonRolesList.Count())); foreach (var commonItem in commonRolesList) { var diff = new List <string>(); { FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); List <string> fieldsToCompare = new List <string>() { ConnectionRole.Schema.Attributes.category , ConnectionRole.Schema.Attributes.componentstate //, ConnectionRole.Schema.Attributes.connectionroleid //, ConnectionRole.Schema.Attributes.connectionroleidunique //, ConnectionRole.Schema.Attributes.createdby //, ConnectionRole.Schema.Attributes.createdon //, ConnectionRole.Schema.Attributes.createdonbehalfby , ConnectionRole.Schema.Attributes.description //, ConnectionRole.Schema.Attributes.importsequencenumber //, ConnectionRole.Schema.Attributes.introducedversion , ConnectionRole.Schema.Attributes.iscustomizable //, ConnectionRole.Schema.Attributes.ismanaged //, ConnectionRole.Schema.Attributes.modifiedby //, ConnectionRole.Schema.Attributes.modifiedon //, ConnectionRole.Schema.Attributes.modifiedonbehalfby , ConnectionRole.Schema.Attributes.name //, ConnectionRole.Schema.Attributes.organizationid //, ConnectionRole.Schema.Attributes.overwritetime //, ConnectionRole.Schema.Attributes.solutionid , ConnectionRole.Schema.Attributes.statecode , ConnectionRole.Schema.Attributes.statuscode //, ConnectionRole.Schema.Attributes.supportingsolutionid //, ConnectionRole.Schema.Attributes.versionnumber }; foreach (var fieldName in fieldsToCompare) { if (ContentCoparerHelper.IsEntityDifferentInField(commonItem.Entity1, commonItem.Entity2, fieldName)) { var str1 = EntityDescriptionHandler.GetAttributeString(commonItem.Entity1, fieldName, Connection1); var str2 = EntityDescriptionHandler.GetAttributeString(commonItem.Entity2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } if (tabDiff.Count > 0) { diff.AddRange(tabDiff.GetFormatedLines(false)); } } { var enumerable1 = listRoleObjectTypeCode1 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId.Id == commonItem.Entity1.ConnectionRoleId) .Select(e => e.AssociatedObjectTypeCode) .Distinct() ; var enumerable2 = listRoleObjectTypeCode2 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId.Id == commonItem.Entity2.ConnectionRoleId) .Select(e => e.AssociatedObjectTypeCode) .Distinct() ; CompareConnectionRoleAssociatedObjects(Properties.OrganizationComparerStrings.PrefixAssociatedObjectTypeCodes, diff, enumerable1, enumerable2); } { var enumerable1 = listRoleAssociation1 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId == commonItem.Entity1.ConnectionRoleId) .Select(e => e.AssociatedConnectionRoleName) .Distinct() ; var enumerable2 = listRoleAssociation2 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId == commonItem.Entity2.ConnectionRoleId) .Select(e => e.AssociatedConnectionRoleName) .Distinct() ; CompareConnectionRoleAssociatedObjects(Properties.OrganizationComparerStrings.PrefixAssociatedConnectionRoles, diff, enumerable1, enumerable2); } if (diff.Count > 0) { dictDifference.Add(commonItem, diff); this.ImageBuilder.AddComponentDifferent((int)ComponentType.ConnectionRole, commonItem.Entity1.Id, commonItem.Entity2.Id, string.Join(Environment.NewLine, diff)); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat(Properties.OrganizationComparerStrings.ConnectionRolesOnlyExistsInConnectionFormat2, Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat(Properties.OrganizationComparerStrings.ConnectionRolesOnlyExistsInConnectionFormat2, Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat(Properties.OrganizationComparerStrings.ConnectionRolesDifferentFormat3, Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader(Connection1.Name, Connection2.Name, "Id"); foreach (var item in dictDifference) { tableDifference.CalculateLineLengths(item.Key.Entity1.Name, item.Key.Entity2.Name, item.Key.Entity1.Id.ToString()); } foreach (var item in dictDifference .OrderBy(w => w.Key.Entity1.Name) .ThenBy(w => w.Key.Entity2.Name) .ThenBy(w => w.Key.Entity1.Id.ToString()) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(item.Key.Entity1.Name, item.Key.Entity2.Name, item.Key.Entity1.Id.ToString())); foreach (var str in item.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine(Properties.OrganizationComparerStrings.ConnectionRolesNoDifference); } content.AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, Properties.OrganizationComparerStrings.ConnectionRolesFileName); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckDisplayStrings() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingDisplayStringsFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); var task1 = _comparerSource.GetDisplayString1Async(); var task2 = _comparerSource.GetDisplayString2Async(); var list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings in {0}: {1}", Connection1.Name, list1.Count())); var list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings in {0}: {1}", Connection2.Name, list2.Count())); if (list1.Count == 0 && list2.Count == 0) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } var taskMap1 = _comparerSource.GetDisplayStringMap1Async(); var taskMap2 = _comparerSource.GetDisplayStringMap2Async(); var listMap1 = await taskMap1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings Maps in {0}: {1}", Connection1.Name, listMap1.Count())); var listMap2 = await taskMap2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings Maps in {0}: {1}", Connection1.Name, listMap2.Count())); FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Key", "LanguageCode", "Published", "Custom", "CustomComment", "FormatParameters"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Key", "LanguageCode", "Published", "Custom", "CustomComment", "FormatParameters"); var dictDifference = new Dictionary <Tuple <string, string>, List <string> >(); foreach (var displayString1 in list1) { var displaystringkey1 = displayString1.DisplayStringKey; var languagecode1 = displayString1.LanguageCode.Value; { var displayString2 = list2.FirstOrDefault(displayString => { var displaystringkey2 = displayString.DisplayStringKey; var languagecode2 = displayString.LanguageCode.Value; return(displaystringkey1 == displaystringkey2 && languagecode1 == languagecode2); }); if (displayString2 != null) { continue; } } var customComment = displayString1.CustomComment; var customDisplayString = displayString1.CustomComment; var formatParameters = displayString1.FormatParameters.Value; var publishedDisplayString = displayString1.PublishedDisplayString; tableOnlyExistsIn1.AddLine(displaystringkey1, LanguageLocale.GetLocaleName(languagecode1), publishedDisplayString, customDisplayString, customComment, formatParameters.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.DisplayString, displayString1.Id); } foreach (var displayString2 in list2) { var displaystringkey2 = displayString2.DisplayStringKey; var languagecode2 = displayString2.LanguageCode.Value; { var displayString1 = list1.FirstOrDefault(displayString => { var displaystringkey1 = displayString.DisplayStringKey; var languagecode1 = displayString.LanguageCode.Value; return(displaystringkey1 == displaystringkey2 && languagecode1 == languagecode2); }); if (displayString1 != null) { continue; } } var customComment = displayString2.CustomComment; var customDisplayString = displayString2.CustomDisplayString; var formatParameters = displayString2.FormatParameters.Value; var publishedDisplayString = displayString2.PublishedDisplayString; tableOnlyExistsIn2.AddLine(displaystringkey2, LanguageLocale.GetLocaleName(languagecode2), publishedDisplayString, customDisplayString, customComment, formatParameters.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.DisplayString, displayString2.Id); } foreach (var displayString1 in list1) { var displaystringkey1 = displayString1.DisplayStringKey; var languagecode1 = displayString1.LanguageCode.Value; var displayString2 = list2.FirstOrDefault(displayString => { var displaystringkey2 = displayString.DisplayStringKey; var languagecode2 = displayString.LanguageCode.Value; return(displaystringkey1 == displaystringkey2 && languagecode1 == languagecode2); }); if (displayString2 == null) { continue; } FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); var temp1 = listMap1.Where(s => s.DisplayStringId == displayString1.Id); var temp2 = listMap2.Where(s => s.DisplayStringId == displayString2.Id); if (temp1.SequenceEqual(temp2)) { tabDiff.AddLine("DisplayStringMap", Connection1.Name, "Differs"); tabDiff.AddLine("DisplayStringMap", Connection2.Name, "Differs"); } List <string> fieldsToCompare = new List <string>() { DisplayString.Schema.Attributes.customcomment , DisplayString.Schema.Attributes.customdisplaystring , DisplayString.Schema.Attributes.formatparameters , DisplayString.Schema.Attributes.publisheddisplaystring }; foreach (var fieldName in fieldsToCompare) { if (ContentComparerHelper.IsEntityDifferentInField(displayString1, displayString2, fieldName)) { var str1 = EntityDescriptionHandler.GetAttributeString(displayString1, fieldName, Connection1); var str2 = EntityDescriptionHandler.GetAttributeString(displayString2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } if (tabDiff.Count > 0) { var diff = tabDiff.GetFormatedLines(false); dictDifference.Add(Tuple.Create(displaystringkey1, LanguageLocale.GetLocaleName(languagecode1)), diff); this.ImageBuilder.AddComponentDifferent((int)ComponentType.DisplayString, displayString1.Id, displayString2.Id, string.Join(Environment.NewLine, diff)); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Display Strings ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Display Strings ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Display Strings DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("Key", "LanguageCode"); foreach (var displayString in dictDifference) { tableDifference.CalculateLineLengths(displayString.Key.Item1, displayString.Key.Item2); } foreach (var displayString in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(displayString.Key.Item1, displayString.Key.Item2)); foreach (var str in displayString.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in Display Strings."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "Display Strings"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckSystemSavedQueryVisualizations() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingSystemChartsFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); var task1 = _comparerSource.GetSavedQueryVisualization1Async(); var task2 = _comparerSource.GetSavedQueryVisualization2Async(); var list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.SavedQueryVisualizationsInConnectionFormat2, Connection1.Name, list1.Count)); var list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.SavedQueryVisualizationsInConnectionFormat2, Connection2.Name, list2.Count)); if (!list1.Any() && !list2.Any()) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Entity", "Name", "IsManaged", "Id"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Entity", "Name", "IsManaged", "Id"); var dictDifference = new Dictionary <Tuple <string, string, string>, List <string> >(); var commonList = new List <LinkedEntities <SavedQueryVisualization> >(); foreach (var chart1 in list1) { { var chart2 = list2.FirstOrDefault(chart => chart.Id == chart1.Id); if (chart2 != null) { commonList.Add(new LinkedEntities <SavedQueryVisualization>(chart1, chart2)); continue; } } var entityName1 = chart1.PrimaryEntityTypeCode; var name1 = chart1.Name; tableOnlyExistsIn1.AddLine(entityName1, name1, chart1.IsManaged.ToString(), chart1.Id.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.SavedQueryVisualization, chart1.Id); } foreach (var chart2 in list2) { var entityName2 = chart2.PrimaryEntityTypeCode; var name2 = chart2.Name; { var chart1 = list1.FirstOrDefault(chart => chart.Id == chart2.Id); if (chart1 != null) { continue; } } tableOnlyExistsIn2.AddLine(entityName2, name2, chart2.IsManaged.ToString(), chart2.Id.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.SavedQueryVisualization, chart2.Id); } { var reporter = new ProgressReporter(_iWriteToOutput, commonList.Count, 5, "Processing Common Saved Query Visualizations (Charts)"); foreach (var chart in commonList) { var chart1 = chart.Entity1; var chart2 = chart.Entity2; FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); { List <string> fieldsToCompare = new List <string>() { SavedQueryVisualization.Schema.Attributes.componentstate //, SavedQueryVisualization.Schema.Attributes.createdby //, SavedQueryVisualization.Schema.Attributes.createdon //, SavedQueryVisualization.Schema.Attributes.createdonbehalfby //, SavedQueryVisualization.Schema.Attributes.datadescription , SavedQueryVisualization.Schema.Attributes.description , SavedQueryVisualization.Schema.Attributes.introducedversion , SavedQueryVisualization.Schema.Attributes.iscustomizable , SavedQueryVisualization.Schema.Attributes.isdefault //, SavedQueryVisualization.Schema.Attributes.ismanaged //, SavedQueryVisualization.Schema.Attributes.modifiedby //, SavedQueryVisualization.Schema.Attributes.modifiedon //, SavedQueryVisualization.Schema.Attributes.modifiedonbehalfby , SavedQueryVisualization.Schema.Attributes.name //, SavedQueryVisualization.Schema.Attributes.organizationid //, SavedQueryVisualization.Schema.Attributes.overwritetime //, SavedQueryVisualization.Schema.Attributes.presentationdescription , SavedQueryVisualization.Schema.Attributes.primaryentitytypecode //, SavedQueryVisualization.Schema.Attributes.savedqueryvisualizationid //, SavedQueryVisualization.Schema.Attributes.savedqueryvisualizationidunique //, SavedQueryVisualization.Schema.Attributes.solutionid //, SavedQueryVisualization.Schema.Attributes.supportingsolutionid , SavedQueryVisualization.Schema.Attributes.versionnumber , SavedQueryVisualization.Schema.Attributes.webresourceid }; foreach (var fieldName in fieldsToCompare) { if (ContentComparerHelper.IsEntityDifferentInField(chart1, chart2, fieldName)) { var str1 = EntityDescriptionHandler.GetAttributeString(chart1, fieldName, Connection1); var str2 = EntityDescriptionHandler.GetAttributeString(chart2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } } var entityName1 = chart1.PrimaryEntityTypeCode; var name1 = chart1.Name; { List <string> fieldsToCompare = new List <string>() { SavedQueryVisualization.Schema.Attributes.datadescription , SavedQueryVisualization.Schema.Attributes.presentationdescription }; foreach (var fieldName in fieldsToCompare) { string xml1 = chart1.GetAttributeValue <string>(fieldName) ?? string.Empty; string xml2 = chart2.GetAttributeValue <string>(fieldName) ?? string.Empty; if (!ContentComparerHelper.CompareXML(xml1, xml2).IsEqual) { string reason = string.Empty; var compare = ContentComparerHelper.CompareXML(xml1.ToLower(), xml2.ToLower(), true); if (compare.IsEqual) { reason = "InCase"; } else { reason = compare.GetCompareDescription(); } if (!string.IsNullOrEmpty(reason)) { tabDiff.AddLine(fieldName, string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, reason)); } } } } if (tabDiff.Count > 0) { var diff = tabDiff.GetFormatedLines(false); this.ImageBuilder.AddComponentDifferent((int)ComponentType.SavedQueryVisualization, chart1.Id, chart2.Id, string.Join(Environment.NewLine, diff)); dictDifference.Add(Tuple.Create(entityName1, name1, chart1.Id.ToString()), diff); } } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Saved Query Visualizations (Charts) ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Saved Query Visualizations (Charts) ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Saved Query Visualizations (Charts) DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("Entity", "Name", "Id"); foreach (var template in dictDifference) { tableDifference.CalculateLineLengths(template.Key.Item1, template.Key.Item2, template.Key.Item3); } foreach (var template in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) .ThenBy(w => w.Key.Item3) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(template.Key.Item1, template.Key.Item2, template.Key.Item3)); foreach (var str in template.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in System Saved Query Visualizations (Charts)."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "Saved Query Visualizations (Charts)"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckSystemSavedQueries() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingSystemSavedQueriesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); var task1 = _comparerSource.GetSavedQuery1Async(); var task2 = _comparerSource.GetSavedQuery2Async(); var list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.SavedQueriesInConnectionFormat2, Connection1.Name, list1.Count)); var list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.SavedQueriesInConnectionFormat2, Connection2.Name, list2.Count)); if (!list1.Any() && !list2.Any()) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Entity", "Name", "QueryType", "IsUserDefined", "IsManaged", "Id"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Entity", "Name", "QueryType", "IsUserDefined", "IsManaged", "Id"); var dictDifference = new Dictionary <Tuple <string, string, string, string>, List <string> >(); var commonList = new List <LinkedEntities <SavedQuery> >(); foreach (var query1 in list1) { { var query2 = list2.FirstOrDefault(query => query.Id == query1.Id); if (query2 != null) { commonList.Add(new LinkedEntities <SavedQuery>(query1, query2)); continue; } } var entityName1 = query1.ReturnedTypeCode; var name1 = query1.Name; var querytype1 = query1.QueryType.Value; var querytypeName1 = SavedQueryRepository.GetQueryTypeName(querytype1); tableOnlyExistsIn1.AddLine( entityName1 , name1 , querytypeName1 , query1.IsUserDefined.ToString() , query1.IsManaged.ToString() , query1.Id.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.SavedQuery, query1.Id); } foreach (var query2 in list2) { { var query1 = list1.FirstOrDefault(query => query.Id == query2.Id); if (query1 != null) { continue; } } var entityName2 = query2.ReturnedTypeCode; var name2 = query2.Name; var querytype2 = query2.QueryType.Value; var querytypeName2 = SavedQueryRepository.GetQueryTypeName(querytype2); tableOnlyExistsIn2.AddLine( entityName2 , name2 , querytypeName2 , query2.IsUserDefined.ToString() , query2.IsManaged.ToString() , query2.Id.ToString() ); this.ImageBuilder.AddComponentSolution2((int)ComponentType.SavedQuery, query2.Id); } { var reporter = new ProgressReporter(_iWriteToOutput, commonList.Count, 5, "Processing Common Saved Queries"); foreach (var query in commonList) { reporter.Increase(); FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); { List <string> fieldsToCompare = new List <string>() { SavedQuery.Schema.Attributes.advancedgroupby , SavedQuery.Schema.Attributes.canbedeleted //, columnsetxml , SavedQuery.Schema.Attributes.componentstate , SavedQuery.Schema.Attributes.conditionalformatting //, SavedQuery.Schema.Attributes.createdby //, SavedQuery.Schema.Attributes.createdon //, SavedQuery.Schema.Attributes.createdonbehalfby , SavedQuery.Schema.Attributes.description //, SavedQuery.Schema.Attributes.fetchxml , SavedQuery.Schema.Attributes.introducedversion , SavedQuery.Schema.Attributes.iscustomizable , SavedQuery.Schema.Attributes.isdefault //, SavedQuery.Schema.Attributes.ismanaged , SavedQuery.Schema.Attributes.isprivate , SavedQuery.Schema.Attributes.isquickfindquery , SavedQuery.Schema.Attributes.isuserdefined //, SavedQuery.Schema.Attributes.layoutxml //, SavedQuery.Schema.Attributes.modifiedby //, SavedQuery.Schema.Attributes.modifiedon //, SavedQuery.Schema.Attributes.modifiedonbehalfby , SavedQuery.Schema.Attributes.name //, SavedQuery.Schema.Attributes.organizationid , SavedQuery.Schema.Attributes.organizationtaborder //, SavedQuery.Schema.Attributes.overwritetime , SavedQuery.Schema.Attributes.queryapi , SavedQuery.Schema.Attributes.queryappusage , SavedQuery.Schema.Attributes.querytype , SavedQuery.Schema.Attributes.returnedtypecode //, SavedQuery.Schema.Attributes.savedqueryid //, SavedQuery.Schema.Attributes.savedqueryidunique //, SavedQuery.Schema.Attributes.solutionid , SavedQuery.Schema.Attributes.statecode , SavedQuery.Schema.Attributes.statuscode //, SavedQuery.Schema.Attributes.supportingsolutionid , SavedQuery.Schema.Attributes.versionnumber }; foreach (var fieldName in fieldsToCompare) { if (ContentComparerHelper.IsEntityDifferentInField(query.Entity1, query.Entity2, fieldName)) { var str1 = EntityDescriptionHandler.GetAttributeString(query.Entity1, fieldName, Connection1); var str2 = EntityDescriptionHandler.GetAttributeString(query.Entity2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } } { List <string> fieldsToCompare = new List <string>() { SavedQuery.Schema.Attributes.fetchxml , SavedQuery.Schema.Attributes.layoutxml , SavedQuery.Schema.Attributes.columnsetxml }; foreach (var fieldName in fieldsToCompare) { Action <XElement> action = null; if (string.Equals(fieldName, SavedQuery.Schema.Attributes.layoutxml)) { action = ContentComparerHelper.RemoveLayoutObjectCode; } string xml1 = query.Entity1.GetAttributeValue <string>(fieldName) ?? string.Empty; string xml2 = query.Entity2.GetAttributeValue <string>(fieldName) ?? string.Empty; if (!ContentComparerHelper.CompareXML(xml1, xml2, false, action).IsEqual) { string reason = string.Empty; var compare = ContentComparerHelper.CompareXML(xml1.ToLower(), xml2.ToLower(), true, action); if (compare.IsEqual) { reason = "InCase"; } else { reason = compare.GetCompareDescription(); } if (!string.IsNullOrEmpty(reason)) { tabDiff.AddLine(fieldName, string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, reason)); } } } } if (tabDiff.Count > 0) { var entityName1 = query.Entity1.ReturnedTypeCode; var name1 = query.Entity1.Name; var querytype1 = query.Entity1.QueryType.Value; var querytypeName1 = SavedQueryRepository.GetQueryTypeName(querytype1); var diff = tabDiff.GetFormatedLines(false); this.ImageBuilder.AddComponentDifferent((int)ComponentType.SavedQuery, query.Entity1.Id, query.Entity2.Id, string.Join(Environment.NewLine, diff)); dictDifference.Add(Tuple.Create(entityName1, name1, querytypeName1, query.Entity1.Id.ToString()), diff); } } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Saved Queries ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Saved Queries ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Saved Queries DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("Entity", "Name", "QueryType", "Id"); foreach (var template in dictDifference) { tableDifference.CalculateLineLengths(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4); } foreach (var template in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) .ThenBy(w => w.Key.Item3) .ThenBy(w => w.Key.Item4) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4)); foreach (var str in template.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in System Saved Queries."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "System Saved Queries"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckSystemForms() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingSystemFormsFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); FormDescriptionHandler handler1 = new FormDescriptionHandler(ImageBuilder.Descriptor1, new DependencyRepository(_comparerSource.Service1)) { WithManagedInfo = false, WithDependentComponents = false, }; FormDescriptionHandler handler2 = new FormDescriptionHandler(ImageBuilder.Descriptor2, new DependencyRepository(_comparerSource.Service2)) { WithManagedInfo = false, WithDependentComponents = false, }; var task1 = _comparerSource.GetSystemForm1Async(); var task2 = _comparerSource.GetSystemForm2Async(); var list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.SystemFormsInConnectionFormat2, Connection1.Name, list1.Count)); var list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.SystemFormsInConnectionFormat2, Connection2.Name, list2.Count)); if (!list1.Any() && !list2.Any()) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Entity", "Type", "Name", "IsManaged", "Id"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Entity", "Type", "Name", "IsManaged", "Id"); var dictDifference = new Dictionary <Tuple <string, string, string, string>, List <string> >(); var commonList = new List <LinkedEntities <SystemForm> >(); foreach (var form1 in list1) { { var form2 = list2.FirstOrDefault(form => form.Id == form1.Id); if (form2 != null) { commonList.Add(new LinkedEntities <SystemForm>(form1, form2)); continue; } } var entityName1 = form1.ObjectTypeCode; var name1 = form1.Name; string typeName1 = form1.FormattedValues[SystemForm.Schema.Attributes.type]; tableOnlyExistsIn1.AddLine(entityName1, typeName1, name1, form1.IsManaged.ToString(), form1.Id.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.SystemForm, form1.Id); } foreach (var form2 in list2) { { var form1 = list1.FirstOrDefault(form => form.Id == form2.Id); if (form1 != null) { continue; } } var entityName2 = form2.ObjectTypeCode; var name2 = form2.Name; string typeName2 = form2.FormattedValues[SystemForm.Schema.Attributes.type]; tableOnlyExistsIn2.AddLine(entityName2, typeName2, name2, form2.IsManaged.ToString(), form2.Id.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.SystemForm, form2.Id); } { var reporter = new ProgressReporter(_iWriteToOutput, commonList.Count, 5, "Processing Common Forms"); foreach (var form in commonList) { reporter.Increase(); FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); { List <string> fieldsToCompare = new List <string>() { //SystemForm.Schema.Attributes.ancestorformid SystemForm.Schema.Attributes.canbedeleted , SystemForm.Schema.Attributes.componentstate , SystemForm.Schema.Attributes.description , SystemForm.Schema.Attributes.formactivationstate , SystemForm.Schema.Attributes.formpresentation //, SystemForm.Schema.Attributes.formxml //, SystemForm.Schema.Attributes.formxmlmanaged , SystemForm.Schema.Attributes.introducedversion , SystemForm.Schema.Attributes.isairmerged , SystemForm.Schema.Attributes.iscustomizable , SystemForm.Schema.Attributes.isdefault //, SystemForm.Schema.Attributes.ismanaged , SystemForm.Schema.Attributes.istabletenabled , SystemForm.Schema.Attributes.name , SystemForm.Schema.Attributes.objecttypecode //, SystemForm.Schema.Attributes.organizationid //, SystemForm.Schema.Attributes.overwritetime //, SystemForm.Schema.Attributes.publishedon //, SystemForm.Schema.Attributes.solutionid //, SystemForm.Schema.Attributes.supportingsolutionid , SystemForm.Schema.Attributes.type , SystemForm.Schema.Attributes.version , SystemForm.Schema.Attributes.versionnumber }; foreach (var fieldName in fieldsToCompare) { if (ContentComparerHelper.IsEntityDifferentInField(form.Entity1, form.Entity2, fieldName)) { var str1 = EntityDescriptionHandler.GetAttributeString(form.Entity1, fieldName, Connection1); var str2 = EntityDescriptionHandler.GetAttributeString(form.Entity2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } } string typeName1 = form.Entity1.FormattedValues[SystemForm.Schema.Attributes.type]; string typeName2 = form.Entity2.FormattedValues[SystemForm.Schema.Attributes.type]; { List <string> fieldsToCompare = new List <string>() { SystemForm.Schema.Attributes.formxml }; foreach (var fieldName in fieldsToCompare) { string formXml1 = form.Entity1.GetAttributeValue <string>(fieldName) ?? string.Empty; string formXml2 = form.Entity2.GetAttributeValue <string>(fieldName) ?? string.Empty; if (!ContentComparerHelper.CompareXML(formXml1, formXml2).IsEqual) { string descReason = string.Empty; if (ContentComparerHelper.TryParseXml(formXml1, out var doc1) && ContentComparerHelper.TryParseXml(formXml2, out var doc2)) { string desc1 = await handler1.GetFormDescriptionAsync(doc1, form.Entity1.ObjectTypeCode, form.Entity1.Id, form.Entity1.Name, typeName1); string desc2 = await handler2.GetFormDescriptionAsync(doc2, form.Entity2.ObjectTypeCode, form.Entity2.Id, form.Entity2.Name, typeName2); if (!string.Equals(desc1, desc2)) { var compare = ContentComparerHelper.CompareText(desc1.ToLower(), desc2.ToLower()); if (compare.IsEqual) { descReason = "InCase"; } else { descReason = compare.GetCompareDescription(); } } } string formReason = string.Empty; { if (ContentComparerHelper.TryParseXml(formXml1, out var docCorrected1) && ContentComparerHelper.TryParseXml(formXml2, out var docCorrected2) ) { handler1.ReplaceRoleToRoleTemplates(docCorrected1); handler2.ReplaceRoleToRoleTemplates(docCorrected2); if (ContentComparerHelper.CompareXML(docCorrected1.ToString(), docCorrected2.ToString()).IsEqual) { formReason = string.Empty; } else { var compare = ContentComparerHelper.CompareXML(docCorrected1.ToString().ToLower(), docCorrected2.ToString().ToLower(), true); if (compare.IsEqual) { formReason = "InCase"; } else { formReason = compare.GetCompareDescription(); } } } else { var compare = ContentComparerHelper.CompareXML(formXml1.ToLower(), formXml2.ToLower(), true); if (compare.IsEqual) { formReason = "InCase"; } else { formReason = compare.GetCompareDescription(); } } } if (!string.IsNullOrEmpty(formReason)) { tabDiff.AddLine(fieldName, string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, formReason)); } if (!string.IsNullOrEmpty(descReason)) { tabDiff.AddLine(fieldName + "Description", string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, descReason)); } } } } if (tabDiff.Count > 0) { var diff = tabDiff.GetFormatedLines(false); this.ImageBuilder.AddComponentDifferent((int)ComponentType.SystemForm, form.Entity1.Id, form.Entity2.Id, string.Join(Environment.NewLine, diff)); var entityName1 = form.Entity1.ObjectTypeCode; var name1 = form.Entity1.Name; dictDifference.Add(Tuple.Create(entityName1, typeName1, name1, form.Entity1.Id.ToString()), diff); } } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Forms ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Forms ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("System Forms DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("Entity", "Type", "Name", "Id"); foreach (var template in dictDifference) { tableDifference.CalculateLineLengths(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4); } foreach (var template in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) .ThenBy(w => w.Key.Item3) .ThenBy(w => w.Key.Item4) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4)); foreach (var str in template.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in System Forms."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "System Forms"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
public static DataTable ConvertEntityCollectionToDataTable(ConnectionData connectionData, EntityCollection entityCollection, out Dictionary <string, string> columnMapping) { DataTable dataTable = new DataTable(); dataTable.Columns.Add(ColumnOriginalEntity, typeof(Entity)); columnMapping = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase); foreach (var entity in entityCollection.Entities) { DataRow row = dataTable.NewRow(); row[ColumnOriginalEntity] = entity; foreach (string attributeName in entity.Attributes.Keys) { var value = entity.Attributes[attributeName]; if (value == null || EntityDescriptionHandler.GetUnderlyingValue(value) == null) { continue; } string entityPrimaryIdAttribute = connectionData.GetEntityPrimaryIdAttribute(entity.LogicalName); if (value is Guid idValue && string.Equals(entityPrimaryIdAttribute, attributeName, StringComparison.InvariantCultureIgnoreCase) ) { value = new PrimaryGuidView(connectionData, entity.LogicalName, idValue); } string columnName = string.Format("{0}___{1}", entity.LogicalName, attributeName.Replace(".", "_")); if (value is AliasedValue aliasedValue) { columnName = string.Format("{0}___{1}___{2}", attributeName.Replace(".", "_"), aliasedValue.EntityLogicalName, aliasedValue.AttributeLogicalName); string aliasedValuePrimaryIdAttribute = connectionData.GetEntityPrimaryIdAttribute(aliasedValue.EntityLogicalName); if (aliasedValue.Value is Guid refIdValue && string.Equals(aliasedValuePrimaryIdAttribute, aliasedValue.AttributeLogicalName, StringComparison.InvariantCultureIgnoreCase) ) { value = new PrimaryGuidView(connectionData, aliasedValue.EntityLogicalName, refIdValue); } } value = EntityDescriptionHandler.GetUnderlyingValue(value); if (value is EntityReference entityReference) { value = new EntityReferenceView(connectionData, entityReference.LogicalName, entityReference.Id, entityReference.Name); } if (value is Money money) { value = money.Value; } if (value is DateTime dateTime) { value = dateTime.ToLocalTime(); } if (value is OptionSetValue optionSetValue) { value = (entity.FormattedValues != null && entity.FormattedValues.ContainsKey(attributeName) ? string.Format("{0} - ", entity.FormattedValues[attributeName]) : string.Empty) + optionSetValue.Value.ToString(); } if (value is OptionSetValueCollection valueOptionSetValueCollection) { string valuesString = valueOptionSetValueCollection.Any() ? string.Join(",", valueOptionSetValueCollection.Select(o => o.Value).OrderBy(o => o)) : "none"; value = (entity.FormattedValues != null && entity.FormattedValues.ContainsKey(attributeName) ? string.Format("{0} - ", entity.FormattedValues[attributeName]) : string.Empty) + valuesString; } if (value is BooleanManagedProperty booleanManagedProperty) { value = string.Format("{0,-5} CanBeChanged = {1,-5}", booleanManagedProperty.Value, booleanManagedProperty.CanBeChanged); } if (value is EntityCollection valueEntityCollection) { value = string.Format("EnitityCollection {0}: {1}", valueEntityCollection.EntityName, (valueEntityCollection.Entities?.Count).GetValueOrDefault()); } if (dataTable.Columns.IndexOf(columnName) == -1) { if (!columnMapping.ContainsKey(attributeName)) { columnMapping.Add(attributeName, columnName); } dataTable.Columns.Add(columnName, value.GetType()); } row[columnName] = value; } dataTable.Rows.Add(row); } return(dataTable); }
private async Task FillDescriptionUsedEntities(StringBuilder strFile, HashSet <Guid> workflowsWithEntities, Dictionary <EntityReference, HashSet <Guid> > list) { string message = string.Empty; if (list.Count == 0) { strFile .AppendLine() .AppendLine() .AppendLine() .AppendLine(this._iWriteToOutput.WriteToOutput(_service.ConnectionData, "No used entities in workflows.")) ; return; } strFile .AppendLine() .AppendLine() .AppendFormat(this._iWriteToOutput.WriteToOutput(_service.ConnectionData, "Used Entities {0}", list.Count)).AppendLine() ; var orderedList = list.Keys.OrderBy(i => i.LogicalName).ThenBy(i => i.Name).ThenBy(i => i.Id); { FormatTextTableHandler table = new FormatTextTableHandler(); table.SetHeader("LogicalName", "Name", "Id", "Url"); foreach (var item in orderedList) { var values = new List <string>() { item.LogicalName, item.Name, item.Id.ToString() }; var url = _service.ConnectionData.GetEntityInstanceUrl(item.LogicalName, item.Id); if (!string.IsNullOrEmpty(url)) { values.Add(url); } table.AddLine(values); } table.GetFormatedLines(false).ForEach(s => strFile.AppendLine(tabspacer + s)); } strFile .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine() .AppendLine() ; strFile.AppendFormat("Used Entities Full Information {0}", list.Count).AppendLine(); foreach (var item in orderedList) { strFile .AppendLine() .AppendLine() .AppendLine(); FormatTextTableHandler table = new FormatTextTableHandler(); table.SetHeader("LogicalName", "Name", "Id"); table.AddLine(item.LogicalName, item.Name, item.Id.ToString()); table.GetFormatedLines(false).ForEach(s => strFile.AppendLine(s)); var url = _service.ConnectionData.GetEntityInstanceUrl(item.LogicalName, item.Id); if (!string.IsNullOrEmpty(url)) { strFile.AppendLine("Url:"); strFile.AppendLine(url); } strFile.AppendLine(); try { var entityMetadata = _descriptor.MetadataSource.GetEntityMetadata(item.LogicalName); if (entityMetadata != null) { var repositoryGeneric = new GenericRepository(_service, entityMetadata); var entity = await repositoryGeneric.GetEntityByIdAsync(item.Id, new ColumnSet(true)); if (entity != null) { var desc = await EntityDescriptionHandler.GetEntityDescriptionAsync(entity, null, _service.ConnectionData); strFile .AppendLine(desc) .AppendLine() .AppendLine() ; } else { strFile .AppendFormat("{0} With Id = {1} Does Not Exists", item.LogicalName, item.Id).AppendLine() .AppendLine() .AppendLine() ; } } else { strFile .AppendFormat("Entity with name '{0}' Does Not Exists", item.LogicalName).AppendLine() .AppendFormat("{0} With Id = {1} Does Not Exists", item.LogicalName, item.Id).AppendLine() .AppendLine() .AppendLine() ; } } catch (Exception ex) { var description = DTEHelper.GetExceptionDescription(ex); strFile .AppendLine(description) .AppendLine() .AppendLine() ; } message = await _descriptor.GetSolutionComponentsDescriptionAsync(list[item].Select(id => new SolutionComponent() { ObjectId = id, ComponentType = new OptionSetValue((int)ComponentType.Workflow), })); strFile .AppendLine("This entity Used By Workflows:") .AppendLine(message) .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) ; } if (workflowsWithEntities.Any()) { strFile .AppendLine() .AppendLine() .AppendLine() .AppendLine() .AppendLine() .AppendLine() .AppendLine("These entities Used By Workflows:") ; message = await _descriptor.GetSolutionComponentsDescriptionAsync(workflowsWithEntities.Select(id => new SolutionComponent() { ObjectId = id, ComponentType = new OptionSetValue((int)ComponentType.Workflow), })); strFile.AppendLine(message); } }