搜索

55.7. IDoc 的消息正文

download PDF

55.7.1. IDoc 消息类型

当使用 IDoc Camel SAP 端点之一时,消息正文的类型取决于您使用的特定端点。

对于 sap-idoc-destination 端点或 sap-qidoc-destination 端点,消息正文为 Document 类型:

org.fusesource.camel.component.sap.model.idoc.Document

对于 sap-idoclist-destination 端点、sap-qidoclist-destination 端点或 sap-idoclist-server 端点,消息正文为 DocumentList 类型:

org.fusesource.camel.component.sap.model.idoc.DocumentList

55.7.2. IDoc 文档模型

对于 Camel SAP 组件,IDoc 文档使用 Eclipse Modeling Framework (EMF)进行建模,它提供了一个围绕底层 SAP IDoc API 的 wrapper API。这个模型中最重要的类型是:

org.fusesource.camel.component.sap.model.idoc.Document
org.fusesource.camel.component.sap.model.idoc.Segment

文档类型 代表 IDoc 文档实例。另外,文档 界面会公开以下方法:

// Java
package org.fusesource.camel.component.sap.model.idoc;
...
public interface Document extends EObject {
    // Access the field values from the IDoc control record
    String getArchiveKey();
    void setArchiveKey(String value);
    String getClient();
    void setClient(String value);
    ...

    // Access the IDoc document contents
    Segment getRootSegment();
}

以下方法通过 文档 界面公开:

访问控制记录的方法
大多数方法是访问或修改 IDoc 控制记录的字段值。这些方法的格式是 AttributeName,其中 AttributeName 是字段值的名称。
访问文档内容的方法

getRootSegment 方法提供对文档内容(IDoc data 记录)的访问,将内容返回为 Segment 对象。每个 Segment 对象可以包含任意数量的子片段,网段可以嵌套为任意程度。

但请注意,网段层次结构的确切布局由文档的特定 IDoc 类型定义。在创建(或读取)网段层次结构时,您必须遵循 IDoc 类型定义的精确结构。

Segment 类型用于访问 IDoc 文档的数据记录,其中片段会根据文档 IDoc 类型定义的结构更宽松。另外,S eg ment 接口会公开以下方法:

// Java
package org.fusesource.camel.component.sap.model.idoc;
...
public interface Segment extends EObject, java.util.Map<String, Object> {
    // Returns the value of the '<em><b>Parent</b></em>' reference.
    Segment getParent();

    // Return an immutable list of all child segments
    <S extends Segment> EList<S> getChildren();

    // Returns a list of child segments of the specified segment type.
    <S extends Segment> SegmentList<S> getChildren(String segmentType);

    EList<String> getTypes();

    Document getDocument();

    String getDescription();

    String getType();

    String getDefinition();

    int getHierarchyLevel();

    String getIdocType();

    String getIdocTypeExtension();

    String getSystemRelease();

    String getApplicationRelease();

    int getNumFields();

    long getMaxOccurrence();

    long getMinOccurrence();

    boolean isMandatory();

    boolean isQualified();

    int getRecordLength();

    <T> T get(Object key, Class<T> type);
}

getChildren (String segmentType) 方法对向片段添加新的(嵌套)子项特别有用。它返回一个类型为 SegmentList 的对象,它定义如下:

// Java
package org.fusesource.camel.component.sap.model.idoc;
...
public interface SegmentList<S extends Segment> extends EObject, EList<S> {
    S add();

    S add(int index);
}

因此,要创建 E1SCU_CRE 类型的数据记录,您可以使用类似如下的 Java 代码:

Segment rootSegment = document.getRootSegment();

Segment E1SCU_CRE_Segment = rootSegment.getChildren("E1SCU_CRE").add();
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.