Funktion | Gibt das mit einem Attribut verknüpfte Objekt zurück | |||||||||
Beispiel |
myobj = s10link( "kunnr" ). |
|||||||||
Aufruf |
data: myattrname type string, myobj type /s10/any. myobj = s10link( myattrname ). |
|||||||||
Parameter |
|
|||||||||
Beschreibung |
Durch
s10link() können Fremdschlüsselbeziehungen des Datenbanksystems in einfacher
und performanter Weise benutzt werden.
Die Methode s10link() liefert für ein Attribut abhängig von dessen Inhalt ein anderes Objekt zurück, das über eine in der Klasse abgelegte Fremdschlüsselbeziehung (siehe unten) zugeordnet wird. Dem gleichen Attributwert wird innerhalb einer Klasse dabei immer das gleiche Objekt zugeordnet. Falls der Attributwert initial ist, wird kein Objekt angelegt und eine leere Objektreferenz zurückgeliefert. s10link() wird durch das S10 Framework automatisch aufgerufen, wenn in HTML bei name="..." ein zusammengesetzter Name mit Punkt-Notation angegeben ist, z.B. name="adrnr.title", und dabei das erste Attribut (hier "adrnr") nicht vom Typ Objekt oder Tabelle ist. Das zuerst angegebene Attribut wird als Fremdschlüsselbeziehung in eine andere Tabelle interpretiert. Im Beispiel "adrnr.title" ist "adrnr" eine Adressnummer, zu der die Werte in einer weiteren SAP-Tabelle "ADRC" abgelegt sind. Das S10 Framework liest dann dort die Spalte "title". Voraussetzung für diesen Mechanismus ist: (a) In der S10 Klasse ist dem Attribut "adrnr" ein Link, also eine Fremdschlüsselbeziehung, zugeordnet. Das kann explizit in der Klasse oder implizit über das SAP Data Dictionary geschehen. Explzit erfolgt die Zuordnung der Link-Klasse durch Definition einer Konstanten mit dem Namen "dblink_xxxxx" wobei xxxxx der Name des jeweiligen Attributs ist. Der Wert der Konstanten ist der Name der zugeordneten Klasse. Beispiel:
constants: Damit wird dem Attribut "adrnr" die Link-Klasse "db_adrc" zugeordnet, welche die Verbindung zur Datenbanktabelle ADRC herstellt. Die Klasse "db_adrc" kann z.B. wie folgt aussehen:
class db_adrc definition inheriting from /s10/any. Sie können über die S10 Utilities derartige Klassen aus Datenbanktabellen automatisch generieren lassen. Falls kein expliziter Link zugeordnet ist, wird die Wertetabelle des jeweiligen Attributs aus dem Data Dictionary gelesen, der Präfix "db_" vorangestellt und als Klassennamen der Link-Klasse verwendet. (b) Der automatische Datenbankzugriff erfolgt duch das S10 Framework mit einem Aufruf von s10databaseread(), wobei das erste Schlüsselfeld gesetzt wird, im Beispiel also die Adressnummer. Falls der Sprachenschlüssel ein Schlüsselfeld ist, wird hierfür der Sprachenschlüssel der aktuellen Session eingesetzt. Das S10 System merkt sich pro Session alle über einen Link erzeugten Objekte in der aufrufenden Klasse und verwaltet diese über eine Hash-Tabelle, sodass der Zugriff bei sich wiederholenden Attributwerten sehr schnell ist. In einer Anwendung, die Daten in den Fremdschlüsseltabellen ändert, also z.B. eine Änderung der Kundenadresse implementiert, sollte man den link-Mechanismus für die veränderlichen Daten nicht verwenden, da sonst weiterhin die alten Werte angezeigt werden. Sie können den Link-Mechnismus auch mehrstufig verwenden, z.b: name="kunnr.adrnr.title". In diesem Fall wird zunächst der Link zu "kunnr" verfolgt, also Tabelle "KNA1" in Klasse "db_kna1" gelesen, und dann dort die Adressnummer "adrnr" ausgewertet und über die Link-Klasse "db_adrc" die Datenbanktabelle "ADRC" gelesen. Beispiel HTML
<!-- Name 1 -->
Als Link-Klasse können Sie sowohl eine in Ihrem Programm definierte lokale Klasse als auch eine globale Klasse (Transaktion SE24) verwenden. Das ist praktisch, wenn Sie allgemeine Funktionalität bei der Anzeige von Objekten über den link-Mechanismus mehreren S10-Anwendungen zur Verfügung stellen möchten. Als Beispiel zeigen wir in einer Kundenliste zusätzlich zur Länderbezeichnung eine kleine Landesflagge sowie die Landeswährung an:
Dazu versehen wir das Attribut "land1" mit einem Link zu einer globalen Klasse, die wir "zz_link_t005" nennen; der Name ist frei wählbar. Diese Klasse stellt Informationen zum Länderschlüssel zur Verfügung, insbesondere die Landeswährung "waers" sowie eine HTML-Darstellung der Landesflagge "countryflag_html". HTML
<div
class='outputcelldiv'
style="width:
90px;"
name="kunnr"></div> Zur Darstellung der Landesflagge, die als HTML-String übertragen wird, haben wir die Klasse "outputcellhtmldiv" angegeben, da mit "outputcelldiv" der HTML-String ausgegeben würde. In unserer eigenen Klasse reicht es nun, dem Attribut "land1" die Link-Klasse "zz_link_t005" zuzuordnen: ABAP
* attribute links Auf diese Weise kann jede S10 Anwendung durch Zuordnen der Link-Klasse sowie Nennen der gewünschten Attribute in HTML, also "land1.countryflag_html", "land1.landx50", "land1.waers", auf die von der Klasse "zz_link_t005" zur Verfügung gestellten Informationen zugreifen. Das S10 Framework sorgt dafür, dass in einer Liste mit sich wiederholenden Länderschlüsseln die Informationen nur jeweils ein einziges Mal gelesen bzw. aufgebaut werden. Die wiederverwendbare Klasse "zz_link_t005" ist in SE24 definiert. Hier die
quellcodebasierte Darstellung, die man so auch als lokale Klassendefinition
verwenden kann:
data countryflag_html type string.
" Country flag as HTML code (.gif image) |
|||||||||
Komponente | S10 Framework |