我有一个包含任务列表的数据库。我正在使用 VSTO 从该数据库中读取数据并从中创建一个新的 Microsoft Project。任务的上限为 3000。
问题是数据库中的记录是随机顺序的。当然,它们在同一个表中以主外键的形式定义了父子关系。但是,有两个限制:
- 我必须一口气读完所有的记录。
- 读取记录的顺序可以是完全随机的。
第二个问题是真正的问题发生的地方。因为我很可能会OutlineLevel = 1
先得到所有记录,然后是一些OutlineLevel = 5
记录,然后是一些Outline Level = 2
,依此类推(完全随机)。
由于 VSTO API 在做ParentTask.OutlineChildren.Add(<Task>)
, 将创建该父级的子任务的意义上是奇怪的,但会将 TASK 添加到网格的最后一行!
这迫使我为遇到的每条记录重新计算 ID。与ID
,我的意思是在 MS Project 中记录必须去的行号。
问题在于,如果我为 3000 个任务重新计算它,它会变得越来越慢。一开始,它每秒可以插入 30-40 个任务,但处理所有 3000 个任务需要 11 个小时!(这当然是不可接受的)。
是否有一些 API 方法可以快速做到这一点?或者是否有另一种方法可以重新计算子任务的 ID。
- 计算子任务 ID 的代码是迭代的。它从父任务的 ID 开始,并尝试根据子任务的兄弟编号计算子任务将具有的 ID(
SiblingNumber
存储在我构建的数据结构中,它充当包装器MSProject.Task object
)。