我的理解是,由于每个状态转换都有一个当前状态和一个未来状态(一旦成功),由此产生的CPF管道将是线性的,如文档所示:

一国是否可能有条件地过渡到一国或另一国(分支)?使用上面的例子,是否可以根据某些条件从B国过境到C国或国家F国?这个answer (by @rjrudin)通过操作域来建议一条路由。
如果可以实现分支,是否有可能过渡到以前的状态(循环)?例如,有条件地从K国过境到B国或L国,这将使一些迭代处理成为可能。
发布于 2019-03-09 09:22:58
看看这个简单的CPF操作模块:
xquery version "1.0-ml";
import module namespace cpf="http://marklogic.com/cpf"
at "/MarkLogic/cpf/cpf.xqy";
declare variable $cpf:document-uri as xs:string external;
declare variable $cpf:transition as node() external;
if (cpf:check-transition($cpf:document-uri,$cpf:transition)) then try {
let $doc := fn:doc($cpf:document-uri)
return
xdmp:node-insert-child(
$doc/book,
<last-updated>{fn:current-dateTime()}</last-updated>
),
xdmp:log( "add last-updated ran OK" ),
cpf:success($cpf:document-uri, $cpf:transition, ())
} catch ($e) {
cpf:failure($cpf:document-uri, $cpf:transition, $e, ())
}
else ()(抄录自中央公积金指南:https://docs.marklogic.com/guide/cpf/quickStart#id_76015)
是对cpf:success和cpf:failure的调用决定了接下来应用的是什么状态。然而,cpf:success函数有第三个param (这里是空序列),它允许您为目标状态提供一个覆盖。使用该参数,您可以将文档转换到任何您喜欢的状态。
但是要小心,如果您不小心的话,您可以很容易地创建无限循环(通过指向您之前已经传递的状态),或者创建半途而废(通过错误类型的状态名称导致它不再被处理)。
哈哈!
发布于 2019-03-11 15:18:41
在特定状态转换的定义中有条件/动作对是可能的。CPF实际上并不关心管道是线性的还是循环的:它只是查看文档的当前状态并执行其上的条件来决定下一步要做什么。
如果您想看到一个循环样条的例子,"PDF转换(图像批处理)“管道循环(源在Installer/conversion/alternatives/batched-pdf-pipeline.xml).中)诀窍是在两个不同的状态之间循环:某些优化可能会挫败返回到同一状态的尝试。
https://stackoverflow.com/questions/55074474
复制相似问题