深渊野鱼

Blog主题:.net 访问as400 iSeries方案,iSeries编译工具,db2/400性能优化 寻 找 :As400 上海工作
心 态 :不怨天,不尤人,如果我过得不开心,肯定有原因。好心态第一 原 则 :做一个让别人尊敬的中国人
posts - 232, comments - 56, trackbacks - 0, articles - 0

置顶随笔

:) 最近无聊,就学习思维导图。准备应用到小组中,用来作讨论和分析的工具。

/Files/wildfish/myresume.rar

这个demo是我做的求职简历~_~!

posted @ 2006-01-08 18:38 深渊野鱼 阅读(430) | 评论 (2)编辑

2008年5月6日

iframe是一个一个的打开
有时候客户有不同的要求,就必须得用iframe
但是iframe的打开速度实在是那个慢啊,后来搜搜搜,终于发现终极之道-javascipt在body 的onload的时候指定frame的location,发现速度快的不是一般的多.
for example:
 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2<html xmlns="http://www.w3.org/1999/xhtml">
 3<head>  
 4  <script language="javascript" type="text/javascript">
 5        function bodyLoad()
 6        {
 7            mp3.location ="mp3.htm";
 8            myblog.location ="Default.aspx";
 9        }

10    
11    </script>
12
13</head>
14<body onload="bodyLoad();">
15    <iframe border="0" name="mp3" scrolling="no" marginwidth="0" framespacing="0" marginheight="0"
16        frameborder="0" noresize width="100%" height="77px" vspale="0" allowtransparency>
17    </iframe>
18    <iframe border="0" name="myblog" scrolling="no" marginwidth="0" framespacing="0"
19        marginheight="0" frameborder="0" noresize width="100%" height="1200" vspale="0"
20        allowtransparency></iframe>
21</body>
22</html>

posted @ 2008-05-06 14:48 深渊野鱼 阅读(67) | 评论 (1)编辑

2008年1月9日

 如何向远程系统提交命令?
解答 我们知道,在分布式数据处理的环境下,对远程系统上文件内容的操作可以有很多方式,但是如果想简单地在本地对远程系统进行文件管理方面的操作,则可以由一条命令实现:SBMRMTCMD。现在介绍该命令的用法:

1. 首先确保双方系统上的分布式处理服务已启动:
STRTCPSVR SERVER(*DDM)

2. 为目标系统创建DDM文件:
CRTDDMF FILE(Lib/TESTAAA) RMTFILE(Lib/AAA) RMTLOCNAME(s102rncm *IP)
其中:TESTAAA是DDM文件名; AAA是远程系统s102rncm上要操作的文件的名称。

3. 在本地系统上运行文件管理方面的命令,例如:撤消用户USERBBB对文件AAA的所有权限:
SBMRMTCMD CMD('RVKOBJAUT OBJ(LIB/AAA) OBJTYPE(*FILE) USER(USERBBB) AUT(*ALL)') DDMFILE(LIB/TESTAAA)
这样,我们就能很方便地在本地系统上,实现远程系统上文件操作方面的管理。

posted @ 2008-01-09 15:14 深渊野鱼 阅读(92) | 评论 (0)编辑

 RUNRMTCMD命令使用
解答 能够向client access发送命令的系统包括AS/400,VM,AIX以及其他版本的UNIX。

发送的命令应当预先在PC的DOS窗口运行,如果有输出,在把输出内容传送到OS/400并产生相应的spool file(QSYSPRT,使用的print file为QSYSPRT);如果命令本身并不产生输出则也会产生一个spool file,内容是无输出。

从OS/400使用RUNRMTCMD命令性client access发送远程命令。PC端可以同时处理多个命令请求,按接收的顺序运行这些命令。

入局远程命令的目的是运行非交互式命令和程序。交互式命令或WINDOWS程序可以运行,并且看起来好象已经从请求系统运行成功,但可能仍在PC运行并等待与用户进行人机对话。

入局远程命令可以使用TCP/IP和SNA,不适用于IPX。

CWBRXD.EXE 用于使用TCP/IP通信时启动入局远程命令精灵程序。
CWBRXDSD.EXE 用于使用TCP/IP通信时停止入局远程命令精灵程序。
AREXECDW.EXE 用于象PCOM那样的WINCPIC兼容栈
AREXECDN.EXE 用于NetSoft栈

