# ABAP Architect

_`: default codes are structure `S`, table type `TT`,
table `T`, data element `DE`, domain `DD`.
- **Objects table**: double-click a cell to edit **type** (dropdown), **name** and **description**;
invalid names are shown in red and the **Create** button is disabled while any name is invalid.
- **Edit...**: edits the fields of the selected object (name, ABAP type, length, decimals,
description, key for tables; row type for table types; domain for data elements; data type
for domains). Length/decimals are enabled per type; preset types fill them automatically.
4. Press **Create**; matching objects are created in dependency order (domains -> data elements ->
structures/table types -> root -> table), saved and activated. The log shows `OK` / `ERROR`
with SAP's response for each object.
Rules and notes:
- Names must be `Z...` / `Y...` or `/NAMESPACE/...`; max 30 characters (16 for transparent tables).
For structures/tables the 2nd or 3rd character must not be an underscore (SAP DT101);
suggestions are fixed automatically.
- Arrays (e.g. `items`) become a separate structure + table type. In structures they are added as a
**tabular component** (`items : Z_TT_...;`); transparent tables cannot contain deep components,
so they are skipped there (the log informs about it).
- Nested objects are referenced as a **substructure component** in structures
(`header : ZS_...;`); in transparent tables they are flattened with `include`.
Target objects are created first (topological ordering).
- The transparent table key is the first elementary field; if it is a STRING it is automatically
converted to `CHAR(20)` (STRING fields cannot be keys in DDIC).
- The DDIC DDL source contains **no comments** and uses **ASCII only** (the backend DDL parser
rejects `//` comments and non-ASCII characters).
- When saving into a transportable package, `corrNr` is passed. If an object is already recorded
in another transport (HTTP 409), the plug-in retries with the existing transport record.
- If there is no SAP session, right-click the ADT project and **Log On** before creating.
### License
Eclipse Public License 2.0 (EPL-2.0). See [LICENSE](LICENSE).
---
## Türkçe
### Özellikler
- **ABAP Types**: JSON nesneleri için `TS_*` structure, diziler için `TT_*` table type üretir
(`TYPES: BEGIN OF ... END OF ...`). XML için element/attribute analizine göre aynısını yapar.
- **Mapping**: JSON alan adları ABAP alan adlarından farklıysa `/ui2/cl_json=>name_mappings`
tablosu üretir (SNAKE_CASE dönüşümü, Suffix desteği).
- **iXML Kodu**: XML için `cl_ixml` tabanlı ayrıştırma kodu üretir (attributeler, diziler, iç yapılar).
- **Basit Dönüşüm**: XML için `tt:transform` (Simple Transformation) kaynağı üretir.
- **Şablon**: `/ui2/cl_json` serialize/deserialize + HTTP istemci (SM59) kod şablonları.
- **Doğrulama**: JSON/XML sözdizimi kontrolü, hata satır/sütun bilgisi.
- **DDIC Oluştur**: JSON/XML'den planlanan tipleri bağlı SAP sisteminde **gerçek DDIC nesnesi**
olarak oluşturur ve aktive eder: `Structure` (TABL/DS), `Table Type` (TTYP), `Transparent Table`
(TABL/DT), `Data Element` (DTEL), `Domain` (DOMA). İsimler Z/Y (veya `/NAMESPACE/`) kuralına
göre önerilir ve doğrulanır; paket/transport her seferinde sorulur.
- **Paketleri / Transportları listele**: bağlı sistemden paketleri (RIS arama) ve kullanıcının
değiştirilebilir transportlarını listeler, seçimle alanları doldurur.
- **Editöre Ekle**: Üretilen kodu aktif editörde imlecin bulunduğu konuma ekler. ABAP
Development Tools (ADT) ABAP editörü desteklenir (`IAbapSourcePage` adaptörü üzerinden).
- TR/EN arayüz, koyu/açık tema uyumlu renklendirme, satır numaraları.
### Ekran Görüntüleri
Ana görünüm (JSON girişi -> üretilen ABAP tipleri):

DDIC Nesneleri Oluştur diyaloğu:

