posts - 14,  comments - 22,  trackbacks - 0
  2008年10月7日
几经辗转,我又被安排到了一个新的项目里。
现在到处缺人啊,我们项目刚完事,所有成员都被别的组瓜分了。

貌似ERP的产品也很多,SAP的,Oracle的,国内有些名声的有金蝶,用友,金算盘等等吧。
我们这个项目是和SAP公司合作,使用SAP的软件产品。
貌似SAP这个产品非常复杂。真的是一无所知啊。
我被分到TR模块,和SAP公司的顾问,客户公司的顾问和一些关键用户一起做。
先熟悉一下TR是什么;
TR:treasury的简写;是SAP ERP系统中Financial Acounting (FI)模块的一个子模块,TR模块又分为Cash Management(TR-CM)、Cash Budget Management(TR-CB)两部分。
先看TR-CM部分吧
SAP Library中说道:
 

The topic Input contains an introduction to the menu options: lectronic and manual bank statement, payments, lockbox, electronic and manual check deposit, bill of exchange presentation, and memo records.

The topic Check contains an introduction explaining the transactions used to compare payment advices, calculate interest, and analyze cashed checks.

Cash concentration is covered in the topic on Management . In this section you will also find the chapters explaining the payment program, payment requests, bill of exchange presentation, memo records, and the telephone list.

See Tools for information on the distribution of the Cash Management systems.

The topic Information System deals with, among other things, the liquidity forecast, which you use to obtain information on customer and vendor payment flows. This section also describes the setup of the cash position and the transactions that affect it. The Cash Management application component uses the cash position to reproduce the activity in bank accounts, while activity in subledger accounts is reproduced using the liquidity forecast.

Additional topics are: Journal of Single Transactions Enter and Changed, Comparison and Checking, and Reconciling Cash Management.

The Environment topic describes the procedure for adopting market data in the SAP System. You can do this using the file interface, the real-time datafeed, or the table calculation. The documentation also includes information on worklists and changing master records.

---直接copy的
好了,就知道这么多了,下午再听SAP的顾问的培训吧。
posted @ 2008-11-25 11:56 张老三 阅读(343) | 评论 (0)编辑 收藏

学习MQ(三) 一个实例。
现在有两台机器A和B,分别安装了MQ6.0,我要通过MQ进行A和B之间的双向通信。
我打算分两步,第一步:实现A到B的数据传输。
在A上:
1、创建队列管理器 QM_1001。
2、创建本地队列 LQ_1001
3、创建传输队列 XQ_1001
4、创建远程队列 RQ_1002
5、创建发送方通道 1001.1002
在B上:
1、创建队列管理器 QM_1002
2、创建本地队列 LQ_1002
3、创建接收方通道 1001.1002,名字必须与发送方通道相同。
4、创建侦听器,监听1414端口
这样,A到B的数据传输就可以了。
启动队列管理器QM_1001和QM_1002,启动B上的侦听器,A上启动发送方通道1001.1002,B上的接收方通道也会自动运行;
第二步:实现B到A的数据传输
在B上:
1、创建传输队列 XQ_1002
2、创建远程队列 RQ_1001
3、创建发送方通道 1002.1001
在A上:
1、创建接收方通道1002.1001
2、创建侦听器,侦听1414端口
启动A上的侦听器,启动B上的发送方通道1002.1001,这样A上的接收方通道会自动运行。
这样,由B到A的数据传输也能进行了。
这是我搞定的第一个例子,也是我学习MQ以来感觉有进步的一次。
下面是脚本。
在A上:
* 定义队列管理器
crtmqm -t 5000 -h 1000 -lc -lf 10240 -lp 30 -ls 32 -q QM_1001
*更改QM的字符集编码(CCSID)
    ALTER QMGR FORCE CCSID(1381)

* 定义本地队列
    DEFINE QLOCAL('LQ_1001') REPLACE +
           USAGE(normal) +
    DEFPSIST(YES)