语法:
RUNRMTCMD CMD(’pc 命令‘)
----RMTLOCNAME('xxx.xxx.xxx.xxx' *IP)
----RMTUSER(remote user-id)
----RMTPWD(xxxxxx)
----CCSID(pc ccsid)

其中RMTUSER必须时PC上设定的有效用户[注1]。
如果用户和密码有小写,则必须用单引号',否则全部转换成大写处理(NT是大小写敏感的)。
CCSID必须和PC端操作系统的语言相匹配,例如中文Win98、中文NT为1381,而英文Win98、英文NT为437。(用CHCP这个DOS命令看到的PC语言代码不十分可靠)

APPC格式:
RUNRMTCMD CMD(’pc 命令')
----RMTLOCNAME(appn.系统名 *SNA)
----RMTUSER(远程用户 ID)
----RMTPWD(‘口令’)
----CCSID(pc ccsid)

例:
RUNRMTCMD CMD(‘dir c:\/w') RMTLOCNAME('4.17.19.95' *IP) CCSID(437)
要求PC使用英文Win98,并且不需要用户和口令。

RUNRMTCMD CMD('copy c:\config.sys c:\config.bak') RMTLOCNAME('7.19.19.93' *IP)
RMTUSER(MOKCK) RMTPWD('ibmas400') CCSID(437)
spool file结果为’1 file copied'.

ADDJOBSCDE JOB(MYJOBD) CMD(RUNRMTCMD CMD("c:\mydir\daily.bat')
RMTLOCNAME(APPN.PC01 *SNA)) FRQ(*WEEKLY) SCDDAY(*ALL)
SCDTIME(180000)

RUNRMTCMD CMD('c:\progra~1\IBM\RTOPCB c:\MYDATA\MYTFR.TTO')
RMTLOCNAME(YOURNET.PC01 *SNA) RMTUSER(MOKCK)

RUNRMTCMD CMD('c:\windows\calc.exe') RMTLOCNAME(MYPC *IP) CCSID(437)
PC端的计算器会被激活,同时400端出现pending(等待),直到把PC端计算器关闭,400端作业才被释放。

[注1]
CHGPRTF FILE(QSYSPRT) IGCDTA(*YES)
在中文DBCS环境下运行RUNRMTCMD命令时,必须使得spool file的打印摸板QSYSPRT支持DBCS。
[注2]
在NT上运行RUNRMTCMD时必须指定要运行程序的全称路径,默认路径是C:\

用户设定:
在Win98端

默认情况下PC端没有任何关于‘入局远程命令的’设置。单击‘添加’

系统和用户支持*通配符。
系统名应当和DSPNETA中指定的系统名相同,用户则可以任意设置。
第2步:

如果不使用WIN95口令高速缓冲,则必须指定client access入局远程命令。

在NT中把登录client access入局远程命令的管理全部委托给NT的安全管理程序来管理,但要求有效的用户名不能超过10个字符。

启动入局远程命令:
Win98平台运行 c:\windows\cwbrxd.exe
NT把入局远程命令放到[control]==>[service]中,使用start即可激活。

停止入局远程命令:
Win98平台运行 c:\windows\cwbrxdsd.exe
NT把入局远程命令放到[control]==>[service]中,使用stop即可停止。


失败原因检查:

1、执行RUNRMTCMD调用NT端应用,返回‘无效的密码或用户’
检查该用户在NT上是否存在。
RUMRMTCMD中该用户的password是否大小写正确,是否使用了单引号。
在Win98上最好使用system = *,user=*的基本配置

2、RUNRMTCMD返回‘客户端没有启动’
检查RUNRMTCMD在PC端的server精灵程序是否已经启动。

3、SNA,anynet也可以使用RUNRMTCMD

4、如果NT支持GUEST 用户而且没有口令,则RUNRMTCMD时可以设置PWD(*NONE)。

5、在中国5250键盘的仿真中,\被解析成Y(人民币符号),无法通过客户化键盘的方式进行
修正,但在VT100的模式下可以不受影响。

posted @ 2008-01-09 15:13 深渊野鱼 阅读(112) | 评论 (0)编辑

 OS/400与UNIX功能相似的部分命令
解答 对于大多数SAP的用户,比较习惯UNIX及WINDOWS命令,而对于OS/400的命令缺少使用经验,这里结合SAP系统经常用到的命令,比较OS/400与UNIX功能相似的命令及其格式。

1.与文件系统有关的命令:

unix命令 对应的AS/400的命令
--------------------------------------------
cd ------CD (后跟路径名用单引号括起来)
ls ------WRKLNK
ls -l ---WRKLNK 命令,再用8,9或12选择项
more ----DSPSTMF
tail ----DSPSTMF 并按F17功能键
vi ------EDTF
cp ------CPY (拷贝的目标文件必须不存在)
mv ------MOV (目标文件必须不存在)
ren -----REN
rm ------DEL 删除文件;RD 删除目录
chgmod --CHUAUT
mount/ln ADDLNK
bdf -----WRKSYSSTS 或WRKDSKSTS查看存储空间

2.与进程有关的命令:

unix命令 对应的AS/400的命令
--------------------------------------------
ps ------WRKACTJOB 用来查看系统上所有的作业,WRKUSRJOB用来查看某个用户的作业;WRKSMBJOB *JOB 查看用户提交的所有作业
kill -9 -ENDJOB OPTION(*IMMED) LOGLMT(0)
执行程序 -CALL PGM(程序) PARM('参数')
程序& ---SMBJOB
exit ----SIGNOFF ENDCNN(*YES)

3.与用户有关的命令:

passwd - CHGPWD用来修改自己的口令;CHGUSRPRF用来修改指定用户的口令

4.其它命令:
ftp ------FTP
telnet ---TELNET
ping -----PING
sqlplus --strsql 或SQLUTIL

posted @ 2008-01-09 15:08 深渊野鱼 阅读(95) | 评论 (0)编辑

编辑---键盘---自定义
          定制---点C--功能:编辑复制 --〉到CTRL
               点V--功能:编辑粘贴 --〉到CTRL
保存,然后指定键盘的方式

posted @ 2008-01-09 15:07 深渊野鱼 阅读(79) | 评论 (0)编辑

 1.ShareODP:
在PF或者LF编译的时候,有个SHARE(Share Open Data Path)的参数,控制该文件是否共享其打开路径。
如果指定SHARE为*NO的话,程序在每次打开一个文件的时候,都会为该文件建立一次访问路径;如果指定SHARE为*YES的话,程序在第一次打开该文件的时候,系统建立该文件的访问路径,在同一个ActiveGroup中再打开该文件时,就不再重新建立该文件的访问路径,而是共享使用之前建立的路径,从而提高了程序运行的速度。
一般在编译的时候该参数设置为*NO,即不是共享打开。在需要共享打开的时候,使用OVRDBF对该参数进行更改。

使用ShareODP需要注意的一些东西:
1).由于在不同的ActiveGroup之间不能ShareODP,所以如果几个程序在编译的时候没有加入到同一个ActivationGroup中,ShareODP就不会有什么效果。
2). 如果PGMA打开FILEA并定位到了第一条记录,然后PGMA调用PGMB;PGMB也打开了FILEA并直接读FILEA,将读到第二条记录; PGMB运行完后PGMA又继续读FILEA下一条记录,此时它读到的将是第三条记录。而如果没有ShareODP的话,PGMA两次读到的会是第一条和第二条记录,PGMB读到的会是第一条记录。

ActiveGroup:
在CRTPGM 的时候,有个参数ACTGRP(ActivationGroup),控制该PGM在运行的时候属于哪个ActiveGroup。如果指定*NEW,则该 PGM会重新建立一个ActiveGroup;如果指定为*CALLER,则该PGM会与调用它的PGM使用同一个ActiveGroup。

2.UserOpen:
RPG程序在使用F表引用外部文件的时候,有一个KeyWords是USROPN。
在没有使用USROPN的时候:系统会在每次运行该程序的时候自动打开所引用的文件;一般可以通过设置*LR为*ON来自动关闭文件,但是如果是SubProcedure,系统不会自动关闭所打开的文件。
如果指定了USROPN:则系统不再控制文件的打开与关闭,由用户手工进行文件的OPEN与CLOSE;如果一个模块已经打开还没有关闭文件的情况下,该模块将不能再对该文件做打开的操作。
USROPN比系统自动打开文件要慢一些。在打开同一个文件5000次的情况下,USROPN使用了400毫秒,系统自动打开只用了4毫秒。

使用UserOpen需要注意的一些东西:
1).在OPEN之前最好使用 %OPEN(FileName) 检查要打开的文件是否已经打开,如果没有打开再执行OPEN的操作。
2). CLOSE *ALL的命令可以关闭本模块打开的所有文件。如果一个文件没有指定为USROPN,Close *ALL也将关闭该文件。并且如果该模块是不参与RPG Cycle的程序,如一个SubProcedure,则在第二次运行本模块的时候,该文件将不会再自动打开,此时如果再对该文件做操作,就会出错。所以最好指定文件名来CLOSE,并注意只关闭USROPN的文件。

