experience-ABAP

原创 2012年03月21日 16:24:38

 

se11 进入创建table   YUSERINFO.    保存时选 Local Object   不选package。

 

保存后在 se80 进入 点击 Repository Browser    在Dictionary Objects -- Database Tables 中可以找到。

 

====================================================================================================

 

创建package:

 

se80 -- Repository Browser -- ApplicationHierarchy  -- Class / Interface

 

Cross-Application Components -- BC400 -- 右击 create -- Development coordination  --package

 

package  alva_test

short text alva_text

Appl.Component  sd

Software Component  home

 

Click the 3th button to create  -- 

Request  :the 3th button to create  --  short text: abap learning  -- save

 

ok

 

在 ApplicationHierarchy  -- packages -- Sales andDistribution 中 可以看到已建好的 alva_test

 

====================================================================================================

 

program --> include  ||  executable

 

         includeprogram can not be executed directly. need executable program to include it forexecution.

 

         executableprogram can be executed directly.

 

class --> create in program  (local) || create in class builder(global)

 

function --> create in fuction builder(global)  || form in program or class(local)

 

         可以直接调用执行的代码块。

 

 

 

Table type(二维结构)   structure(一维结构)   workarea(一维对象)    internaltable (create inclass or program)

 

data type(数据类型)    domain (datatype & len 就像 类)     data element (datatype&len 就像对象)

 

=======================================================================================================================

 

Data element || Structure || Table type 创建  :

 

se11 -- Data type -- 输入名称 -- create -- Data element || Structure || Table type

 

 

然后 Dataelement 的创建可以基于 domain 也可以选择 predefined Type

 

=======================================================================================================================

 

实体的表只能通过 se11 进入创建。  在程序中声明的都只是 internal table。 会随 程序运行结束 而结束。

 

在创建表时 on Fields tab    Predefined type& data element can be switched. (before switching, data element should beempty)

 

Table 主键的key和initialvalue 要都勾上。

 

要是价格等字段,DEC类型要给它定义长度,不然激活table时会报错。

 

最后 还要 进行 Technical Setting。 指定该表是做什么用的。

 

 

 

外键的设定:

Entry help/check tab    --- 光标放在字段上 --- 点击 钥匙(foreign keys)--- ...

==========================================================================================================

 

实体table的维护可以通过 新建相应的维护视图 来进行。  也可以直接建一个维护对话框。

或者如果建表时选Display/maintenance Allowed. 就可以直接通过T-code se16 进入维护。

 

se11 进入 create 一个maitain view, 选好table和相应的显示字段,

 

在自己的navigatior上一个节点 右击  create  -- function group  (保存时是local object)

 

回到 maitainview 的 界面 utilities  -- table MaintenanceGenerator

 

Authorization Group :  &NC&

fuction group: 刚才自己建的function group

package : local object

 

Maintenance type: one step

Maint. Screen No. Overview screan:  1

 

(当table的结构被修改后,其maintenance dialog 不会同步被改变,需要同样的方法进入maintenancegenerator,

  按删除键删除原来的,然后新建一个)

 

 

se54 或 sm30  进入维护 视图  可以添加数据

 

se11 进入table  在工具栏上点击 contents 图标, 然后execute 看到表里的内容

 

se93 进入T-code 维护界面  为维护视频 创建一个T-code     yuserinfo_view:

Start object 选  Transaction with parameters (parameter transaction)

Tranaction 填 sm30   勾选 Skip initial screen    勾选 Inherit GUI  attributes

Defaut values 中 选 VIEWNAME 赋值为 yuserinfo_view   选 UPDATE 赋值为 x

 

==========================================================================================================

赋值时 等号“=” 两边都要有空格。 如: INP01 = SAVE_OK.

 

==========================================================================================================

在program里定义的Module名称,要和在screen的flow logic 里PBO,PAI中Module的名称一致。

 

==========================================================================================================

在MODULEuser_command_0130 INPUT.根据ok_code调用屏幕没成功。 原来是因为 屏幕0130中忘了添加ok_code。

 

==========================================================================================================

 

按钮的 Fct code: 可以给定系统内置的code 如E等;也可以给一个与按钮name一致的值。

 

==========================================================================================================

 

在写program时 要是 call function。可以点击 工具栏的 Pattern 按钮, 然后输入 function 名。 代码自动被掉出来。

