O3W中间件应用

Web页面跳转控制文件G1CControl.xml

<ControlDefinition>
    <ControlId>G1CControl</ControlId>
    <DefaultDSID>DSG1CControl</DefaultDSID>
    
    <ControlProcess>
        <PageId description="初期画面">NoPageID</PageId>
        <ActionId>NoActionID</ActionId>
        <NextPage>
            <NextPageId>G2</NextPageId>
            <NextPageJSPPath>G2.jsp</NextPageJSPPath>
        </NextPage>
    </ControlProcess>

    <ControlProcess>
        <PageId description="G2画面">G2</PageId>
        <ActionId buttonName="Action1">Action1</ActionId>
        <PLTr>C1</PLTr>
        <NextPage>
            <ProcRet description="正常">0</ProcRet>
            <NextPageId>G4</NextPageId>
            <NextPageJSPPath>G4.jsp</NextPageJSPPath>
        </NextPage>
        <NextPage>
            <ProcRet description="error">8</ProcRet>
            <NextPageId>G5</NextPageId>
            <NextPageJSPPath>G5.jsp</NextPageJSPPath>
        </NextPage>
    </ControlProcess>

    <ControlProcess>
        <PageId description="G3画面">G3</PageId>
        <ActionId buttonName="Action1">Action1</ActionId>
        <PLTr>C1</PLTr>
        <NextPage>
            <ProcRet description="正常">0</ProcRet>
            <NextPageId>G4</NextPageId>
            <NextPageJSPPath>G4.jsp</NextPageJSPPath>
        </NextPage>
    </ControlProcess>

    <ControlProcess>
        <PageId description="G2画面">G2</PageId>
        <ActionId buttonName="Action2">Action2</ActionId>
        <PLTr>C1</PLTr>
        <NextPage>
            <ProcRet description="正常">0</ProcRet>
            <NextPageId>G2</NextPageId>
            <NextPageJSPPath>G2.jsp</NextPageJSPPath>
        </NextPage>
    </ControlProcess>
</ControlDefinition>

事务请求数据(Transaction Request Data)G1C_TRD_Def.xml

<?xml version="1.0" encoding="Windows-31J"?>
<!-- 作成者:XXX,作成日:YYYYMMDD -->
<DispatchDef>
    <Tr_Def PLTrID="C1" DSBCheck="False">
        <BETr_Def BETrID="P1" ConnectorName="ConnectBean" TrType="seq"/>
    </Tr_Def>
</DispatchDef>
  1. 主要结构:
    • 根元素为 <DispatchDef>
    • 包含一个 <Tr_Def> 元素,属性:
      • PLTrID="C1" (流程跟踪ID)
      • DSBCheck="False" (DSB检查标志)
  2. 业务事务定义:
    • <BETr_Def> 元素定义业务事务,属性:
      • BETrID="P1" (业务事务ID)
      • ConnectorName="ConnectBean" (连接器名称)
      • TrType="seq" (事务类型为顺序执行)

Transaction Request Data
表示事务请求数据,需要处理事务的中间件(如消息队列、交易处理系统)。


数据交换(Data Exchange)DSG1C_DEX_Def.xml

<?xml version="1.0" encoding="Windows-31J"?>
<!-- 作成者:XXX,作成日:YYYYMMDD -->
<ExchangeDef>
    <BETrInfo BETrID="P1">
        <TrLayoutID InLayoutID="C1U" OutLayoutID="C1D" InFormat="COBOL_AIFA-AIK" OutFormat="COBOL_AIFA-AIK"/>
        <ConnectInfo>
            <ConnectInfoItem InfoName="SG_Name" Info="P1G"/>
            <ConnectInfoItem InfoName="S_Name" Info="P1"/>
        </ConnectInfo>
    </BETrInfo>
