MarkLogic:协调流以跳过编写器

MarkLogic:协调流以跳过编写器,marklogic,marklogic-9,marklogic-dhf,Marklogic,Marklogic 9,Marklogic Dhf,MarkLogic版本:9.0-6.2 我们有一个协调流程,其中准备content.sjs中的“source”变量传递给writer.sjs。我有一个应该跳过编写器的场景,例如,如果文档已经存在于final db中,并且staging doc的时间戳小于final doc中的时间戳,那么我不想写入final 下面是content.sjs中的代码片段 let source; //logic to populate source options.headers = source.envelope.h

MarkLogic版本:9.0-6.2

我们有一个协调流程,其中准备content.sjs中的“source”变量传递给writer.sjs。我有一个应该跳过编写器的场景,例如,如果文档已经存在于final db中,并且staging doc的时间戳小于final doc中的时间戳,那么我不想写入final

下面是content.sjs中的代码片段

let source;
//logic to populate source
options.headers = source.envelope.headers;
return extractInstanceCustomer(source.envelope.instance);
我们注意到,有时当源为空时,这会跳过编写器。然而,在某些情况下,writer是用空源调用的,因此信封是用头创建的,而实例是空的

我们尝试了以下逻辑,但仍然没有看到一致的行为

let source;
//logic to populate source

if (fn.empty(source)) {
}
else {
  options.headers = source.envelope.headers;
  return extractInstanceCustomer(source.envelope.instance);
}

当我们不想在协调流程的过程中从暂存阶段编写文档时,跳过writer的最佳方法是什么。

我认为最好的地方就是writer。在这里,您有所有的数据头、三元组、实例和附件,如果您还想对最终数据库中的数据进行检查,您还可以直接访问这些数据

另一种选择是把逻辑放在你的流程的主要部分


非常感谢,这很有道理。然而,我们更担心协调流的不一致行为,因为我们确实看到它在某些情况下不会写入最终DB,尽管我们在writer.sjs中没有任何检查。这背后肯定有一个原因,但我们很紧张,我们没有完全意识到我们的代码行为。如果您的内容脚本没有返回任何内容(应该可以在跟踪中看到),我们可能会期望协调失败。。