6

我正在编写一个 java 服务,我正在构建输出文档。但我的结构应该是:OutPut Doc 是顶级文档。在里面我想让另一个文档说中间文档,在这个中间文档中我想要键值。

但我的问题是如何将一个文档插入另一个文档。我看到 IDataUtil 有 put 方法,它要求将键作为字符串,值可以是对象。

我的代码是IDataUtil.put(idcvalueDoc, "Body", FullValue.toString());

但是这个正文不应该是字符串,它应该是文档。我想将一个文档插入另一个文档。

请帮我

输出文档结构的图像

4

4 回答 4

7

要完成您所追求的,您需要执行以下操作:

  1. 创建一个intermediateDoc IData 对象
  2. 根据需要将键值元组添加到intermediateDoc
  3. 创建一个 outputDoc IData 对象
  4. 将 middleDoc 作为键值元组添加到 outputDoc
  5. 将 outputDoc 添加到管道

下面是一个示例 Java 服务,它演示了这一点(请注意,为方便起见,添加到 middleDoc 的键值元组在此处进行了硬编码):

public static final void exampleService(IData pipeline) throws ServiceException {
  IDataCursor pipelineCursor = pipeline.getCursor();

  try {
    // create an intermediateDoc IData object
    IData intermediateDoc = IDataFactory.create();
    // create a cursor to use to add key value tuples to the intermediateDoc
    IDataCursor intermediateCursor = intermediateDoc.getCursor();
    // add key value tuples as required to the intermediateDoc
    IDataUtil.put(intermediateCursor, "key1", "value1");
    IDataUtil.put(intermediateCursor, "key2", "value2");
    // ...
    // destroy the intermediateCursor when done adding key value tuples
    intermediateCursor.destroy();

    // create an outputDoc IData object
    IData outputDoc = IDataFactory.create();
    // create a cursor to use to add key value tuples to the outputDoc
    IDataCursor outputCursor = outputDoc.getCursor();
    // add the intermediateDoc to the outputDoc
    IDataUtil.put(outputCursor, "intermediateDoc", intermediateDoc);
    // destroy the outputCursor when done adding key value tuples
    outputCursor.destroy();

    // add the outputDoc to the pipeline
    IDataUtil.put(pipelineCursor, "outputDoc", outputDoc);
  } finally {
    // destroy the pipelineCursor
    pipelineCursor.destroy();
  }
}
于 2014-04-09T22:15:04.033 回答
1

假设和设计输入/输出

假设

  1. 文档ValuesInput[]是输入,Values[]与输出相同。
  2. DocumentcolumnValue 下的 DocumentValuesInput[] 具有名为的字符串变量additionalString如果 Document 内部/下没有变量,这将毫无意义

所以整体会是这样的:

输入/输出文件

当然,您可以在设计输入/输出后通过右键单击鼠标生成代码并生成代码 -> 用于实现此服务。

代码生成

但是,我没有使用生成的代码,而是尝试给出一个 IDataMap 示例,您可以在 webMethods Javadoc 中找到该示例com.softwareag.util.IDataMap。使用起来非常方便

数据映射

IDataMap结合了IDataIDataCursorIDataUtil和的功能IDataFactoryIDataMap实现了java.util.Map来自 Java Collections Framework 的接口,提供了一个熟悉且简单的接口。IDataMap扩展 Map 接口,添加getAs<Type> 方法,将返回值转换为特定类型。

它是这样的:

public static final void mapDocument(IData pipeline) throws ServiceException
{
    // pipeline input by IDataMap
    IDataMap pipelineMap = new IDataMap(pipeline);

    // extracting Values input into IData[] variable array
    IData[] ValuesInput = pipelineMap.getAsIDataArray("ValuesInput");

    // Initiate OutDoc.Values length based on ValuesInput length
    IData[] Values = new IData[ValuesInput.length];

    // OutDoc.Values
    // Iterate and copying all ValuesInputDoc into OutDoc.Values
    for (int i = 0; i < ValuesInput.length; i++)
    {
        Values[i] = IDataUtil.clone(ValuesInput[i]);
    }

    // OutDoc
    IData OutDoc = IDataFactory.create();
    IDataMap outDocMap = new IDataMap(OutDoc);

    // OutDoc IDataMap
    String TableName = "TableName is Never assigned";
    outDocMap.put("TableName", TableName);

    // OutDoc.Values
    outDocMap.put("Values", Values);

    // Wrap the OutDoc into pipeline
    pipelineMap.put("OutDoc", OutDoc);

}

结果

结果

于 2017-12-27T11:46:37.103 回答
0

使用wmboost-data库,您可以编写以下代码:

public static final void exampleService(IData pipeline) throws ServiceException {

    Document outputDoc = Documents.create();

    Document intermediateDoc = outputDoc.docEntry("intermediateDoc").putNew();      
    intermediateDoc.entry("key1").put("value1");
    intermediateDoc.entry("key2").put("value2");

    Documents.wrap(pipeline).entry("outputDoc").put(outputDoc);
}

编码:

  1. 创建顶级文档outputDoc
  2. 创建middleDoc作为嵌套文档(另一种方法是独立创建它并稍后将其附加到其父级)
  3. 将条目值分配给intermediateDoc
  4. outputDoc添加到管道

免责声明:我是 wmboost-data 的作者。

于 2017-02-28T00:32:25.613 回答
-1

只需检查 WmPublic 包中的以下任何内容是否有帮助:

pub.list:appendToDocumentList

或者

pub.document:insertDocument
于 2014-04-09T06:24:17.670 回答