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 bulunamayabilir. BDBS 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
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.