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; } } }