* 定义传输队列
    DEFINE QLOCAL('XQ_1001') REPLACE +
           USAGE(XMITQ) +
    DEFPSIST(YES) +
    TRIGGER +
    TRIGTYPE(FIRST) +
    INITQ('SYSTEM.CHANNEL.INITQ') +
    PROCESS('') +
    TRIGDATA('1001.1002')

* 定义远程队列
    DEFINE QREMOTE('RQ_1002') +
    DEFPSIST(YES) +
    RNAME('LQ_1002') +
    RQMNAME('QM_1002') +
    XMITQ('XQ_1001')

* 定义发送方通道
    DEFINE CHANNEL('1001.1002') +
    CHLTYPE(SDR) +
    TRPTYPE(TCP) +
    CONNAME('192.168.110.35(1414)') +
    XMITQ('XQ_1001') +
    DISCINT(0) +
    SHORTTMR(30) +
    SHORTRTY(999999999) +
    LONGTMR(1200) +
           LONGRTY(999999999)

* 定义接收方通道
    DEFINE CHANNEL('1002.1001') +
    CHLTYPE(RCVR) +
    TRPTYPE(TCP)
* 启动队列管理器
strmqm QM_1001
* 启动侦听器
runmqlsr -m QM_1001 -t TCP -p 1414 &

在B上:
* 定义队列管理器
crtmqm -t 5000 -h 1000 -lc -lf 10240 -lp 30 -ls 32 -q QM_1002
*更改QM的字符集编码(CCSID)
    ALTER QMGR FORCE CCSID(1381)

* 定义本地队列
    DEFINE QLOCAL('LQ_1002') REPLACE +
           USAGE(normal) +
    DEFPSIST(YES)

* 定义传输队列
    DEFINE QLOCAL('XQ_1002') REPLACE +
           USAGE(XMITQ) +
    DEFPSIST(YES) +
    TRIGGER +
    TRIGTYPE(FIRST) +
    INITQ('SYSTEM.CHANNEL.INITQ') +
    PROCESS('') +
    TRIGDATA('1002.1001')

* 定义远程队列
    DEFINE QREMOTE('RQ_1001') +
    DEFPSIST(YES) +
    RNAME('LQ_1001') +
    RQMNAME('QM_1001') +
    XMITQ('XQ_1002')

* 定义发送方通道
    DEFINE CHANNEL('1002.1001') +
    CHLTYPE(SDR) +
    TRPTYPE(TCP) +
    CONNAME('192.168.110.21(1414)') +
    XMITQ('XQ_1002') +
    DISCINT(0) +
    SHORTTMR(30) +
    SHORTRTY(999999999) +
    LONGTMR(1200) +
           LONGRTY(999999999)

* 定义接收方通道
    DEFINE CHANNEL('1001.1002') +
    CHLTYPE(RCVR) +
    TRPTYPE(TCP)
* 启动队列管理器
strmqm QM_1002
* 启动侦听器
runmqlsr -m QM_1002 -t TCP -p 1414 &

剩下几个疑问没有明白
1、更改QM的字符集编码是做什么用的?
2、从资料上看到有个服务器传输通道,不知道是做什么用的?

posted @ 2008-11-12 17:37 张老三 阅读(3775) | 评论 (3)编辑 收藏
学习MQ(二)基本概念
这次简单罗列一下MQ的基本概念,还有我对它们的理解
1、queue manager 队列管理器,这是MQ系统中最上层的一个概念。每一个queue manager都有一个侦听器,如果它要接受消息的话,每个queue manager中管理多个队列queue和消息通道message channel。
2、消息 message,消息是应用程序交给MQ来传输的数据。
3、队列 queue,队列是用来存放消息的,把消息存放到队列中,直到应用程序或其他MQ对象来处理或取走。
假如,系统A和系统B之间需要数据传输,那么应用程序在系统A端把消息放到MQ的队列中,在系统B端的应用程序从队列中取消息,至于系统A到系统B的数据传输,那是MQ要做的事情。
我用到的队列有三种,本地队列,远程队列,传输队列。其中传输队列也是本地队列的一种,也叫本地传输队列,另外一个叫普通本地队列。
普通本地队列是消息的暂存区,应用程序可以通过API直接把消息放入本地队列,或者取走消息,普通本地队列是占用磁盘空间的,应该是对应磁盘上测某个文件。
本地传输队列是一个存储转发队列,资料上是这么说的:比如,我们将某个消息交给MQ系统发送到远程主机,而此时网络发生故障,MQ将把消息放在传输队列中暂存,当网络恢复时,再发往远端目的地。
本地传输队列也是要占用磁盘存储空间的。
远程队列是一个定义,它是目的MQ系统中的本地队列在本系统中的一个映像,就像定义了一个指针,指向目的系统的本地队列一样。它不占用磁盘空间。

