在Python中使用PSI过滤器对象
我正在用Python通过PSI与SharePoint和ProjectServer 2007进行工作。
我找不到关于Filter Class (Microsoft.Office.Project.Server.Library)对象内部是如何工作的文档,所以我想在Python中模拟它的行为。
有什么想法吗?
1 个回答
0
看看Colby Africa的博客文章。还有,msdn文档在这里。
编辑
生成的过滤器其实就是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
函数,然后把返回的数据表合并在一起。