FieldNameToFieldConstant 能否与 TaskDependency 对象一起使用

Can FieldNameToFieldConstant be used with the TaskDependency Object

我正在使用 TaskDependency 对象来跟踪目标任务的前置任务。然后我想用当前 link 对的值更新 "Number" 字段之一。我在遍历跟踪中的每个 link 时递增此值。我将此数字字段用作排序字段,因此跟踪可以按逻辑顺序而不是任务 ID 顺序显示

我想让这个数字字段成为任何可用的数字字段,用自定义名称标识,因此它是一个自定义字段。我已经尝试使用 .Getfield 和 .SetField 来读取和写入这个递增的数字。

我有一个子例程,用于检查与此过程关联的自定义名称的所有数字字段。我将此过程命名为 CustomNumberNameExists,此函数 returns 一个字符串,例如 Number18,如果 Number18 具有自定义名称 "MarkedPred" 它也 returns 9 字符字段标识符 "C",即 188743994 字段 Number18.

用于识别哪个数字字段已使用 MarkedPred 自定义名称进行自定义的子例程:

enter code here

    For i = 1 to 20
         if (CustomFieldGetName(C) = "MarkedPred") Then
             fldMarkedPred = "Number" & i
             MarkedPred_Method = C
         End If
    next i

在给定单个目标任务的情况下向后跟踪网络的子例程:

enter code here

    Sub DepPredNew(Tsk As Task)

    Dim Dep As TaskDependency    
    Dim SumT As Task    
    Dim SubT As Task    

   'First Section processes for PredSelAll = False  = Only Incomplete tasks 

   If PredSelAll = False Then                                                                              
        If (Tsk.Marked = False) Then
             Tsk.Marked = True

   'exclude links to external tasks                                                                   
        For Each Dep In Tsk.TaskDependencies                                          
            If (Dep.From.ExternalTask = True) Then                            
                Debug.Print ("found Dep.From.ExternalTask= " & Dep.From.ExternalTask)                         
                GoTo NextOne
            End If

            If ((Dep.From.ID <> Tsk.ID) And (Dep.From.PercentComplete <> 100)) Then
               Projectfield = FieldNameToFieldConstant("MarkedPred")
                    If (Dep.From.Number18 = 0) Then  'And (Dep.From.Predecessors <> "")) Then
                        LogicOrder = LogicOrder + 1
                        Dep.From.Number18 = LogicOrder
                        Tsk.Marked = True
                    End If
                    DepPredNew Dep.From   
    NextOne:

        End If
    Next Dep
End If

除了硬编码为使用 Number18 字段外,上述所有例程都按预期工作。 我想用 "MarkedPred" 替换 .Number18 的所有实例,使该子例程变得灵活,以便可以使用自定义名称 - MarkedPred 自定义任何可用的数字字段。 我正在尝试使用 Projectfield,例如 Dep.From.Projectfield 而不是使用 Dep.From.Number18.

这可能吗?

这正是 GetField and SetField 的用途。

Dep.From.Number18 更改为 Dep.From.GetField(Projectfield)Dep.From.SetField(Projectfield)

仅供参考:将 Projectfield = FieldNameToFieldConstant("MarkedPred") 移到循环外,因为它只需要计算一次。更好的办法是将它移出这个递归过程并使其成为模块级变量;否则它仍然会为每个任务调用。