Saturday, March 18, 2006

Het gebruik van standaards

Vorige week was ik een dagje geld verdienen bij een klant. Even een stukje extra functionaliteit bijbouwen op een eerder ontwikkeld stuk maatwerk. Dat was niet zomaar een stuk maatwerk, maar een bijzonder stuk. Bijzonder omdat er op zijn minst al 4 ontwikkelaars mij voor waren gegaan, maar ook omdat de functionaliteit (het zoeken naar het juiste delivery item) erg complex in elkaar zit.
Op momenten zoals toen realiseer ik me weer dat het hanteren van de development standards zeer belangrijk is. Want als elke developer zijn eigen standaards toepast, wordt het programma erg onleesbaar. Klein voorbeeld:

DATA:
lt_xvbplp TYPE ts_xvbplp OCCURS 0 WITH HEADER LINE,
lt_vbplp TYPE vbplp OCCURS 0 WITH HEADER LINE.

LOOP AT xvbplp.
MOVE-CORRESPONDING xvbplp TO lt_xvbplp.
APPEND lt_xvbplp.
ENDLOOP.


Laten we afspreken dat we de OCCURS niet meer gebruiken. In plaats daarvan naast de tabel definitie direct de definitie van een structuur die als work-area dient. Dan krijg je het volgende:

TYPES:
ts_xvbplp TYPE xvbplp,
tt_vbplp TYPE TABLE OF ts_xvbplp.

DATA:
ls_xvbplp TYPE ts_xvbplp,
lt_xvbplp TYPE tt_vbplp.

LOOP AT xvbplp INTO ls_xvbplp.
... "Doe iets met ls_xvbplp
APPEND ls_xvbplp TO lt_xvbplp.
ENDLOOP. "xvbplp


Laten we ook meteen afspreken dat spaghetti constructies als onderstaande niet gebruikt worden, deze zijn zeeeer ondoorzichtig en eigenlijk alleen te begrijpen door de ontwikkelaar die het gemaakt heeft. In het voorbeeld wordt binnen een routine (find_delpos) diezelfde routine weer aangeroepen wanneer er nog niets gevonden is.

*&---------------------------------------------------------------------*
*& Form find_delpos
*&---------------------------------------------------------------------*
FORM find_delpos USING uv_venum TYPE venum
uv_matnr TYPE matnr
ut_xvbplp TYPE tt_vbplp
CHANGING cs_vbplp TYPE vbplp.

LOOP AT lt_xvbplp
INTO ls_xvbplp
WHERE venum = uv_venum.

* search until delivery item is found
IF NOT ls_xvbplp-vbeln IS INITIAL AND
ls_xvbplp-matnr = uv_matnr.
* delivery item found !
cs_vbplp = ls_xvbplp.
EXIT.
ENDIF.

* search with higher level
IF ls_xvbplp-posnr IS INITIAL.
lv_venum = ls_xvbplp-unvel.
PERFORM find_delpos USING lv_venum
uv_matnr
lt_xvbplp[]
CHANGING cs_vbplp.


Het document Capgemini standards SAP Development is recent nog door Evert-Jan aangepast. Gebruik het alsjeblieft bij je werkzaamheden!

No comments: