SAP ABAP dilinde bir yapı (structure) içeri bir başka yapı tanımlamışdır. Ancak se11’den oluşturmak dışında kod içerisinde hiç bir yapı içerisinde bir tablo (internal table) tanımlamayı denediniz mi?
Benim bu yönde bir tanımlamaya ihtiyacım oldu ve inat ettim kod içerisinde tanımlamaya yöntemini bulmaya gayret ettim. Yaptığım araştırma sonucunda bulgularım ve işe yarayan kod içeriğini (dönüp bakmak adına biraz da kendim için) burada sizlerle paylaşıyorum.
Öncelikle tablo olarak kullanmak istediğimiz yapımızı (STR_IMZA_OFFICES) tip olarak tanımlıyoruz. Ardından bu tipi kullanarak bir tablo tipi (TABLE_OFFICES) tanımlıyoruz.
Asıl detay işte bu kısımda. Tablo tipini tanımlarken eşsiz bir anahtar olmayacağını (WITH NON-UNIQUE DEFAULT KEY) belirtmemiz gerekiyor aksi takdirde hata alıyoruz.
Daha sonra diğer yapımızı (STR_IMZA) tanımlıyoruz. Bu kısımda yapımızı tip olarak tanımlamak zorunda değiliz. Yapı içerisinde diğer yazılım dillerinde bir nevi dizi olarak isimlendireceğimiz tablomuzu (OFFICES) bir öğe (component) olarak ekliyoruz.
Bu sayede en son tip olarak tanımladığımız yapıyı bir tablo olarak tanımlandığında tablo içerisinde bir öğeyi tablo olarak kullanabiliyoruz.
Açıklaması bir o kadar zor olan bu konuyu aşağıdaki örnek içerisinde asıl öğeleri yeşil yazı rengi ile boyayarak belirttim.
TYPES: BEGIN OF STR_IMZA_OFFICES, OPMRKNR TYPE ZOPMRKNR, OPMRKTXT TYPE ZYD_OFCS-opmrktxt, MSRFDONEM TYPE ZMSRFDONEM, END OF STR_IMZA_OFFICES, TABLE_OFFICES TYPE STANDARD TABLE OF STR_IMZA_OFFICES WITH NON-UNIQUE DEFAULT KEY, BEGIN OF STR_IMZA, PERNR TYPE ZYD_IMZA-pernr, ENAME TYPE EMNAM, GUID TYPE ZYD_IMZA_OFFICES-guid, AEDTM TYPE AEDTM, UZEIT TYPE UZEIT, KONU TYPE ZYD_IMZA-konu, STATUS TYPE ZYD_IMZA-status, TIP TYPE ZYD_IMZA-tip, OFFICES TYPE TABLE_OFFICES, END OF STR_IMZA.
Çok işime yaradı teşekkür ederim.