没有注释的变量为必须项。

 

==========================================================================================================

 

CALL SCREEN 0100. 这句话会执行 screen 0100 的 PBO 和 PAI 完后才执行 主程序中 CALL SCREEN0100. 下面的语句。

 

============================================================================================================

 

AT-SELECTION-SCREEN-OUTPUT 相当于 选择屏幕的 PBO, AT-SELECTION-SCREEN 相当于 选择屏幕的 PAI (f8后执行)

============================================================================================================

 

While painting the screen and use the data columnsfrom dictionary. the input field type need to set consistent with

that in dictionary. such as  SPFLI-CONNID need to benumber type on input control attribute so that it can display

the values on screen.

 

============================================================================================================

se32 进入 文本编辑  时  当填好代号和文本内容后, 保存则最大长度固定。 下次修改时只能 先删除然后在添加一个代号一样的。

 

 

============================================================================================================

message class 中& & & 表示可输入的三个变量。记得& & &之间一定要有空格。

 

 

============================================================================================================

 

FORMAT COLOR 中 format color off 对于前景来说会变成 白色。

 

FORMAT COLOR INVERSE OFF. 取消不了对前景的影响。

除非 FORMATCOLOR COL_BACKGROUND INVERSE OFF, 或在设置背景颜色时加 INVERSE OFF。

 

因为INVERSE ON 的时候INTENSIFIED ON 是无效的,所以如果先前是设置前景颜色,

则需要用上面的方法取消前景操作。如:FORMAT COLOR COL_BACKGROUND INVERSE OFF。

才能设置背景颜色。

 

============================================================================================================

call screen 后在screen的PBO 或PAI里所执行的write语句,是看不到的。执行后再leave to screen 0 也看不到。

除非是写在module的外面。leave toscreen 0 才能看到。

 

============================================================================================================

 

form 里面不能定义事件块。

 

program 里只能用语句调用form或function  不能调module。module 只能通过屏幕的PBO或PAI调用。

============================================================================================================

 

MESSAGE I007(Y_MSG_01) DISPLAY LIKE 'E'. 会跳出对话框显示消息像error的样子  但程序继续往下执行。

MESSAGE E007(Y_MSG_01). 则程序窗口左下角会显示报错信息。 同时程序终止。

 

============================================================================================================

 

要使子窗口的按钮起作用,要在主窗口的 AT USER-COMMAND 的case块加代码:

WHEN 'CANCEL'. LEAVE PROGRAM.

 

============================================================================================================

Call method 中的Exporting 是相对于程序自身来说的。所谓“导出” 是指到参数的值传给method。

Importing 所谓导入,则是指从method把值传回来。比如method的执行结果等。

 

Call method 时exporting 过去的参数值,应该是method的importing类型的同名形参接收到的。

 

Changing 指定一个或多个传入传出参数。

=========================================================================================

Method 中changing 相当于importing和exporting;

Returning 相当于exporting 一个返回值,call method时receiving 接收returning定义的形参。

 

Form 中 changing 相当于 using。

 

Function 中 changing 相当于 importing和exporting。

 

 

SE11 然后选data type可以进去创建一个表类型table type 和 结构类型sturcture。

先创建structure,然后在创建table type时直接在line type选项上选中以创建好的structure。

Ok。

 

然后classbuilder对method的exporting 参数设置就可以添加一个返回内表的参数了,associated type 为新创建的table type。

 

第一次操作失败是因为在创建structure时USRID的Rtype打钩了。Rtype是rate type的意思。

勾选的话,在show_user_list方法体上会报错:

The work area(internal table) “e_itab” is not flat,or contains reference or internal tables as components.

 

 

在sap在线帮助http://help.sap.com  上对Rtype的解释如下:

Rtype enables you to display key figures based onrate type.

The rate type indicates the rate that is used todetermine the market value of a security, for example spot rate or forwardrate.

 

====================================================================================

在创建functionmodule时因为有tables选项,所以在tables参数中直接把参数类型设为实体表yuser就可以,不需要设为表类型 yuser_tb。方法体中向程序返回内表,或接收程序传过来的内表都可以通过该参数进行传递。

在callfunction时tables和importing是一样格式写的。

 

====================================================================================

修改对象所属的包:

在navigation上右击对象 --- more function --- change package assignment。

 

