0

我正在尝试编写一个 Documentum DFC 可执行文件,该可执行文件将从给定的文档库中检出一个对象。我已经能够与文档库建立会话,检索要签出的对象并验证它是否尚未签出。但是当我尝试在以下代码中将对象添加到 DfCheckoutOperation

IDfCheckoutOperation checkoutOperation = new DfCheckoutOperation();
checkoutOperation.add(objToCheckOut);

我得到一个 NullPointerException;这是堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
    at com.documentum.operations.impl.OperationNodeTreeBuilder.populate(OperationNodeTreeBuilder.java:549)
    at com.documentum.operations.impl.OperationNodeTreeBuilder.add(OperationNodeTreeBuilder.java:65)
    at com.documentum.operations.DfOperation.add(DfOperation.java:324)

我究竟做错了什么?注意: 两个对象引用都不是 null,因此这不是典型的 NullPointerException 场景,即,这不是重复的问题

4

2 回答 2

1

我遇到的问题源于我使用现在已经过时的旧示例代码。我在网上找到的示例显然是 Documentum-6.x 之前的版本,因此我通过new()方法调用实例化 DfCheckoutOperation 时,我应该使用以下代码:

IDfClientX clientX = new DfClientX();
IDfCheckoutOperation checkoutOperation = clientX.getCheckoutOperation();

(我使用的 Documentum 版本是 6.7)我通过查看 EMC 社区论坛并找到了一个具有类似操作问题的帖子来解决我的问题。

请注意,我实例化 DfCheckoutOperation 对象的方式不是生成空引用;我经历的 NPE 源于6.x 版本的方法实现中的其他对象。add()另请注意,评论中引用的白皮书中的结帐操作示例是最新的,因此请使用它来避免我发现自己遇到的情况。

于 2016-05-19T18:04:11.417 回答
0

在执行结帐操作之前,您需要检查一些事情:

  • 如果为真,则执行objToCheckOut.isCheckedOut()您无法继续结帐操作
  • 履行

if( objToCheckOut.getACL().getPermit(String accessorName) >= IDfACL.DF_PERMIT_WRITE) //continue with checkout operation.

此外,您可以使用权限级别结帐IDfACL.DF_PERMIT_VERSION

某些东西可能会阻止您执行操作。阅读此白皮书以获取更多信息 - 根据它,代码是按照它抛出的方式编写的NullPointerException,以防上述内容不满足。

于 2016-05-19T08:14:26.070 回答