none
导入Project后如何获得各个任务之间的链接关系?需要利用每条任务的Guid为标记 RRS feed

  • 问题

  • 大家好,我定义了以简单的类来记录Project中的各个任务的相互连接关系,如下:

    public class TaskLinkageRecord 
        {
            #region Fields
    
            private int _preTaskID;
            private int _sucTaskID;
            private string _linkageType;
    	private int _span;
    
    	    #endregion
    
            #region Properties
    
            public int PreTaskID { get { return _preTaskID; } set { _preTaskID = value; } }
            public int SucTaskID { get { return _sucTaskID; } set { _sucTaskID = value; } }
            public string LinkageType { get { return _linkageType; } set { _linkageType = value; } }
                     
    	    public int Span{get {return _span;}set {_span = value;}}
    
    	    #endregion
    
    
            public TaskLinkageRecord()
            {
                _preTaskID = -1;
                _sucTaskID = -1;
    
               _linkageType = "";
            }
    
        }

    然后用下面的代码来获得Project中各任务之间的连接关系:

            public bool LoadMSPLinkageRecordList(ref List<TaskLinkageRecord> recordList)
            {
                bool result = false;
                //if (_prjApp == null)
                    _prjApp = new ApplicationClass();
                _prjApp.FileOpen(_MSPFileName, true, missing, missing, missing, missing,
                    missing, missing, missing, missing, missing, PjPoolOpen.pjPoolReadOnly,
                    missing, missing, missing, missing);
                var enumer = _prjApp.Projects.GetEnumerator();
                enumer.MoveNext();
                var prj = enumer.Current as Project;
                Regex regex = new Regex(@"(\d+)(\w{2})?(-?\+?\d+)?");
                var taskEumer = prj.Tasks.GetEnumerator();
                while (taskEumer.MoveNext()) {
                    var mspTask = taskEumer.Current as Task;
                    if (null == mspTask) {
                        continue;
                    }
                    var preID = mspTask.UniqueID;   //目前采用的是int类型的ID
                    var preGlobalID = mspTask.Guid; //我想换成Guid作为标示符,不知如何修改下面的代码?
                    foreach (Match match in regex.Matches(mspTask.UniqueIDSuccessors)) {
                        var linkage = new TaskLinkageRecord();
                        linkage.PreTaskID = preID;
                        linkage.SucTaskID = Convert.ToInt32(match.Groups[1].Value);
                        linkage.LinkageType = match.Groups[2].Value.Length == 0 ? "FS" : match.Groups[2].Value;
                        linkage.Span = Convert.ToInt32(match.Groups[3].Value.Length == 0 ? "0" : match.Groups[3].Value);
                        recordList.Add(linkage);
                    }
                }
                _prjApp.FileClose(PjSaveType.pjDoNotSave, false);
                _prjApp.Quit(PjSaveType.pjDoNotSave);
                return result;
            }
    
    从Project中获得每个任务的记录在其它步骤中完成,也是单独定义一个TaskRecord类来记录每条任务信息,包括Guid和UniqueID。由于项目的需要,获得UniqueID后,新增的后续功能要求对Int类型的数据进行一些加减操作,故需要每条任务的标示符从UniqueID转变到Guid。故需求更改上述代码,请各位帮帮忙,帮我看看如何利用Guid来获得各个任务之间的链接关系?

    2015年6月18日 5:23

全部回复

  • 光从代码看看不出来关于GUID和其作为标识符需要的逻辑在哪里。

    只能从以下代码:

     foreach (Match match in regex.Matches(mspTask.UniqueIDSuccessors))
    大概判断正则式用来区分这个UniqueID的,所以估计你需要修改正则来完成这个task。具体的表示看不太明白。
    2015年6月22日 1:55