Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 3 Nächste Version anzeigen »

Berechnete Attribute

Anstelle vom Auslesen und Schreiben fester Attributwerte in eine Datenbanktabelle kann ein Attribut seine Inhalte auch aus einer Funktion auf Datenbankebene beziehen. Der Name dieser Funktion muss mit CA (für Calculated Attribute) beginnen, der Rest des Namens sollte dem Namen des Attributs entsprechen, für das die Funktion verwendet wird. Es ist dabei zu beachten, dass der Rückgabetyp der Funktion dem angegebenen Datentyp entsprechen muss.

Berechnete Attribute verhalten sich für den Benutzer fast genauso wie "normale" Attribute. Sie können in Layouts und Suchergebnislisten angezeigt werden. Allerdings können berechnete Attribute nicht geschrieben werden und sie sollten sparsam verwendet werden, da ihre Berechnung unter Umständen sehr zeitintensiv werden kann, vor allem bei Suchen.

Beispiel 1 (Oracle): Berechnet die Anzahl verfügbarer Artikel. Die Berechnungsgrundlage bilden zwei andere Attribute, deren Werte über eine SELECT Anweisung herangezogen werden. Der Übergabeparameter id stellt in die INTID von dem aktuellen Objekt dar. Dieses wird automatisch an die Funktion mit übergeben. Der Rückgabewert muss vom Typ varchar2 sein, da bei Attributen grundsätzlich das Value als String in der Datenbank abgelegt wird.

CREATE OR REPLACE FUNCTION CA_ARTIKELVERFUEGBAR(id IN number) RETURN varchar2 IS
  summe number(12);
  bestand number(12);
  reserviert number(12);
begin
  SELECT strvalue INTO bestand
  FROM t_ud_go_attribute 
  WHERE intid_t_md_attribute = (SELECT intid FROM t_md_attribute WHERE strattribute='artikelBestand') 
        AND intid_t_ud_genericobject = id;
 
  SELECT strvalue INTO reserviert
  FROM t_ud_go_attribute 
  WHERE intid_t_md_attribute = (SELECT intid FROM t_md_attribute WHERE strattribute='artikelReserviert')
        AND intid_t_ud_genericobject = id;
 
  summe:=bestand-reserviert;
 
  RETURN(summe);
end CA_ARTIKELVERFUEGBAR;

Beispiel 2 (PostgreSQL):Berechnet die Anzahl aller Bestellwerte, die noch keine Rechnungen oder Lieferscheine enthalten. Diese Berechnung wird anhand einer Dynamischen Entität durchgeführt und es wird somit auf die View zugegriffen. Der Übergabeparameter id stellt in die INTID von dem aktuellen Objekt dar. Dieses wird automatisch an die Funktion mit übergeben.

CREATE OR REPLACE FUNCTION CA_BESTELLWERTGESAMT(id numeric)
  RETURNS numeric AS
$BODY$
DECLARE
    summe numeric (15, 2);
BEGIN
 
   SELECT SUM(bestellwert) INTO summe
   FROM v_de_bestellungen
  WHERE intid_t_ud_genericobject = id;
 
   RETURN summe; 
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

 Achtung: Bei PostgreSQL muss immer eine Löschanweisung mit angegeben werden, die für den Fall der Löschung des Berechnetem Attribut greifen kann.

 

DROP FUNCTION CA_BESTELLWERTGESAMT(id numeric);

Nachdem die Funktion in der Datenbank angelegt ist, muss das Attribut entsprechend eingerichtet werden. Das geschieht im [Entitätenwizard|Datenobjekte Wizard], indem die Datenbankfunktion unter Berechnungsvorschrift für das entsprechende Attribut ausgewählt wird.

Datenobjekte berechneteattribute 1.gif

In dem Dropdownfeld für die berechneten Attribute stehen alle Datenbank-Funktionen, die mit CA_ beginnen, zur Verfügung.

 Achtung: Da es sich bei diesen Attributen um eine dynamische Berechnung handelt, wird der Wert nicht in der Datenbank gespeichert sondern immer zur Laufzeit neu berechnet und angezeigt. So ist es z.B. nicht möglich, den Wert über eine Regel zu setzen !

Function Rumpf

PostgreSQL

CREATE OR REPLACE FUNCTION CA_<functionname>(id numeric)
  RETURNS numeric AS
$BODY$
 
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

Oracle

CREATE OR REPLACE FUNCTION CA_<functionname>(id IN number) RETURN varchar2 IS
 
end CA_<functionname>;
  • Keine Stichwörter