
RAP - Draft (Teil 2)
Im zweiten Teil zum Thema Draft Handling in RAP Objekten geht es um die bessere Darstellung des Draft Zustands an den einzelnen Positionen der Liste.
Inhaltsverzeichnis
Im letzten Artikel haben wir das Draft Handling in unsere App eingefügt. Dir sollte allerdings auch aufgefallen sein, dass die Anzeige des aktuellen Drafts in der Liste nicht ganz gut gelungen war, da der Status des Satzes nicht erkennbar war. In diesem Aritkel zeigen wir dir, wie die Darstellung noch etwas besser und detaillierter geht.
Einleitung
Nachdem wir das Draft Handling aktiviert und zur Verfügung gestellt haben, konnten wir die erste Version des List-Reports bewundern:
Leider fehlt in dieser Version noch die Darstellung des Draft Status und nur über den Filter finden wir Positionen, die geändert wurden, aber noch nicht gesichert wurden. Dies wollen wir mit diesem Artikel ändern und die nötigen Bestandteile übernehmen. Im letzten Artikel haben wir das Minimum für das Draft Handling implementiert.
Tabellen
Zuerst einmal muss die Partner Tabelle noch einmal angepasst werden. Dabei ergänzen wir am Ende weitere Informationen zum Änderer, aber auch zum Ersteller des Datensatzes. Die Tabelle ZBS_DMO_PARTNER sieht nun wie folgt aus:
define table zbs_dmo_partner {
key client : abap.clnt not null;
key partner : abap.char(10) not null;
name : abap.char(60);
street : abap.char(80);
city : abap.char(60);
country : land1;
payment_currency : abap.cuky;
last_changed_at : abp_locinst_lastchange_tstmpl;
last_changed_by : abp_locinst_lastchange_user;
created_at : abp_creation_tstmpl;
created_by : abp_creation_user;
}
Für eine saubere Verwaltung des Status empfiehlt sich die Implementierung aller 5 Felder. Im nächsten Schritt muss auch die Draft Tabelle angepasst werden um die neuen Informationen, dabei solltest du darauf achten, dass die Feldnamen den Namen im Interface View entsprechen und damit von den Tabellenfeldern abweichen:
define table zbs_dmo_dpartner {
key mandt : mandt not null;
key partnernumber : abap.char(10) not null;
key draftuuid : sdraft_uuid not null;
partnername : abap.char(60);
street : abap.char(80);
city : abap.char(60);
country : land1;
paymentcurrency : abap.cuky;
lastchangedat : abp_locinst_lastchange_tstmpl;
lastchangedby : abp_locinst_lastchange_user;
createdat : abp_creation_tstmpl;
createdby : abp_creation_user;
"%admin" : include sych_bdl_draft_admin_inc;
}
Core Data Service
Als nächster Schritt muss nun der Aufrufstack der Core Data Services erweitert werden, dazu werden die Felder der Tabelle übernommen. Für jedes Feld gibt es eine entsprechende Annotation, die wir nun vergeben, damit die Metainformationen in der App ordentlich abgeleitet werden können.
@Semantics.systemDateTime.lastChangedAt: true
last_changed_at as LastChangedAt,
@Semantics.user.lastChangedBy: true
last_changed_by as LastChangedBy,
@Semantics.systemDateTime.createdAt: true
created_at as CreatedAt,
@Semantics.user.createdBy: true
created_by as CreatedBy
Weiterhin müssen noch die folgenden Objekte angepasst werden, auf die wir hier nicht weiter im Detail eingehen, da es sich um kleine Anpassungen handelt. Mehr Informationen findest du beim Commit im Git Repository:
- Projection View - Übernahme der neuen Felder in die Projektionsschicht und damit in der App verfügbar machen.
- Verhaltensdefintion - Erweiterung des Mappings in der Verhaltensdefinition, um die neuen Felder.
Metadata Extension
Nach den Anpassungen ist allerdings die Information für den Draft immer noch nicht an den Positionen ersichtlich. Dazu müssen die Metadaten, konkret die Kopfinformationen, erweitert werden. Dazu fügen wir die folgende UI Annotation im Header ein:
@UI.headerInfo.title: { type: #STANDARD, value: 'PartnerName' }
Was ist nun genau in der App geschehen? Erst einmal wurde auf dem Detailbild, wenn ein Eintrag gewählt wird, eine zusätzliche Information im Kopfbereich angezeigt:
Desweiteren wird nun der Draft Status in der Liste von Einträgen angezeigt. Wenn auf den Eintrag geklickt wird, erhältst du Informationen zur letzten Änderung. Bist du selbst der Änderer, dann wird nur "Draft" angezeigt, ist jemand anderes der Änderer, dann werden auch Informationen zum User angezeigt:
Fazit
Neben einer besseren Darstellung der Draft Informationen, hat deine App nun auch eine automatische Verwaltung der technischen Informationen. Dazu sind nicht einmal viele Änderungen nötig, um einen gewissen Standard in den Apps zu implementieren.