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
Name Typ Bedeutung
attrname string
Attributname
obj /s10/any
Verknüpftes Objekt
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:
      
dblink_adrnr type string value 'db_adrc'.

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.

  
public section.

    
data:
      
addrnumber       type adrc-addrnumberAddress number
      title  
          type adrc-title" Title
      name1            
type adrc-name1" Name
      name2            
type adrc-name2" Name 2
      name3            
type adrc-name3" Name 3
      name4            
type adrc-name4" Name 4
      
name_text        type adrc-name_textConverted Name
      
name_co          type adrc-name_co" c/o
      city1            
type adrc-city1" City
      city2            
type adrc-city2District
      
po_box_num       type adrc-po_box_num" PO Box w/o No.
      
time_zone        type adrc-time_zone. Time zone
    

    
constants:
       
dbtablename type string value 'adrc'for select

endclass.  

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 -->
 
<div class="infoblock">
   <label class='label output' name="kunnr.name1"></label><br />

  
<span class='output' type="text" name='kunnr.name1'></span>
 </div>


 
<!-- Time zone -->
 <div class="infoblock2">
   <label class='label output' name="kunnr.adrnr.time_zone"></label><br />
   <span class='output' type="text" name='kunnr.adrnr.time_zone'></span>

  
<span class='output' type="text" name='kunnr.adrnr.time_zone@text'></span>
 </div
>


Anzeige:

 

 

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>
<div class='outputcelldiv'      style="width: 290px;"  name="name1"></div>           
<div class='outputcellhtmldiv'  style="width: 24px;"   name="land1.countryflag_html"></div>
<div class='outputcelldiv'      style="width: 200px;"  name="land1.landx50"></div>
<div class='outputcelldiv'      style="width: 80px;"   name="land1.waers"></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
    
constants:
      dblink_land1 
type string value 'zz_link_t005'.

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:         

 class zz_link_t005 definition inheriting from /s10/any.
 
  
public section.

    
data land1 type t005-land1.          " Country Key
    data lnplz type t005-lnplz.          " Postal code length
    data intca3 type t005-intca3.        " ISO code 3 char
    data waers type t005-waers.          " Country currency
    data landx type t005t-landx.         " Country text 
    data landx50 type t005t-landx50.     " Country text 50 characters

    data countryflag_html type string.   " Country flag as HTML code (.gif image)
    
    
constants dbtablename type string value 't005'" for database access

    
methods:
     build_countryflag_html
      
importing
        land1 type t005-land1
      
exporting
        countryflag_html type string,
    
     build_texts
      
importing
        land1 type t005-land1
      
exporting
        landx  type t005t-landx
        landx50 
type t005t-landx50.

endclass.


class zz_link_t005 implementation.

  
method build_countryflag_html.
    countryflag_html 
        |<img src='../../../ISO flags/| && land1 && |.gif/>|.
  endmethod.

  
method build_texts.
    select single landx landx50 from t005t into (landx,landx50)
      where land1 land1 and spras sy-langu.
  endmethod.
  
endclass.
 

Komponente S10 Framework