Hi,
I have a couple questions.
1. How do I retrieve an extended attribute and selected outline code value for a task or resource
2. what is the significance of an extended attribute with ElementType.Null.
Regards.
Hi,
Hi Purnima,
Following is the sample code which write/reads extended attribute of a task and displays the Outline code value and Id. Please give it a try and let us know the feedback.
Project project = new Project();
OutlineCodeDefinition textOutline = new OutlineCodeDefinition();
project.OutlineCodes.Add(textOutline);
// add a mask for text field
OutlineMask mask = new OutlineMask();
mask.Type = MaskType.Characters;
textOutline.Masks.Add(mask);
OutlineValue textValue = new OutlineValue();
textValue.Value = "Text value 1";
textValue.ValueId = 1;
textValue.Type = OutlineValueType.Text;
textValue.Description = "Text value descr 1";
textValue.FieldGuid = Guid.NewGuid().ToString().ToUpper();
textOutline.Values.Add(textValue);
OutlineValue textValue2 = new OutlineValue();
textValue2.Value = "Text value 2";
textValue2.ValueId = 2;
textValue2.Type = OutlineValueType.Text;
textValue2.Description = "Text value descr 2";
textValue2.FieldGuid = Guid.NewGuid().ToString().ToUpper();
textOutline.Values.Add(textValue2);
// Add new text3 extended attribute
ExtendedAttributeDefinition taskTextAttr = new ExtendedAttributeDefinition();
taskTextAttr.Alias = "New text3 attribute";
taskTextAttr.FieldId = ExtendedAttributeTask.Text3.ToString("D");
// add a reference to lookup table
taskTextAttr.LookupUid = textOutline.Guid;
taskTextAttr.CfType = CustomFieldType.Text;
project.ExtendedAttributes.Add(taskTextAttr);
// Add new task and assign attribute value
Task task = project.RootTask.Children.Add("New task");
task.Set(Tsk.Start, new DateTime(2016, 7, 4, 8, 0, 0));
task.Set(Tsk.Duration, project.GetDuration(8, TimeUnitType.Hour));
ExtendedAttribute taskAttrText = taskTextAttr.CreateExtendedAttribute();
// add a reference to lookup table value
taskAttrText.ValueGuid = textValue2.FieldGuid;
task.ExtendedAttributes.Add(taskAttrText);
ChildTasksCollector collector = new ChildTasksCollector(); // Create a ChildTasksCollector instance
TaskUtils.Apply(project.RootTask, collector, 0); // Collect all the tasks from RootTask using TaskUtils
foreach (Task tsk in collector.Tasks)
{
if (tsk.Get(Tsk.Id) == 1)
{
ExtendedAttribute extAttrib = tsk.ExtendedAttributes.Where(ext => ext.AttributeDefinition.FieldName == "Text3").FirstOrDefault();
OutlineCodeDefinition OutlineDef = project.OutlineCodes.Where(def => def.Guid == extAttrib.AttributeDefinition.LookupUid).FirstOrDefault();
OutlineValue OutlineVal = OutlineDef.Values.Where(val => val.FieldGuid == extAttrib.ValueGuid).FirstOrDefault();
Console.WriteLine("Value Id = {0}, \nValue = {1}\nDescription = {2}", OutlineVal.ValueId, OutlineVal.Value, OutlineVal.Description);
}
}
Regarding the second requirement, could you please share more details about null in Element type? Send us any supporting code, files etc. for our analysis.
I dont get ChildTasksCollector and TaskUtils class in my environment… Do I have to include any other dll for the same.
Hi,
I get an error at the following line
Hi,
In the following peice of code:
Hi,
I have not been able to do it MS Project as well
Hi Purnima,