2013-03-15 115 views
1

我已经使用库服务API将文档插入MarkLogic。有些情况下,我需要保存没有签入的更改。这意味着将更改保存到当前版本中,而不增加版本号。已经在某些CMIS规范中看到过这样的设施,它提供了现成的解决方案,用于签入具有相同版本的文档。在MarkLogic找不到类似的API。我能想到的替代选项是取消管理托管文档,使用xdmp函数执行更新和重新管理内容。但是这会丢失以前的版本。有没有其他方法可以做到这一点?在不更改版本的情况下更新受管文档

+0

我相信有一些技巧可以在这里发挥作用,而不会丢失你的版本。 – 2013-03-15 14:18:58

回答

1

您是否尝试过简单地使用xdmp更新函数并绕过DLS?例如,您可以使用xdmp:node-replace替换文档的根元素。文档说你必须使用DLS函数进行更新,但我认为这意味着非DLS更新不会由DLS管理。

让我们试试。

(: new managed document :) 
import module namespace dls = "http://marklogic.com/xdmp/dls" 
    at "/MarkLogic/dls.xqy"; 
dls:document-insert-and-manage('test', true(), <test id="1"/>) 
=>() 

import module namespace dls = "http://marklogic.com/xdmp/dls" 
    at "/MarkLogic/dls.xqy"; 

dls:document-is-managed('test'), 
dls:document-history('test') 
=> 
true 
<dls:document-history uri="test" xmlns:dls="http://marklogic.com/xdmp/dls"> 
    <dls:version> 
    <dls:version-id>1</dls:version-id> 
    <dls:document-uri>test</dls:document-uri> 
    <dls:latest>true</dls:latest> 
    <dls:created>2013-03-15T10:22:35.642645-07:00</dls:created> 
    <dls:author>9712740001723797867</dls:author> 
    <dls:annotation/> 
    <dls:deleted>false</dls:deleted> 
    </dls:version> 
</dls:document-history> 

看起来不错。让我们尝试一个非托管更新。

xdmp:node-replace(doc('test')/test, <test id="2"/>) 
=>() 

doc('test') 
=> <test id="2"/> 

import module namespace dls = "http://marklogic.com/xdmp/dls" 
    at "/MarkLogic/dls.xqy"; 

dls:document-is-managed('test'), 
dls:document-history('test') 
=> 
true 
<dls:document-history uri="test" xmlns:dls="http://marklogic.com/xdmp/dls"> 
    <dls:version> 
    <dls:version-id>1</dls:version-id> 
    <dls:document-uri>test</dls:document-uri> 
    <dls:latest>true</dls:latest> 
    <dls:created>2013-03-15T10:22:35.642645-07:00</dls:created> 
    <dls:author>9712740001723797867</dls:author> 
    <dls:annotation/> 
    <dls:deleted>false</dls:deleted> 
    </dls:version> 
</dls:document-history> 

所以更新工作,但文档历史仍然显示版本1.这就是你想要的,对吧?

现在,我以管理员用户身份执行此操作。对于非管理员用户,您可能必须授予一些额外的权限 - 或者创建一个放大器可能更清洁。这可以用来防范意外的非托管更新。

+0

我曾试过这个,但它没有奏效。我不确定我是否使用了管理员角色或具有足够的权限。这正是我想要的。将尝试通过分配适当的权限。万分感谢 :) – NitZRobotKoder 2013-03-18 06:29:33

相关问题