【问题标题】:MS Project showing incorrect start date and enddateMS Project 显示不正确的开始日期和结束日期
【发布时间】:2014-05-13 16:38:30
【问题描述】:

我正在使用 mpxj 4.5 导出 ms 项目。当我通过 ms 项目打开 mpx 文件时,我得到不正确的开始日期和结束日期,但它正在正确计算持续时间。我做错了什么,请告诉。

要创建 mpx 任务,我使用以下 mpxj 参数:

public ProjectFile exportToMSProject(Integer projectID){
    file.setAutoTaskID(true);
     ...........
}
private void createMSProjectTask(ProjectFile file, EUser user, ETask eTask)        
    Task task = file.addTask();
    task.setUniqueID(eTask.getObjectID());
    task.setName(eTask.getName());
    task.setNotes(eTask.getDescription());
    task.setType(TaskType.FIXED_DURATION);
    long workTime = 0;
    if(eTask.getDueDate() != null && eTask.getStartDate() != null){
        workTime = (eTask.getDueDate().getTime() - eTask.getStartDate().getTime()) / (1000 * 60 * 60);
    }
    if(eTask.isAllDay()){
        task.setDuration(Duration.getInstance(workTime / 24, TimeUnit.DAYS));
    }else {
        task.setDuration(Duration.getInstance(workTime, TimeUnit.HOURS));
    }
    if(eTask.getStartDate() != null)
        task.setStart(user.getUserDate(eTask.getStartDate())); //get time from user time zone
    if(eTask.getDueDate() != null)
        task.setFinish(user.getUserDate(eTask.getDueDate()));
    task.setPercentageComplete(eTask.getPercent() != null ? eTask.getPercent() : new Float(0.0));
    if(eTask.getActualStartDate() != null)
        task.setActualStart(eTask.getActualStartDate());
}

我反复收到 startdate 和不正确的 enddate。这里有什么问题?任何建议将不胜感激。

【问题讨论】:

    标签: java export mpxj


    【解决方案1】:

    我遇到了同样的问题。从我的角度来看,如果您没有任何任务的前任或实际开始日期,mpxj 会自动设置 startdate,我的意思是,它从您的项目标题或项目的第一个任务的开始日期获取 startdate。这就是为什么您重复开始日期的原因。

    这是一个简单的例子(我正在使用 mpxj 4,5 并创建 .mpx 文件):

        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        ProjectFile file = new ProjectFile();
        ProjectHeader header = file.getProjectHeader();
        header.setStartDate(df.parse("01/05/2014"));
    
        Task task1 = file.addTask();
        task1.setName("Summary Task");
    
        Task task2 = task1.addTask();
        task2.setName("First Sub Task");
        task2.setDuration(Duration.getInstance(10.5, TimeUnit.HOURS));
        task2.setStart(df.parse("01/05/2014"));
        task2.setPercentageComplete(NumberUtility.getDouble(50.0));
    
        Task task3 = task1.addTask();
        task3.setName("Second Sub Task");
        task3.setStart(df.parse("11/05/2014"));
        task3.setDuration(Duration.getInstance(10, TimeUnit.HOURS));
    
        Task milestone1 = task1.addTask();
        milestone1.setName("Milestone");
        milestone1.setStart(df.parse("21/05/2014"));
        milestone1.setDuration(Duration.getInstance(0, TimeUnit.HOURS));
    
        Task task4 = file.addTask();
        task4.setName("Last Task");
        task4.setDuration(Duration.getInstance(8, TimeUnit.HOURS));
        task4.setStart(df.parse("02/05/2014"));
        task4.setPercentageComplete(NumberUtility.getDouble(70.0));
    
        ProjectWriter writer = getWriter(filename);
        writer.write(file, filename); 
    

    如您所见,我没有给出任何前任或实际开始日期。如果你运行它,你会得到以下结果。

    为了正确获取开始日期,我给出了实际的开始日期而不是开始日期,并且它有效。此外,如果您有前任,您将获得父任务的截止日期作为开始日期。

     task.setActualStart(df.parse("02/05/2014"));
    

    顺便说一下,ms 项目会根据你的持续时间设置截止日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2018-03-06
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多