posted @ 2008-01-09 15:07 深渊野鱼 阅读(66) | 评论 (0)编辑

 用DSPMSGD命令可以查看某个已知某一个的Message ID的内容,但是它不能按照某个关键字查看一个message file中的所有message id,如何按某个关键字搜索整个Message file中的所有message id 呢?
解答 1.在AS/400命令行上输入命令:
DSPMSGD RANGE(*ALL) MSGF(QSYS/QCPFMSG) DETAIL(*BASIC) OUTPUT(*PRINT)
参数说明:
RANGE(*ALL): 列出所有的message id。

MSGF(QSYS/QCPFMSG): 查看QSYS目录下的QCPFMSG message file。

DETAIL(*BASIC): DETAIL参数有两个选项,*FULL -> 列出message的所有信息;
*BASIC -> 仅列出message id,message的严重级别和message描述。

OUTPUT(*PRINT): 将命令的执行结果生成一个Spool file。

2.命令执行完成之后,生成Spool file:QPMSGD。

3.在AS/400命令行上执行命令:
-----------WRKSPLF

4.在QPMSGD文件前输入 5(display),打开这个文件。

5.在“Find”处输入要搜索的关键字,如:艘索“password”关键字,按功能键F16,即可搜索所有Message file的内容。如下图所示:

File . . . . . : -QPMSGD -----------Page/Line --21/33
Control . . . . . ------------------Columns ----1 - 75
Find . . . . . . -password
*...+...1...+...2...+...3...+...4...+...5...+...6...+...7...+
CPC1E75 -0 -Some system options not changed. Some changed and require I
CPC1E76 -0 -Some passwords not changed. Try again later.
CPC1E77 -0 -Passwords successfully changed.
CPC1E78 -0 -System options successfully changed; IPL required.
CPC1E79 -0 -System options successfully changed.
CPC1115 50 -CPC1115 Class &1 in library &2 not found.
CPC1116 50 -CPC1116 Program &1 in library &2 not found.
CPC1117 50 -CPC1117 Routing data does not match routing entry.
CPC1118 50 -CPC1118 Maximum number active jobs for routing entry reache
CPC1119 50 -CPC1119 No authority to class &1 in &2.
CPC1120 50 -CPC1120 No authority to program &1 in &2.
CPC1121 50 -CPC1121 No storage requested for storage pool.
CPC1122 50 -CPC1122 Function check occurred while trying to start job.
CPC1123 60 -Subsystem &1 cannot start prestart job &2.
CPC1124 50 -ENDJOBABN issued against job &3/&2/&1 by user &4.
CPC1125 50 -Job &3/&2/&1 was ended by user &4.
--------------------------------------------------------------------More.

posted @ 2008-01-09 15:06 深渊野鱼 阅读(112) | 评论 (0)编辑

 1. 显示自己作业的QTEMP的内容:
(1) 用DSPLIB显示所有外部对象(操作系统之上的可操作的对象):
DSPLIB LIB(QTEMP);

(2) 用DMPLIB显示所有内部对象:
DMPOBJ OBJ(QTEMP) OBJTYPE(*LIB)
结果位于假脱机文件QPSRVDMP中:(如图所示)

2. 显示别人作业的QTEMP的内容:
(1). 用WRKACTJOB找出所要查看的作业的名称,例如:123315/USERxxx/QPADEV0003

