上一篇我们已经实现了一个自定义的编辑窗口,但里面没有任何内容,我们也没有真正为其保存属性。这一篇我们将完成这个任务项。
1. 为任务添加几个自定义属性
#region 属性
private string source = string.Empty;
public string Source { get{
return source;} set{source=value;}}
private string target = string.Empty;
public string Target { get { return target; } set { target = value; } }
private string xpath = string.Empty;
public string Xpath { get { return xpath; } set { xpath = value; } }
private string defs = string.Empty;
public string Namespacedefs { get { return defs; } set { defs = value; } }
#endregion
【特别注意】这里的属性必须是按照上面的写法。如果用VS2008的简写方式,则会无效
所谓VS 2008的简写方式,是类似下面这样。 我测试发现这样写是不行的,总是报告未将对象设置到引用实例。
public string Source { get; set; }
2. 为任务项添加持久化支持
方法是,为任务项实现IDTSComponentPersist接口
#region IDTSComponentPersist 成员
///
/// 从包的那个XML文件中加载属性
///
///
///
public void LoadFromXML(System.Xml.XmlElement node, IDTSInfoEvents infoEvents)
{
try
{
Source = node.SelectSingleNode("Source").InnerText;
Target = node.SelectSingleNode("Target").InnerText;
Xpath = node.SelectSingleNode("Xpath").InnerText;
Namespacedefs = node.SelectSingleNode("NamespaceDefs").InnerText;
}
catch
{
throw;
}
}
///
/// 将自定义属性保存到包中
///
///
///
public void SaveToXML(System.Xml.XmlDocument doc, IDTSInfoEvents infoEvents)
{
XmlElement taskElement = doc.CreateElement("MyXMLTask");
XmlElement source = doc.CreateElement(string.Empty, "Source", string.Empty);
source.InnerText = this.Source;
XmlElement target = doc.CreateElement(string.Empty, "Target", string.Empty);
target.InnerText = this.Target;
XmlElement xpath = doc.CreateElement(string.Empty, "Xpath", string.Empty);
xpath.InnerText = this.Xpath;
XmlElement def = doc.CreateElement(string.Empty, "NamespaceDefs", string.Empty);
def.InnerText = this.Namespacedefs;
taskElement.AppendChild(source);
taskElement.AppendChild(target);
taskElement.AppendChild(xpath);
taskElement.AppendChild(def);
doc.AppendChild(taskElement);
}
#endregion
也就是说,任务项的自定义属性肯定是要保存起来的。它保存在哪里呢?保存在包的定义文件中。这其实就是一个XML文件
3. 为任务项添加一个验证输入的方法
///
/// 验证输入
///
///
///
///
///
///
public override DTSExecResult Validate(Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log)
{
if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(target) || string.IsNullOrEmpty(xpath))
{
componentEvents.FireError(0, "MyXMLTask", "来源文件,目标文件,以及查询表达式不可以为空", string.Empty, 0);
return DTSExecResult.Failure;
}
if (!File.Exists(source))
{
componentEvents.FireError(0, "MyXMLTask", "来源文件不存在", string.Empty, 0);
return DTSExecResult.Failure;
}
return DTSExecResult.Success;
}
4. 为任务项实现Execute方法
///
/// 这个方法真正执行操作
///
///
///
///
///
///
///
public override DTSExecResult Execute(C