繁体   English   中英

如何从FINAL数据库中的协调文档中的头部获取TDE数据

[英]How to get TDE data from header in a harmonized document in FINAL database

我正在创建一个TDE文档,其中我需要从统一文档的标题部分获取数据,以及从文档的主要部分(工作单)获取值。

但是,似乎我当前的tde上下文值未显示预期值。 有关为什么会出现在我当前的TDE代码中的任何想法?

我尝试了许多代码,如下所示:

// ES:页眉/ ProjectSpecificData / WorkOrderStatusHistory / StatusHistory / StatusHistory

但它不会从标题中获取任何数据

FINAL数据库中的协调文档样本

<?xml  version="1.0" encoding="UTF-8"?>
<envelope xmlns="http://marklogic.com/entity-services">
<headers>
<sourceURI xmlns="">/JDEdwards/CMMS/Sample/WorkOrder/DASH_JDEWO/7044389</sourceURI>
<ProjectSpecificData xmlns="http://testing.com/ads/project">
    <CompletedDate xmlns="http://testing.com/ads/project/fwe">2018-06-29</CompletedDate>
    <WorkOrderStatusHistory xmlns="http://testing.com/ads/project/fwe">
        <StatusHistory>
        <StatusHistory><UpdatedBy>RFCM</UpdatedBy>
        <UpdatedDate>2018/06/24</UpdatedDate>
        <StatusCode>55</StatusCode>
        <StatusDesc>Scheduled</StatusDesc>
        <StatusEffectiveDate>2018-06-24</StatusEffectiveDate>
        <StatusEndDate>2018-06-29</StatusEndDate></StatusHistory>
        <StatusHistory><UpdatedBy>GPFW</UpdatedBy>
        <UpdatedDate>2018/06/23</UpdatedDate>
        <StatusCode>10</StatusCode>
        <StatusDesc>Job Planning</StatusDesc>
        <StatusEffectiveDate>2018-06-23</StatusEffectiveDate>
        <StatusEndDate>2018-06-23</StatusEndDate></StatusHistory>
        <StatusHistory><UpdatedBy>COLO</UpdatedBy>
        <UpdatedDate>2018/07/01</UpdatedDate>
        <StatusCode>60</StatusCode>
        <StatusDesc>Daily Work in Progress</StatusDesc>
        <StatusEffectiveDate>2018-06-29</StatusEffectiveDate>
        <StatusEndDate>2018-06-29</StatusEndDate></StatusHistory>
        <StatusHistory><UpdatedBy>GPFW</UpdatedBy>
        <UpdatedDate>2018/06/22</UpdatedDate>
        <StatusCode>05</StatusCode>
        <StatusDesc>Ready for Approval</StatusDesc>
        <StatusEffectiveDate>2018-06-22</StatusEffectiveDate>
        <StatusEndDate>2018-06-23</StatusEndDate></StatusHistory>
        <StatusHistory><UpdatedBy>GPFW</UpdatedBy>
        <UpdatedDate>2018/06/24</UpdatedDate>
        <StatusCode>50</StatusCode>
        <StatusDesc>Ready to Schedule</StatusDesc>
        <StatusEffectiveDate>2018-06-23</StatusEffectiveDate>
        <StatusEndDate>2018-06-24</StatusEndDate></StatusHistory>
        <StatusHistory><UpdatedBy>JPGS</UpdatedBy>
        <UpdatedDate>2018/06/14</UpdatedDate>
        <StatusCode>01</StatusCode>
        <StatusDesc>Work Request</StatusDesc>
        <StatusEffectiveDate>2018-06-14</StatusEffectiveDate>
        <StatusEndDate>2018-06-22</StatusEndDate></StatusHistory>
        <StatusHistory><UpdatedBy>COLO</UpdatedBy>
        <UpdatedDate>2018/07/01</UpdatedDate>
        <StatusCode>65</StatusCode>
        <StatusDesc>Completed Ready for Review</StatusDesc>
        <StatusEffectiveDate>2018-06-29</StatusEffectiveDate>
        <StatusEndDate/></StatusHistory>
        </StatusHistory>
        </WorkOrderStatusHistory>
    </ProjectSpecificData>
    </headers>
<triples>
<instance>
<info>
<title>WorkOrder</title>
<version>1.0.1</version>
</info>
<WorkOrder entityExtVersion="1.0.1" entityVersion="1.0.1" entity="WorkOrder" defaultConfidence="95.00" xmlns="">
<WorkOrderCode sourcesystem="Testing" confidence="95.00">7044389</WorkOrderCode>
</WorkOrder>
</instance>
<attachments>
</attachments>
</envelope>

当前TDE文档代码:

xquery version "1.0-ml";
import module namespace tde = "http://marklogic.com/xdmp/tde" 
        at "/MarkLogic/tde.xqy";

