private void Load(FdoBulkCopyOptions def, string name) { txtName.Text = name; grdConnections.Rows.Clear(); foreach (string connName in def.ConnectionNames) { this.AddParticipatingConnection(connName); } TreeNode root = mTreeView.Nodes[0]; foreach (FdoClassCopyOptions task in def.ClassCopyOptions) { //Init w/ defaults CopyTaskNodeDecorator dec = AddNewTask( root, task.SourceConnectionName, task.SourceSchema, task.SourceClassName, task.TargetConnectionName, task.TargetSchema, task.TargetClassName, task.Name, task.CreateIfNotExists); _tasks[dec.DecoratedNode.Index] = dec; root.Expand(); btnSave.Enabled = (root.Nodes.Count > 0); //Options dec.Options.BatchSize = task.BatchSize; dec.Options.Delete = task.DeleteTarget; dec.Options.SourceFilter = task.SourceFilter; dec.Options.Flatten = task.FlattenGeometries; var checkProps = new List <string>(task.CheckSourceProperties); //Property Mappings foreach (string srcProp in task.SourcePropertyNames) { string dstProp = task.GetTargetProperty(srcProp); bool createIfNotExists = checkProps.Contains(srcProp); try { dec.PropertyMappings.MapProperty(srcProp, dstProp, createIfNotExists); } catch (MappingException ex) { LoggingService.Info("Skipping mapping: " + srcProp + " => " + dstProp + " (" + ex.Message + ")"); } FdoDataPropertyConversionRule rule = task.GetDataConversionRule(srcProp); PropertyConversionNodeDecorator cd = dec.PropertyMappings.GetConversionRule(srcProp); if (rule != null) { cd.NullOnFailedConversion = rule.NullOnFailure; cd.Truncate = rule.Truncate; } } //Expression Mappings foreach (string alias in task.SourceAliases) { string expr = task.GetExpression(alias); string dstProp = task.GetTargetPropertyForAlias(alias); bool createIfNotExists = checkProps.Contains(alias); dec.ExpressionMappings.AddExpression(alias, expr); dec.ExpressionMappings.MapExpression(alias, dstProp, createIfNotExists); FdoDataPropertyConversionRule rule = task.GetDataConversionRule(alias); PropertyConversionNodeDecorator cd = dec.ExpressionMappings.GetConversionRule(alias); if (rule != null) { cd.NullOnFailedConversion = rule.NullOnFailure; cd.Truncate = rule.Truncate; } } } }
private FdoBulkCopyTaskDefinition Save() { FdoBulkCopyTaskDefinition def = new FdoBulkCopyTaskDefinition(); def.name = txtName.Text; List <FdoConnectionEntryElement> conns = new List <FdoConnectionEntryElement>(); foreach (DataGridViewRow row in grdConnections.Rows) { FdoConnectionEntryElement entry = new FdoConnectionEntryElement(); entry.name = row.Cells[0].Value.ToString(); entry.provider = row.Cells[1].Value.ToString(); entry.ConnectionString = row.Cells[3].Value.ToString(); conns.Add(entry); } List <FdoCopyTaskElement> tasks = new List <FdoCopyTaskElement>(); foreach (CopyTaskNodeDecorator dec in _tasks.Values) { FdoCopyTaskElement task = new FdoCopyTaskElement(); task.name = dec.Name; task.createIfNotExists = dec.CreateIfNotExists; task.Source = new FdoCopySourceElement(); task.Target = new FdoCopyTargetElement(); task.Options = new FdoCopyOptionsElement(); List <FdoPropertyMappingElement> pmaps = new List <FdoPropertyMappingElement>(); List <FdoExpressionMappingElement> emaps = new List <FdoExpressionMappingElement>(); //Source task.Source.@class = dec.SourceClassName; task.Source.connection = dec.SourceConnectionName; task.Source.schema = dec.SourceSchemaName; //Target task.Target.@class = dec.TargetClassName; task.Target.connection = dec.TargetConnectionName; task.Target.schema = dec.TargetSchemaName; //Options task.Options.BatchSize = dec.Options.BatchSize.ToString(); task.Options.FlattenGeometries = dec.Options.Flatten; task.Options.FlattenGeometriesSpecified = true; task.Options.DeleteTarget = dec.Options.Delete; task.Options.Filter = dec.Options.SourceFilter; task.Options.ForceWKB = dec.Options.ForceWkb; task.Options.ForceWKBSpecified = true; //Property Mappings NameValueCollection mappings = dec.PropertyMappings.GetPropertyMappings(); foreach (string srcProp in mappings.Keys) { string dstProp = mappings[srcProp]; FdoPropertyMappingElement p = new FdoPropertyMappingElement(); p.source = srcProp; p.target = dstProp; PropertyConversionNodeDecorator conv = dec.PropertyMappings.GetConversionRule(p.source); p.nullOnFailedConversion = conv.NullOnFailedConversion; p.truncate = conv.Truncate; p.createIfNotExists = conv.CreateIfNotExists; pmaps.Add(p); } foreach (string alias in dec.ExpressionMappings.GetAliases()) { FdoExpressionMappingElement e = new FdoExpressionMappingElement(); e.alias = alias; ExpressionMappingInfo exMap = dec.ExpressionMappings.GetMapping(alias); e.Expression = exMap.Expression; e.target = exMap.TargetProperty; PropertyConversionNodeDecorator conv = dec.ExpressionMappings.GetConversionRule(e.alias); e.nullOnFailedConversion = conv.NullOnFailedConversion; e.truncate = conv.Truncate; e.createIfNotExists = conv.CreateIfNotExists; emaps.Add(e); } task.PropertyMappings = pmaps.ToArray(); task.ExpressionMappings = emaps.ToArray(); tasks.Add(task); } def.Connections = conns.ToArray(); def.CopyTasks = tasks.ToArray(); return(def); }