как прочитать имена всех настраиваемых полей в проекте Microsoft?

У меня возникли проблемы с поиском локальных имен для настраиваемых полей. Я пытался использовать службу настраиваемых полей PSI, но безуспешно. Кажется, он просто получает корпоративные поля. Я действительно не уверен, где он прячет местные имена.

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

вот мой код, который, я думаю, был скопирован из образца projtool:

 public static SvcCustomFields.CustomFieldDataSet ReadCustomFields( )
    {
        CheckAccess();

        using (var scope = new OperationContextScope(projectClient.InnerChannel))
        {
            ProjectAuthentication.UseCorrectHeaders(isImpersonated);

            return customFieldsClient.ReadCustomFields(string.Empty, false);
       }
    }

вот скриншот того, как он выглядит на рабочем столе проекта:

введите здесь описание изображения


person Timmerz    schedule 11.10.2012    source источник
comment
Вы можете получить рекомендуемые имена — имена определены в PWA для столбцов, но пользователи могут давать свои собственные метки любому столбцу в Project Pro, и я полагаю, что метки являются локальными для таблиц. Я не думаю, что есть способ прочитать определение таблиц через PSI - это все бинарные вещи только для Project Pro.   -  person melan    schedule 11.10.2012


Ответы (1)


Код такой:

CustomFieldDataSet cfDS = new CustomFieldDataSet();

PSLibrary.Filter cfFilter = new Microsoft.Office.Project.Server.Library.Filter();
cfFilter.FilterTableName = cfDS.CustomFields.TableName;

cfFilter.Fields.Add(new PSLibrary.Filter.Field(cfDS.CustomFields.TableName, cfDS.CustomFields.MD_PROP_NAMEColumn.ColumnName));
cfFilter.Fields.Add(new PSLibrary.Filter.Field(cfDS.CustomFields.TableName, cfDS.CustomFields.MD_PROP_IDColumn.ColumnName));
cfFilter.Fields.Add(new PSLibrary.Filter.Field(cfDS.CustomFields.TableName, cfDS.CustomFields.MD_PROP_UIDColumn.ColumnName));
cfFilter.Fields.Add(new PSLibrary.Filter.Field(cfDS.CustomFields.TableName, cfDS.CustomFields.MD_LOOKUP_TABLE_UIDColumn.ColumnName));
cfFilter.Fields.Add(new PSLibrary.Filter.Field(cfDS.CustomFields.TableName, cfDS.CustomFields.MD_PROP_TYPE_ENUMColumn.ColumnName));

cfDS = ReadCustomFields(cfFilter.GetXml(), false);

Образец написан как дополнение к CustomFieldsClient. Он читает имя настраиваемого поля, идентификатор, UID, UID таблицы поиска и тип поля.

Но он только читает название полей. Существуют определенные пользователем метки для полей, а метки определяются в Project Pro и хранятся в определениях таблиц, которые доступны только в Project Pro.

person melan    schedule 11.10.2012
comment
хорошо ... так вы говорите, что я не могу получить метки, которые я применил к настраиваемым полям в Project Pro? Итак, скажем, я добавил столбец настраиваемого поля и набрал имя, например «тестовое настраиваемое поле», вы говорите, что я не могу этого понять, верно? - person Timmerz; 12.10.2012
comment
Мой ответ зависит от того, где вы ввели имя. Если вы ввели его в PWA при определении поля, то имя можно запросить, используя код, который я ввел. Но если вы набрали имя как Label в Project Pro, то вы можете получить его с помощью Project Pro. - person melan; 12.10.2012