You are on page 1of 26

内部文件:机密

SOP 技术手册

联想金融事业部

2003-5-14
1. 概述 .......................................................................................................................................................... 1
1.1 SOP 总体特点 ............................................................................................................................... 1
1.2 SOP 组成总体介绍 ....................................................................................................................... 1
2. SOP 总体设计 ......................................................................................................................................... 2
2.1 SOP 系统平台配置方案 ............................................................................................................... 2
2.1.1 运行平台 ........................................................................................................................... 2
2.1.2 操作系统 ........................................................................................................................... 2
2.1.3 数据库产品 ....................................................................................................................... 2
2.1.4 中间件平台 ....................................................................................................................... 2
2.2 SOP 功能总体设计 ....................................................................................................................... 2
2.2.1 运行支持功能 ................................................................................................................... 2
2.2.2 开发支持功能 ................................................................................................................... 3
3. SOP 设计要点介绍 ................................................................................................................................. 3
3.1 基于数据库的交易资源定义........................................................................................................ 3
3.1.1 交易资源概述 ................................................................................................................... 3
3.1.2 域字段 Tranfld ............................................................................................................. 4
3.1.3 表格 FORM ........................................................................................................................ 4
3.1.4 对象 OBJECT.................................................................................................................... 5
3.1.5 交易接口定义 ................................................................................................................... 6
3.1.6 交易信息定义 ................................................................................................................... 6
3.2 交易资源参数表结构说明 .............................................................................................................. 6
3.2.1 概述....................................................................................................................................... 6
3.2.2 数据字典描述表 psjzd.......................................................................................................... 7
3.2.3 对象描述表 pobms ............................................................................................................... 8
3.2.4 FORM 描述表 pfmms............................................................................................................ 8
3.2.5 交易输入输出描述表 pjyjk.................................................................................................. 9
3.2.6 交易描述表 pjyxx............................................................................................................... 10
3.2.7 构件描述信息 cdtbl ............................................................................................................ 10
3.3 交易数据的组织与解析.............................................................................................................. 11
3.3.1 报文概述 ......................................................................................................................... 11
3.3.2 交易与平台的交互 ......................................................................................................... 11
3.3.3 报文的操作接口 ............................................................................................................. 11
3.4 后端驱动前台.............................................................................................................................. 12
3.5 数据池共享数据.......................................................................................................................... 12
3.5.1 数据池概述 ..................................................................................................................... 12
3.5.2 参数区............................................................................................................................. 13
3.5.3 用户数据区存储(交易缓存区) ................................................................................. 13
3.5.4 数据池的监控 ................................................................................................................. 14
3.5.5 用户数据区的两种模式 ................................................................................................. 15
3.6 开关量控制.................................................................................................................................. 15
3.6.1 开关量概念 ..................................................................................................................... 15
3.6.2 开关量维护 ..................................................................................................................... 15
3.6.3 开关量使用 ..................................................................................................................... 16
3.7 公共变量设置.............................................................................................................................. 16
3.7.1 公共变量 Comfld 概念................................................................................................. 16
3.7.2 公共变量 Comfld 维护................................................................................................. 16
3.7.3 公共变量 Comfld 使用................................................................................................. 18
3.8 交易流量控制................................................................................................................................ 18
3.8.1 交易流量控制的目的 ......................................................................................................... 18
3.8.2 交易流量控制的使用 ......................................................................................................... 18
3.9 SOP 通讯模块和交易处理模式 ................................................................................................. 18
3.9.1 概述................................................................................................................................. 18
3.9.2 通讯模块特点 ................................................................................................................. 19
3.9.3 交易处理模式 ................................................................................................................. 20
4. SOP 交易调度模块 ............................................................................................................................... 20
4.1 交易调度流程.............................................................................................................................. 21
4.2 外部挂接程序.............................................................................................................................. 22
4.2.1 SopGetJioyrq............................................................................ 错误!未定义书签。
4.2.2 SopGetJioysj............................................................................ 错误!未定义书签。
4.2.3 SopBeforeTran ......................................................................... 错误!未定义书签。
4.2.4 SopAfterTran............................................................................ 错误!未定义书签。
4.2.5 SopBeforeSubTran .................................................................. 错误!未定义书签。
4.2.6 SopAfterSubTran.................................................................................. 错误!未定义书签。
1. 概述

《SOP 技术手册》主要讲述 SOP 的产品设计、技术要点,介绍通讯、报文处理、交易调度、数


据加密等主要模块,适合 SOP 的运行维护人员使用,有关 SOP 使用的更多内容可以参阅《SOP 使用
手册》、《SOP 平台工具使用手册》。
SOP 提供面向构件的开发工具 IDE,可以方便的定义、开发一个银行业务,下面会多次提到利用
IDE 完成一些配置工作,有关 IDE 的使用在《SOP 平台工具使用手册》中详细地进行了讲解。

1.1 SOP 总体特点


·实现组合交易
·支持交易间调用
·参数化配置
·面向对象的报文设计,输出对象可以动态组合
·后台配置票据打印
·支持 TUXEDO
·后台驱动前端
·交易实时监控
·系统功能可以动态调整

1.2 SOP 组成总体介绍

COP前端柜员录入系统 ATM/POS 电话银行 网银等外围外挂系统

IPP大前置系统

SOP通讯模块 TCPTEST/TCPSVR/TUXEDO等中间件

