22 Nisan 2018 Pazar

BAPI Structure Dinamik Doldurma ve xStructure Dinamik İşaretleme


Bir çoğunuzun önceden de bildiği gibi BAPI'ler çoğu zaman ikili yapı kullanırlar.
İlk yapıda veri alınırken, ikinci yapıda alınan veri doğrulanır. Bu doğrulama işlemi çarpılayarak yapılır. Bu işlem o alanın güncelleneceği/yaratılacağı anlamına gelir.

Örneğin;

1
2
3
4
5
6
mystrucute-myfield = 0.005.
mystrucutex-myfield = 'X'.
mystrucute-yourfield = 'Ali'.
mystrucutex-yourfield = 'X'.
mystrucute-ourfield = '0085066996'.
mystrucutex-ourfield = ''.   //Ilk iki alan guncellenirken bu alan guncellemeyecek.

Veri alma ve doğrulama işlemi yüzlerce satırı bulabilir. Veritabanından alınan veriler tek tek BAPI structure ile eşlenir bunun yanında xStructure tek tek işaretlenir.

Örnek BAPI (Sadece bir kısmı)

Database tablolarına çok benzeyen BAPI structure'larını doldurmak için SAP'nin sunduğu Mapping fonksiyonları kullanılabilir.

Bu fonksiyonlar external->internal veya internal->external mantığı ile çalışır.

Örneğin; bapi_marc -> marc veya marc->bapi_marc şeklinde. Bu şekilde koca structure'ı kolaylıkla tamamlayabilirsiniz. Örneğin;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Select Single *
 From mard
 Into ls_mard
 Where matnr = lv_matnr
   And lgort = lv_lgort.

Check sy-subrc Is Initial.

Call Function 'MAP2E_MARD_TO_BAPI_MARD'
 Exporting
  mard      = ls_mard
 Changing
  bapi_mard = ls_bapi_mard.


Bu fonksiyonlar sistemde her zaman oluşturulmuş halde bulunamayabilirBDBS işlem kodundan kolaylık üretilebilir.

Ancak SAP dinamik işaretleme için bir fonksiyon sağlamıyor. Bunu kendimiz yapabiliriz. Benim çözümüm aşağıdaki gibi.

Local Interface:
Importing: iv_stname Type ddobjname
Changing: cv_structure ve cv_structurex


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DATA lt_fields TYPE STANDARD TABLE OF x031l WITH HEADER LINE.

FIELD-SYMBOLS: <st> TYPE ANY.
FIELD-SYMBOLS: <stx> TYPE ANY.
FIELD-SYMBOLS: <line> TYPE x031l.

CALL FUNCTION 'DDIF_NAMETAB_GET'
  EXPORTING
    tabname = iv_stname
  TABLES
    x031l_tab = lt_fields
  EXCEPTIONS
    not_found = 1
    OTHERS = 2.

CHECK sy-subrc = 0.

LOOP AT lt_fields ASSIGNING <line>.
  ASSIGN COMPONENT <line>-fieldname OF 
  STRUCTURE cv_structurex TO <stx>.
  CHECK <stx> IS ASSIGNED.
  ASSIGN COMPONENT <line>-fieldname OF 
  STRUCTURE cv_structure TO <st>.
  CHECK <st> IS ASSIGNED.
  IF <st> IS INITIAL.
    CLEAR <stx>.
  ELSE.
    <stx> = 'X'.
  ENDIF.
ENDLOOP.

ENDFUNCTION.

Örnek fonksiyon call ise;

1
2
3
4
5
6
CALL FUNCTION 'Z_XXXXXXXXXXXX'
  EXPORTING
    iv_stname = 'BAPI_MARD'
  CHANGING
    cv_structure = ls_bapi_mard
    cv_structurex = ls_bapi_mardx.

Eğer xStructure'da tipi char1 olmayan, anahtar alan var ise bunu doldurmayı unutmayın. Bu özelliği eklememiştim :)

Bu iki fonksiyonu kullanarak yüzlerce satır sürece doldurma ve doğrulama işlemini çok daha hızlı yapabilirsiniz :)

Hiç yorum yok:

Yorum Gönder

Heyyyy !!!!

Merhabalar,

Blogumu ziyaret edip, yazımı okuduktan sonra yorum yazmanıza çok sevindim ancak lütfen kırıcı, ayrımcı, ırkçı davranmayın siyasi ve dini tartışmalara girmeyin.