in src/MIMConfigDocumenter/ConnectorDocumenter.cs [2014:2119]
protected void FillConnectorObjectTypeExportAttributeFlowsDataSet(bool pilotConfig)
{
Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);
try
{
var config = pilotConfig ? this.PilotXml : this.ProductionXml;
var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;
var table = dataSet.Tables[0];
var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");
if (connector != null)
{
var exportFlowsXPath = "export-attribute-flow/export-flow-set[@mv-object-type = '" + this.currentMetaverseObjectType + "' and @cd-object-type = '" + this.currentDataSourceObjectType + "']/export-flow";
var exportFlows = from exportFlow in connector.XPathSelectElements(exportFlowsXPath)
let dataSourceAttribute = (string)exportFlow.Attribute("cd-attribute")
orderby dataSourceAttribute
select exportFlow;
if (exportFlows.Count() == 0)
{
return;
}
var exportFlowRuleIndex = 0; // This will be the relative rule number if there are more than one outbound sync rule export flows for the same data source attribute.
var previousDataSourceAttribute = string.Empty;
var exportFlowIndex = 0;
foreach (var exportFlow in exportFlows)
{
++exportFlowIndex;
var dataSourceAttribute = (string)exportFlow.Attribute("cd-attribute");
exportFlowRuleIndex = dataSourceAttribute == previousDataSourceAttribute ? exportFlowRuleIndex + 1 : 0;
previousDataSourceAttribute = dataSourceAttribute;
var metaverseAttribute = string.Empty;
var mappingType = string.Empty;
var allowNull = !((string)exportFlow.Attribute("suppress-deletions") ?? string.Empty).Equals("true", StringComparison.OrdinalIgnoreCase) ? "Yes" : string.Empty;
var initialFlowOnly = string.Empty;
if (exportFlow.XPathSelectElement("direct-mapping/src-attribute") != null)
{
metaverseAttribute = exportFlow.XPathSelectElement("direct-mapping/src-attribute").Value;
mappingType = "Direct";
}
else if (exportFlow.XPathSelectElement("scripted-mapping/src-attribute") != null)
{
foreach (var sourceAttribute in exportFlow.XPathSelectElements("scripted-mapping/src-attribute"))
{
metaverseAttribute += (string)sourceAttribute + "<br/>";
}
metaverseAttribute = !string.IsNullOrEmpty(metaverseAttribute) ? metaverseAttribute.Substring(0, metaverseAttribute.Length - "<br/>".Length) : metaverseAttribute;
mappingType = "Rules Extension - " + exportFlow.XPathSelectElement("scripted-mapping/script-context").Value;
}
else if (exportFlow.XPathSelectElement("constant-mapping/constant-value") != null)
{
metaverseAttribute = string.Empty;
mappingType = "Constant - " + exportFlow.XPathSelectElement("constant-mapping/constant-value").Value;
}
else if (exportFlow.XPathSelectElement("dn-part-mapping/dn-part") != null)
{
metaverseAttribute = string.Empty;
mappingType = "DN Component - ( " + exportFlow.XPathSelectElement("dn-part-mapping/dn-part").Value + " )";
}
else if (exportFlow.XPathSelectElement("sync-rule-mapping") != null)
{
mappingType = (string)exportFlow.XPathSelectElement("sync-rule-mapping").Attribute("mapping-type") ?? string.Empty;
if (mappingType.Equals("direct", StringComparison.OrdinalIgnoreCase))
{
metaverseAttribute = exportFlow.XPathSelectElement("sync-rule-mapping/src-attribute").Value;
mappingType = "Sync Rule - Direct";
}
else if (mappingType.Equals("constant", StringComparison.OrdinalIgnoreCase))
{
metaverseAttribute = exportFlow.XPathSelectElement("sync-rule-mapping/sync-rule-value").Value;
mappingType = "Sync Rule - Constant";
}
else
{
foreach (var sourceAttribute in exportFlow.XPathSelectElements("sync-rule-mapping/src-attribute"))
{
metaverseAttribute += (string)sourceAttribute + "<br/>";
}
metaverseAttribute = !string.IsNullOrEmpty(metaverseAttribute) ? metaverseAttribute.Substring(0, metaverseAttribute.Length - "<br/>".Length) : metaverseAttribute;
mappingType = "Sync Rule - Expression"; // TODO: Print the Sync Rule Expression
}
initialFlowOnly = ((string)exportFlow.XPathSelectElement("sync-rule-mapping").Attribute("initial-flow-only") ?? string.Empty).Equals("true", StringComparison.OrdinalIgnoreCase) ? "Yes" : string.Empty;
}
Documenter.AddRow(table, new object[] { dataSourceAttribute + exportFlowRuleIndex, dataSourceAttribute, "←", metaverseAttribute, mappingType, allowNull, initialFlowOnly });
}
table.AcceptChanges();
}
}
finally
{
Logger.Instance.WriteMethodExit("Pilot Config: '{0}'.", pilotConfig);
}
}