let $workordertde:=
<tde:template xmlns:tde="http://marklogic.com/xdmp/tde">
<tde:context>//es:headers/ProjectSpecificData/WorkOrderStatusHistory/StatusHistory/StatusHistory</tde:context>
<tde:path-namespaces>
<tde:path-namespace>
<tde:prefix>es</tde:prefix>
<tde:namespace-uri>http://marklogic.com/entity-services</tde:namespace-uri>
</tde:path-namespace>
</tde:path-namespaces>
<tde:collections>
<tde:collection>Collection</tde:collection>
</tde:collections>
<tde:enabled>true</tde:enabled>
<tde:rows>
<tde:row>
<tde:schema-name>TestSchema</tde:schema-name>
<tde:view-name>TestView</tde:view-name>
<tde:view-layout>sparse</tde:view-layout>
<tde:columns>
<tde:column>
<tde:name>WorkOrderID</tde:name>
<tde:scalar-type>string</tde:scalar-type>
<tde:val>//es:instance[es:info/es:version = "1.0.1"]/WorkOrder/WorkOrderNo</tde:val>
<tde:invalid-values>ignore</tde:invalid-values>
</tde:column>
<tde:column>
<tde:name>WOStatus</tde:name>
<tde:scalar-type>string</tde:scalar-type>
<tde:val>fn:concat(StatusCode, " - ", StatusDesc)</tde:val>
<tde:nullable>true</tde:nullable>
</tde:column>
<tde:name>BeginDate</tde:name>
<tde:scalar-type>string</tde:scalar-type>
<tde:val>StatusEffectiveDate</tde:val>
<tde:nullable>true</tde:nullable>
</tde:column>
</tde:columns>
</tde:row>
</tde:rows>
</tde:template>

实际结果:当我测试单个文档的TDE时,它没有显示任何值:

{
"/WorkOrder/JDEdwards/130008HU52-7044389.xml": [
]
}

预期成绩:

我希望TDE能够代替我试图从头文件(StatusHistory数据)以及主要部分(WorkOrdercCode)获取的值。

编辑:

看起来返回状态历史值的函数返回一个字符串值。 我试图删除toString()调用,但它无法正常工作。 有关代码的任何想法?

function getStatusHistory(workOrder) { 
  var status = [];

  let statusHistory =  cts.search(cts.andQuery([
            cts.collectionQuery('Collection1'),
            cts.collectionQuery('Collection2'),
            //cts.collectionQuery('Collection3'),
            cts.elementWordQuery(fn.QName('http://www.testing.com/ads/JDEdwards/wostatushistory', 'F1DOCO'), workOrder)
        ])); 

  if(fn.count(statusHistory) <= 0) return "";

  let builder;
  let doc = new NodeBuilder();
  doc.startElement('StatusHistory');

  for (const item of statusHistory) {

    builder = new NodeBuilder();
    builder.startElement('StatusHistory');

    //Audit
    builder.addElement('UpdatedBy',sfh.ensureStringResult(fn.normalizeSpace(hl.elementText(item, "F1USER", true))));
    builder.addElement('UpdatedDate',sfh.ensureStringResult(fn.normalizeSpace(hl.elementText(item, "F1UPMJ", true))));


    //Status
    let statusCode = fn.normalizeSpace(hl.elementText(item, "F1EWST", true));
    builder.addElement('StatusCode',sfh.ensureStringResult(statusCode));
    builder.addElement('StatusDesc',sfh.ensureStringResult(getUDCDescription("00", "SS", statusCode)));

    builder.addElement('StatusEffectiveDate',sfh.ensureStringResult(fn.replace(fn.normalizeSpace(hl.elementText(item, "F1EFTB", true)),"/","-")));
    builder.addElement('StatusEndDate',sfh.ensureStringResult(fn.replace(fn.normalizeSpace(hl.elementText(item, "F1EFTE", true)),"/","-")));

    builder.endElement();
    doc.addElement('StatusHistory', builder.toNode().xpath('/node()').toString());

  }

  doc.endElement();

  return doc.toNode();
  //return status;
}

ProjectSpecificData元素位于http://testing.com/ads/project命名空间中,但您没有在上下文路径中引用该命名空间。 尝试:

<tde:template xmlns:tde="http://marklogic.com/xdmp/tde">
    <tde:context>//es:headers/ads:ProjectSpecificData/fwe:WorkOrderStatusHistory/fwe:StatusHistory/fwe:StatusHistory</tde:context>
    <tde:path-namespaces>
        <tde:path-namespace>
            <tde:prefix>es</tde:prefix>
            <tde:namespace-uri>http://marklogic.com/entity-services</tde:namespace-uri>
        </tde:path-namespace>
        <tde:path-namespace>
            <tde:prefix>ads</tde:prefix>
            <tde:namespace-uri>http://testing.com/ads/project</tde:namespace-uri>
        </tde:path-namespace>
        <tde:path-namespace>
            <tde:prefix>fwe</tde:prefix>
            <tde:namespace-uri>http://testing.com/ads/project/fwe</tde:namespace-uri>
        </tde:path-namespace>
    </tde:path-namespaces>
    ...
</tde:template>


编辑:对评论的响应,以便我可以使用格式:

由于您在获取值时遇到问题,因此您的路径可能仍有问题。 在查询控制台中直接使用路径比在TDE中更容易处理。 在QC中,设置以下内容:

declare namespace es = "http://marklogic.com/entity-services";
declare namespace ads = "http://testing.com/ads/project";
declare namespace fwe = "http://testing.com/ads/project/fwe";

let $doc := (: your doc :)
let $context := $doc//es:headers/ads:ProjectSpecificData/fwe:WorkOrderStatusHistory/fwe:StatusHistory/fwe:StatusHistory
return $context

你有什么回报吗? 如果是这样,很酷,现在尝试返回您想要的各个数据。 如果没有,开始从上下文路径的末尾删除元素,直到你这样做,然后找出路径的错误。

完成后,您应该能够正确地获得TDE模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM