oracle12c - 如何从 SOA Web 服务调用中解锁 IBM 内容导航器中的对象
问题描述
在我的 SOA 中,有两个应用程序来回交易文档信息。其中之一是IBM 的 filenet/content navigator。现在,当这些文档在 filenet 中签出时,其他应用程序无法调用 filenet 中的文档。这通常可以通过手动登录 Filenet 并右键单击文档并选择撤消结帐来解决。
由于阻塞确实与我的 SOA 集成有关,我希望能够通过我的 SOA 中的 web 服务调用在 filenet 中执行此“撤消签出”操作。这将节省大量用于手动解锁文档的时间。我正在使用Oracle 的 SOA 套件11g(和 12c),并且我的流程大量使用BPEL。我已经有了一个很好的与 Filenet 交互的网络服务。但是,我需要创建一个新操作“UnlockDocument”来在 filenet 中进行交互和执行此操作。
我需要什么:我需要包含文件网环境中的“UnlockDocument”操作的代码,或者一些可以完成工作的类似技巧。非常欢迎任何关于我如何进行的信息(也是非代码!),如果我自己找到更多信息,我会继续更新我的帖子!
谢谢您的帮助!
杰斯珀
解决方案
事实证明,filenet 的 web 服务中没有可能的“UnlockDocument”或“CancelCheckout”操作。但是,我找到了一个巧妙的解决方法,可以让您做到这一点。
当通过客户端或通过操作的 webservicecall 在 filenet 中签出文档时:“CheckoutAction”。该文档的副本在 filenet 内部制作,与VersionSeriesId
原始文档相同,但具有Isreserved = 'true'
. 如果您在此副本上执行“DeleteAction”,您实际上是重新创建了 filenet 客户端中可用的手动“取消签出”步骤。“DeleteAction”需要一个ObjectId
并且在VersionSeriesId
. 为了通过 Web 服务调用获取此 ObjectID,您需要创建一个获取 this 的 SOAPCall ObjectID
。要取消初始结帐,应进行第二次 SOAPCall,删除在上一步中获得的文档ObjectID
,即“副本”。
执行搜索请求 SoapCall:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sch="http://www.filenet.com/ns/fnce/2006/11/ws/schema">
<soap:Header>
<sch:Localization>
<sch:Locale>en_EN</sch:Locale>
<sch:Timezone/>
</sch:Localization>
</soap:Header>
<soap:Body>
<sch:ExecuteSearchRequest xsi:type="RepositorySearch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<sch:SearchScope xsi:type="ObjectStoreScope" objectStore="ObjectStoreXXX"/>
<sch:SearchSQL>SELECT [Id] FROM Document WHERE VersionSeries = {"enter the VersionSeriesID of the initial document without quotes"} AND IsReserved = true</sch:SearchSQL>
</sch:ExecuteSearchRequest>
</soap:Body>
</soap:Envelope>
DeleteActionRequest SoapCall:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sch="http://www.filenet.com/ns/fnce/2006/11/ws/schema">
<soap:Header>
<sch:Localization>
<sch:Locale>en-EN</sch:Locale>
<sch:Timezone/>
</sch:Localization>
</soap:Header>
<soap:Body>
<sch:ExecuteChangesRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<sch:ChangeRequest>
<sch:TargetSpecification classId="Document" objectId="{"enter the objectId of the previously obtained document without quotes"}" objectStore="ObjectStoreO7"/>
<sch:Action xsi:type="sch:DeleteAction"/>
</sch:ChangeRequest>
</sch:ExecuteChangesRequest>
</soap:Body>
</soap:Envelope>
现在为了让它在 SOA 中工作,您需要从您的 BPEL 调用 filenet 的 web 服务两次。首先是第一个操作:ExecuteSearchRequest
,它为您生成取消结帐所需的 ObjectId,然后是第二个操作ExecuteChangesRequest
,删除正确的文档,撤消初始结帐。这些操作在上面的 SOAP 示例中列出。此外,您需要使用工作凭据在传出标头中添加 WS-security 以访问 Filenet 服务。否则你将无法连接到 filenet。
这花费了我很多时间,所以我希望这对我以外的人有所帮助。享受您对文件网结帐删除的掌握吧!
推荐阅读
- python - 使用pytest对包中的模块进行单元测试时如何绕过__init__.py?
- android - 绑定的设备不会出现在 Android 上的已连接设备设置列表中
- python - 以块的形式获取熊猫数据框而不重复?
- r - R中for循环内的子集
- selenium - 未从下拉列表中选择值
- ubuntu - Caffe 不使用 GPU
- karate - 对于 **match contains**,我们如何断言 JSON 数组中的嵌套对象?
- python-3.x - 如何配置 postgresql 以在 BitBucket Pipelines 中运行 FastAPI 测试
- typescript - 如何在 v-data-table 中添加搜索/过滤方法?
- python - 服务器客户端库中的 ID 令牌验证与安全规则之间的交互