← Projelerim
CT
TEI Teknisyen Sertifikasyon Takip Sistemi
41 Teknisyen › Sertifika Takibi
Backend Connected
DU

SAP Fiori Elements (List Report + Object Page) · RAP Managed · Draft · OData V4

Bir teknisyenin sertifikası süresi dolmadan önce, sistem bunu söyleyebiliyor mu?

NADCAP tarzı bir kalite sisteminde, kaynak, tahribatsız muayene (NDT) veya ısıl işlem gibi bir "özel süreci" uygulayan her teknisyenin o süreç için geçerli bir sertifikaya sahip olması gerekir. Bu proje, draft yönetimli bir RAP business object üzerine kurulu bir sertifikasyon takip sistemi: durumu (Aktif / Uyarı / Süresi Dolmuş) her kayıtta otomatik yeniden hesaplayan bir determination, tarih tutarlılığını zorunlu kılan bir validation, ve tek tıkla yenileme yapan özel bir action. Projeler 1–3'ten farklı olarak bu sefer klasik CDS + SEGW yerine RAP managed senaryosu ve OData V4 hedeflendi.

41
Teknisyen
74
Sertifika Kaydı
8
Özel Süreç (NADCAP)
3
Sunucu Taraflı İş Kuralı
01

Sertifika durumu asla manuel girilmiyor

Havacılık üretiminde bir özel sürecin (kaynak, NDT, ısıl işlem, kimyasal işleme) kalite sistemine uygun sayılması için, o süreci uygulayan teknisyenin sertifikasının güncel olması gerekir. Bu proje, sıfır veya daha fazla sertifikaya sahip teknisyenleri modelleyen iki seviyeli, draft özellikli bir RAP business object kuruyor — Status alanı hiçbir zaman elle set edilmiyor, her save işleminde geçerlilik tarihinden sunucu tarafında yeniden hesaplanıyor.

Temel Soru

Hangi teknisyen hangi süreç için sertifikalı, ve süresi dolmak üzere olan var mı?

List Report — tüm teknisyenlerin sertifikaları, Durum kolonunda A/W/E
List Report — 74 sertifika, otomatik hesaplanan Durum kolonuyla birlikte
02

Neler kuruldu

  • Draft yönetimli managed RAP business object

    Composition ile bağlı Teknisyen (root) + Sertifika (child), tam create/edit/activate/discard draft yaşam döngüsüyle, strict(2) altında.

  • CDS view'lardan ayrılmış UI annotasyonları

    Tüm @UI annotasyonları, @Metadata.allowExtensions: true ile açılan ayrı Metadata Extension'larda tutuluyor — veri modeli ile UI katmanı temiz şekilde ayrılıyor.

  • Value Help ile süreç seçimi

    Sertifika oluştururken Süreç alanı serbest metin değil — NADCAP checklist referansları (AC71xx) taşıyan bir Özel Süreç ana verisinden seçiliyor.

  • Tek tıkla "Renew Certification" action'ı

    Sertifika listesindeki bir kaydı seçip tek butona basarak geçerlilik tarihini bugünden itibaren 2 yıl uzatıp Durum'u tekrar Aktif'e çeken özel bir RAP action.

  • İki seviyeli yetkilendirme

    Teknisyen root'unda global authorization, Sertifika'da authorization dependent by _Technician — RAP runtime'ın dependent authorization'da bile zorunlu tuttuğu ek handler'lar dahil (bkz. Mühendislik Notları).

Object Page — Teknisyen genel bilgileri
Object Page — Teknisyen genel bilgileri
Sertifikalar sekmesi — Create ve Renew Certification action'ları
Sertifikalar sekmesi — Create ve Renew Certification action'ları
03

Üç hook, tek behavior pool

Sertifika entity'sinin iş mantığı, RAP behavior implementation class'ında (ZBP_TEI_CERT_TECHNICIAN) üç ayrı hook türüyle uygulanıyor: kayıttan önce çalışan bir validation, her save'de otomatik çalışan bir determination, ve kullanıcının tetiklediği özel bir action.

1

validateDates — kayıttan önce

ValidFrom >= ValidTo ise kayıt engellenir, her iki tarih alanında da hata işareti gösterilir.

2

setCertStatus — her save'de otomatik

ValidTo'dan Status yeniden hesaplanır: bugünden önceyse E (Expired), 90 gün içindeyse W (Warning), aksi hâlde A (Active).

3

renewCertification — kullanıcı tetikler

"Renew Certification" butonu ValidFrom'u bugüne, ValidTo'yu bugün + 2 yıla ayarlar, Status'u A'ya döndürür.

Süreç için Value Help diyaloğu — 8 NADCAP özel süreci
Value Help — NADCAP checklist referanslarıyla 8 özel süreç
Renew Certification sonrası — tarihler ve durum güncellenmiş
Renew Certification sonrası — Valid To 2 yıl uzamış, Status Aktif
04

İki seviyeli composition, bir referans entity

Teknisyen (root) sıfır veya daha fazla Sertifika'ya (child) composition ile sahip; her Sertifika ise bağımsız bir Özel Süreç referans kaydına association ile bağlı.

ZTEI_CERT_TECH
  • TECHNICIAN_ID (key)
  • NAME · DEPARTMENT
  • HIRE_DATE · BADGE_NO
