2017-03-10 1 views
0

J'utilise la bibliothèque mpxj pour créer une planification MS Project. Je voudrais asservir une ressource à une tâche avec une durée fixe afin qu'elle montre un nombre pair d'heures par jour. Par exemple, si la tâche dure 3 jours et qu'il y a 9 heures de travail, le projet affichera 3 heures par jour.mpxj Affectation de ressources Project C# avec durée fixe

J'ai tout essayé mais n'a pas réussi à trouver une solution, voici mon code:

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

Répondre

1

Vous devez définir l'attribut units de l'affectation des ressources pour réduire la quantité de temps disponible chaque jour pour votre ressource. Voici un exemple:

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

Cela crée une tâche qui a une durée de 3 jours, mais seulement 5 heures de travail est effectué chaque jour.

La partie clé calcule la valeur de l'attribut units. Ici, nous supposons une journée de travail de 8 heures (vous pouvez l'installer dans le cadre de votre projet). Unités est un pourcentage, donc nous calculons la fraction du jour où nous voulons travailler (dans ce cas 5 heures/8 heures) et multiplions par 100 pour nous donner un pourcentage.

+0

Génial qui a fonctionné, merci beaucoup! Le seul problème que j'ai maintenant est de mettre en place un% d'achèvement, j'ai essayé d'utiliser la méthode setPercentageCompletion pour la tâche ou le resourceAssignment mais l'achèvement% reste à 0. J'ai aussi essayé de changer la durée de remainWork mais changer la durée de la tâche et n'affiche aucun% d'achèvement. Savez-vous quelle méthode je devrais utiliser? Merci d'avance – tienow

+0

J'ai trouvé un moyen d'obtenir le pourcentageCompletion sur la tâche en utilisant set effectivework sur le resourceAsignment = work - remainwork et en supprimant setremainingwork au niveau de la tâche. – tienow