假设我有一个文档doc
,我想将其barcode
元数据更新为"01234"
.
该文档可能具有现有的其他属性,我不想丢失它们。
如果doc
已经有barcode
,它将被覆盖。
如何使用 DotCMIS/OpenCMIS 做到这一点?
在 CMIS 中,默认情况下更新属性将覆盖现有值,并且默认情况下保留不随 updateProperties 消息一起发送的属性。也就是说,协议语义已经保证了您的两个要求。
代码方面,请查看OpenCMIS的Updating properties
代码示例,它适用于您的案例:
CmisObject cmisobject = ....
Map<String, Object> updateProperties = new HashMap<String, Object>();
updateProperties.put("acme:barcode", "new value"); // single-value property
cmisobject.updateProperties(updateProperties);
对于 DotCMIS,示例页面提供了另一个有用的片段,这是用于映射您的用例的修改版本:
ICmisObject cmisObject = ...
IDictionary<string, object> properties = new Dictionary<string, object>();
properties["acme:barcode"] = "new value";
IObjectId newId = cmisObject.UpdateProperties(properties);
if (newId.Id == cmisObject.Id)
{
// the repository updated this object - refresh the object
cmisObject.Refresh();
}
else
{
// the repository created a new version - fetch the new version
cmisObject = session.GetObject(newId);
}