28 Ağustos 2008 Perşembe

ABAP : ALV de box ve checkbox kullanimi

Kullandığımız ALV'de sol kısımda seçim yapmak için sadece bir kutu veya tık atabilmemiz için checkbox kullanmamız gerekebilir.
Kutu kullanıldığımız zaman, tıklanan kutuları yakalamak için bir fonksiyon ya da metod çağırmamız gerekemez fakat checkbox kullandığımız da check_changed_data isimli bir metod çağırmamız gerekir.

İkisini de örneklersek;
Öncelikle , interal table tanımalasında mutlaka char1 tipinde bir değişkenimiz olmalı.
Mesela;
data:
begin of gt_itab occurs 0,
box(1) type c,
.
.
.
end of gt_itab.

Sadece kutu kullanacaksak;

DATA : layout TYPE slis_layout_alv .
layout-box_fieldname = 'BOX'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = layout
.burada diğer export parametreleri yollanacak
.
TABLES
t_outtab = gt_itab.


Seçilen satırları görmek içinse;

DATA ref1 TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref1.
CALL METHOD ref1->check_changed_data.

yukarıdaki kod, reuse_alv'mizi, OO_ALV gibi convert edip, check_changed_data metodunu çağırmamızı sağlar.

Checkbox kullanımı içinse yapmamız gereken, manuel field katalog oluştururken (eski gönderdiklerimde bulabilirsiniz) checkbox seçeneğine X değerini göndermemiz.

http://bilencekic.blogspot.com/2008/07/abap-fieldcatalog-oluturma.html

DATA : gt_fcat TYPE slis_t_fieldcat_alv,
gf_fcat LIKE LINE OF gt_fcat.

gf_fcat-checkbox = 'X'.
gf_fcat-edit = 'X' *eğer edit sekmesine X koymazsak checkbox a tıklanamaz

ABAP : BAPI yada BATCH INPUT mesaj tablosunu popup olarak gosterme

Batch input yada bapi sonrası dönen mesaj tablosunu popup olarak güzel bir biçimde göstermek için kullanacağımız iki adet fonksiyon mevcut (bildiğim). Fakat dikkat edilmesi gereken, bapi için olan fonksiyon (convert edilirse batch input içinde kullanılabilir) 6.0 dan sonra mevcuttur . 6.0 dan eski versiyonlar için kullanacağımız fonksiyon;

data: BEGIN OF gt_mess occurs 0,
MSGID LIKE SY-MSGID,
MSGTY LIKE SY-MSGTY,

MSGNO LIKE SY-MSGNO,

MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,

LINENO LIKE MESG-ZEILE,
END OF gt_mess.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
* EXPORTING
* I_MSGID =

* I_MSGTY =
* I_MSGNO =
* I_MSGV1 =

* I_MSGV2 =
* I_MSGV3 =

* I_MSGV4 =
* I_LINENO =
TABLES

I_MESSAGE_TAB = gt_mess.

Oluşacak popup şu şekilde olacaktır.



***************************************************
6.0 da kullanacağımız fonksiyo ise;

data:
it_return LIKE TABLE OF bapiret2 WITH HEADER LINE.


CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2'
TABLES
it_return = it_return.

27 Ağustos 2008 Çarşamba

ABAP : ALV de yapilan degisiklikleri alma

Kullandığımız ALV içersinde değiştirilebilir satır,hücre veya checkbox kullandığımızda ve bunlara uygulanan değişiklikleri almaya çalıştığımızda kullanacağımız basit bir metod mevcuttur.

USER_COMMAND formumuzun içerisinde , ekranda bir butona bastığımızda ve formumuzun içine düşürdüğümüzde.

DATA ref1 TYPE REF TO cl_gui_alv_grid.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref1.

CALL METHOD ref1->check_changed_data.

buradan sonra internal table kontrolu yaparsak, ekrandaki değişiklikleri aldığını görürüz.

ABAP : Domain icinde ki degerleri&textleri okuma


Bir domain içersindeki değerlerinizin açıklamalarını okumanız gerekebilir. Örneğin ALV de listelerken
01
02
03
gibi değerler yerine onların domain içersinde bulunan (eğer varsa) değerleri almamız gerekebilir.

Bunun için kullanacağımız bir den fazla fonksiyon mevcuttur, bir örneği aşşağıda bulabilirsiniz.

FORM
read_dom_text USING
p_domname like DD07L-DOMNAME
p_domvalue like DD07L-DOMVALUE_L
CHANGING

p_text like DD07T-DDTEXT.

CALL FUNCTION 'FI_CUST_READ_DOMVALUETEXT'

EXPORTING

domname = p_domname
"domain adını buraya yazıyoruz örnek: ''ZSDIC_BLT"
domvalue = p_domvalue
"hangi değerin textini alacaksak onun value değeri örnek: "01"
spras = sy-langu "dil
IMPORTING

ddtext = p_text

EXCEPTIONS
TEXT_NOT_FOUND = 1

VALUE_NOT_FOUND = 2
OTHERS = 3 .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.

ENDFORM.

12 Ağustos 2008 Salı

ABAP : Smartform Cagirma

Smartform tasarlama işlemi bittikten sonra , çağırma aşamasında dikkat etmemiz gereken;
fonksiyonumuzu smartformda üretilen /1BCDWB/SF00000031 kodlarıyla çağırmamak.
"Call Function /1BCDWB/SF00000031
Exporting
...
...
Importing
..."
Bu metod sadece canlı ve test serveri aynı ise sorun çıkarmayacaktır. Diğer türlü yani serverlar farklı ise her formumuz için test serverında üretilen numara, canlı server da farkı olacaktır. Programımızda direk numara ile çağırdığımız için doğal olarak canlıda bulamayacaktır ve hata verecektir. Bu durumu şöyle çözebiliriz;

************************************************************

DATA:
fm_name TYPE rs38l_fnam.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZTST_DummyForm' * formumuzun adı
IMPORTING
fm_name = fm_name *burası bize formumuzun kodunu döndürüyor
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.

IF sy-subrc <> 0.
WRITE: / 'ERROR 1'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

*formumuzu çağıralım
CALL FUNCTION fm_name
EXPORTING
...

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ABAP : Manuel Yazici Secme

Zaman zaman belirli yazıcılara toplu çıktılar gönderip daha sonra ekranlarınızdan çıkmadan işlemlerinize devam etmeniz istenebilir veya yazıcıyı tüm işlemlerinizin başında seçip ona göre devam etmeniz gerekebilir.
Bu aşamada yapacağınız manuel olarak yazıcıyı seçtirmenizdir.

Bir screen yaptığınızı ve
p_yazici LIKE tsp01_sp0r-rqdestl,
tipindeki p_yazici degiskenini eklediğinizi varsayıyorum.

Daha sonra smartform'u çağırmadan değişkenlerimizi tanımlamamız ve gereken atamaları yapmamız gerekir.


DATA:
g_out TYPE ssfcompop,
control TYPE ssfctrlop.

..
..

DATA:
lv_yazici(8) TYPE c,
lv_kname(4) TYPE c.



SELECT SINGLE patype kname FROM sh_prin INTO
(lv_yazici, lv_kname)
WHERE lname = p_yazici.


g_out-tdprinter = lv_yazici..
g_out-tddest = lv_kname.

control-device = 'PRINTER'.

Smartformumuzu çağırırken bu değerleri göndermeyi unutmayalım.

**********************************************
CALL FUNCTION xxx

EXPORTING
control_parameters = control
output_options = g_out
user_settings = '' *manuel ayarlarda burası boş gönderilmi

**********************************************