Я использую объект TaskDependency для трассировки предшественников для целевой задачи. Затем я хочу обновить одно из полей «Число» значением текущей пары ссылок. Я увеличиваю это значение, проходя по каждой ссылке в трассе. Я использую это поле «Номер» в качестве поля сортировки, поэтому трассировка может быть представлена в порядке логики c, а не в порядке идентификатора задачи
. Я хочу, чтобы это поле номера было ЛЮБОМ доступным полем номера, обозначенным пользовательским Имя, так что это пользовательское поле. Я экспериментировал с .Getfield и .SetField для чтения и записи этого увеличенного числа.
У меня есть подпрограмма, которая проверяет все числовые поля для пользовательского имени, связанного с этой процедурой. Я назвал эту процедуру CustomNumberNameExists, и эта функция возвращает строку, такую как Number18, если Number18 имеет настраиваемое имя «MarkedPred». Она также возвращает 9-символьный идентификатор поля «C», ie 188743994 для поля Number18.
Подпрограмма, определяющая, какое поле Number было настроено с пользовательским именем 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. Я хотел бы заменить все экземпляры .Number18 на «MarkedPred», чтобы сделать эту подпрограмму гибкой, чтобы ЛЮБОЕ доступное поле номера можно было настроить с помощью пользовательского имени - MarkedPred. Я пытаюсь использовать Projectfield, например Dep.From.Projectfield, вместо использования Dep.From.Number18.
Возможно ли это?