还有模板队列和动态队列的概念,很好理解,模板队列就是一个模板,定义新的队列时可以照着这个模板创建。动态队列没用过,听说很灵活,是MQ的特色。
4、消息通道 message channel 消息通道是一个逻辑概念,它是队列管理器之间传输消息的管道,它建立在屋里的网络连接之上。传说,通道是MQ的精华,由于我没用过其他的消息中间件产品,也没有深入使用MQ,所以没有看出这精华二字体现在何处。
消息通道是单向的,由发送方通道和接收方通道组成,而且这两个必须是同名的。如系统A要发消息到系统B,那么需要在A中建立发送方通道,在B建立接收方通道,必须同名。

另外还有两种通道,MQI通道和Cluster通道,我没用,就没深究,要是以后用到,就深挖一下。
5、侦听器 listener 这是在接受消息方必不可少的。它侦听一个端口(默认为1414,可以更改),等待发送方的连接。

posted @ 2008-11-12 17:36 张老三 阅读(3121) | 评论 (1)编辑 收藏
声明:我的文字里出现的MQ,如没有特殊指明,就是指的IBM的websphere MQ

以前对MQ一无所知!
MQ是IBM websphere的系列产品之一,是很好的一个中间件产品。其实我对这列产品并不感兴趣,觉得它们没有很大的是作用。
也许我是错的,在一个规模较大的分布式系统中,远程数据传输、数据同步是一个很大的问题,很重要,而且必须是可靠的。分布在各地的系统之间进行数据传输,会因为网络问题、服务器处理问题变得十分复杂;这样,如果采用传统意义上的网络编程的话,恐怕就达不到预期的效果了。
而采用消息中间件产品可以解决这样问题。
这是我对中间件产品MQ的一些初步的理解。
posted @ 2008-11-12 17:36 张老三 阅读(2176) | 评论 (4)编辑 收藏
好久不能上网了,我哭
posted @ 2008-11-12 17:35 张老三 阅读(233) | 评论 (0)编辑 收藏

今天,应用程序出现问题,一个页面的表格展现不出来。
左查右查,发现是这个表格查询的数据库视图不可用导致的。

针对这个视图做查询时,报错如下:
SQL0575N  不能使用视图或具体查询表
"DB2ADMIN.VIEW_BRAND_EXPORT_FLAG",因为它已经标记为不可用。  SQLSTATE=51024

问题1:
这是什么原因引起的?以前一直用的挺正常,怎么就突然不可用了呢。

Google了一把,IBM的官方资料有这么一个介绍:加入建立视图view_a,然后建立角色role_a,分配view_a的查询权限给role_a,然后把role_a分配给用户db2admin,之后使用db2admin用户可以查询视图view_a。但是当角色role_a的查询权限revoke的话,再用db2admin用户查询视图view_a是,就报错:SQL0575N  不能使用视图或具体查询表,因为它已经标记为不可用。  SQLSTATE=51024。详情见:http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0808chengy/index.html
但是,可以肯定的是我这个问题不是由这个原因引起的。因为我们根本没有创建角色,我们使用db2admin用户直接访问视图的。
那问题出在哪儿呢?
我也不知道,以后再查吧。
问题2:
这个问题怎么解决呢?
我没有什么好办法。
比较菜:drop 该视图,然后找到建立该视图的SQL脚本,重新建立一遍,就OK了。

哪位高人对这个问题有了解,请把问题原因和解决办法分析一下吧!

posted @ 2008-10-07 10:56 张老三 阅读(3982) | 评论 (2)编辑 收藏