【问题标题】:Filenet P8 5.1 and 5.2 deleting/replacing document content with new contentFilenet P8 5.1 和 5.2 删除/用新内容替换文档内容
【发布时间】:2014-02-03 19:02:11
【问题描述】:

其中一个要求是使用新内容更新文档并删除旧文档。前一个文档的文档 ID 和其他属性应该指向具有新内容的新文档。

有任何示例 sn-p 可以做同样的事情,谢谢。

【问题讨论】:

    标签: filenet-p8 filenet filenet-content-engine


    【解决方案1】:

    我不太明白您是需要创建一个新的文档还是现有文档的一个新的版本。属性可以自动复制到新创建的版本,因此在这里使用版本控制似乎更自然。要做到这一点:

    // check out the document 
    Document currentVersion = .. // reference to existing document 
    currentVersion.checkout(ReservationType.EXCLUSIVE, null, null, null);
    currentVersion.save(RefreshMode.REFRESH);
    
    // obtain the reservation object (new version in progress)
    newVersion = (com.filenet.api.core.Document) documentObject.get_Reservation();
    
    // set content
    InputStream inputStream = .. // obtain input stream with content
    ContentElementList contentElements = Factory.ContentElement.createList();
    ContentTransfer contentTransfer = Factory.ContentTransfer.createInstance();
    contentTransfer.setCaptureSource(inputStream);
    contentTransfer.set_RetrievalName("content name");
    contentTransfer.set_ContentType("proper MIME type");
    contentElements.add(contentTransfer);
    newVersion.set_ContentElements(contentElements);
    newVersion.checkin(AutoClassify.DO_NOT_AUTO_CLASSIFY, CheckinType.MINOR_VERSION);
    newVersion.save(RefreshMode.NO_REFRESH);
    
    // deleting obsolete version
    currentVersion.delete();
    currentVersion.save(RefreshMode.NO_REFRESH);
    

    指定传输到保留的属性(所有非对象属性的默认模式)将使其进入新版本,一旦持久化,它实际上就是保留对象。

    需要注意的一点是,新版本的 ID 不能与前一个版本相同,因为每个版本都是不同的对象。要使用相同的 ID,您需要创建一个具有此 ID 的新文档并手动复制属性(在保留新文档之前删除旧文档)。

    更新

    关于必须包含多个对象的原子更新,您有两种选择:

    1. 批量更新对象
    2. 使用客户端启动的 JTA 事务(如果您使用 EJB 传输连接)

    您可以在文档中阅读这些内容:Batch ConceptsClient-Initiated Transactions

    除非您有复杂的更新场景,否则使用批处理是您通常使用的更传统的方式。

    【讨论】:

    • 作为额外信息:同一文档的两个版本具有相同的 VersionSeriesID 属性和每个版本的不同 ID 属性。
    • 感谢上面的代码sn-p。我想保留旧 ID 以指向新文档/版本。但是您上面的说明说要删除旧的并创建一个新的..在删除之后和插入新文档/版本之前..我想确保没有失败..我需要对此进行交易吗?我不想陷入旧文档删除成功而新文档/版本由于某种原因插入失败的情况。请就我如何实现这一目标提出建议。谢谢。
    • 非常感谢。通过您的代码..似乎我可以更新现有文档本身的内容(使其无内容/或文件中的简单消息),这可能吗?如果这是可能的,那么我不需要创建一个新的。这将解决我让它变得无内容的问题。我有不同的文档类型(txt、pdf、excel 等)要处理。如果我采用这种方法,我也可以拥有相同版本的文档。
    • @ShivGopal 无法替换存储在存储库中的文档(文档版本)的内容。这是设计使然。对内容的更改总是需要创建一个新的文档/文档版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多