TVARVC表是干啥用的呢

简单了解。

1. TVARVC表的内容

在这里插入图片描述
在这里插入图片描述
由图可知,是个存放变量的表。
那这些变量么,肯定是要被程序使用的。

也就是说你在TVARVC表里面定义了变量,然后program或者function啦或者routine啦可以用你这个表里面的变量。

描述是table of variant variables : 变量表
看这个句型呢,variant是个形容词,不同的,多样的
variables 是个名词,变量
variable是形容词,加了s是名词。

可是我还是有点疑惑的,这个variant吧,也可以是名词变式。
这个variant的解释我有时候真是参不透,因为处理链里就有这个variant
在这里插入图片描述
我真是不懂了,为啥这个也叫variant。
在这里插入图片描述
我们这个里面吧,name下面是变量名,LOW是给的一个al11 application server下的一个文件地址。也就是说这个变量还能给文件地址,那这只能用在抽取数据上了。还有的给值的,给个固定值那多没意思,所以肯定是可以改的。
在这里插入图片描述

1.1 如何修改TVARVC表

STVARV 这个事务码进来修改。点眼镜笔,然后选中一条,再点笔来修改。修改变量名,变量值。低值高值都写的,那是限定范围的。
改完还可以传输,不过嫌麻烦的话,那就每个client都改。因为如果改一条,改起来比传起来快多了。(20240201更新,不要传输。直接在不同系统改。因为可能里面有application server的文件,在不同系统它的名字跟着系统client来的,会不一样)

改完保存下。
在这里插入图片描述

数据的更改记录在表DBTABLOG里。但是你传输过来的更改值是看不到的,只能是手动通过STVARVC更改的才能在这个log里看到。
这个log里还看不到具体更改的值。
在这里插入图片描述
要去看到具体更改了啥,去se38 RSTBHIST 去查看更改了啥。
在这里插入图片描述
在这里插入图片描述

2.TVARVC表的应用

都说呢,是在程序里面用的。
我们就来看看上面的两种情况的使用场景。

2.1 变量为文件地址

首先看一个例子:
在这里插入图片描述
这个变量肯定得在DTP里面用到。
看下DTP:
在这里插入图片描述
也就是运行DTP的时候,会从这个变量的值取文件。
那这也不需要啥程序的啊。毕竟al11里面有这个文件啊,我手动抽就好了啊。
在这里插入图片描述
这个变量对应的文件已经被我上载到al11里面了,我直接运行个DTP就好了啊。

为啥要多此一举搞个变量呢。

哈哈,原因如下:
有时候,ERP系统不能提供所有的数据的,其他系统的接口呢,又没有。那这时候咋办呢,只能准备个文本文件,定期发到BW系统里去,然后把数据再加载一下。

这整个流程,本来是要好多个人配合的,其他系统的人,发个文件给BW的人,BW的人上载文件到应用服务器,然后再用DTP抽取数据,最后展现在报表里。

现在我们来优化下这个流程:由其他系统的人,定期发个邮件到一个ftp地址,然后diskwrite到BW的application server,然后BW这边开发个程序,收到这个文件后。直接运行这个程序,检测文件是否存在,存在的话,跑DTP的处理链,然后删除这个文件。
以便下次再有新的文件进来。
实际上也就是两步:1.其他系统的人发个文件邮件,通知BW
2.BW去执行下程序

以上逻辑很完美,实际上也实现了。

如果原始文件加载的时候出错了,也就是文件本身有错,那就会删除文件。这也没什么问题。
好了,我们来看看BW这里的程序是啥样的,因为其他系统到BW的这段通路,不是咱设计的,咱也不知道怎么实现的。
(但是其实我们可以自己把文件加载到al11,以前的事务码不行了,但是有个report可以的。)

2.1.1 加载数据到al11的report

RSXSA_FILE_UPLOAD_DOWNLOAD
在这里插入图片描述
是的,就是这个自带的。其实挺简单的。看了的都知道。
在这里插入图片描述
但是前提你外部系统的人也有BW的权限才行。
行的,我今天又加载了一遍。
在这里插入图片描述

2.1.2 抽取变量数据并执行处理链的report

咱们这的程序还是很简单的。
前提条件是这个文件已经存在了,然后DTP的处理链也设置了。

看下report代码:

