没有合适的资源?快使用搜索试试~ 我知道了~
首页CICS高级编程.doc
资源详情
资源评论
资源推荐

第四章 高级编程................................................................................................................................1
第一节 CICS 服务程序的相互调用..........................................................................................1
1.1 一个调用其它服务程序的例子...................................................................................1
1.2 跨域调用其它服务程序...............................................................................................5
第二节 CICS 事务的作用域......................................................................................................7
第三节 深入 CICS 编程.............................................................................................................9
3.1 CICS API 简介..............................................................................................................9
3.2 SFS 的应用.................................................................................................................12
3.3 使用 ECI......................................................................................................................18
第四章 高级编程
相对其它的软件产品,CICS 可谓历史悠久,因此也就有非常丰富的内涵和
开发手段。本章所讲解的所谓“高级编程”,不过是为了引导熟悉 EasyCICS 的程
序员再深入地了解一些 CICS 而已。
我听到很多用户抱怨说,Microsoft Word 提供了几千种功能,可一般人只用
几十种就够了,为什么要付钱去那些不用的功能?其实,大多数成熟的软件产
品都难以避免这样的尴尬问题。不过,有时,靠软件吃饭的使用者倒可以从反
面考虑一下问题:我们如果花费一份时间和精力,学到了某产品 10%的功能,
而满足了自己 80%的需求,往往我们要再花费十份时间和精力,才能学到该产
品 30%的功能,而最终结果是满足了自己 85%的需求。这样的买卖未必总是划
算的,对吗?当然,如果某种产品对您关系重大,还是要认真钻研一下。如果
您是这样的读者,我要再强调本书仅仅能把您引进 CICS 的大门,并提供给您
一些十分有效的手段。每种 CICS 产品都附带大量的联机文档,这些文档能为
您深入学习 CICS 提供很多帮助。俗语道:师傅领进门,修行在个人。
第一节 CICS 服务程序的相互调用
1.1 一个调用其它服务程序的例子
如 果 您 读 完 并 理 解 了 本 章 以 前 的 所 有 内 容 , 那 您 已 经 是 非 常 不 错 的
EasyCICS 程序员了。您应该很熟悉 CICS 的客户程序如何调用 CICS 的服务程
1

序,对了,调用 CallProgramAndCommit 函数。有人曾经问我 CICS 的客户程序
是否可以调用 CICS 的客户程序,当然不行,因为如果仅仅是客户的话,是不
能接受和应答任何请求的,请再复习一下 Client/Server 系统机构的概念。但与
其它 Client/Server 系统类似,CICS 的服务程序确实可以调用 CICS 的服务程序。
我们来看一个简单的例子。有两个非常简单的服务:EC04 和 EC05。EC04
基本上什么事都不做,只调用 EC05,并根据 EC05 返回的信息设置返回值。而
EC05 把当前的日期和时间写到公共数据区里。以下是它们的代码:
/*****************************************************************************/
/*-------------------------- HEADER FILES -----------------------------------*/
#include "easycics.h"
/*****************************************************************************/
/*--------------------------- Global Variables ------------------------------*/
char Ca1[BUF_SIZE]="";
/*****************************************************************************/
/*Functions*/
/*****************************************************************************/
/*
*/
void main(){
char s[100];
if( InitEasyCics() ) ExitEasyCics();
SetCurrentCA(Ca1);
BeginWrite();
CallProgram( "EC05" );
GetValue( "TIME5", s );
SetCurrentCA(0);
BeginWrite();
2

SetValue( "TIME5", s );
ExitEasyCics();
}
清单 4-1-1 服务程序 EC04
/*****************************************************************************/
/*-------------------------- HEADER FILES -----------------------------------*/
#include <time.h>
#include "easycics.h"
/*****************************************************************************/
/*Functions*/
/*****************************************************************************/
/*
*/
void main(){
struct tm *newtime;
time_t aclock;
if( InitEasyCics() ) ExitEasyCics();
BeginWrite();
time( &aclock ); /* Get time in seconds */
newtime= localtime( &aclock ); /* Convert time to struct tm form */
SetValue( "TIME5", asctime(newtime) );
PrintStatus( "TIME5" );
ExitEasyCics();
}
清单 4-1-2 服务程序 EC05
我们可以用 WSH(Windows Scripting Host)作一个最简单的客户程序来访问
EC04。以下是代码清单:
3

set oEc = Wscript.CreateObject("EasyCics.App")
r = oEc.ConnectServer("CICSNT01", "TEST", "TEST")
if r<>0 then
MsgBox "can't connect"
else
oEc.BeginWrite
oEc.CallProgramAndCommit "EC04"
MsgBox oEc.GetValue("TIME5"), 64, "Answer From CICS"
end if
清单 4-1-3 EC14 的客户程序
运行的结果如下:
图 4-1-1
我们研究一下这几个程序的代码。EC04 的客户程序和 EC05 服务程序都是
极其普通的,现在把 EC04 服务程序讲解一下:
“SetCurrentCA(Ca1);”的作用是切换当前的公共数据区到 Ca1,这样以后针
对公共数据区的操作(GetValue/SetValue 和 RsOpen/RsCreate 等)都集中到 Ca1 上。
可以类似客户程序那样调用服务程序 EC05,但只能使用 CallProgram 函数。后
面调用的“SetCurrentCA(0);”含义是切换当前的公共数据区到原本的公共数据区。
了解了这些,其它的代码就一目了然了。
需要了解的是,我们这里使用的切换公共数据区函数,只是为了适应更复
杂的情况,在 EC04,并非是必须的。我们可以把 EC04 精简到下面的样子:
/*****************************************************************************/
/*-------------------------- HEADER FILES -----------------------------------*/
#include "easycics.h"
/*****************************************************************************/
/*--------------------------- Global Variables ------------------------------*/
4

char Ca1[BUF_SIZE]="";
/*****************************************************************************/
/*Functions*/
/*****************************************************************************/
/*
*/
void main(){
char s[100];
if( InitEasyCics() ) ExitEasyCics();
BeginWrite();
CallProgram( "EC05" );
ExitEasyCics();
}
清单 4-1-1 精简的 EC04
1.2 跨域调用其它服务程序
如果在同一个 CICS 域(region)中,一个服务程序调用另一个服务程序看来
十分简易。但如果调用不同的域中的服务程序,就要做一些设置工作。我们大
体有两种最简单的办法。
无论使用哪种办法,我们都必须先建立两个域的相互连接,这是通过相互
设置对方的通信(communication)资源来完成的。应注意以下几点:
1. 互相通信的两个域名称和 SYSID 应不相同;
2. (对 UNIX 和 NT 系统,)一般把通信资源的 Connection Type 设置为 CICS
TCP/IP;
3. (对 UNIX 和 NT 系统,)一般把通信资源的 Remote APPLID 或 Remote LU
Name 设置为对方的域名称。
5
剩余32页未读,继续阅读









kissm0re
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- ARM Cortex-A(armV7)编程手册V4.0.pdf
- ABB机器人保养总结解析.ppt
- 【超详细图解】菜鸡如何理解双向链表的python代码实现
- 常用网络命令的使用 ipconfig ping ARP FTP Netstat Route Tftp Tracert Telnet nslookup
- 基于单片机控制的DC-DC变换电路
- RS-232接口电路的ESD保护.pdf
- linux下用time(NULL)函数和localtime()获取当前时间的方法
- Openstack用户使用手册.docx
- KUKA KR 30 hA,KR 60 hA机器人产品手册.pdf
- Java programming with JNI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论1