Badi - tehnologie pentru implementarea extensiilor de afaceri

Continuarea seriei de articole "Tehnici pentru extinderea sistemului SAP standard".

BADI - Tehnologie pentru implementarea extensiilor de afaceri / adăugiri la codul de tranzacție standard; această tehnică este disponibilă în toate modulele sistemului, de fapt această tehnologie, folosind o abordare orientată pe obiecte pentru implementarea extensiilor sistemului, lăsată să înlocuiască tehnologia Customerexits. Tehnologia BADI este concepută pentru a rezolva problema principală a utilizării punctului de extensie de către mai mulți utilizatori, pentru a izola implementările utilizatorilor de extensii unele de altele. Dacă analizați codul sistemului și vedeți unde sunt adăugate apelurile BADI, puteți modifica faptul că apelurile sunt adăugate înainte sau după apelarea Customerexits, adică. funcțiile formularului CALL CUSTOMER-FUNCTION. Prin urmare, în majoritatea cazurilor, puteți utiliza fie Customerexits, fie BADI corespunzător. Apropo, în acest caz, în clasa unui astfel de BADI, lista metodelor disponibile pentru implementare coincide în număr cu lista de funcții din componenta extensiei Customerexits.







Astăzi există două opțiuni pentru implementarea tehnologiei BADI: acestea sunt așa-numitele extensii BADI vechi și noi. Diferența dintre ele este în calea implementării clasei de extindere. În aplicațiile mai vechi ale BADI, a fost utilizată tehnica interfeței, adică De fapt, utilizatorul a fost rugat să implementeze moștenitorul metodei de clasă și astfel a fost construit un lanț de implementări independente. O astfel de tehnică a permis răspândirea unor implementări diferite în extensiile lor, cu toate acestea, problemele uneia dintre implementările moștenite ar putea sparge munca tuturor extensiilor utilizatorilor. De asemenea, problema stocării variabilelor globale nu a fost rezolvată. Prin urmare, după un timp compania a trecut la un nou tip de BADI; Acum la implementare scrieți o clasă, ca succesor al unei clase predeterminate care implementează extensia. La punctul de apel, sistemul verifică existența tuturor moștenitorilor creați și activi din clasa de extensie de bază și cheamă metodele corespunzătoare tuturor claselor înregistrate ale moștenitorilor. Lista de metode care vor fi apelate și punctele de apel sunt predefinite în clasa parentală. Pentru mecanismul de implementare a noului BADI, două noi comenzi GET BADI și CALL BADI au fost introduse în limba sistemului.

Notă: Conform dezvoltatorilor SAP, noua tehnică BADI funcționează mai repede decât mecanismul folosit anterior. Cu toate acestea, este puțin probabil ca utilizatorul mediu să observe orice accelerare / decelerare atunci când apelează o implementare nouă sau veche.

La prima vedere, pentru utilizator nu se schimbă nimic atunci când se implementează atât BADI vechi cât și noi. Totuși, de fapt, diferențele sunt semnificative. Noua tehnică de extensie a rezolvat problema stocării variabilelor globale în cadrul clasei de implementare, ceea ce a fost destul de dificil de implementat folosind metode de moștenire. Clasele de implementare au devenit complet independente și în consecință dezvoltatorii au primit obiecte separate care pot fi procesate independent. Este noua tehnologie BADI care asigură izolarea completă a fiecărui exemplu; înțelegerea greșită a acestor diferențe conduce la utilizarea incorectă a noilor BADI. De exemplu, în tranziția de la vechiul tip de implementare la noul, setul de metode a rămas vechi, dar parametrii metodelor s-au schimbat semnificativ, ceea ce a condus la o dezorientare completă a părții dezvoltatorilor, în special a celor hinduși. Un exemplu simplu, există un BADI în sistem: MB_MIGO_BADI - Câmpuri utilizator pe ecranul MIGO. În vechea implementare a metodei CHECK_ITEM, dacă îmi amintesc corect (din păcate, nu mai am sistemul vechi), ați trecut poziția documentului, pe care ați putea verifica pentru erori și returnați rezultatul verificării parametrului ET_BAPIRET2. În noua implementare, numai valoarea variabilei I_LINE_ID - identificarea unică a liniei de documente este transferată la această metodă. numai numărul poziției pe care doriți să îl verificați, dar datele poziției în sine nu vă sunt transmise. Acest lucru a condus la faptul că pe o grămadă de forumuri hinduse și o parte a limbii ruse, copiate din Hindu, este implementat un mecanism pentru a salva intrările prin IMPORT TO MEMORY în metoda IF_EX_MB_MIGO_BADI

