在我的 Microsoft Project 的 vsto 加载项中,以下代码不包括我在变量“entryDates”中定义的所有工作时间。因为,在循环内,现有作业会使用新的开始、结束和工作时间进行更新,而不是包含新的。
如何在任务中包含员工的多个工作时间和日期?
Project project = Globals.ThisAddIn.Application.ActiveProject;
project.DefaultTaskType = PjTaskFixedType.pjFixedWork;
Task testTask = project.Tasks.Add("Test Task");
Resource resource = project.Resources.Add("Sridhar Netha");
Assignment newAssignment = testTask.Assignments.Add(ResourceID: resource.ID);
var entryDates =new List<EntryDate>(){
new EntryDate{ DateEntered=DateTime.Parse("2023-09-05"), Hours=(decimal)2 },
new EntryDate{ DateEntered=DateTime.Parse("2023-09-12"), Hours=(decimal)5 },
new EntryDate{ DateEntered=DateTime.Parse("2023-09-19"), Hours=(decimal)4 }
};
foreach (EntryDate entryDate in entryDates)
{
newAssignment.Start = entryDate.DateEntered;
newAssignment.Finish = entryDate.DateEntered;
newAssignment.Work = entryDate.Hours+"h";
}
这里是向作业添加工作时间的伪代码:
TimeScaleValues tsvs = newAssignment.TimeScaleData("2023-09-05", "2023-09-20", pjAssignmentTimescaledWork, pjTimescaleDays);
foreach TimeScaleValue tsv in tsvs
{
/* check to see if tsv.StartDate is a date in the EntryDate list and if so,
add the hours using the Value property */
};
注 1: TimeScaleData 方法的日期参数是日期/时间值,因此 9/19/23 的 EndDate 将是午夜,因此该日期没有工作时间。因此,在结束日期上添加一天以获得预期的完整工作日。 例如。 TimeScaleData("10/2/23", "10/5/23") 生成 3 天的数组:10/2、10/3、10/4。
注 2: 工作以分钟为单位存储,因此请将小时乘以 60。