in src/MIMConfigDocumenter/MIMServicePolicyDocumenter.cs [2717:2779]
protected void FillSynchronizationRuleOutboundTransformationsDataSet(AttributeChange transformationsChange, bool pilotConfig)
{
Logger.Instance.WriteMethodEntry();
try
{
var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;
var table = dataSet.Tables[0];
if (transformationsChange != null && transformationsChange.AttributeValues != null && transformationsChange.AttributeValues.Count > 0)
{
foreach (var valueChange in transformationsChange.AttributeValues)
{
var exportFlowXml = pilotConfig ? (valueChange.ValueModificationType != DataRowState.Deleted ? valueChange.NewValue : string.Empty) : valueChange.OldValue; // Deleted values should be processed only when it's production config.
if (!string.IsNullOrEmpty(exportFlowXml))
{
try
{
var exportFlow = XElement.Parse(exportFlowXml);
if (!exportFlow.Name.LocalName.Equals("export-flow", StringComparison.OrdinalIgnoreCase))
{
continue;
}
var destination = (string)exportFlow.Element("dest");
var initialFlow = transformationsChange.AttributeName.Equals("InitialFlow", StringComparison.OrdinalIgnoreCase) ? true : false;
var existenceTest = transformationsChange.AttributeName.Equals("ExistenceTest", StringComparison.OrdinalIgnoreCase) ? true : false;
var allowNull = ((string)exportFlow.Attribute("allows-null") ?? string.Empty).Equals("true", StringComparison.OrdinalIgnoreCase) ? true : false;
var referenceAttributePrecedence = string.Empty;
foreach (var csValue in exportFlow.XPathSelectElements("scope/csValue"))
{
referenceAttributePrecedence += (string)csValue + ";";
}
var directFlow = exportFlow.Elements("fn").Count() == 0;
var source = string.Empty;
if (directFlow)
{
source = exportFlow.XPathSelectElement("src/attr") != null ? (string)exportFlow.XPathSelectElement("src/attr") : (string)exportFlow.Element("src");
}
else
{
source = this.ParseSynchronizationRuleFunctionExpression(exportFlow.Element("fn"));
}
Documenter.AddRow(table, new object[] { destination, initialFlow, existenceTest, allowNull, referenceAttributePrecedence, source, "→", destination });
}
catch (XmlException e)
{
var errorMsg = "Error parsing export flow xml: '" + exportFlowXml + "' Error: " + e.ToString();
Logger.Instance.WriteError(errorMsg);
}
}
}
table.AcceptChanges();
}
}
finally
{
Logger.Instance.WriteMethodExit();
}
}