【问题标题】:mpxj Project c# resource assignment with fixed durationmpxj 具有固定持续时间的项目 c# 资源分配
【发布时间】:2017-07-31 05:23:09
【问题描述】:

我正在使用 mpxj 库来构建 MS 项目计划。我想将资源分配给具有固定持续时间的任务,以便它每天显示偶数小时。例如,如果任务为期 3 天,工作时间为 9 小时,则项目将显示每天 3 小时。

我尝试了所有方法,但没有找到解决方案,这是我的代码:

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());

【问题讨论】:

    标签: task ms-project mpxj


    【解决方案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 小时的工作。

    关键部分是计算单位属性的值。在这里,我们假设一个 8 小时的工作日(您可以将其设置为项目的一部分)。单位是一个百分比,因此我们计算我们想要工作的一天中的分数(在本例中为 5 小时 / 8 小时),然后乘以 100 得到一个百分比。

    【讨论】:

    • 太棒了,非常感谢!我现在唯一剩下的问题是设置完成百分比,我尝试对任务或 resourceAssignment 使用 setPercentageCompletion 方法,但完成百分比保持在 0。我还尝试更改剩余工作的持续时间,但它会改变任务的持续时间,并且不显示任何完成百分比。你知道我应该使用什么方法吗?提前致谢
    • 我找到了一种方法来获取任务的百分比完成,方法是在 resourceAsignment = work - remainingwork 上使用 set actualwork 并在任务级别删除 setremainingwork。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2017-05-21
    相关资源
    最近更新 更多