### Gereksinimler
- Eclipse IDE 2026-03 (4.39) veya benzeri; Java 21+.
- ADT (ABAP Development Tools) isteğe bağlıdır; yoksa "Editöre Ekle" standart `ITextEditor`
uygulayan editörlerle çalışır, ancak "DDIC Oluştur" devre dışı kalır (eklentinin ADT'ye
derleme bağımlılığı yoktur, yansıma kullanılır).
- SAP sistemi: **S/4HANA (on-premise) veya NetWeaver 7.50+ (SAP_BASIS 750+)** ve ADT aktif olmalı.
**SAP BTP ABAP Environment (ABAP Cloud)** üzerinde DDIC oluşturma **desteklenmez** (klasik DDIC
nesnesi oluşturma REST API'si orada kapalıdır).
### Kurulum
1. `Help > Install New Software... > Add...`
2. Konum: `https://murattahtaciii.github.io/abap-architect/`
3. "ABAP Architect" kurun ve Eclipse'i yeniden başlatın.
Build çıktısından yerel kurulum:
1. Build alın (aşağıya bakın) → `releng/io.github.murattahtaciii.abaparchitect.site/target/repository`
2. `Help > Install New Software... > Add... > Local...` ile o klasörü seçin.
### Derleme
Maven Wrapper (`mvnw`) depoda bulunur; Maven kurulu olmasa da olur.
```bash
# Çevrimiçi (target platform: download.eclipse.org/releases/2026-03)
./mvnw clean verify
# Eclipse sürümü farklıysa (örnek)
./mvnw -Declipse.release=2025-12 clean verify
# Çevrimdışı: kurulu Eclipse kurulumunuzdan yerel target platform üretir
releng/sync-local-target.sh
./mvnw -Plocal-target clean verify
```
Çıktı: `releng/io.github.murattahtaciii.abaparchitect.site/target/repository/` (p2 update site).
Update site'i GitHub Pages'e (gh-pages dalı) yayınlama:
```bash
releng/publish-site.sh
```
### Kullanım
1. `Window > Show View > Other... > ABAP Architect > ABAP Architect`
2. Sol panele JSON veya XML yapıştırın (biçim otomatik algılanır, üstteki listeden elle de seçilebilir).
3. Sağdaki sekmelerden çıktıyı inceleyin; **Editöre Ekle** ile aktif editöre ekleyin.
4. Ayarlar: `Root` (kök yapı adı), `Str`/`Tab` (structure/table type ön ekleri), `Suffix`
(+ hedefi ABAP/JSON), `Snake_Case`, XML için `Attr: Düz`.
#### DDIC nesnesi oluşturma
1. JSON/XML verisini yapıştırın (DDIC sekmesinde plan önizlemesi görünür).
2. Araç çubuğundan **DDIC Oluştur**'a basın.
3. Açılan pencerede:
- **ADT Projesi**: bağlı ABAP projesi (aktif editörün projesi otomatik seçilir)
- **Paket**: örn. `$TMP` (lokal) veya `ZSD_PKG`; `$TMP` dışındaysa **Transport** zorunludur.
**Paketleri listele** bağlı sistemden paketleri (RIS arama, DEVC) listeler; **Transportları
listele** kullanıcının değiştirilebilir transportlarını getirir (önce resmi ADT
`IAdtTransportService.findTransports`, yoksa CTS REST).
- **İsimlendirme**: `__`; varsayılan kodlar: structure `S`, table type `TT`,
tablo `T`, data element `DE`, domain `DD`.
- **Nesneler tablosu**: satıra çift tıklayarak **tip** (dropdown), **isim** ve **açıklama**
düzenlenir; geçersiz isimler kırmızı görünür ve geçersiz isim varken **Oluştur** pasiftir.
- **Düzenle...**: seçili nesnenin alanlarını düzenler (alan adı, ABAP tipi, uzunluk, ondalık,
açıklama, tablolarda anahtar; table type için satır tipi; data element için domain; domain
için veri tipi). Uzunluk/ondalık alanları tipe göre açılır-kilitlenir; hazır tipler değerleri
otomatik doldurur.
4. **Oluştur**'a basın; nesneler bağımlılık sırasına göre (domain → data element → structure/
table type → kök → tablo) oluşturulur, kaydedilir ve aktive edilir. Günlükte her nesne için
`OK` / `HATA` ve SAP'nin döndürdüğü mesaj görünür.
Kurallar ve notlar:
- İsimler `Z...` / `Y...` veya `/NAMESPACE/...` olmalıdır; en fazla 30 karakter (transparent tablo 16).
Structure/tablolarda 2. veya 3. karakter alt tire olamaz (SAP DT101); öneriler otomatik düzeltilir.
- Diziler (ör. `items`) ayrı bir structure + table type olarak oluşturulur. Structure'larda
**tabular bileşen** olarak eklenir (`items : Z_TT_...;`); transparent tablo derin bileşen
içeremez, orada atlanır (günlükte bilgi verilir).
- İç içe nesneler structure'da **alt yapı bileşeni** olarak referanslanır (`header : ZS_...;`);
transparent tabloda `include` ile düzleştirilir. Hedef nesneler bağımlılık sırasına göre önce
oluşturulur (topolojik sıralama).
- Transparent tabloda anahtar, ilk elementary alandır; STRING ise otomatik olarak `CHAR(20)`'ye
çevrilir (DDIC'te STRING alan anahtar olamaz).
- DDIC DDL kaynağı **yorum satırı içermez** ve yalnızca **ASCII** karakterler kullanır (backend
DDL parser'ı `//` yorumlarını ve Türkçe karakterleri reddeder).
- Transport'lu pakete kaydederken `corrNr` gönderilir; nesne başka bir transportta kayıtlıysa
(HTTP 409) eklenti mevcut transport kaydıyla yeniden dener.
- SAP oturumu yoksa oluşturma öncesi ADT projesine sağ tıklayıp **Log On** yapın.
### Lisans
Eclipse Public License 2.0 (EPL-2.0). Bkz. [LICENSE](LICENSE).