[转]Convers.Routine


在SAP的Domain定义中,Output Length下面有个Conversroutine的标识,这是SAP用来进行输入输出转换的。
我们知道,屏幕上的I/O字段都是字符串形式的,而数据在我们内部则分为CSNPD等诸多类型,这中间就有个转换过程。
Conversion Routine就是实现这种转换的一种工具。
可以在SE12中录入Domain:MATNR,我们可以看到,这里定义了名为MATN1的转换方法。
这就是为什么我们输入的物料号都会被系统自动加上前导0。
双击MATN1,可以看到CONVERSION_EXIT_MATN1_INPUT和CONVERSION_EXIT_MATN1_OUTPUT两个函数,它们分别负责输入转换和输出转换。如图。

 

 
下面我们也可以定义个简单的Conversion Routine实例。假设我们有个类型为NUMC、长度为2的数字,要求其前台录入和输出的必须是英文单词。

1定义函数 CONVERSION_EXIT_ZZ01_INPUT.
可以参考CONVERSION_EXIT_MATN1_INPUT来定义我们的接口:INPUT和OUTPUT。
该函数的功能是,当用户录入一个字符串形式的屏幕字段后,将其转化成内部数据的格式。
INPUT在这里代表用户录入,当被系统调用时,它就是字符串的格式;OUTPUT则代表了内部的数据,函数被调用时它代表的是NUMC(2)格式。
我们的代码如下:
function conversion_exit_zz01_input.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
  check input is not initial.

  if input 'TEN'.
    output 10.
  elseif input 'ELEVEN'.
    output 11.
  elseif input 'TWELVE'.
    output 12.
  else.
    message 'Invalid value.' type 'E' raising invalid_value.
  endif.

endfunction.

2定义函数 conversion_exit_zz01_output.
可以参考CONVERSION_EXIT_MATN1_OUTPUT来定义我们的接口。该函数的功能是执行输出转化,将内部数据转化成字符串形式。INPUT代表了我们的内部数据,而OUTPUT则代表了输出到界面上的字符串效果。
代码如下:
function conversion_exit_zz01_output.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
  check input is not initial.

  if input 10.
    output 'TEN'.
  elseif input 11.
    output 'ELEVEN'.
  elseif input 12.
    output 'TWELVE'.
  endif.

endfunction.

3创建域和数据元素(YCRTEST)如下图.

激活时会警告定义长度和输出长度不一致,先不管它。 

4测试程序如下:
datac2 type c length 2.

parameterstype ycrtest.
c2 p."c2p的内部存储形式,所以此时会调用input函数
write'Now internal value of p is:'c2.
12."p12的外部显示形式,所以此时会调用ouptout函数
write'For p = 12, the output is:'p.

5执行结果如下图.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值