2017-03-10 10 views
0

나는 mpxj 라이브러리를 사용하여 MS 프로젝트 일정을 작성하고 있습니다. 고정 된 기간의 작업에 리소스를 할당하여 하루에 짝수 시간을 보여주고 싶습니다. 예를 들어, 작업이 3 일이고 작업 시간이 9 시간이면 프로젝트는 하루에 3 시간을 표시합니다. mpxj 고정 된 기간을 가진 프로젝트 C# 리소스 할당

나는 모든 노력을하지만, 해결책을 찾기 위해 관리하지 않았다

, 여기 내 코드입니다 :

Task task = file.addTask();       
task.setName(name); 
UID = java.lang.Integer.valueOf(c); 
taskFielding.setUniqueID(UID); 
mainTask.addChildTask(task, 2); 
task.setActualStart(startdate); 
task.setConstraintType(ConstraintType.MUST_START_ON); 
task.setConstraintDate(startdate); 
task.setEffortDriven(false); 
task.setType(TaskType.FIXED_DURATION); 
task.setDuration(duration); 
task.setActualDuration(durationFielding); 
task.setManualDuration(durationFielding); 
task.setOutlineNumber(outlinecount + "." + outlinesubcount); 
task.setOutlineLevel(java.lang.Integer.valueOf(2)); 
ResourceAssignment resourceAssignment =   task.addResourceAssignment(assignedResource); 
resourceAssignment.setWork(Duration.getInstance(15, TimeUnit.HOURS)); 
resourceAssignment.setActualWork(Duration.getInstance(5, TimeUnit.HOURS)); 
resourceAssignment.setRemainingWork(Duration.getInstance(10, TimeUnit.HOURS)); 
resourceAssignment.setStart(taskFielding.getStart()); 

답변

1

당신은 가능한 시간 매일의 양을 줄이기 위해 자원 할당의 units 속성을 설정해야합니다 당신의 자원을 위해. 다음은 예입니다.

Resource assignedResource = file.addResource(); 
assignedResource.Name = "Assigned Resource"; 

Task task = file.addTask(); 
task.Name = "StackOverflow Example Task"; 
task.Start = DateTime.Parse("2017-03-13").ToJavaDate(); 
task.Duration = Duration.getInstance(3, TimeUnit.DAYS); 
task.Work = Duration.getInstance(15, TimeUnit.HOURS); 
task.RemainingWork = Duration.getInstance(15, TimeUnit.HOURS); 

double hoursPerDay = 8.0; 
double hoursWorkedPerDay = 5.0; 

ResourceAssignment resourceAssignment = task.addResourceAssignment(assignedResource); 
resourceAssignment.Start = DateTime.Parse("2017-03-13").ToJavaDate(); 
resourceAssignment.Work = Duration.getInstance(15, TimeUnit.HOURS); 
resourceAssignment.RemainingWork = Duration.getInstance(15, TimeUnit.HOURS); 
resourceAssignment.Units = NumberHelper.getDouble((hoursWorkedPerDay/hoursPerDay) * 100.0); 

이렇게하면 3 일의 기간이 있지만 매일 5 시간의 작업 만 수행됩니다.

핵심 부분은 units 속성 값을 계산합니다. 여기서 우리는 8 시간의 근무일을 가정합니다 (프로젝트의 일부로이를 설정할 수 있습니다). 단위는 백분율이므로 우리는 일하고 싶은 하루의 분율 (이 경우에는 5 시간/8 시간)을 계산하고 백분율을 100으로 곱합니다.

+0

정말 멋지다, 정말 고마워! 현재 남아있는 유일한 문제는 완료 %를 설정하는 것입니다. 작업 또는 resourceAssignment에 setPercentageCompletion 메서드를 사용하려고했으나 완료율이 0으로 유지됩니다. 또한 remainingWork의 지속 시간을 변경하려고 시도했으나 작업 기간을 변경하고 완료율은 표시하지 않습니다. 어떤 방법을 사용해야하는지 알아 주시겠습니까? 사전에 감사드립니다 – tienow

+0

resourceAsignment = work - remainwork에서 set actualwork을 사용하고 작업 수준에서 setremainingwork를 제거하여 작업에 percentageCompletion을 얻는 방법을 찾았습니다. – tienow