Cu câteva zile în urmă am avut ocazia să asculte BC402 curs în cadrul programului „Evening ABAP», vreau să-mi exprim recunoștința față de SAP pentru această oportunitate și menționează, de asemenea profesionalismul profesorului, al cărui rol a jucat Vasile Kowalski. Cursul în sine este dedicat revizuirea unei teme destul de largi, care, oricum, va fi util pentru toți programatorii ABAP în activitățile lor de zi cu zi. Unul dintre subiectele discutate în acest curs a fost posibilitatea programării dinamice în ABAP, despre care aș dori să vorbesc mai departe.
O caracteristică cheie a software-ului este abilitatea acestuia de a se schimba și de a se adapta condițiilor în schimbare. Unul dintre instrumentele care furnizează un astfel de dispozitiv este programarea dinamică.
În ABAP, programarea dinamică poate însemna următoarele lucruri:
- adăugări dinamice pentru operatori, atunci când în loc de constante, variabile sunt substituite: CALL FUNCTION gv_function, go_some => (gv_method), SORTARE lt_tab BY (gv_column, SELECT (lv_fieldlist) DIN (gv_table) ... UNDE (lv_where) etc.
- Generarea de programe folosind operatori speciali: RAPORT INSERT, GENERAȚI POȘOLUL SUBROUTINE.
- Dinamica folosind simboluri de câmp.
- Dinamica folosind variabilele de referință, incl. folosind servicii de tipul runtime.
În acest articol vor fi luate în considerare ultimele 2 căi, informații despre restul pot fi obținute atât din referința oficială, cât și din cursul BC402.
Pentru programarea dinamică, trebuie să înțelegeți care sunt variabilele de referință și simbolurile câmpului (simboluri de câmp) și care sunt diferențele dintre ele.
Pentru dezvoltatorii care abia încep să învețe ABAP, termenul de simboluri de câmp poate provoca confuzie. Cei care au lucrat cu limbi C / C ++ le confundă de multe ori cu tipul de pointer (Pointer). Cu toate acestea, câmp de simboluri nu sunt indicii pentru memorie acestea sunt doar indicii pentru variabila de date sau obiectul care sunt vizibile în blocul de cod curent (termenul alias-ul poate fi utilizat).
Următoarea diagramă arată clar diferențele principale.
Avem trei obiecte:
Tipuri generalizate
În plus față de tipurile de date standard în ABAP există, de asemenea, o serie de tipuri generice, a căror utilizare este posibilă numai în cazul: parametrii formali ai metodelor (funcții, proceduri), câmp simboluri și variabile de referință. De multe ori, folosind programarea dinamică, avem de a face cu tipuri de date care nu sunt cunoscute anterior, trebuie să știți cum pot fi reprezentate ca un tip generic.
Lista acestor tipuri este definită mai jos:
Servicii de tip runtime
Exemplele discutate anterior au arătat modul în care puteți utiliza simboluri de câmp și variabile de referință, dar în cele din urmă am lucrat cu tipuri de date care au fost deja descrise undeva. Și dacă un tip de date creat la runtime a venit la noi? Pentru a obține descrierea sa, putem folosi un instrument numit RTTS. De fapt, aceasta este o anumită ierarhie (set) de clase, apelând metode pe care le putem obține o descriere completă a tipului de date. În plus față de capacitatea descriptivă, această unealtă vă permite să creați dinamic tipuri de date în timpul execuției programului.
Ierarhia claselor RTTS arată astfel:
În partea de sus a ierarhiei este clasa CL_ABAP_TYPEDESCR care are un tip abstract, deci nu se poate crea o instanță, cu toate acestea, importanța acestei clase în cealaltă, conține metode de fabrică care vă permit să obțineți autorității de clase subordonate, în funcție de parametrii trecut și metodele. De exemplu, puteți obține o descriere a numelui tipului de date:
Cu ocazia programării dinamice, crearea mai dinamică a mesei.
Am avut sarcina de a crea un raport privind soldurile fondurilor în toate conturile companiei în diferite țări și diferite bănci. Essno, conturile pot fi cât de multe doriți și numărul lor poate varia.
Soluția mea este dinamic (create_dynamic_table) a respins „vârful“, iar departamentul a fost comandat pentru a crea o structură dicționar de 300 de coloane ( „acest lucru ar trebui să fie suficient“), essno mâini. Argumentul a ajuns aproape la luptă. Aici cred, este problema mea cu logica sau tirania sefului invincibilă?
Din păcate, tirania este greu de cucerit. A existat un caz în care, din cauza lipsei de cunoștință a ceea ce este rfc, autoritățile erau greu de convingut în utilizarea sa, deși acest lucru este un standard de comunicare între sistemele de sapă 😉
tânără fervoare + dorința de a dovedi că totul este în neregulă