我正在编写一个java服务,我正在构建输出文档。 但我的结构应该是:OutPut Doc是顶级文档。在里面,我想要另一个Doc说中级文档,在这个中间文档中我想要Key值。
但我的问题是如何将一个文档插入另一个文档。我看到IDataUtil有一个方法,它要求键作为字符串,值可以是对象。
我的代码是IDataUtil.put(idcvalueDoc, "Body", FullValue.toString());
但是这个Body不应该是字符串,它应该是文档。我想将一个Doc插入另一个。
请帮帮我
答案 0 :(得分:6)
要完成您的目标,您需要执行以下操作:
以下是演示此内容的示例Java服务(请注意,为方便起见,在这里对添加到intermediateDoc的键值元组进行了硬编码):
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();
}
}
答案 1 :(得分: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);
}
代码:
免责声明:我是wmboost-data的作者。
答案 2 :(得分:0)
假设
ValuesInput[]
的文档是输入,与输出的Values[]
相同。columnValue
文档下的ValuesInput[]
文档包含名为additionalString
的字符串变量(如果没有变量则没有意义在文件内/下)总的来说会是这样的:
当然,您可以在设计输入/输出后通过右键单击鼠标并生成代码来生成代码 - >用于实现此服务。
但是,我试图用IDataMap给出一个例子,你可以在webMethods Javadoc com.softwareag.util.IDataMap
中找到,而不是使用生成的代码。使用起来非常方便
IDataMap
IDataMap
结合了IData
,IDataCursor
,IDataUtil
的功能, 和IDataFactory
。IDataMap
实现java.util.Map
接口 Java Collections Framework,提供了一个熟悉而简单的方法 接口。IDataMap
扩展了地图界面,添加了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);
}
结果
答案 3 :(得分:-1)
只需检查WmPublic包中的以下任何内容是否有帮助:
pub.list:appendToDocumentList
或
pub.document:insertDocument