タスクのリストを含むデータベースがあります。VSTO を使用してこのデータベースから読み取り、そこから新しい Microsoft Project を作成しています。タスクの上限は 3000 です。
問題は、データベース内のレコードがランダムな順序になっていることです。確かに、同じテーブル内で主キーと外部キーの形式で定義された親子関係があります。ただし、次の 2 つの制限があります。
- 一度にすべてのレコードを読まなければなりません。
- レコードが読み取られる順序は、完全にランダムにすることができます。
2番目の問題は、実際の問題が発生する場所です。OutlineLevel = 1
最初にすべてのレコードを取得し、次にいくつかのOutlineLevel = 5
レコードを取得し、次にいくつかのレコードを取得する可能性が高いOutline Level = 2
ため (完全にランダム)。
ParentTask.OutlineChildren.Add(<Task>)
VSTO API は、 を実行するとその親の子タスクが作成されますが、グリッドの最後の行に TASK が追加されるという意味で奇妙です!
これにより、遭遇した各レコードの ID を再計算する必要があります。とは、レコードが移動する必要がある MS ProjectID
の行番号を意味します。
これに関する問題は、3000 タスクに対してこれを再計算すると、ますます遅くなることです。最初は 1 秒間に 30 ~ 40 個のタスクを挿入できますが、3000 個のタスクすべてを処理するには 11 時間かかります。(これはもちろん受け入れられません)。
これをすばやく行う API メソッドはありますか? または、子タスクの ID を再計算する別の方法があります。
- 子タスクの ID を計算するコードは反復的です。親タスクのIDから開始し、子タスクの兄弟番号に基づいて子タスクが持つIDを計算しようとします(
SiblingNumber
私が構築したデータ構造に格納され、ラッパーとして機能しますMSProject.Task object
)。