1

msプロジェクトをエクスポートするためにmpxj 4.5を使用しています。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());
}

開始日と間違った終了日が繰り返し表示されます。ここで何が問題なのですか?任意の提案をいただければ幸いです。

4

1 に答える 1

0

同じ問題がありました。私の見解では、タスクの前任者または実際の開始日がない場合、mpxj は自動的に開始日を設定します。つまり、プロジェクト ヘッダーまたはプロジェクトの最初のタスクの開始日から開始日を取得します。そのため、開始日が繰り返されます。

簡単な例を次に示します (私は 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 project はあなたの期間に基づいて期日を設定します。

于 2014-05-13T08:30:00.460 に答える