</ExchangeDef>
  1. 主要结构:
    • 根元素为 <ExchangeDef>
    • 包含一个 <BETrInfo> 元素,属性:
      • BETrID="P1" (业务事务ID)
  2. 布局信息:
    • <TrLayoutID> 元素定义输入输出布局,属性:
      • InLayoutID="C1U" (输入布局ID)
      • OutLayoutID="C1D" (输出布局ID)
      • InFormat="COBOL_AIFA-AIK" (输入格式)
      • OutFormat="COBOL_AIFA-AIK" (输出格式)
  3. 连接信息:
    • <ConnectInfo> 包含两个连接信息项:
      • SG_Name="P1G" (服务组名称)
      • S_Name="P1" (服务名称)
  • Data Exchange
    表示数据交换,中间件的数据同步或集成功能(如文件交换中间件)。

上行电文C1U.xml

<?xml version="1.0" encoding="Windows-31J"?>
<!-- 作成者:XXX,作成日:YYYYMMDD -->
<TRLAYOUTDEF>
    <TRLAYOUTHDR>
        <TRID ItemType="X" ItemSize="8" value="C1U"/>
        <RETCD ItemType="X" ItemSize="4"/>
        <MSGCD ItemType="X" ItemSize="3"/>
    </TRLAYOUTHDR>
    <FMTDEF>
        <iData1 ItemType="X" ItemSize="13" DsbColName="iData1" DsbColJpName="iData1Name"/>
    </FMTDEF>
</TRLAYOUTDEF>
  1. 主要结构:

    • 根元素为 <TRLAYOUTDEF>
    • 包含两部分:
      • <TRLAYOUTHDR> - 事务布局头信息
      • <FMTDEF> - 格式定义部分
  2. 事务布局头信息:

    • <TRID> - 事务ID
      • ItemType="X" (数据类型)
      • ItemSize="8" (数据长度)
      • value="C1U" (具体值)
    • <RETCD> - 返回码
      • ItemType="X"
      • ItemSize="4"
    • <MSGCD> - 消息码
      • ItemType="X"
      • ItemSize="3"
  3. 格式定义:

    • <iData1> - 数据项1
      • ItemType="X"

      • ItemSize="13"

      • DsbColName="iData1" (DSB列名)

      • DsbColJpName="iData1Name" (DSB列日文名)

下行电文C1D.xml

<?xml version="1.0" encoding="Windows-31J"?>
<!-- 作成者:XXX,作成日:YYYYMMDD -->
<TRLAYOUTDEF>
    <TRLAYOUTHDR>
        <TRID ItemType="X" ItemSize="8" value="C1D"/>
        <RETCD ItemType="X" ItemSize="4"/>
        <MSGCD ItemType="X" ItemSize="3"/>
    </TRLAYOUTHDR>
    <FMTDEF>
        <OData1 ItemType="X" ItemSize="13" DsbColName="oData1" DsbColJpName="oData1Name"/>
        
        <DataGroup1 Group="G" DsbColJpName="DataGroup1Name"/>
            <OData4 ItemType="X" ItemSize="13" DsbColName="oData4" DsbColJpName="oData4Name"/>
        
        <DataGroup2 Group="G" DsbColJpName="DataGroup2Name"/>
            <OData2 ItemType="9" ItemSize="6" Figure="6" DecimalPlace="0" DsbColName="oData2" DsbColJpName="oData2Name"/>
            <OData3 ItemType="9" ItemSize="10" Figure="10" DecimalPlace="0" DsbColName="oData3" DsbColJpName="oData3Name"/>
    </FMTDEF>
</TRLAYOUTDEF>
  1. 主要结构:
    • 根元素为 <TRLAYOUTDEF>
    • 包含两部分:
      • <TRLAYOUTHDR> - 事务布局头信息
      • <FMTDEF> - 格式定义部分
  2. 事务布局头信息:
    • <TRID> - 事务ID
      • ItemType="X" (字符类型)
      • ItemSize="8" (长度8)
      • value="C1D" (具体值)
    • <RETCD> - 返回码
      • ItemType="X"
      • ItemSize="4"
    • <MSGCD> - 消息码
      • ItemType="X"
      • ItemSize="3"
  3. 格式定义:
    • 包含多个数据项和两个数据组:
      • OData1: 字符类型,长度13
      • DataGroup1: 数据组1
        • 包含OData4: 字符类型,长度13
      • DataGroup2: 数据组2
        • 包含OData2: 数字类型,长度6,6位整数
        • 包含OData3: 数字类型,长度10,10位整数
  4. DSB相关属性:
    - 每个数据项都有DsbColName(DSB列名)和DsbColJpName(DSB列日文名)属性

使用业务逻辑来处理用户的请求并返回数据;

  • 如果需要跟外系统交互,那么需要将数据封装为上行电文,发给 OLTP(On-Line Transaction Processing,联机事务处理),OLTP 处理完成后返回下行电文,将下行电文分解后再返回。

COBOL语言来实现业务逻辑功能P1.CBL

123456789012345678901234567890123456789012345678901234567890123456789012
       IDENTIFICATION DIVISION.
       PROGRAM-ID. P1 IS INITIAL PROGRAM.
       AUTHOR. XXX.
       DATE-WRITTEN. YYYY.MM.DD
      * 环境部
       ENVIRONMENT DIVISION.
      * 定义节
       CONFIGURATION SECTION.
      * SOURCE-COMPUTER. HP WITH DEBUGGING MODE.
       SPECIAL-NAMES.
         ENVIRONMENT-NAME IS ENV-NAME
         ENVIRONMENT-VALUE IS ENV-VALUE.
      * 数据部 
       DATA DIVISION.
      * 作业节
       WORKING-STORAGE SECTION.
       01 ARG-AREA.
         COPY "C1.CPY".
         05 C2-ARG.
         COPY "C2.CPY".
         05 C3-ARG.
         COPY "C3.CPY".
       01 CNS-AREA.
         05 CNS-ON-OFF.
           10 CNS-OFF PIC X(1) VALUE "0".
         05 CNS-MSG-LEN PIC 9(9) COMP-5 VALUE 111.
       01 WK-AREA.
         05 WK-ERR-COUNT PIC 9(9).
         05 WK-ERR-COUNT-X REDEFINES WK-ERR-COUNT PIC X(9).
       01 FLG-AREA.
         05 FLG-ERR PIC X(1).
       01 WK-AREA-1  PIC X(003) OCCURS 50.
       01 WK-ID PIC 9(04).
      * 连接节
       LINKAGE SECTION.
      *    输入文件
       01 RPC-IN-REQ-PKT.
         05 IN-AIFA.
         COPY "AIFA.CPY".
         05 IN-USER-ATTR.
         COPY "USER.CPY".
         05 IN-DATA.
         COPY "C1U.CPY".
       01 RPC-IN-LEN-REQ-PKT PIC S9(9) COMP-5.
       
      *    输出文件
       01 RPC-OUT-REQ-PKT.
         05 OUT-AIFA.
         COPY "AIFA.CPY".
         05 OUT-USER-ATTR.
         COPY "USER.CPY".
         05 OUT-DATA.
         COPY "C1D.CPY".
       01 RPC-OUT-LEN-REQ-PKT PIC S9(9) COMP-5.
       
       PROCEDURE DIVISION USING RPC-IN-REQ-PKT, 
                                RPC-IN-LEN-REQ-PKT,
	   							RPC-OUT-REQ-PKT, 
	   							RPC-OUT-LEN-REQ-PKT.
       MAIN-PRC-RTN SECTION.
         PERFORM INIT-RTN.
         IF FLG-ERR = CNS-OFF THEN
           PERFORM TANTAI-CHK-RTN
         ELSE
           CONTINUE
         END-IF.
       MAIN-PRC-EXT.
         EXIT PROGRAM.
       
       INIT-RTN SECTION.
         COPY "C4.CPY".
         IF FLG-ERR = CNS-OFF THEN
           PERFORM SONCHO-INIT-RTN
         ELSE
           CONTINUE
         END-IF.
       INIT-EXT.
         EXIT.
       
       UINIT-RTN SECTION.
         MOVE SPACE TO C2-ARG.
         INITIALIZE C2-ARG.
         MOVE SPACE TO MSG-CD OF RPC-OUT-REQ-PKT.
       UINIT-EXT.
         EXIT.
       
       CHK-4-RTN SECTION.
         IF DATA1 OF IN-DATA = "1" OR DATA1 OF IN-DATA = "2" THEN
           CONTINUE
         ELSE
           MOVE CNS-ON TO FLG-ERR
         END-IF.
       CHK-4-EXT.
         EXIT.
       
       HEAD-RTN SECTION.
         IF MSG-CD OF RPC-OUT-REQ-PKT = SPACE THEN
           EVALUATE APL-RTN-CODE OF COMMON-AREA
             WHEN CNS-APL-RTN-NORMAL
               CONTINUE
             WHEN CNS-APL-RTN-GYOMUERR
               MOVE "E1A" TO MSG-CD OF HEAD OF RPC-OUT-REQ-PKT
             WHEN CNS-APL-RTN-SYSERR
               MOVE "S1A" TO MSG-CD OF HEAD OF RPC-OUT-REQ-PKT
             WHEN OTHER
               CONTINUE
           END-EVALUATE
         ELSE
           CONTINUE
         END-IF.
         
         PERFORM VARYING WK-ID FROM CNS-9-1 BY CNS-9-1
           UNTIL WK-ID > CNS-9-100 OR WK-AREA-1(WK-ID) = SPACE
           IF CODE2(WK-ID2) = WK-AREA-1(WK-ID)
             MOVE CNS-1 TO WK-FLG
           END-IF
         END-PERFORM.
       HEAD-EXT.
         EXIT.
       
       LOG-OUT-RTN SECTION.
         MOVE "1" TO SEONO.
      D  DISPLAY CNS-PGM-NAME " " SEONO.
      D  DISPLAY "MSG-CD = " 
      D      "[" MSG-CD OF RPC-OUT-REQ-PKT "]".
         CALL CNS-A1 USING IN-AIFA
                           OUT-USER-ATTR OF RPC-OUT-REQ-PKT
                           HEAD OF RPC-OUT-REQ-PKT
                           AI-ARG.
       LOG-OUT-EXT.
           EXIT.

