Использование объектов PSI Filter из Python

Я работаю с SharePoint и ProjectServer 2007 через PSI с Python.

Я не могу найти никакой документации о том, как класса фильтра (Microsoft.Office.Project.Server.Library) работают внутренне, имитируя его поведение в Python.

Любые идеи?


person Fran Ruiz    schedule 22.09.2010    source источник


Ответы (1)


Взгляните на сообщение в блоге Colby Africa . Кроме того, здесь.

Изменить

Сгенерированный фильтр - это просто XML. Вот фильтр, который возвращает данные из таблицы «LookupTables» (список всех таблиц поиска):

<?xml version="1.0" encoding="utf-16"?>
<Filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" filterTableName="LookupTables" xmlns="http://microsoft.com/ProjectServer/FilterSchema.xsd">
  <Fields>
    <Field tableName="" fieldName="LT_UID" />
    <Field tableName="" fieldName="LT_NAME" />
    <Field tableName="" fieldName="LT_SORT_ORDER_ENUM" />
    <Field tableName="" fieldName="LT_PRIMARY_LCID" />
    <Field tableName="" fieldName="LT_FILL_ALL_LEVELS" />
    <Field tableName="" fieldName="LT_CHECKOUTBY" />
    <Field tableName="" fieldName="LT_CHECKOUTDATE" />
    <Field tableName="" fieldName="MOD_DATE" />
  </Fields>
  <Criteria />
</Filter>

Вот еще один пример фильтров, необходимых для получения всех данных для одной таблицы ...

Шаг 1. Получите строку для LookupTable (общая информация о таблице)

<?xml version="1.0" encoding="utf-16"?>
<Filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" filterTableName="LookupTables" xmlns="http://microsoft.com/ProjectServer/FilterSchema.xsd">
  <Fields>
    <Field tableName="" fieldName="LT_UID" />
    <Field tableName="" fieldName="LT_NAME" />
    <Field tableName="" fieldName="LT_SORT_ORDER_ENUM" />
    <Field tableName="" fieldName="LT_PRIMARY_LCID" />
    <Field tableName="" fieldName="LT_FILL_ALL_LEVELS" />
    <Field tableName="" fieldName="LT_CHECKOUTBY" />
    <Field tableName="" fieldName="LT_CHECKOUTDATE" />
    <Field tableName="" fieldName="MOD_DATE" />
  </Fields>
  <Criteria>
    <FieldOperator fieldOperationType="Equal">
      <Field fieldName="LT_UID" />
      <Operand xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">20870732-12b6-48e2-acf4-94d934dfc27a</Operand>
    </FieldOperator>
  </Criteria>
</Filter>

Шаг 2. Получите все данные из таблицы LookupTableStructures (информация об иерархии)

<?xml version="1.0" encoding="utf-16"?>
<Filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" filterTableName="LookupTableStructures" xmlns="http://microsoft.com/ProjectServer/FilterSchema.xsd">
  <Fields>
    <Field tableName="" fieldName="LT_STRUCT_UID" />
    <Field tableName="" fieldName="LT_UID" />
    <Field tableName="" fieldName="LT_PARENT_STRUCT_UID" />
    <Field tableName="" fieldName="LT_STRUCT_COOKIE" />
  </Fields>
  <Criteria>
    <FieldOperator fieldOperationType="Equal">
      <Field fieldName="LT_UID" />
      <Operand xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">20870732-12b6-48e2-acf4-94d934dfc27a</Operand>
    </FieldOperator>
  </Criteria>
</Filter>

Шаг 3. Получите все значения в этой таблице поиска

<?xml version="1.0" encoding="utf-16"?>
<Filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" filterTableName="LookupTableValues" xmlns="http://microsoft.com/ProjectServer/FilterSchema.xsd">
  <Fields>
    <Field tableName="" fieldName="LT_STRUCT_UID" />
    <Field tableName="" fieldName="LCID" />
    <Field tableName="" fieldName="LT_UID" />
    <Field tableName="" fieldName="LT_VALUE_DUR" />
    <Field tableName="" fieldName="LT_VALUE_NUM" />
    <Field tableName="" fieldName="LT_VALUE_DUR_FMT" />
    <Field tableName="" fieldName="LT_VALUE_DATE" />
    <Field tableName="" fieldName="LT_VALUE_TEXT" />
    <Field tableName="" fieldName="LT_VALUE_PHONETIC" />
    <Field tableName="" fieldName="LT_VALUE_FULL" />
    <Field tableName="" fieldName="LT_VALUE_DESC" />
    <Field tableName="" fieldName="LT_VALUE_SORT_INDEX" />
    <Field tableName="" fieldName="LT_VALUE_LOCALIZED_COOKIE" />
  </Fields>
  <Criteria>
    <FieldOperator fieldOperationType="Equal">
      <Field fieldName="LT_UID" />
      <Operand xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">20870732-12b6-48e2-acf4-94d934dfc27a</Operand>
    </FieldOperator>
  </Criteria>
</Filter>

Для получения всех этих данных требуется три отдельных фильтра, поскольку они разделены на три отдельные таблицы. В C # я вызываю функцию ReadLookupTablesMultiLang с каждым из этих фильтров, а затем объединяю возвращенные таблицы данных.

person Kit Menke    schedule 22.09.2010
comment
Проблема здесь в том, что у меня нет всех этих методов для создания объекта Filter (я использую Python). Я думаю, что лучшим решением для меня было бы увидеть синтаксис окончательного XML, отправленного в HTTP-запросе, и сгенерировать что-то подобное из Python. - person Fran Ruiz; 22.09.2010
comment
Я обновил свой ответ, включив в него XML, сгенерированный из примера при работе с LookupTables. Сообщите мне, если это поможет! - person Kit Menke; 22.09.2010
comment
Ага! Это то что мне нужно! Теперь я попробую сгенерировать правильный запрос из Python. Большое спасибо! - person Fran Ruiz; 24.09.2010