// An highlighted block
REPORT zfbi_file_exist.
***********************************************************************
* check wether file exist                                             *
* if yes, a process chain will be executed                            *
* ****author, ****company                                 *
***********************************************************************
* history                                                             *
* Version  date      user      reason                                 *
* &00      14.12.18  ********  creation                               *
*                                                                     *
***********************************************************************

PARAMETERS: p_name TYPE rvari_vnam, //两个参数,一个是变量名,一个是处理链名
            p_pc   TYPE rspc_chain.

DATA: l_file         TYPE rvari_val_255,  //定义文件和消息
      l_message(100) TYPE c.


START-OF-SELECTION.

* get file name from TVARVC
  SELECT SINGLE low INTO l_file FROM tvarvc WHERE name = p_name. //通过变量名取变量值,在LOW这个字段里
  IF sy-subrc = 0.

* check if file exists
    OPEN DATASET  l_file  FOR INPUT IN BINARY MODE.

    IF sy-subrc = 0.
      close dataset l_file.

* if exists start process chain
      CALL FUNCTION 'RSPC_API_CHAIN_START' //这个是se37可以打开的function,来跑处理链的
        EXPORTING
          i_chain = p_pc                 //处理链名也要输入的
*         I_T_FOR_PROCESS          =
*         I_T_VARIABLES            =
*         I_SYNCHRONOUS            =
*         I_SIMULATE               =
*         I_NOPLAN                 =
*         I_DONT_WAIT              =
*         I_POLL  =
* IMPORTING
*         E_LOGID =
*         E_T_PROCESS_FAILED       =
        EXCEPTIONS
          failed  = 1
          OTHERS  = 2.
      IF sy-subrc <> 0.
        CONCATENATE 'Process Chain execution failed:' p_pc INTO l_message SEPARATED BY space.
        WRITE: / l_message.
      ELSE.
* deletion of file after successful load
        DELETE DATASET l_file.    //事实是就算没有成功加载,这个文件也会被删掉,这里有问题。
        IF sy-subrc = 0.
          CONCATENATE 'file was deleted:' l_file INTO l_message.
          WRITE: / l_message.
        ENDIF.
      ENDIF.
    ELSE.
      CONCATENATE 'file not found:' l_file INTO l_message.
      WRITE: / l_message.
    ENDIF.

  ENDIF.

看完也还算简单,就是去找下文件,有的话,就读取。然后执行处理链。

好的,我们再来看下这个处理链:
在这里插入图片描述
这个处理链就是个被触发的。它不是个子链,也没有JOB来执行,就是通过刚才那个report来执行的。
在这里插入图片描述
report的执行界面长这样,里面功能自己写的就是一个读取文件变量值,然后调用了一个执行处理链的function。
在这里插入图片描述
当然你设置了处理链是外部触发的。我们也可以直接se37用这个function:
在这里插入图片描述
直接跑这个处理链,因为我们手动执行不了这个处理链。。。
在这里插入图片描述

2.2 变量为值或值范围

看另外一个情况:
这个变量值是个范围。而且是个DTP的过滤值。
在这里插入图片描述
这个还是挺有用的。这个值是可以改的。
在这里插入图片描述
当你有N个数据源,而且需要抽取不同年份的数据。那你最好设置个filter变量。不然得重复建好多DTP。关键还得区分。
在这里插入图片描述
我们来看看这个filter里面的变量设置。
在这里插入图片描述
看到这里,问题来了,为啥这两个名字不一样?涉及到我知识盲区了。
唉,一天天的,哪里都是我知识盲区。
而且这里显示的还是一个BEx Variable.这是基于这个信息对象的变量。这个还是在query里面建的吧。
在这里插入图片描述

不管了,来看这个字段的变量。
在这里插入图片描述
还是个客户出口来的。
在这里插入图片描述

到se80下面找找:
在这里插入图片描述
原来在这里:
在这里插入图片描述
这一圈,都给我绕晕了。

我要在DTP里用这个字段的变量来过滤,那我在这个字段下面定义一个变量,这个变量要代码写的,好了,我写了一个客户出口。
这是步骤一,我得在query里面定义这个变量,给个变量名字A,是个客户出口。
其次,我在TVARVC这个表里,定义了一个变量B,其实这个名字没啥,主要是值可以改的。

最后,代码里,变量A的方法method,去取B的值。当然,B和A的名字一样,也没关系。的吧。。😂

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomici

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值