Recomandare: Dacă nu înțeleg funcționarea mecanismului, nu trece de la premisa că pentru implementarea acestui mecanism a fost defect, deoarece 99% dintre voi sunt pur și simplu nu a înțeles decizia, iar 1% plec la cazuri limită.

Un exemplu de lucru cu BADI, sugerez să ia în considerare pe baza de lucru cu tranzacția MB_MIGO_BADI. o dată am început deja această secțiune cu mențiunea ei. Deoarece sistemul este nou, vom folosi mecanismul de implementare a noului BADI. Apropo, dacă încercați să utilizați vechi sau așa-numitul Badi clasic, este încă într-o anumită etapă a sistemului vă va spune că există deja o nouă punere în aplicare pentru acest BADI, astfel încât conversia datelor va fi efectuată pentru noul mecanism. Acest lucru implică faptul că sistemul nu poate exista în același timp, să sprijine punerea în aplicare a mecanismelor de BADI vechi și noi pentru același obiect, cum ar fi pentru MB_MIGO_BADI.

Crearea punctului de extensie se realizează în tranzacția SE19 - BAdI-Builder - implementare, Fig.1. Tranzacția funcționează fie în modul creație, fie în modul de modificare a extinderii. Pentru a fi sincer, nu o versiune foarte comună a primului ecran de tranzacție. Pentru a crea un punct de extensie, trebuie să introduceți numele punctului de extensie existent în sistem, în acest caz este MB_MIGO_BADI. Alegeți modul de creare a unei extensii.







Badi - tehnologie pentru implementarea extensiilor de afaceri

Apare un ecran de dialog cu o cerere de creare a punctului de extensie, care va implementa extensia noastră. Deoarece numele principal este MB_MIGO_BADI. atunci numele punctului creat va fi ZZ_MB_MIGO_BADI. numele poate fi orice potrivit potrivit acordului privind numele obiectelor utilizatorului, Fig.2.

Pentru a grupa mai multe puncte de extensie care "servesc" un proces de afaceri, puteți crea un nume de grup care va combina extensiile create pentru a simplifica gestionarea tuturor implementărilor. Dacă aceasta este doar o implementare a extensiei locale, atunci nu puteți crea un nume de grup. După confirmarea creării, vi se cere să introduceți numele implementării, să specificați clasa de implementare și să selectați definiția BADI, Fig.3. totul este organizat, deci, deoarece punctul de extensie poate include mai multe clase diferite care împreună alcătuiesc punerea în aplicare a punctului de extindere. În cazul nostru, punctul de extensie coincide cu numele cu clasa de implementare, iar clasa de implementare pentru punct este doar una.

După completarea tuturor câmpurilor, confirmăm intrarea. Sistemul ne va oferi opțiunea de a crea o implementare (de fapt, clasa moștenită). Din moment ce avem un exemplu de punere în aplicare, iar noi creăm o prelungire a acestui tip, pentru prima dată, cea mai bună soluție ar fi crearea de punere în aplicare, pe baza de clasă, un exemplu de copie dacă știți deja cum să construiască o extensie, alegeți să creați o clasă goală, ca atunci când copierea Exemplu de clasă, noua clasă creată va implementa toate metodele din clasa par-int (șablon), deși este posibil să nu fie nevoie să implementați toate metodele, Fig.

Badi - tehnologie pentru implementarea extensiilor de afaceri