SOP交易调度模块

SOP报文处理模块
SOP 零售 对公 贷款 外汇 结算 现金等业务系统
SOP加密模块

SOP 公共信息/数据池

SOP监控模块SOPSVR 数据库服务器

地址:北京市海淀区上地创业中路 32 号(100085) 1
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
在整个业务系统中,COP 负责前端数据的输入输出、凭证打印;IPP 实现各种渠道的接入,包
括 COP 和各种外围外挂系统;SOP 通讯模块接收 COP 和 IPP 发来通讯请求,SOP 调度模块调用报
文处理模块进行数据转换,并在数据池中申请注册交易缓冲区,把解报后的交易数据放入数据池的
交易换冲区,然后根据报文中的交易码调用相应的交易。
SOP 的信息调度中心是公共信息/数据池(下面简称数据池),数据池存放交易的各种配置信息、
数据字典以及通讯报文数据。
每个交易都是从数据池中取得交易输入数据,处理结束后,又把输出数据放入数据池中;SOP
交易调度模块等交易处理完后,就调用报文处理模块从数据池中读取交易的输出数据,并从数据池
的参数区中读取交易对象的控制信息和打印信息,把这些对象的属性和输出数据一起组织成多个输
出对象并形成输出报文,交给通讯模块发给 COP 或 IPP,完成一次交易处理。
SOP 监控模块 sopsvr 主要负责数据池的加载、管理以及服务进程的调度、监控,它和业务进
程通过数据池来共享信息。

2. SOP 总体设计

2.1 SOP 系统平台配置方案

2.1.1 运行平台
联想 SOP 产品可以选择支持各种 Unix 的小型机做为运行平台,具体的选择可以根据客户的需求来
决定。

2.1.2 操作系统
SOP 采用 ANSI C 编程,支持多种主流的操作系统平台,如 IBM AIX,HP_UX 等,具有很强的适
应性、开放性。

2.1.3 数据库产品
SOP 可以支持多种主流的关系数据库产品。
一般情况下,可以选用 Informix 7.3 以上版本

2.1.4 中间件平台
支持目前比较流行的中间件产品,如 BEA 公司的 TUXEDO。

2.2 SOP 功能总体设计

2.2.1 运行支持功能
● 提供灵活多样的通讯模块,适应不用客户的需求,要支持各种中间件产品
● 报文处理透明化,参数配置,独立于交易
● 支持报文的多纪录输入、输出,支持多交易报文一起发送,报文中可以自动加入打印、控制等配
置信息,可以把前台部分逻辑控制统一到后台管理
● 交易报文面向对象化设计和组织,同一交易可以有多种不同的输出保文
● 支持打印对象,对票据打印可以在后台配置打印位置,不用编写打印程序
● 交易调度高效灵活,提供交易前、交易后处理,可以方便地增加修改处理功能
● 支持组合交易
● 支持交易间调用,增加了交易的可重用性,减少了交易的编写,增加了系统的稳定性,在储蓄模

地址:北京市海淀区上地创业中路 32 号(100085) 2
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
块中得到大量应用
● 开关量、公共变量设计,可以方便构件间信息的共享和系统功能的动态调整、灵活增加
● 适时的监控功能,对交易进行超时和流量控制,处理 core dump 的交易,监控系统运行情况
● 对开发环境和生产环境提供不同的运行模式,开发模式下每个开发人员的交易单独连接、运行、
启动,不会影响他人
● 支持静态连接和动态连接两种方式
● 和大前置系统(IPP)方便连接,通过大前置实现多种渠道的接入

2.2.2 开发支持功能
提供 IDE 开发工具
● 交易的配置
● 生成交易框架
● 生成标准构件

3. SOP 设计要点介绍

3.1 基于数据库的交易资源定义

3.1.1 交易资源概述
SOP 的交易资源配置包括交易信息、交易接口、对象 OBJECT、表格 FORM、数据字典 Tranfld,
都是建立在数据库上面,如下图所示:

交易信息

交易接口
数据库
对象

表格

数据字典

SOP 的交易报文由 Tranfld、FORM、OBJECT 组成。为了实现高效性,SOP 在生产运行的时


候,会把这些交易的资源定义装入到公共信息/数据池中,常驻内存,使用时直接从数据池中读取。
所以修改这些信息后,必须重新启动平台或者用 sopldpara 重新装入数据池才能生效。
SOP 的报文基于数据域单元(TRANFLD),在 TRANFLD 的基础上形成表格(FORM 即 SOP 格式

地址:北京市海淀区上地创业中路 32 号(100085) 3
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
相同的多条记录的复合资料单元),TRANFLD 与 FORM 一起组成一个对象(OBJECT)。

3.1.2 域字段 Tranfld


域是组成前端输入画面的最小单位,也是报文中的最小单位,下面讲到的表格和对象都是由它
组成的。Tranfld 的定义在数据库中存放,每个交易都可以直接使用这些定义,所以在 SOP 中把
它们称为数据字典。数据字典一般很少改动,由专人负责,通过文本文件进行维护,使用专门的工
具同步到数据库表 psjzd 中。为了提高系统的高效性,SOP 在生产运行的时候,会把数据字典装
入到公共信息/数据池中,常驻内存。所以修改数据字典后,必须重新启动平台或者用 sopldpara
重新装入数据字典才能生效。
数据字典的维护文件在$HOME/src/dict/dict.txt 中,同步数据库的工具为 crtdict.
下面是域字段的图例:

域字段Tranfld
域字段Tranfld

帐号

对应物理
公司名称 屏幕的字
段,是对
现实的抽

3.1.3 表格 FORM
如下图所示表格由多条记录组成,每条记录包含一个以上域字段。

地址:北京市海淀区上地创业中路 32 号(100085) 4
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
表格 FORM
表格FORM

帐号 帐号名称 帐户金额
二维表格

表格的增加和修改可以通过 IDE 方便地进行,存放在 pfmms 表中。

3.1.4 对象 OBJECT
如下图所示对象由域字段和表格组成,是前端画面的显示单位,也是报文的组织单位,SOP 报
文面向对象设计,一个交易可以有多个输出对象、多个输出画面。每个输出对象就对应一个输出画
面,SOP 通过输出对象来控制前端输出画面是否显示和打印,实现后台驱动前台的设计。对象的定
义可以通过 IDE 来维护,存放在数据库表 pobms 中。

地址:北京市海淀区上地创业中路 32 号(100085) 5
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
对象 OBJECT
对象OBJECT

查询科目

帐号 帐号名称 帐户金额
复合数据
结构,是
输入/输出、
输入/
通信包组
织的基本
单元

3.1.5 交易接口定义
交易接口定义了交易有哪些输入对象和输出对象、对象类型(显示还是打印),是 SOP 组织报
文的依据,存放在数据库表 pjyjk 中。

3.1.6 交易信息定义
交易信息定义了交易代码、交易名称、交易运行允许的时间段、交易超时时间、交易是否允许
等信息,是 SOP 对交易进行控制的依据,存放在 pjyxx 中。

3.2 交易资源参数表结构说明

3.2.1 概述
交易资源参数表如下:
Psjzd 数据字典描述表
Pobms 对象描述表
Pfmms FORM 描述表
Pjyjk 交易输入输出描述表
Pjyxx 交易信息
另外 IDE 中要求开发交易时先要定义交易的模块信息,在 cdtbl 表中保存,如果没定义会提示先定义
交易构件信息。

数据表之间的关系为(>表明依赖关系):
pjyxx>pjyjk>pobms>pfmms>psjzd
在 IDE 中定义、开发一个新的交易信息时,要按照下图中的顺序执行:

地址:北京市海淀区上地创业中路 32 号(100085) 6
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
定义、开发交易的流程

数据 生成
表格 对象 交易 交易
字典 pfmms pobms
cdtbl 信息 接口
框架
psjzd 程序

3.2.2 数据字典描述表 psjzd

3.2.2.1 数据字典表结构
功能描述:描述应用系统的所涉及的数据字段类型及长度
字段名称 字段类型 字段说明 取值范围及说明
fieldname char(10) 数据项
reference char(10) 参考字段
comment char(40) 描述信息 描述该数据项的含义(一般用中文表示)
datatype char(1) 平台数据类型 DNnSLQH
typeflag char(1) 用做以后的扩展
Length smallint 数据项长度 定义的数据项的缺省长度
Scale smallint 数据项的精度 说明小数精度
sequence smallint 顺序号 标明数据项的先后顺序,不可重复

索引:
唯一索引 psjzd_idx1 字段 fieldname
需要特别指出的是:在开发过程中,psjzd 应避免经常变动,要尽量使用已经存在的数据字典,控制
数据字典的急剧增长,提高字段的查找效率和降低数据字典的记忆难度。
注意数据字典是在$HOME/src/dict/dict.txt 中维护的,一定不要操作 psjzd 这张表,这里只是介绍一下
表结构。

3.2.2.2 数据字典维护
在$HOME/src/dict/dict.txt 中配置,支持 short long double string 四种数据类型,有下面几种数据
类型的描述符:
● n---short
● N---Long

地址:北京市海淀区上地创业中路 32 号(100085) 7
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
● P---double
● A---str
● S---str
● Q---str(8) 日期
● O---str
● R---引用已经存在的字段
dict.txt 文件如下:
LJZQJE R REFFLD(JIOYJE) 累计支取金额
ZHHUSX A 1 帐户属性 #一位字符
ZHHUYE P 15 2 帐户余额 #表示总共 15 位,2 位小数
ZHHUXZ A 4 帐户性质 #4 位字符串
JZHBBZ A 1 记帐货币标记

3.2.3 对象描述表 pobms


功能描述:存放应用系统定义的对象描述信息
字段名称 字段类型 字段说明 取值范围及说明
objname char(10) 对象名称 目前不能超过 6 个字符,如 O93011
comment char(40) 描述 描述对象
fieldname char(10) 对象元素 必须在 psjzd 或 pfmms 中有描述
fieldtype char 数据来源 ‘p’—数据单元,’f’—form
sequence smallint 顺序号 表明先后顺序,与打包顺序一致
device char 输出设备 目前只有三种输出: ‘P’ —打印机, ’W’
—终端窗口,’M’—磁条
screenx smallint 输出 x 坐标 打印对象使用
screeny smallint 输出 y 坐标 打印对象使用
printstyle char(2) 打印输出模式 描述打印字体:具体格式见说明,取值范
围在“01”-“40”之间
turnmode char(1) 转换模式 0-不转换 1-转换为大写金额 2-转换为列
表中的内容 3- 日期型转换为大写打印
4-数值型为 0 值不打印
lboxname char(16) 列表名称
printline smallint 目前不用
pkgtype char
通信包类型 目前不用
pkglength smallint
通信包中的数据长 目前不用

pkgscale smallint 通信包中数据精度 目前不用
pkgalign char 对齐方式 目前不用
pkgfill char 填充值 目前不用
pkgdefault char(20) 缺省值 目前不用
pkgcrypt char 加密标志 目前不用
转换模式是在 SOP 定义维护的,COP 从后台取得对象中域的转换模式,会自动地把输出对象中域的
值进行转换。
sequence 必须定义,否则可能引起前后台的报文顺序不一致,造成报文的错误。
索引:
pobms_idx1 字段 objname,fieldname

3.2.4 FORM 描述表 pfmms

地址:北京市海淀区上地创业中路 32 号(100085) 8
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
功能描述:存放应用系统定义的 Form 信息
字段名称 字段类型 字段说明 取值范围及说明
formname char(10) Form 名称 目前为 6 位字符
fieldname char(10) Form 数据项 必须在 psjzd 中有描述
sequence smallint 顺序号 表明先后顺序,与打包顺序一致
screenx smallint 输出 x 坐标
screeny smallint 输出 y 坐标
printstyle char(2) 打印输出模式 描述打印字体:具体格式见说明,取值范
围在“01”-“40”之间
turnmode char(1) 转换模式 0-不转换 1-转换为大写金额 2-转换为列
表中的内容 3- 日期型转换为大写打印
4-数值型为 0 值不打印
lboxname char(16)
列表名称
pkgtype char 通信包类型 目前不用
pkglength smallint
通信包中的数据长 目前不用

pkgscale smallint 通信包中数据精度 目前不用
pkgalign char 对齐方式 目前不用
pkgfill char 填充值 目前不用
pkgdefault char(20) 缺省值 目前不用
pkgcrypt char 加密标志 目前不用
转换模式是在 SOP 定义维护的,COP 从后台取得对象中域的转换模式,会自动地把输出对象中域的
值进行转换。
Sequence 必须定义,否则可能引起前后台的报文顺序不一致,造成报文的错误。

索引:
pfmms_idx1 字段 formname,fieldname

3.2.5 交易输入输出描述表 pjyjk


功能描述:存放交易的输入输出信息
字段名称 字段类型 字段说明 取值范围及说明
trancode char(4) 交易代码 标识交易
transubcode char(4) 交易子代码 保留
fieldname char(10) 对象名称 必须在 pobms 中有描述
iotype char 输入输出类型 ‘i’—输入,’o’—输出
fieldtype char 数据字段类型 目前不用
sequence smallint 顺序号 表明先后顺序,与打包顺序一致
device char 输出设备 目前只有三种输出: ‘P’ —打印机, ’W’
—终端窗口,’M’ 磁条读写器
screenx smallint 输出 x 坐标 打印对象使用
screeny smallint 输出 y 坐标 打印对象使用
printstyle char(2) 打印输出模式 描述打印字体:具体格式见说明,取值范
围在“01”-“99”之间
pkgtype char 通信包类型 目前不用
pkglength smallint 通信包中的数据长 目前不用

pkgscale smallint 通信包中数据精度 目前不用
pkgalign char 对齐方式 目前不用

地址:北京市海淀区上地创业中路 32 号(100085) 9
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
pkgfill char 填充值 目前不用
pkgdefault char(20) 缺省值 目前不用
pkgcrypt char 加密标志 目前不用

索引:
pjyjk_idx1 字段 trancode,fieldname,iotype
pjyjk_idx2 字段 trancode,sequence

3.2.6 交易描述表 pjyxx


功能描述:存放交易描述信息
字段名称 字段类型 字段说明 取值范围及说明
trancode char(4) 交易代码
transubcode char(4) 交易子代码 保留
comment char(20) 交易名称 说明交易的具体含义
progname char(10) 程序名称 目前不用
attribute char 交易属性 是否允许交易运行,’0’—禁止,’1’—允

transaction char 事务标志 交易是否起事务,’0’—无事务,’1’—有
事务
trantype char(1) 交易类型 在交易流量控制中使用
starttime integer 交易起始时间 长整数存储,121212 含义:12 时 12 分
12 秒。0 表示无此限制
endtime integer 交易终止时间 长整数存储,121212 含义:12 时 12 分
12 秒。0 表示无此限制
timeout smallint 交易超时时间 以秒为单位

索引:
pjyxx_idx1 字段 trancode

3.2.7 构件描述信息 cdtbl


IDE 工具中用于确定程序的目录,在运行中不使用。
字段名称 字段类型 字段说明 取值范围及说明
cptname char(20) 交易构件名称 t+交易码,如 t9301
cpttype char(1) 构件类型 t-交易构件(transaction);
comment char(40) 交易名称 说明交易的具体含义
cptsubdir char(10) 二级模块目录 模块名称,如 gy-柜员
cptsrcpath char(50) 程序存放路径 如 src/tran/gy/9301
productstate char 产品所处状态 保留
IDE 自动生成程序框架时,要根据输入的信息确定程序存放的路径。

地址:北京市海淀区上地创业中路 32 号(100085) 10
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
3.3 交易数据的组织与解析

3.3.1 报文概述
前后台的数据组织采用面向对象的方法,实现了显示对象、打印对象的划分,支持票据打印的
后台定义,避免了传统方式前台控制打印的繁杂,支持组合交易,方便业务人员的操作,减少了开
发的工作量。
报文参数化配置,依赖数据字典等资源定义,实现自动字段类型转换、网络序转换,自动解报到
数据池中供交易读写.

3.3.2 交易与平台的交互
SOP 和交易之间通过数据池来传递通讯数据报文。如下图所示:COP 或 IPP 传来的报文首先被
SOP 通讯模块接受,接着报文处理模块对报文进行解报、数据转换并放入数据池中;交易调用自动
生成的报文处理函数(一般自动生成在*io.ec 程序中)就可以读写交易数据了。

交易报文的传递与处理

通讯模块 SOP数据池交易 *io.ec


COP/IPP 交易
缓存区
tuxedo

读取配置信息

SOP数据池
参数区

交易程序可以用 IDE 自动生成,有关交易的报文数据结构、报文处理函数、编译脚本也一起自


动生成,当修改输入输出字段时,只要重新生成一下框架,并用 sopldpara 重装内存就可以了。

3.3.3 报文的操作接口
下面是 SOP 提供的报文操作接口函数,一般不用关心怎样使用,因为报文处理的函数都是 IDE 自动
生成好的。
int ReadTranfld(char *aczName, void *pbyValue)
int WriteTranfld(char *aczName, void *pbyValue)
int WriteForm(char *formname, short recordno,char *fldname,void
*value)

地址:北京市海淀区上地创业中路 32 号(100085) 11
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
int ReadForm(char *formname,short recordno,char *fldname,void
*value)
int ReadObj(char *aczObjName,char *aczFormName,short sRcdNo,char
*aczFldName,void *pbyValue)
int WriteObj(char *aczObjName,char *aczFormName,short sRcdNo, char
*aczFldName,void *pbyValue)

3.4 后端驱动前台
后台驱动前台的含义是:由后台来告诉前台需要进行什么动作,例如:后台告诉前台输入画面
的各种要素,后台通知前台需要显示一个返回画面,后台告诉前台需要进行一次打印等等。

后端驱动前台

SOP COP

显示对象 屏幕显示
输出报文

打印对象 票据打印

磁卡对象 读写磁道

对象的引入就是为了解决后台如何告诉前台的问题。一个对象就好比一个动作,动作可以是一
个画面的显示,打印一个凭证或者读写一张磁卡。因为所有交易的输入信息都来自于一个动作(输
入画面),所以我们约定一个交易的输入只能定义一个显示对象,而一个交易的输出则可能包含很多
动作,因此任何交易的输出信息都可以定义为多个对象。
对象由两种要素组成,一种要素是属性,例如:输入对象/输出对象、打印对象/显示对象;一
种要素是对象的数据内容,例如:显示画面中的帐号、客户号、金额等要素。为了能够明确表达对
象的数据内容,系统中引入了 FORM、TRANFLD 等概念。
当前台收到 SOP 的报文时,首先要读取报文对象,然后根据对象的属性(打印、显示、磁卡)
进行相应的屏幕显示或打印操作,如果没有对象了就停止处理。
后台驱动驱动前台也部分地应用到程序的开发上,也是以 SOP 为主,先在 IDE 中统一生成、维
护交易的所有配置信息,然后使用 sopdown 工具下载到前台,前台的 coptools 会根据后台的配
置生成前台的报文 map 文件和屏幕控制的 xml 文件。这样的开发方式减少了前台的开发和维护工作,
由后台驱动驱动前台开发的进行。

3.5 数据池共享数据

3.5.1 数据池概述

地址:北京市海淀区上地创业中路 32 号(100085) 12
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
数据池设计的目的:
● 将频繁使用的参数表提前装入内存中,使用时直接对内存读写,以便实现高速检索;
● 提供开关量,实现对交易系统功能的动态调整;
● 提供公共变量,可以方便的增加又不用修改编译所有程序,尤其方便项目开发后期增加一些功能;
● 平台与交易之间的数据共享;
● 实现交易报文的参数化配置,实现报文的灵活组织,在数据池中完成打印对象的装配
● 实现对交易进程池的监控和维护;
SOP 的数据池如下面图示包括以下主要内容:

全局索引结构
开关量区
参数区

流量控制表
进程描述区
HASH索引区
数据字典区
Comfld数据区
FORM存储区
交易缓存区

对象存储区
用户数据区1

….
用户数据区n

在平台初始启动的时候将所有的参数从数据库中装入共享内存中,所有的参数均是在开发平台
上定义。SOP 的数据池主要由参数区和交易缓冲区组成,参数区存放公共信息,交易区传递交易报文.

3.5.2 参数区
参数区与交易的信息无关,是所有的进程共享的,主要包括:
● 开关量存储区:开关量是 SOP 提供的用于进行全局状态控制的特殊数据结构,开关量只有两种
状态:开、关;
● 交易流量控制表:
● 进程描述区:每个 SOP 交易服务进程对应一条信息,相当于操作系统中的进程描述表,描述了
每个 SOP 服务进程的服务信息,存储位置等信息;
● HASH 索引区:为了提高效率,SOP 采用了多种多种查找算法,其中包括 HASH 算法;
● TRANFLD 描述信息
● COMFLD 描述信息
● FORM 描述信息
● OBJECT 描述信息

3.5.3 用户数据区存储(交易缓存区)

地址:北京市海淀区上地创业中路 32 号(100085) 13
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
每个进程资料区,进程资料区是跟随交易的,主要存储交易报文数据,它包括:
● TRANFLD 区:数据单元存储区,存储所有的数据单元的值
● COMFLD:公共变量区,是基础构件与交易构件共享的数据区域
● 表格存储区:存储每个构件所使用表格的资料及表格内容。
● 对象存储区:存储每个构件所使用的对象资料及对象内容

交易缓存区的内容

交易1 交易2 …信息索引


Comfld1 comfld2 … 数据区

tranfld1 tranfld2 … 数据区

Obj1 obj2 … 数据区

form1 form2 … 数据区

3.5.4 数据池的监控
SOP 监控进程负责内存空间的使用状况,回收空间、处理异常超时、CORE DUMP 等。

SOP对交易的监控

数据池进程描述区
登记状态信
交易服务进程1 息
交易服务进程1
的描述信息

… …
交易服务进程n 交易服务进程n
的描述信息

Sopsvr监控服务进程状态

地址:北京市海淀区上地创业中路 32 号(100085) 14
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
3.5.5 用户数据区的两种模式
在正式生产模式下,服务进程是常驻内存的,每个服务进程启动时即分配固定的空间;一般的
开发模式下,每个进程使用的空间是动态分配的。

3.6 开关量控制
SOP 提供不同层次的变量设置
● 域 Tranfld 是面向交易的,由各个交易进行配置,表示的是输入输出画面中的域,是报文中的基
本单元
● 公共变量 Comfld 也是作用于交易进程空间的,在交易和记账核心之间传递信息,它是在
$RUNDIR/etc/commfld.conf 中统一定义的;
● 开关量 Sysfld 是作用于整个业务系统的,在所有的进程空间中都生效,一般打开一个开关就会
开启系统一个功能,如日志纪录功能,报文记录功能;

3.6.1 开关量概念
SOP 提供一种开关量的机制,可以在业务系统运行的过程中,在不停止系统的情况下,对一些
特殊业务或特殊情况进行控制。
开关量类似于 unix 中的环境变量,但当程序在后台运行的时候,修改环境变量对后台运行的程
序不生效。为了能够在联机方式下,动态的调整系统功能,SOP 在数据池中设计了一种特殊的数据结
构,可以动态的更改内容,并在所有进程间共享,通过不同的值来通知相应的进程执行不同的功能,
这就是开关量.

3.6.2 开关量维护
SOP 的开关量可以在$RUNDIR/etc/sw.conf 中方便地增加、修改,修改后要重新装入数据
池(sopldpara)才对运行着的业务系统生效。目前沈阳商行项目的开关量配置文件如下:
#############################################
#### this is a switch config file #######
# PLBZ 0 - 联机交易
# 1 - 批处理交易
# JFJSBZ 0 - 角分不计算积数
# 1 - 角分计算积数
# SHOQJB 0 - 0 级以上
# 1 - 1 级以上
# 2 - 2 级以上
# QXJCBZ 0 - 后台不需要权限检查
# 1 - 后台需要进行权限检查
# PLQSFS 0 - 区分本代它/它代本科目
# 1 - 不区分
# WEIXKG 0 - 对公凭证分散管理
# 1 - 对公凭证集中管理
#############################################
EAFG 外部帐户开关 1
PSST 对公通存开关 1
PEST 对公通兑开关 1

地址:北京市海淀区上地创业中路 32 号(100085) 15
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
DSTCKG 对私通存开关 1
DSTDKG 对私通兑开关 0
CBST 尾箱交接开关 1
SAST 子帐号开关 1
LJYXBZ 联机交易标志 1
XZBZ 现转标志 1
0ALWD 0 金额记帐允许标志 1
JRZHBZ 记登记簿日志标志 1
XJYRBZ 写交易 log 标志 1
WIDA 写输入接口数据 1
LXZC 利息支出经由应付利息标志 1
WEIXKG 尾箱标志 0
PLQSFS 批量清算方式 0
QXJCBZ 权限检查标志 0
SHOQJB 授权级别 2
JFJSBZ 角分滚积数与否标志 0
PLBZ 批量标志 0

3.6.3 开关量使用
读取开关量函数:
int ReadSysfld(char *aczName,unsigned char *pcValue)
输入参数:
aczName -- 开关量名字
pcValue -- 返回值
返回值:
成功 --- SUCCESS
失败 --- FAIL

3.7 公共变量设置

3.7.1 公共变量 Comfld 概念


公共变量类似 C 中的全局变量,但它还可以方便的增加,直接进行读写,不用修改编译所有程序,
在记账核心中大量使用.
公共变量是在内存池中进行存储的,在文本文件或数据库表中进行维护.

3.7.2 公共变量 Comfld 维护


SOP 的 Comfld 可以在$RUNDIR/etc/commfld.conf 中方便地增加、修改,修改后要重新
装入数据池(sopldpara)才对运行着的业务系统生效。目前沈阳商行项目的 Comfld 配置文件如
下:
###########################################
## commfld 配置文件
## 根据此文件生成公共变量在内存中的描述
## 必须严格按照规定格式来修改此文件:filedname 中文描述
## 用空格分隔,中文描述不能为空

地址:北京市海淀区上地创业中路 32 号(100085) 16
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
## 修改此文件后,重新启动平台才能生效
##########################################
ZHYYJG 帐户营业机构
SHJBCD 数据包长度
YNDIZH 源地址
MBIODZ 目标地址
BOLIUW 保留位
XXJSBZ 信息结束标志
SJBSXH 数据包顺序号
JIOYBZ 检验标志
JIOYNZ 校验值
ZHNGDH 终端号
CHSHDM 城市代码
YNGYJG 营业机构号
JIO1GY 交易柜员
YYCWDM 应用错误代码
CWJYXH 错误交易序号
JIOYRQ 交易日期
JIOYSJ 交易时间
GUIYLS 柜员流水号
JIAOYM 交易码
LDJYDM 联动交易码
JIOYXH 交易序号
JIOYMS 交易模式
JYSJCD 交易数据包长度
PNYIL1 temp
PNYIL2 temp
SHOQMM 授权密码
SHOQGY 授权柜员
XIOZXH 销帐序号
RZHZXH 日志子序号
RIZHXH 日志序号
LJYXBZ 联机交易允许标志
ZHNGJG 帐务机构号
CHPZXH 传票组序号
CPZNXH 传票组内序号
KYNGJE 可用金额
JIOYZM 交易子码
KEHUZH 客户帐号
KHZHLX 客户帐号类型
PNGZHH 凭证号
ZHANGH 帐号
PTCWDH eusp 错误代号

地址:北京市海淀区上地创业中路 32 号(100085) 17
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
WAIHBZ 外汇标志
HUOBDH 货币代号
KEHZWM 客户中文名
JRZHBZ 记日志标志
SJDJXH 事件登记序号
QANTLS 前台流水号
JYQSSJ 交易起始时间

SOP 还提供数据库表(pggbl)方式的 Comfld 存放,不过目前不建议使用了。

3.7.3 公共变量 Comfld 使用


int ReadComfld(char *aczName,void *pbyValue)
int WriteComfld(char *aczName,void *pbyValue)
输入参数:
aczName -- 开关量名字
pbyValue -- 返回值
返回值:
成功 --- SUCCESS
失败 --- FAIL

3.8 交易流量控制

3.8.1 交易流量控制的目的
● 对处理时间比较长的交易控制只能在空闲的时间段(如中午)运行
● 对一些模糊查询的交易限制运行的次数,防止大量的消耗系统资源,防止造成交易堵塞

3.8.2 交易流量控制的使用
在$RUNDIR/etc/flux.conf 中配置
###############################################################
### 流量控制信息表 ###
### 格式:每行 5 个字段,从左往右依次为,字段间空格分隔 ###
### 交易种类(1 个字符) 名称(8 个汉字) 最大允许服务数 ###
### 起始时间段 终止时间段 ###
###############################################################
3 TEST 100 120101 130000
上面的配置说明交易种类为 3 的所有交易,在一个服务进程中累计的处理最大为 100 次,只能
在 12:01:01 到 13:00:00 之间运行。
如果重新启动平台,处理此数重新计算;如果现在系统中有 20 个服务进程,那交易种类为 3 的
所有交易总共可以运行 2000 次。在开发模式下没有流量的次数控制。
交易种类在 pjyxx 由 trantype(交易类型)配置,可以为 0-9

3.9 SOP 通讯模块和交易处理模式

3.9.1 概述

地址:北京市海淀区上地创业中路 32 号(100085) 18
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
SOP 提供基于 TCP/IP 方式的通讯模块,并且支持 TUXEDO 等中间件产品,通讯模块可以方便
地切换。
由于业务开发阶段和正式生产运行阶段有着不同的要求,SOP 可以提供不同的交易处理模式,
结合不同的通讯处理方式,方便了开发阶段程序的调试,又保证了生产环境对性能的要求。

3.9.2 通讯模块特点
SOP 通讯基于 Socket 编程,提供了一种简单的 fork 方式调用每个可执行的独立的交易,通
过管道把报文传递给交易进程,交易进程动态的连接数据池。每个交易的执行都是一个单独的进程,
保证了每个开发人员编译连接、重新生效自己的交易不会停掉所有的交易服务,提高了开发的效率。
开发模式的不同对程序开发人员是透明的,SOP 可以方便的把业务系统生成到生产环境。

开发方式下的通讯处理

COP/IPP来的报文

tcptest在公开端口(如4000)接受请求

父进程继续接受请求 Fork子进程

写入
子进程

数 调用交易可执行程序
据 管道
池 读出
具体的交易进程

在正式的生产环境下,SOP 的通讯模块预先派生多个服务进程,形成服务进程池,服务进程
与数据池和数据库都是长连接,每个交易请求上来,SOP 会自动分配服务进程来处理请求;SOP 对
服务进程池进行动态调度和监控,根据不同的交易负载,动态调整服务进程池中服务进程的个数,
限定最大最小服务进程数,对超时进程、死循环或 core dump 进程进行处理。
正式的生产环境,还支持 TUXEDO 等中间件产品,可以方便的切换。

地址:北京市海淀区上地创业中路 32 号(100085) 19
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
生产方式下数据池和进程池的连接

交易数据区1 服务进程1
… …
交易数据区n 服务进程n

3.9.3 交易处理模式

3.9.3.1 开发模式(又称静态联接模式)
每个交易连接成一个可执行程序,开发人员可以方便的修改、连接、生效程序,用 buildt 重
新连接可执行程序。
开发模式不能支持组合交易,开发模式下的通讯模块是 tcptest.

3.9.3.2 生产模式(又称动态联接模式)
把所有的交易编译成动态库,SOP 利用动态加载调用交易,重新修改连接交易后,只有重新启
动服务才能生效,不利于多人开发调试。
SOP 的通讯模块为 tcpsvr,目前在绵阳商行、扬州商行中应用。
TUXEDO 应用中交易的服务器是 tuxsvr,服务是 RUNSERVER.
两种通讯方式下,都是由 SOP 进行进程的调度和监控。

4. SOP 交易调度模块

在 SOP 中,交易调度是很重要的一个部分,在 SOP 中处于核心的位置,对交易编制者屏蔽了


底层的细节,并且可与多种中间件很方便的连接。
在本章中,对交易调度的工作流程做一个简单的介绍,而且 SOP 的交易调度提供开放的外挂
接口,应用的开发者可以很方便的将自己的特殊应用挂接在交易系统中。
平台提供的程序是最基本的框架程序,在实际的开发过程中,开发人员可以根据需要通过外挂
程序增加特殊的应用,为了统一代码结构,增加的这部分程序也应该放在同一目录
($RUNDIR/build)下,如果有增加需修改 makefile。
交易调度提供出来的外挂程序接口是所有交易均要调用的程序,因此虽然平台提供了这样的机
制,但是对于增加外挂功能,还是应该很慎重,对于挂接进来的程序应该认真考虑系统的效率问题。

地址:北京市海淀区上地创业中路 32 号(100085) 20
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
4.1 交易调度流程
交易调度程序的流程如下:
进入交易调度
初识化数据池交易缓冲区(comfld 区 tranfld 区)
解包系统输入头
解包交易输入公共头
开始事件控制(exec sql begin work)
###调用用户程序获取交易日期(SopGetJioyrq)
{
获取应用系统的工作日期;
将取得的日期存入到 COMFLD JIOYRQ 中
}
###调用用户程序获取交易时间(SopGetJioysj)
{
获取应用系统的工作时间;
将取得的日期存入到 Comfld 的 JIOYSJ 中;
###调用用户交易前动作(SopBeforeTran)
{
初始化可用金额 KYNGJE,用于交易后的平衡检查;
检查联机交易是否允许;
}
WHILE()
{
检查是否已经达到数据包的尾(是否还有交易需要处理)
解包交易头
读入交易码
载入交易信息到数据池交易缓冲区
检查交易是否允许(在交易信息中定义)
检查交易时间段设置
解包交易数据,装入交易缓冲区;
###调用用户子交易前动作(SopBeforeSubTran)
{
检查柜员权限
{
查询交易控制表
查询柜员表,检查柜员是否签到、柜员的状态是否正常
程授权检查
根据开关量控制,进行后台权限检查
}
外围业务替换营业机构号
{
读交易控制表 判断该交易是否需要作换机构号处理;

地址:北京市海淀区上地创业中路 32 号(100085) 21
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
如果 ZCZHZD 为空,不需要替换交易机构号;
根据柜员号取柜员属性;
判断当前交易是否需要转换营业机构号通过柜员属性来判断;
根据转出帐号字段 ZCZHZD 取得客户帐号,然后根据客户账号取得客户帐类型;
根据 KHZHLX 来转换机构号,写到 Comfld:YNGYJG 中. 一般通过卡号,活期一本通号,
定期一本通号, 老系统帐号, 对公帐号/内部帐号/表外帐号取得新的营业机构号;

}
}
判断流量是否达标(在$RUNDIR/etc/flux.conf 中定义)
%%%调用交易程序(txxxx)
###调用用户子交易后动作(SopAfterSubTran)
{
写交易日志
{
计算交易后台处理时间(Comfld:JYQSSJ);
查询交易结束处理;
察看交易控制表 pjykz,检查是否需要金额检查;
纪录交易日志 pjyrz。
}
}
组织输出交易数据(读取交易缓冲区)
判断数据包中是否已无交易数据;
初识化 Tranfld 空间
}
###调用用户交易后动作(SopAfterTran)
{
帐务的平衡检查(Comfld KYNGJE);
}
如果出错,则出错处理
组织交易输出公共头数据
组织交易输出系统头数据
结束事件控制(commit/rollback)
返回

在交易调度程序中,###号部分系统提供了用户接口,用户可通过修改相应接口程序来增加、
减少和修改交易调度模式。

4.2 外部挂接程序
本系统的用户程序存放在$SOPDIR/build 下,该目录是不能删除的,否则系统升级将不能正
常运行。通过外部挂接程序增加了系统的灵活性。
在系统初始安装之后,系统提供的挂接程序只是一个框架,需要在开发过程中充实完善它。这

地址:北京市海淀区上地创业中路 32 号(100085) 22
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com
部分程序放在 sopusrprog.ec 中。

地址:北京市海淀区上地创业中路 32 号(100085) 23
电话:(010)62988888 传真:(010)62987195/96 公司网址://www.lenovo.com

You might also like