java - Filnet API 复制文件
问题描述
我需要使用 API 在 filenet 上复制文件并更新现有文件的属性,在使用 进行搜索后,我制作了以下示例,但出现错误
row = (RepositoryRow) it.next();
Id id = row.getProperties().get("Id").getIdValue();
Document document = Factory.Document.fetchInstance(os, id, null);
System.out.println("current document is : "+document.get_Name());
Document docCopy = (Document)Factory.Document.fetchInstance(os, id, null);
Properties prop = docCopy.getProperties();
prop.putValue("PT_DocumentNumber", newDocNo);
docCopy.checkin(AutoClassify.DO_NOT_AUTO_CLASSIFY, CheckinType.MAJOR_VERSION);
docCopy.save(RefreshMode.NO_REFRESH);
// file into folder
folder = Factory.Folder.getInstance(os, ClassNames.FOLDER, new Id("myFOlder"));
ReferentialContainmentRelationship rcr = folder.file(docCopy, AutoUniqueName.AUTO_UNIQUE, "New Document via Webservice", DefineSecurityParentage.DO_NOT_DEFINE_SECURITY_PARENTAGE);
rcr.save(RefreshMode.NO_REFRESH);
我得到的错误如下
[2/28/19 12:31:58:721 AST] 000000bc SystemErr R com.filenet.api.exception.EngineRuntimeException: FNRCE0042E: E_NOT_SUPPORTED: This method is not supported in the context of this session or object. Checkin must be performed on a reservation object. failedBatchItem=0 errorStack={
at com.filenet.engine.persist.VersionablePersister.validateCheckin(VersionablePersister.java:558)
at
解决方案
简而言之,您所做的是获得ID
Id id = row.getProperties().get("Id").getIdValue();
然后你得到源文件
Document document = Factory.Document.fetchInstance(os, id, null);
然后你得到相同的源文档,只是一个不同的引用变量
Document docCopy = (Document)Factory.Document.fetchInstance(os, id, null);
两者是同一份文件,这里没有复制!因此,当您尝试使用以下方式签入文档时:
docCopy.checkin(AutoClassify.DO_NOT_AUTO_CLASSIFY, CheckinType.MAJOR_VERSION);
docCopy.save(RefreshMode.NO_REFRESH);
引擎会抛出一个错误,因为文档一开始没有被签出(因此没有捕获任何保留对象来进行更改)。
Checkin must be performed on a reservation object.