Badi - tehnologie pentru implementarea extensiilor de afaceri

Puteți lucra cu punctul de extensie utilizând fie tranzacția SE19 sau mai departe, sau puteți lucra deja cu clasa care implementează extensia utilizând tranzacția SE24 / SE80.

Deoarece clasa a fost creată pe baza șablonului, numărul obiectelor care vor fi activate va fi mare. Trebuie doar să selectați toate pozițiile și să activați toate obiectele, Fig.7.

Badi - tehnologie pentru implementarea extensiilor de afaceri

După activarea datelor din tranzacția MIGO, sunt afișate filele câmpului utilizatorului, Fig. 8 ..

Badi - tehnologie pentru implementarea extensiilor de afaceri

Badi - tehnologie pentru implementarea extensiilor de afaceri

Sistemul "vede" că există o implementare a extensiei, iar moștenitorul de clasă este "formalizat", astfel încât atunci când începe tranzacția, acesta creează o clasă responsabilă de implementare. În clasa ta poți accesa metoda INIT, care se numește în constructor. Pentru fiecare extensie BADI sunt posibile diferite reguli pentru crearea unei clase de implementare, motiv pentru care recomandarea generală de a crea BADI este pentru prima dată realizarea creației prin copierea din eșantion, dacă acest lucru este posibil. În metoda INIT, sistemul trebuie să returneze numele implementării. În acest caz, se recomandă ca numele implementării să fie stabilit ca o constantă în cadrul clasei dvs. și apoi să se includă această constantă în parametrii returnați ai metodei de inițializare a clasei, Fig.10.

Badi - tehnologie pentru implementarea extensiilor de afaceri

Apoi, implementarea reală a metodei de inițializare a clasei, Fig.11. În principiu, aceasta este o demonstrație a stilului de programare corect, atunci când numele clasei de implementare, prin care sistemul va identifica în continuare clasa dvs., este determinat printr-o constantă internă în cadrul clasei.

Badi - tehnologie pentru implementarea extensiilor de afaceri

Apoi, de fiecare dată când adăugați o linie la documentul de mișcare a materialului din tranzacția MIGO, sistemul va apela metoda LINE_MODIFY-Add / Change a Line (GOITEM), adică de fiecare dată când adăugați sau modificați o linie de document, veți primi o notificare. Cum se propune implementarea acestei metode? Deoarece ați creat de fapt o clasă, totul este necesar pentru ca câmpul să funcționeze din poziția documentului, este sugerat să îl stocați în tabelul de clasă privată internă. Structura care descrie tabela este creată în dicționarul de date și apoi proiectați variabila internă din clasă, Fig.

Badi - tehnologie pentru implementarea extensiilor de afaceri

În codul de implementare, citiți pur și simplu linia elementului necesar din document din acest tabel cu tasta I_LINE_ID, care trebuie să fie inclusă în structura dvs. internă, deoarece este un număr unic de linie al poziției documentului. Dacă este găsit un șir, atunci îl modificați în tabel, deoarece au apărut modificări noi, dacă nu există nicio linie, atunci adăugați această linie în tabelul dvs. intern. Astfel, în cadrul clasei care implementează extensia, aveți întotdeauna un tabel de linii de documente. Acesta este motivul pentru care în metoda CHECK_ITEM - sistemul de verificare a mișcărilor de date pentru elementul de verificare vă trimite numai un număr de linie unic, care trebuie verificat, deoarece linia trebuie să extrageți din tabelul intern al rândurilor din clasa sa de implementare. Desigur, în acest tabel trebuie să salvați nu numai câmpurile pe care le-ați adăugat pe propriul ecran, ci și câmpurile de care veți avea nevoie pentru a verifica datele introduse, Fig.13. astfel încât nu este necesar să efectuați mișcări pentru a stoca pozițiile documentelor prin memorie

Acces limitat

Pentru a citi versiunea completă a articolului, trebuie să vă conectați ca utilizator înregistrat.







Trimiteți-le prietenilor: