using System;
using System.Collections.ObjectModel;
using System.Text;
using Autodesk.Revit.UI;
using net.sf.mpxj;
using net.sf.mpxj.MpxjUtilities;
using net.sf.mpxj.reader;
using Sai.RvKits;
using SZBIM.StandardTools;
namespace Sai.Common.Shared.WBSCoder
{
internal class ProjectUtil
{
///
/// 获取最底层的任务集
///
///
///
///
public static ObservableCollection GetTasks(string filename,
ObservableCollection lastTaskItems)
{
lastTaskItems.Clear();
AssemblyLoader loader = new AssemblyLoader(RelativePaths.DirAssembly);
loader.HookAssemblyResolve();
try
{
//MPPReader mPPReader = new MPPReader();
StringBuilder sb = new StringBuilder();
var reader = ProjectReaderUtility.getProjectReader(filename);
ProjectFile mpp = reader.read(filename);
var tasks = mpp.Tasks.ToIEnumerable();
foreach (Task task in tasks)
{
if (task.ChildTasks.size() == 0)
{
var temp = task.GetText(1);
if (string.IsNullOrEmpty(temp) || string.IsNullOrWhiteSpace(temp))
{
sb.AppendLine($"任务:({task.ParentTask.ParentTask.Name}->{task.ParentTask.Name}->{task.Name})未识别到编码");
continue;
}
string code = WbsCoderUtils.FormatWbsCode(temp);
TaskItem taskItem = new TaskItem(task)
{
Name = task.Name,
Parent = task.ParentTask.Name,
WBSCode = code
};
lastTaskItems.Add(taskItem);
}
}
if (!string.IsNullOrEmpty($"{sb}"))
{
//TaskDialog.ShowTop("错误", $"{sb}");
}
}
catch (Exception ex)
{
TaskDialog.Show("读取文件任务失败", $"{ex.Message}");
}
finally
{
loader.UnhookAssemblyResolve();
}
return lastTaskItems;
}
}
}