private async Task <string> CheckConnectionRoleCategories() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingConnectionRoleCategoriesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); const string optionSetName = "connectionrole_category"; var request = new RetrieveOptionSetRequest() { Name = optionSetName, }; var response1 = (RetrieveOptionSetResponse)_comparerSource.Service1.Execute(request); var response2 = (RetrieveOptionSetResponse)_comparerSource.Service2.Execute(request); var optionSet1 = (OptionSetMetadata)response1.OptionSetMetadata; var optionSet2 = (OptionSetMetadata)response2.OptionSetMetadata; var optionSetComparer = new OptionSetComparer(tabSpacer, Connection1.Name, Connection2.Name, new StringMapRepository(_comparerSource.Service1), new StringMapRepository(_comparerSource.Service2)); if (optionSet1 == null && optionSet2 == null) { content.AppendFormat(Properties.OrganizationComparerStrings.GlobalOptionSetNotExistsInConnectionsFormat3, optionSetName, Connection1.Name, Connection2.Name); } else if (optionSet1 != null && optionSet2 == null) { content.AppendFormat(Properties.OrganizationComparerStrings.GlobalOptionSetOnlyExistsInConnectionFormat2, optionSetName, Connection2.Name); this.ImageBuilder.AddComponentSolution1((int)ComponentType.OptionSet, optionSet1.MetadataId.Value); } else if (optionSet1 == null && optionSet2 != null) { content.AppendFormat(Properties.OrganizationComparerStrings.GlobalOptionSetOnlyExistsInConnectionFormat2, optionSetName, Connection1.Name); this.ImageBuilder.AddComponentSolution2((int)ComponentType.OptionSet, optionSet2.MetadataId.Value); } else { List <string> strDifference = await optionSetComparer.GetDifference(optionSet1, optionSet2, "connectionrole", "category"); if (strDifference.Count > 0) { this.ImageBuilder.AddComponentDifferent((int)ComponentType.OptionSet, optionSet1.MetadataId.Value, optionSet2.MetadataId.Value, string.Join(Environment.NewLine, strDifference)); content.AppendLine().AppendLine().AppendFormat(Properties.OrganizationComparerStrings.GlobalOptionSetDifferentFormat3, optionSetName, Connection1.Name, Connection2.Name); foreach (var str in strDifference) { content.AppendLine().Append((tabSpacer + tabSpacer + str).TrimEnd()); } } else { content.AppendLine(Properties.OrganizationComparerStrings.ConnectionRoleCategoriesNoDifference); } } content.AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, Properties.OrganizationComparerStrings.ConnectionRoleCategoryFileName); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <List <string> > GetDifferenceAttribute(AttributeMetadata attr1, AttributeMetadata attr2) { List <string> strDifference = new List <string>(); { FormatTextTableHandler table = new FormatTextTableHandler(true); table.CalculateLineLengths("LanguageCode", "Value"); table.CalculateLineLengths("LanguageCode", "Organization", "Value"); var isDifferentDisplayName = LabelComparer.GetDifference(attr1.DisplayName, attr2.DisplayName); var isDifferentDescription = LabelComparer.GetDifference(attr1.Description, attr2.Description); isDifferentDisplayName.LabelsOnlyIn1.ForEach(i => table.CalculateLineLengths(i.Locale, i.Value)); isDifferentDisplayName.LabelsOnlyIn2.ForEach(i => table.CalculateLineLengths(i.Locale, i.Value)); isDifferentDisplayName.LabelDifference.ForEach(i => { table.CalculateLineLengths(i.Locale, _connectionName1, i.Value1); table.CalculateLineLengths(i.Locale, _connectionName2, i.Value2); }); isDifferentDescription.LabelsOnlyIn1.ForEach(i => table.CalculateLineLengths(i.Locale, i.Value)); isDifferentDescription.LabelsOnlyIn2.ForEach(i => table.CalculateLineLengths(i.Locale, i.Value)); isDifferentDescription.LabelDifference.ForEach(i => { table.CalculateLineLengths(i.Locale, _connectionName1, i.Value1); table.CalculateLineLengths(i.Locale, _connectionName2, i.Value2); }); if (!isDifferentDisplayName.IsEmpty) { if (isDifferentDisplayName.LabelsOnlyIn1.Count > 0) { strDifference.Add(string.Format("DisplayNames ONLY in {0}: {1}", _connectionName1, isDifferentDisplayName.LabelsOnlyIn1.Count)); strDifference.Add(_tabSpacer + table.FormatLine("LanguageCode", "Value")); isDifferentDisplayName.LabelsOnlyIn1.ForEach(e => strDifference.Add(_tabSpacer + table.FormatLine(e.Locale, e.Value))); } if (isDifferentDisplayName.LabelsOnlyIn2.Count > 0) { strDifference.Add(string.Format("DisplayNames ONLY in {0}: {1}", _connectionName2, isDifferentDisplayName.LabelsOnlyIn2.Count)); strDifference.Add(_tabSpacer + table.FormatLine("LanguageCode", "Value")); isDifferentDisplayName.LabelsOnlyIn2.ForEach(e => strDifference.Add(_tabSpacer + table.FormatLine(e.Locale, e.Value))); } if (isDifferentDisplayName.LabelDifference.Count > 0) { strDifference.Add(string.Format("DisplayNames DIFFERENT in {0} and {1}: {2}", _connectionName1, _connectionName2, isDifferentDisplayName.LabelDifference.Count)); strDifference.Add(_tabSpacer + table.FormatLine("LanguageCode", "Organization", "Value")); isDifferentDisplayName.LabelDifference.ForEach(i => { strDifference.Add(_tabSpacer + table.FormatLine(i.Locale, _connectionName1, i.Value1)); strDifference.Add(_tabSpacer + table.FormatLine(i.Locale, _connectionName2, i.Value2)); }); } } if (!isDifferentDescription.IsEmpty) { if (isDifferentDescription.LabelsOnlyIn1.Count > 0) { strDifference.Add(string.Format("Descriptions ONLY in {0}: {1}", _connectionName1, isDifferentDescription.LabelsOnlyIn1.Count)); strDifference.Add(_tabSpacer + table.FormatLine("LanguageCode", "Value")); isDifferentDescription.LabelsOnlyIn1.ForEach(e => strDifference.Add(_tabSpacer + table.FormatLine(e.Locale, e.Value))); } if (isDifferentDescription.LabelsOnlyIn2.Count > 0) { strDifference.Add(string.Format("Descriptions ONLY in {0}: {1}", _connectionName2, isDifferentDescription.LabelsOnlyIn2.Count)); strDifference.Add(_tabSpacer + table.FormatLine("LanguageCode", "Value")); isDifferentDescription.LabelsOnlyIn2.ForEach(e => strDifference.Add(_tabSpacer + table.FormatLine(e.Locale, e.Value))); } if (isDifferentDescription.LabelDifference.Count > 0) { strDifference.Add(string.Format("Descriptions DIFFERENT in {0} and {1}: {2}", _connectionName1, _connectionName2, isDifferentDescription.LabelDifference.Count)); strDifference.Add(_tabSpacer + table.FormatLine("LanguageCode", "Organization", "Value")); isDifferentDescription.LabelDifference.ForEach(i => { strDifference.Add(_tabSpacer + table.FormatLine(i.Locale, _connectionName1, i.Value1)); strDifference.Add(_tabSpacer + table.FormatLine(i.Locale, _connectionName2, i.Value2)); }); } } } { var table = new FormatTextTableHandler(true); table.SetHeader("Property", _connectionName1, _connectionName2); List <string> additionalDifference = new List <string>(); if (attr1.GetType().Name == attr2.GetType().Name) { if (attr1 is Microsoft.Xrm.Sdk.Metadata.EnumAttributeMetadata) { var enumAttributeMetadata1 = attr1 as Microsoft.Xrm.Sdk.Metadata.EnumAttributeMetadata; var enumAttributeMetadata2 = attr2 as Microsoft.Xrm.Sdk.Metadata.EnumAttributeMetadata; if (enumAttributeMetadata1.OptionSet != null && enumAttributeMetadata2.OptionSet != null) { if (!CreateFileHandler.IgnoreAttribute(enumAttributeMetadata1.EntityLogicalName, enumAttributeMetadata1.LogicalName)) { var diffenrenceOptionSet = await _optionSetComparer.GetDifference(enumAttributeMetadata1.OptionSet, enumAttributeMetadata2.OptionSet, attr1.EntityLogicalName, attr1.LogicalName); if (diffenrenceOptionSet.Count > 0) { additionalDifference.Add(string.Format("Difference in OptionSet {0} and {1}" , enumAttributeMetadata1.OptionSet.Name + (enumAttributeMetadata1.OptionSet.IsGlobal.GetValueOrDefault() ? "(Global)" : "(Local)") , enumAttributeMetadata2.OptionSet.Name + (enumAttributeMetadata2.OptionSet.IsGlobal.GetValueOrDefault() ? "(Global)" : "(Local)") ) ); diffenrenceOptionSet.ForEach(s => additionalDifference.Add(_tabSpacer + s)); } } } } } if (table.Count > 0) { strDifference.AddRange(table.GetFormatedLines(true)); } if (additionalDifference.Count > 0) { strDifference.AddRange(additionalDifference); } } return(strDifference); }