壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4716|回复: 0

QAD中Cimload功能分析

[复制链接]
发表于 2010/6/3 23:16:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
如果大家用过QAD这套ERP软件的话,对她提供的Cimload这套工具应该不太陌生吧。
可是最近用的时候却发现奇怪的问题:
按照Cimload格式生成的数据,手工在界面中输入会报错,但Cimload结果一切正常,prn文件中的记录显示没有错误,但数据却没有录入到系统中。
于是,研究了一下Cimload功能的原程序,问题解决,现在分享一下经验吧,呵呵。
环境介绍:
1. 目前公司用的系统是eb2.1,因此,后面所有源码的分析都是基于这一版本,其他版本可能有所不同。
2. 要执行Cimload的程序是以前公司自己写的,因此,并未考虑到Cimload功能。
源码分析:
好了,废话了这么多,现在进入正题吧,先看下面的代码:(代码是从36.15.2这个画面中提取出来的,对应文件名为 mgbdpro.p )
PROCEDURE process_all:
      ......
/*以下为第一部分功能*/
      input from value(work_i_file) no-echo.
      output to value(work_o_file) keep-messages.
      batchrun=yes.
      do on stop undo aloop,leave aloop:
         {gprun.i execname}/*这里才是真正的在做Cimload*/
      end.
      output close.
      input close.
      ......
      ......
/*以下为第二部分功能*/
      input from value(work_o_file) no-echo.
      repeat:
         linefield = ""./*linefield是字符类型的数组*/
         set linefield with width 255.
         if linefield[1] = "**" or
            linefield[1] = "ORACLE" or
            linefield[1] = (getTermLabel("WARNING",11) + ":") or
            linefield[1] = (getTermLabel("ERROR",8)    + ":")
         then do:
         /*中间是错误记录的代码*/
         end.
end.
process_all这个过程,就是执行Cimload的核心代码(其实,还有个过程process_by_screen,功能和process_all差不多,差异好像是process_by_screen直接从Cimload文件中读数据执行,不经过bdl_mstr、bdld_det这2个表的处理吧,不过其具体代码懒得研究了,只是猜测而已,呵呵),她内部大致分为2个部分,第一部分执行Cimload,第二部分对前面生成的临时文件作分析,判断错误情况。
第一部分,Cimload功能分析:
<a 首先,work_i_file存的是要执行的Cimload数据,其格式实际上就是我们导入的Cimload原始资料,但去掉了@@batchload和@@end这两行,而且,只包含一条数据(也就是36.15.1中生成的一个Group ID对应的数据,所有数据是通过循环调用这个过程来导入的);
<b 然后,设置batchrun这个全局变量,其功能应该是告诉系统环境现在是在批处理模式下运行吧;
<c 通过调用{gprun.i execname},就可以把数据写到系统中了,其实这句话实际上就是一个run命令,execname实际上就是@@batchload后面的程序名(从这里看,Cimload功能应该是被系统给集成了,像update、prompt-for这类函数可能会根据batchrun的设置而自动选择是显示一个界面让用户输入,还是从当前的输入流中读取数据吧),注意,这条语句被包含在一个do语句中,do语句会捕捉在运行过程中产生的所有stop消息,换句话说,也就是如果我们在写程序时发现录入的数据有错误,则可以调用stop命令,这样,就可以停止Cimload的运行了;
<d 对于运行过程中生成的所有消息,都会被写入到work_o_file所对应的文件中,而这个文件,则是第二部分功能的主要数据源;
第二部分,Cimload错误分析:
这部分比较简单,没什么可说的,只要记住,如果想生成错误消息,只要在要输出的消息前面加上“WARNING: ”或“ERROR: ”就可以了,注意最后的空格不能省。

好了,就写道这里吧。
最后,给自己作作宣传吧,最近开通了博客,欢迎大家来做客,一起讨论技术。
本文在博客中的链接为:
http://blog.csdn.net/xinghun61/archive/2010/06/03/5646088.aspx
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 07:21 , Processed in 0.012636 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表