RPC-IN-REQ-PKT入站RPC请求数据包

  1. 分解缩写
  • RPC
    Remote Procedure Call(远程过程调用),指外部系统通过网络调用当前节点的服务或函数。
  • IN
    Inbound(入站),表示该请求是由外部发起、传入当前系统的(与OUT/出站相对)。
  • REQ
    Request(请求),标识这是一个请求包(对应响应包可能是RPC-IN-RESP-PKT)。
  • PKT
    Packet(数据包),指网络传输中的原始数据单元。
  1. 组合含义
  • RPC-IN-REQ-PKT 指:
    外部系统向当前服务发起的RPC调用请求数据包,即当前服务接收到的远程调用请求。

RPC-OUT-REQ-PKT:远程过程调用(RPC)的请求数据包

  1. 分解缩写
  • RPC:
    Remote Procedure Call(远程过程调用),指跨网络调用其他节点上的函数或服务。
  • OUT:
    表示 “出站”(Outbound),即从当前系统发起的请求(相对于IN表示入站)。
  • REQ:
    Request(请求),标识这是一个请求数据包(相对于RESP表示响应)。
  • PKT:
    Packet(数据包),指网络传输中的最小数据单元。
  1. 组合含义
  • RPC-OUT-REQ-PKT 的整体含义可能是:
    “出站RPC请求数据包”,即当前系统向外部服务发起RPC调用时构造的网络数据包。

参考

O3W 框架介绍

Object 3Tier Infoworks (简称 O3W)

posted @ 2025-03-27 23:23  kokoasann  阅读(15)  评论(0)    收藏  举报