The task’s TAG implementation is still under consideration. But we have implemented XML data reading/writing events for project and tasks’ data customization. The interim build is still on its way, meanwhile you can use the code below as the TAG’s issue workaround. Note, that the events will be available from the interim build only.
<span lang=“EN-US” style=“font-size:10.0pt;font-family:“Courier New”;color:blue;
mso-ansi-language:EN-US;mso-no-proof:yes”>private<span lang=“EN-US” style=“font-size:10.0pt;font-family:“Courier New”;mso-ansi-language:EN-US;
mso-no-proof:yes”> Dictionary<Task, string>
tags = new Dictionary<Task, string>();
// or Hashtable tags = new Hashtable();<o:p></o:p>
///
///
///
[Test]
public void TestEventHandlers()
{
Project project;
ProjectReader reader = new ProjectReader();
ProjectWriter writer = new ProjectWriter();
string project_name = folder_name + "\\tags.xml";
project = reader.Read("..\\..\\..\\testdata\\EarnedValues\\ACWP2010.xml");
ChildTasksCollector collector = new ChildTasksCollector();
TaskUtils.Apply(project.RootTask, collector, 0);
foreach (Task task in collector.Tasks)
tags.Add(task, string.Format("TAG:
'{0}'.", task.Name));
writer.SetProjectXMLCreationFinishedEventHandler(new ProjectXMLCreationFinished(ProjectCreationHandler));
writer.SetTaskXMLCreationFinishedEventHandler(new TaskXMLCreationFinished(TaskWriteHandler));
writer.Write(project, project_name, TasksDataFormat.XML);
reader.SetProjectXMLParsingStartedEventHandler(new ProjectXMLParsingStarted(ProjectParsingHandler));
reader.SetTaskXMLParsingFinishedEventHandler(new TaskXMLParsingFinished(TaskReadHandler));
Project project1 = reader.Read(project_name);
foreach (Task task in collector.Tasks)
{
Task task1 = project1.GetTaskByUid(task.Uid);
Assert.IsNotNull(task1);
Assert.AreEqual(tags[task], tags[task1]);
}
}
private void TaskWriteHandler(XmlElement element, Task
task)
{
XmlElement tag = element.OwnerDocument.CreateElement("Tag");
tag.InnerText =
tags[task].ToString();
element.AppendChild(tag);
}
private void TaskReadHandler(XmlElement element, Task
task)
{
XmlNodeList list = element.GetElementsByTagName("Tag");
if (list.Count > 0)
tags.Add(task, list[0].InnerText);
}
private void ProjectCreationHandler(XmlDocument doc, Project
project)
{
XmlComment comment = doc.CreateComment("Custom
project comment.");
doc.DocumentElement.InsertBefore(comment,
doc.DocumentElement.FirstChild);
}
private void ProjectParsingHandler(XmlDocument doc, Project
project)
{
XmlNode node = doc.DocumentElement.FirstChild;
Assert.IsInstanceOf(typeof(XmlComment), node);
Assert.AreEqual("Custom
project comment.", node.InnerText);
}
Let us know if it works for you.
Sorry for delay and inconvenience.