==============================================================================

 

在屏幕设计中,要使工具栏的退出按钮起作用:

Step1:给程序创建 GUI Status –>在function key 中填上exit的名称

                                   双击设置属性 

 

Step2:在屏幕的PAI中添加MODULE cancel AT EXIT-COMMAND:

Step3:在程序中添加 cancelmodule:

Step4:在程序的屏幕PBO模块代码中调用GUI Status:

 

==========================================================================

Tables 关键字可以声明一个 和在SE11中定义好的数据表,视图,结构等对象同名的工作区,

该工作区是全局的,就算在一个form里声明的,也可以在其他form里使用。重复声明会报错。

例如:

Tables yuserinfo. 这句代码就声明了一个工作区yuserinfo,它和se11里的表yuserinfo有一样的字段结构。

TABLES spfli

SELECT * FROM spfli
WRITE: / spfli-carrid, spfli-connid
ENDSELECT.

=======================================================================

SELECTION-SCREEN,里面有两个子项,PARAMETERSselect-options
PARAMETERS
一般是用于必输项的屏幕参数设置,如果这个参数不是必输项的,就要用select-options。在select ...where条件里,用PARAMETERS的条件语法是数据字段 = 屏幕字段;而select-options的条件语法是数据字段 in 屏幕字段

=======================================================================

用parameters定义的屏幕参数在用户界面显示的text默认是和参数名一样的,要想定义另外的显示文字就要在程序界面中点击

GOTO --- TEXT ELEMENT – SELECTION TEXT 里进行维护。(记得要先激活程序后再过去维护,这样看到的参数列表才是最新的)

(每个程序的textelement 是独立的。 Text element 维护界面的 t-code  se32)

=======================================================================

对程序中 parameters定义的参数 的text element 进行多国语言设置:

在程序的界面 点击 GOTO – translation 然后在“target language”中选择语言, 确定进入设置。

这样一次次的为不同语言设置该参数的textelement。

之后,在用户选择自己的语言登陆到系统的时候,执行该程序看到的用户界面上的参数就是设置好的  文字内容  了。

======================================================================

在单引号里定义一个带有 单引号的  字符如: it’s cool  应写成:’it’’s cool’ .

 

 

 

修理tomcat —启动慢 experience

1.修理tomcat工具 —启动慢 单纯启动慢 需要我把Timeouts(超时)的数一直往上加! 不然就启动报错 项目越大简直没救了!deng.. 2. eclipse启动没有外...

GIT experience

Git experience

Tips for a Comfortable Home Relocation Experience in Navi Mumbai

Before we can proceed with this article, we would like to ask you a question which came to us as som...

Somebody`s bad experience with ARM 2440

using basic is a hard way. how about java? but I want do it that way. belowing is somebody’s bad m...

Share the experience of how to debug dead lock

分享一下最近解的一个死锁的问题。当看到这样一次Crash时,你该怎么去处理呢?相信很多时候,大家都束手无策。怎么办呢? 死锁, dead lock...

Does having open source experience on your resume really matter?

"代码将会是下一个宠儿。"在Linux Foundation做执行主管的 Jim  Zemlin深入剖析了我们的技术工业(很多的商业都依赖它)是怎样转 变的。随着最近开源发展方法取...

Pilot Work Experience (URAL 1888 并查集+floyd)

题意: 有n个航班,p个飞行员,每个航班要两个机长一起飞,一个机长一个副机长,现在每个机长的有一个经验值,并且正机长比副机长的经验值大1,现在不知道每个机长的经验值,只知道每个航班是那两个机长飞的,要...

C++Experience

题目2-实验1:定义并实现一个平面点类 1. Point,包含protected类型的数据成员m_x、m_y用于保存x轴、y轴两个坐标值,并具有如下数据成员: 2. get_x()、get_y()...

interview and senior's experience summary

interview summary说实话,还是第一次正式参加面试,以前参加只是水水,并不是真的要找工作。而现在大三了,是真的要去实习工作了。所以很重视,也会有点儿紧张吧。总结一下有一下几点收获: 校园...

practice experience of deep learning from Ilya Sutskever

Practical Advice. Ok. So you’re sold. You’re convinced that LDNNs are the present and the future an...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:experience-ABAP
举报原因:
原因补充:

(最多只允许输入30个字)