在 FileNet P8 中更新 Creator 属性

Updating Creator property in FileNet P8

我正在尝试更新 FileNetP8 实现中的 Creator 属性。我尝试使用 "Modify Certain System Properties" 的授权更新它,但似乎此授权不适用于 "Creator",而是适用于其他属性,例如 "LastModifiedBy" 等。

我也曾尝试将 class 上的 属性 模板本身从 "propertyTemplate" 属性 更改为 "Read-Write",但是出现错误当我尝试保存它时返回,说明

"The operation violates a constraint of the implementation. Inherited Settability constraint on property Creator of class"

感谢任何帮助。

引自知识中心:

Settability of this property is read-only for most users. For users who have been granted privileged write access (AccessRight.PRIVILEGED_WRITE), this property is settable only on create. After initial object creation, this property is read-only for all users.

link https://www.ibm.com/support/knowledgecenter/en/SSNW2F_5.2.1/com.ibm.p8.ce.dev.prop.doc/_index_by_property.htm#Creator

所以,通过API是做不到的(wsi/java/.net无所谓)。 但是你可以尝试通过数据库直接更新来改变它。您可以在此处找到数据库架构 (https://www.ibm.com/support/knowledgecenter/en/SSNW2F_5.2.1/com.ibm.p8.ce.dev.ce.doc/database_table_schemas.htm)

似乎 IBM 支持已经被问到这个问题,他们提供了 "Some How" 并在此处回答:

https://www.ibm.com/support/pages/setting-selected-system-properties-ibm-filenet-p8-document-versions

IBM 在共享 link 的摘要部分中强调的是

The code needed to set Creator, DateCreated, LastModifier and DateLastModified are not complex, but they are somewhat different to the code normally used for more common properties. The above steps should allow a developer to set these values when called for.

总结一下他们遵循的方法:

  1. 创建一个新的 Document,将 Creator 属性 设置为所需的值
  2. 使用 Document.getProperties() 方法将 Reservation Properties 参数设置为新的文档属性对象来检出当前文档。
  3. 将签出文档的内容设置为新文件,在我的例子中,我使用下面的代码将内容从 Document 复制到 Reservation 对象.

    ContentElementList docContentList = oldVersion.get_ContentElements();
    ContentTransfer contentTransfer = (ContentTransfer) docContentList.get(0);
    
    ContentElementList docContentList = oldVersion.get_ContentElements();
    ContentTransfer contentTransfer = (ContentTransfer) docContentList.get(0);
    
    ContentTransfer updatedContentTransfer = Factory.ContentTransfer.createInstance();
    updatedContentTransfer.setCaptureSource(contentTransfer.accessContentStream());
    
    ContentElementList contentElementList = Factory.ContentElement.createList();
    contentElementList.add(updatedContentTransfer);
    reservation.set_ContentElements(contentElementList);
    
  4. 签入文档,Creator 现已更新

我并不完全相信这个解决方案,但它是 IBM 提供的并且对我来说效果很好(除了添加一个额外的版本)

首先,我建议查看 IBM Filenet 文档中的 Document.set_CreatorDocument.set_Owner 方法,以确认哪个符合要求。

creator 是一个系统 属性,由 FileNet 管理并在持久化对象时填充值。据我所知,没有 API 可以覆盖它。更新数据库不是一个好主意,因为 IBM 可能会使支持失效。然而,有一种方法可以实现这一点,即使用 Change Preprocessors。这些是服务器端、用户实现的操作,允许您在对象被持久化之前更改 creator。 希望这有帮助。