2024年1月24日发(作者:)
Delphi Client端数据包发送接收处理说明
1> 自定义报文简介
以不定长字符流方式设计。报文结构大致可理解为报文头+报文体,最小单位以“NAME:VALUE”对的型式, NAME、VALUE都以各自的长度为前缀;一条典型的发送报文如下所示:
009MessageID:00574606:013TransactionID:005BOKFS:
003///:0011:003ROW:0011:003COL:0014:010Packeduser:003LHY:010packedtime:0192006-06-06 10:29:37:004flag:001Y:009accessory:0011:
003///:0012:003ROW:0011:003COL:0017:009IMPRESTNO:5721:008inittime:0192006-06-16 15:30:04:009CompanyID:003ITC:
011Companytype:001A:009payamount:0041936:012actualamount:0041936:008category:006帐单:003$$$
解析说明:
NAME
Length
009
013
006
008
008
003
003
003
010
010
004
009
......
003
NAME
MessageID
TransactionID
Err_ID
Err_DESC
Err_DESE
///
ROW
COL
Packeduser
packedtime
flag
accessory
$$$
Req?
Y
Y
返回报文Y
返回报文Y
返回报文Y
如有内容Y
如有内容Y
如有内容Y
N
N
N
N
Y
VALUE
Length
005
005
003
004
007
001
001
001
003
019
001
001
VALUE
74606
BOKFS
000
成功
Success
1
1
4
LHY
2006-06-06 10:29:37
Y
1
说明
报文头,报文ID
报文头,交易ID
出错ID,000为成功,
异常中文描述
异常英文描述
报文体,组号符
报文体,行数
报文体,列数
报文体,内容值
报文体,内容值
报文体,内容值
报文体,内容值
报文结束符
进
一条典型的返回报文如下所示:
009MessageID:00573936:013TransactionID:013COMSQL_SELECT:006Err_ID:003000:008Err_DESC:004正确:008Err_DESE:002OK:
003///:0011:003ROW:0013:003COL:0012:008CTN_TYPE:002GS:020CTN_TYPE_DESCRIPTION:009普通箱[3]:008CTN_TYPE:002TN:020CTN_TYPE_DESCRIPTION:006罐状箱:008CTN_TYPE:002UT:020CTN_TYPE_DESCRIPTION:006开顶箱:003$$$
★请解析说明?
注意:返回报文必须要带有错误信息Err_ID、Err_DESC、Err_DESE。
2> 报文收发流程
主流程相关函数 Send_ComSql_Select () Send_ComSql_Update () Send_Transaction_Package ()功能子窗体组织需发送的请求数据 xt ()主窗体发送请求数据子窗体句柄、接收数据容器进入等待队列;加锁子窗体 Push () UnEnableForm ()主窗体接收返回数据 eText ()主窗体收到返回数据后拼包 CreateReceivePackage ()否是否报文尾是子窗体解锁,子窗体句柄、接收数据容器出队列 Pop () Enableform ()解析报文;分组;返回数据装入接收数据容器 DisPackage()
ReceivedPackageToGrid ()执行窗体Execute
(),显示返回的数据集 Execute ()
3> 发送接收报文关键函数介绍:
发送Select型简单Sql函数:
Send_ComSql_Select(const Comsql:string; //要发送的SQL查询语句
AForm:TForm; //当前发送的窗口
var ResultGrid:TstringGrid; //返回的错误信息(1行3列)
var ADASGrid: TDASG; //返回的查询结果集
const ExecuteNo:integer); // Execute () 执行序号
ResultGrid的结构:
返回代码(Err_ID)
000
001-099
100-199
200-999
003
英文描述(Err_DESE)
ok
SystemError
DataBaseError
transactionError
timeout
中文描述(Err_DESC)
操作成功
系统级错误
数据库级错误
业务级错误
连接超时
一次发送多条Select型Sql函数:
Send_ComSql_Select(const Comsql: TDAS; //要发送的SQL查询语句(String数组)
AForm: TForm;
var ResultGrid: TstringGrid;
var ADASGrid: TDASG; //查询结果集(StringGrid数组)
const ExecuteNo: integer;
var ACmb_FieldName: TCombobox); // ComboBox可以不用
发送Update型简单Sql(执行 update ,delete,insert类型的SQL语句):
Send_ComSql_Update(const Comsql:string;
AForm:TForm;
var ResultGrid:TstringGrid; //返回的错误信息(1行3列)000
const ExecuteNo:integer);
发送Transaction数据包(执行有事务性控制的交互如:存储过程、多表更新、批量更新)
Send_Transaction_Package(const TransactionID: string; //交易ID
AForm: TForm; //当前发送的窗口
var ResultGrid: TstringGrid; // 返回的错误信息(1行3列)
var FdataGrid: TDASG; //返回的查询结果集
const ExecuteNo: integer; //Execute () 执行序号
const TransactionStr: string = 'Null'); //发送字符串(报文体)
(从003///到003$$$的报文体)
发送Transaction数据包 (不带结果集)
Send_Transaction_Package(const TransactionID: string;
AForm: TForm;
var ResultGrid: TstringGrid;
const ExecuteNo: integer;
const TransactionStr: string);
典型的Transaction介绍
TransactionID : COMSP (调用存储过程,使用第一种Send Transaction)
TransactionStr : 003///:0011:003ROW:0011:003COL:00213:
006SPNAME:025SP_SHP_TRANSRF_VESSELLIST:
005PARA1:001T:009PARA1TYPE:008VARCHAR2:
005PARA2:003N/A:009PARA2TYPE:008VARCHAR2:
005PARA3:005ERRID:009PARA3TYPE:008VARCHAR2:
005PARA4:007ERRDESC:009PARA4TYPE:008VARCHAR2:
005PARA5:007ERRDESE:009PARA5TYPE:008VARCHAR2:
005PARA6:004DATA:009PARA6TYPE:004CLOB:
TransactionID : COMSQL_UPDATETRANS(多表/批量更新,使用第二种Send Transaction)
TransactionStr : 003///:0011:003ROW:0013:003COL:0011:
009SQLUPDATE: [ Length + SQL ] :
009SQLUPDATE: [ Length + SQL ] :
009SQLUPDATE: [ Length + SQL ] :
把当前界面上Tag标记大于0的StringGrid内容组织成发送报文
FormSend (const Form1: TForm;
const De: boolean): string; // 返回组织好的发送报文(报文体)
接收返回数据函数
Execute(var ResultGrid: TStringGrid; // 对应的返回的错误信息集
var ADateGrid: TDASG; //对应的查询结果集(StringGrid数组)
const No: integer) // 执行序号
每个功能子窗体都应有此函数,声明成public ,供主窗体解析返回报文后调用;
4> 代码命名规范
窗体名:必须以“Form”开头后跟该窗体功能的缩略英文描述
单元名:必须以“Unit” 开头后跟窗体名(有窗体的)或功能的缩略英文描述
常用控件名:必须前缀+”_”+缩略英文描述(前缀名见《Delphi 4 code chinese》)
5> 练习
说明:
完成对指定单表的增、删、改、查操作。
要求:
1.严格遵照编码设计规范命名。
2.灵活运用<3>中多种手段实现。


发布评论