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,里面有两个子项,PARAMETERS和select-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’ .