使用Python中的PSI Filter对象

时间:2010-09-22 12:47:07

标签: python project-server psi

我正在通过PSI与Python一起使用SharePoint和ProjectServer 2007。

我找不到任何关于Filter Class (Microsoft.Office.Project.Server.Library)对象如何在内部工作以在Python中模拟其行为的文档。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看看Colby Africa's blog post。另外,msdn docs are here

修改

生成的过滤器只是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函数,然后合并返回的数据表。