Чтение списка значений корпоративного настраиваемого поля с использованием VBA

Я пытаюсь программно прочитать список доступных элементов в пользовательском поле предприятия, используя MS Project 2010 в ландшафте EPM. Я настраиваю Enterprise Global, поэтому придерживаюсь VBA. Некоторые поля являются текстовыми, а некоторые привязаны к таблице поиска (в настройках сервера PWA).

Я могу прочитать текущее значение каждого поля, используя:

?ActiveProject.ProjectSummaryTask.GetField(FieldNameToFieldConstant("_MY_FIELD_NAME_"))

но я не могу получить список доступных значений, которые может иметь _MY_FIELD_NAME_, если оно привязано к таблице поиска.

Я нашел несколько ссылок на:

Application.CustomFieldValueListGetItem(FieldID,Item,Index)

Но ни один из них не работает. Это довольно распространенный вопрос без ответа, который задают повсюду.

Я еще не нашел решения для этого; есть кто (пожалуйста)?

Спасибо за ваше время, любая помощь приветствуется.


person pfonseca    schedule 18.09.2013    source источник


Ответы (1)


Спешу поделиться тем, что нашла то, что искала!

Я публикую это, так как это может помочь кому-то еще.

Поэтому я сделал несколько шагов назад и подробно прочитал все метки в диалоговом окне «Пользовательские поля» в MS Proj. Я копался в MSDN по поводу терминов, которые имели для меня смысл, таких как LookupTable и OutlineCodes. Я нажал не ту кнопку! Код ниже иллюстрирует это.

Sub TestGOC()
'pfonseca Sep 2013
'This Sub exhausts my Immediate Window. Run with caution (or dont run at all)

    Exit Sub ' safety plug
    For i = 1 To Application.GlobalOutlineCodes.Count
    Debug.Print "GOC" & "(" & i & ")" & " " & Application.GlobalOutlineCodes(i).Name
        For j = 1 To Application.GlobalOutlineCodes(i).LookupTable.Count
            Debug.Print "..." & "(" & j & ")" & " " & Application.GlobalOutlineCodes(i).LookupTable(j).Name
        Next j
    Next i

End Sub

Приведенная ниже функция выводит допустимые значения для каждого полученного CEF. Это отправная точка для более сложных вариантов использования:

Sub DumpListValues(pCEFName As String)
'pfonseca Sep 2013

    For i = 1 To Application.GlobalOutlineCodes.Count
        If Application.GlobalOutlineCodes(i).Name = Trim(pCEFName) Then
            For j = 1 To Application.GlobalOutlineCodes(i).LookupTable.Count
                Debug.Print "(" & j & ")" & " " & Application.GlobalOutlineCodes(i).LookupTable(j).Name
            Next j
        End If
    Next i

End Sub

Та же проблема, что и опубликовано в MSDN.

Педро

person pfonseca    schedule 20.09.2013