注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

原来为了你

我的人生就是要一次次的超越

 
 
 

日志

 
 
 
 

[转]Convers.Routine  

2011-08-12 16:31:40|  分类: 数据库、表、视图 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

[转]Convers.Routine - 2006057145 - 原来为了你

 

[转]Convers.Routine - 2006057145 - 原来为了你

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

1定义函数 CONVERSION_EXIT_ZZ01_INPUT.
可以参考CONVERSION_EXIT_MATN1_INPUT来定义我们的接口:INPUTOUTPUT
该函数的功能是,当用户录入一个字符串形式的屏幕字段后,将其转化成内部数据的格式。
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)如下图.

[转]Convers.Routine - 2006057145 - 原来为了你

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

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执行结果如下图.

[转]Convers.Routine - 2006057145 - 原来为了你

 

  评论这张
 
阅读(443)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018