↑ 1 : N (composition)
ZTEI_CERT_CERT
  • CERT_ID · TECHNICIAN_ID
  • PROCESS_CODE · CERT_LEVEL
  • VALID_FROM · VALID_TO · STATUS
N : 1 (association) ↓
ZTEI_CERT_PROC
  • PROCESS_CODE (key)
  • PROCESS_CATEGORY · REF_STANDARD
  • NADCAP_AC_REF (AC71xx)

Her iki draft-özellikli entity'nin kendi draft tablosu var (ztei_cert_tech_d, ztei_cert_cert_d) — Özel Süreç referans entity'sinin draft'a ihtiyacı yok, sadece okunuyor.

05

Beş gerçek sorun, bulunup çözüldü

1. Fiori Elements preview'ı sıfır satır gösterdi, Data Preview'da veri vardı. CDS view'larda hiç @UI annotasyonu yoktu. Annotasyonları doğrudan CDS view'lara eklemek yerine, @Metadata.allowExtensions: true ile açılan ayrı Metadata Extension'lara taşındı — SAP'ın tam da bu ayrım için önerdiği pattern.

2. Hesaplanan bir Status renklendirme alanı draft tablosunu bozdu. Renk kodlu bir CriticalityStatus alanı (CASE status WHEN 'A' THEN 3 ...) planlanmıştı. strict(2) + draft altında, hesaplanan bir alan BDEF mapping'de yer alamıyor, ama draft tablosunda da eksik olamıyor — çözülemez bir kombinasyon. Bu geliştirme bilinçli olarak bırakıldı.

3. Yetkilendirme iki farklı nedenle iki kez çöktü. Önce Teknisyen'de authorization master (instance) ile — global authorization'a geçilip kendi handler'ı yazıldı. Bu Teknisyen'i düzeltti, ama Sertifika authorization dependent by _Technician olmasına rağmen aynı sınıf hatayla çöktü: RAP runtime, bağımlı entity'nin bile kendi (önemsiz de olsa) global-authorization handler'ını, sadece kendi özel action'ını yetkilendirebilmek için zorunlu tutuyor.

4. Bir karşılaştırma içindeki DATS aritmetiği sessizce derlenmiyor. ValidTo <= today + 90 geçerli değil; toplama önce ara bir değişkene atanıp, sonra karşılaştırılmalı.

5. Numaralama mantığı olmayan readonly bir key alanı boş kaydediliyordu. CertId arkasında bir numbering class olmadan readonly işaretlenmişti. Tam bir RAP numaralama sınıfı yazmak yerine, sertifika numaralarının gerçek dünyada da genelde sertifikayı veren kurumdan dışarıdan geldiği mantığıyla, alan zorunlu-kullanıcı-girişli yapıldı.

Sunucu taraflı doğrulama hatası — Valid From must be before Valid To
validateDates — Valid From ≥ Valid To durumunu engelliyor
06

Neyle inşa edildi

Backend
KalemBileşenDetay
B-01Business objectABAP RESTful Application Programming Model (RAP), managed, strict(2), draft özellikli
B-02İş mantığıValidation, determination, özel action — ZBP_TEI_CERT_TECHNICIAN behavior pool'unda
B-03UI annotasyonlarıCDS Metadata Extension'lar, CDS view kaynaklarından ayrı
B-04ServisRAP tarafından üretilen OData V4, Service Definition + Service Binding ile expose ediliyor
Frontend & Platform
KalemBileşenDetay
F-01UI frameworkSAP Fiori Elements — List Report + Object Page (tamamen otomatik üretilir)
F-02PlatformSAP BTP ABAP Environment trial, Eclipse ADT'de geliştirildi
F-03Veri üretimiNode.js sentetik veri üretici, ZCL_CERT_LOAD_DATA ile yüklendi
07

Neyin gerçek, neyin gösterimsel olduğu

Teknisyen ve sertifika verisi sentetik olarak üretilmiştir. Gerçek TEI personel/sertifika verisi değildir; süreç kodları ve NADCAP checklist referansları (AC71xx) kamuya açık kaynaklardan gösterimsel olarak alınmıştır.
Status alanı için renk kodlu (UI.Criticality) gösterim uygulanmadı. strict(2) + draft kombinasyonu hesaplanan bir alanı desteklemediği için bu geliştirme bilinçli olarak bırakıldı — ayrıntı için yukarıdaki Mühendislik Notları'na bakın.
Sertifika numarası (CertId) otomatik üretilmiyor. Bir RAP early-numbering class'ı yazmak yerine, kullanıcının sertifikayı veren kurumdan gelen numarayı elle girmesi tercih edildi — gerçek dünya pratiğiyle tutarlı, ama otomatik numaralama isteyen sistemler için ek bir adım gerektirir.
İndirilebilir bir UI5 projesi yok. Uygulama tamamen annotation-driven Fiori Elements — yerelde çalıştırılacak bir webapp/ klasörü bulunmuyor, kaynak kodlar SAP sisteminden export edilmiş referans dosyaları olarak repo'da duruyor.

Uygulamalı bir SAP RAP · Fiori Elements · OData V4 öğrenme ve portföy projesi olarak geliştirilmiştir.