(2). STRSRVJOB JOB(123315/USERxxx/QPADEV0003)
DMPOBJ OBJ(QTEMP) OBJTYPE(*LIB)
ENDSRVJOB
结果位于假脱机文件QPSRVDMP中.

posted @ 2008-01-09 15:05 深渊野鱼 阅读(101) | 评论 (0)编辑

 用户经常发送MESSAGE,MESSAGE的颜色往往是绿色的,其实是可以发送彩色的MESSAGE的。


解答 1.创建SNDCOLMSG CLP程序。
SNDCOLMSG: PGM PARM(&MSG &COLOR &MSGTYPE)

DCL VAR(&MSG) TYPE(*CHAR) LEN(80)
DCL VAR(&COLOR) TYPE(*CHAR) LEN(1)
DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10)
DCL VAR(&LASTBYTE) TYPE(*CHAR) LEN(1) VALUE(X'20')
DCL VAR(&TEXT) TYPE(*CHAR) LEN(82)

CHGVAR VAR(&TEXT) VALUE(&COLOR *CAT &MSG *TCAT
&LASTBYTE)

SNDPGMMSG MSG(&TEXT) TOPGMQ(*EXT) MSGTYPE(&MSGTYPE)
SNDPGMMSG MSG(&TEXT) MSGTYPE(&MSG)

END: ENDPGM

2.创建命令SNCCOLMSG
CRTCMD CMD(SNDCOLMSG) PGM(SNDCOLMSGC)


SNDCOLMSG: CMD PROMPT('Send colored message')

PARM KWD(MSG) TYPE(*CHAR) LEN(80) PROMPT('Message')

PARM KWD(COLOR) TYPE(*CHAR) LEN(1) RSTD(*YES)
DFT(*GREEN) SPCVAL(
(*GREEN X'20')
(*GREEN_REVERSE X'21')
(*WHITE X'22')
(*WHITE_REVERSE X'23')
(*GREEN_UNDERSCORE X'24')
(*GREEN_UNDERSCORE_REVERSE X'25')
(*WHITE_UNDERSCORE X'26')
(*RED X'28')
(*RED_REVERSE X'29')
(*RED_BLINK X'2A')
(*RED_REVERSE_BLINK X'2B')
(*RED_UNDERSCORE X'2C')
(*RED_UNDERSCORE_REVERSE X'2D')
(*RED_UNDERSCORE_BLINK X'2E')
(*TURQUOISE X'30')
(*TURQUOISE_REVERSE X'31')
(*YELLOW X'32')
(*YELLOW_REVERSE X'33')
(*TURQUOISE_UNDERSCORE X'34')
(*TURQUOISE_UNDERSCORE_REVERSE X'35')
(*YELLOW_UNDERSCORE X'36')
(*PINK X'38')
(*PINK_REVERSE X'39')
(*BLUE X'3A')
(*BLUE_REVERSE X'3B')
(*PINK_UNDERSCORE X'3C')
(*PINK_UNDERSCORE_REVERSE X'3D')
(*BLUE_UNDERSCORE X'3E')
) PROMPT('Color')

PARM KWD(MSGTYPE) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*INFO) VALUES(*INFO *COMP) +
PROMPT('Message type')
3.执行
sndcolmsg msg('sgdsad') color(*blue)
SNDCOLMSG MSG('sgdsad') COLOR(*YELLOW_REVERSE)
sndcolmsg msg('sgdsad') color(*blue)
sndcolmsg msg('sgdsad') color(*pink)
xqlib/sndcolmsg msg('sgdsad') color(*pink)

posted @ 2008-01-09 15:04 深渊野鱼 阅读(94) | 评论 (0)编辑

 如何将AS/400英文界面改为中文界面?
解答 前提:系统必须安装第二语言(2989)。

具体步骤如下:
1.用CHGSYSLIBL命令修改系统的库列表。
CHGSYSLIBL LIB(QSYS2989) OPTION(*ADD)
2.GO MAIN 就可看到中文界面。

将中文界面改回英文界面:
1.用CHGSYSLIBL命令修改系统的库列表。
CHGSYSLIBL LIB(QSYS2989) OPTION(*REMOVE)
2.GO MAIN 就可看到英文界面

posted @ 2008-01-09 15:04 深渊野鱼 阅读(112) | 评论 (0)编辑