一个用于 Python 的 CMIS API 库,第 2 部分: 使用 Python 和 cmislib 构建真正的 ECM 工具
2010-05-05 00:00:00 来源:WEB开发网步骤 6. 到目标文档的动态元数据映射
如 清单 7 所示,本文的最后一个方法用于处理动态元数据映射:从 Exif 数据中的属性映射到为目标文档类定义的属性。这个方法是 addPropetyOfThecorrectTypeToPropbag();我想说的是,我喜欢这种具有描述性的函数名称。这个方法将完成整个脚本中最复杂的工作,但是如您所见,它非常简单,这要归功于 cmislib 的作用。例如,如果 valueToAdd(在来自 exif-py 时总是一个字符串)包含值 56 且 typeObj 属性类型是 int,那么您将它转换为一个适当的 int 对象并设置这个值。如果目标存储库认为它应该是一个字符串,那么就不用转换它。如果转换没有效果(比如这个值包含 f2.0),那么转换将失败并跳过这个属性,但文档仍将创建。因此,不管您在目标 CMIS 存储库中如何设置属性定义,这个代码将尝试使其有效。
清单 7. addPropertyOfTheCorrectTypeToPropbag 方法
def addPropertyOfTheCorrectTypeToPropbag(targetProps, typeObj, valueToAdd):
"""
Determine what type 'typeObj' is, then convert 'valueToAdd'
to that type and set it in targetProps if the property is updateable.
Currently only supports 3 types: string, integer and datetime
"""
cmisUpdateability = typeObj.getUpdatability()
cmisPropType = typeObj.getPropertyType()
cmisId = typeObj.id
if (cmisUpdateability == "readwrite"):
# first lets handle string types
if (cmisPropType == 'string'):
# this will be easy
targetProps[cmisId] = valueToAdd
if (cmisPropType == 'integer'):
try:
intValue = int(valueToAdd.values[0])
targetProps[cmisId] = intValue
except: print "error converting int property id:" + cmisId
if (cmisPropType == 'datetime'):
try:
dateValue = valueToAdd.values
dtVal = datetime.datetime.strptime(dateValue ,
"%Y:%m:%d %H:%M:%S")
targetProps[cmisId] = dtVal
except: print "error converting datetime property id:" \
+ cmisId
赞助商链接