MS Project如何获取外部依赖任务的真实Unique ID(UID)
可以不解析字符串直接获取外部依赖的真实UID,具体实现逻辑如下:
你获取到的dep.From对象如果是跨项目依赖生成的幽灵任务,会自带ExternalTask布尔属性,属性值为True时即可判定为外部依赖。
此时不需要解析字符串,直接读取该幽灵任务的ExternalUID属性,就能拿到对应任务在源子项目中的原生UID,也就是你示例中需要的6。如果需要获取该任务在主项目中的全局UID,可以先读取该幽灵任务关联的Subproject对象的偏移基准值,再和ExternalUID相加即可。
修改后的参考代码如下:
private void TestGetPredessorUID(MSP.Task t) { var taskDependencyList = t.TaskDependencies.ToList(); taskDependencyList = taskDependencyList.Where(tDep => GetUID(tDep.To) == GetUID(t)).ToList(); foreach (var dep in taskDependencyList) { MSP.Task fromTask = dep.From; int realUid; if (fromTask.ExternalTask) { // 取源子项目中的原生UID realUid = fromTask.ExternalUID; // 如果需要主项目全局UID,可通过Subproject计算: // int subprojectOffset = fromTask.Subproject.UniqueID * 65536; // 偏移基准为2^16 // realUid = subprojectOffset + fromTask.ExternalUID; } else { // 同项目内依赖直接取UniqueID即可 realUid = fromTask.UniqueID; } Debug.Print(realUid.ToString()); } }
如果需要定位源项目的具体文件路径,还可以读取fromTask.Project属性获取源项目的完整路径。
内容的提问来源于stack exchange,提问作者Kenny Arnold
相关产品推荐
相关产品推荐

