void IMASynchronization.MapAttributesForExport(string flowRuleName, MVEntry mventry, CSEntry csentry) { FlowRuleParameters parameters = this.GetParameters(flowRuleName, FlowRuleType.Export); if (!parameters.ShouldFlow(csentry, mventry)) { throw new DeclineMappingException(); } IList <object> sourceValues = this.GetSourceValuesForExport(parameters, mventry); IList <object> returnValues; if (parameters.Transforms.Any(t => t.ImplementsLoopbackProcessing)) { IList <object> existingTargetValues = this.GetExistingTargetValueForExportLoopback(parameters, csentry); returnValues = Transform.ExecuteTransformChainWithLoopback(parameters.Transforms, sourceValues, existingTargetValues); } else { returnValues = Transform.ExecuteTransformChain(parameters.Transforms, sourceValues); } this.SetDestinationAttributeValueForExport(parameters, csentry, returnValues); }
void IMASynchronization.MapAttributesForJoin(string flowRuleName, CSEntry csentry, ref ValueCollection values) { FlowRuleParameters parameters = this.GetParameters(flowRuleName, FlowRuleType.Join); if (!parameters.ShouldFlow(csentry, null)) { throw new DeclineMappingException(); } AttributeType type; IList <object> sourceValues = this.GetSourceValuesForImport(parameters, csentry, out type); IList <object> returnValues = Transform.ExecuteTransformChain(parameters.Transforms, sourceValues); foreach (object value in returnValues) { switch (type) { case AttributeType.Binary: values.Add(TypeConverter.ConvertData <byte[]>(value)); break; case AttributeType.Integer: values.Add(TypeConverter.ConvertData <long>(value)); break; case AttributeType.String: values.Add(TypeConverter.ConvertData <string>(value)); break; case AttributeType.Reference: case AttributeType.Boolean: case AttributeType.Undefined: throw new UnknownOrUnsupportedDataTypeException(); } } }