Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Einleitung
1 Einführung
2 Installation
3 Erste Schritte
4 Einführung in Ruby
5 Eine einfache Bookmarkverwaltung
6 Test-Driven Development
7 Rails-Projekte erstellen
8 Templatesystem mit ActionView
9 Steuerzentrale mit ActionController
10 Datenbankzugriff mit ActiveRecord
11 E-Mails verwalten mit ActionMailer
12 Nützliche Helfer mit ActiveSupport
13 Ajax on Rails
14 RESTful Rails und Webservices
15 Rails mit Plug-ins erweitern
16 Performancesteigerung
17 Sicherheit
18 Veröffentlichen einer Rails-Applikation auf einem Server
Ihre Meinung?

Spacer
 <<   zurück
Ruby on Rails 2 von Hussein Morsy, Tanja Otto
Das Entwickler-Handbuch
Buch: Ruby on Rails 2

Ruby on Rails 2
geb., mit DVD
699 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-89842-779-1
Online bestellenPrint-Version jetzt bestellen
* versandkostenfrei in (D) und (A)
Pfeil 10 Datenbankzugriff mit ActiveRecord
  Pfeil 10.1 Einführung
  Pfeil 10.2 Eine ActiveRecord-Model-Klasse generieren
  Pfeil 10.3 Rake-Tasks zum Verwalten von Datenbanken
  Pfeil 10.4 Getter- und Setter-Methoden
  Pfeil 10.5 Erstellen, bearbeiten und löschen
  Pfeil 10.6 Suchen
  Pfeil 10.7 Datenbankschema und Migrations
  Pfeil 10.8 Migration-Skripte
  Pfeil 10.9 Migration-Befehle im Detail
  Pfeil 10.10 Assoziationen
  Pfeil 10.11 Validierung
  Pfeil 10.12 Statistische Berechnungen
  Pfeil 10.13 Callbacks
  Pfeil 10.14 Vererbung


Rheinwerk Computing - Zum Seitenanfang

10.11 Validierung  Zur nächsten ÜberschriftZur vorigen Überschrift

Validation-Helpers

ActiveRecord stellt einige Helper-Methoden (Validation-Helpers), die die Validierung von Formularen sehr vereinfachen, zur Verfügung. Im Folgenden werden die einzelnen Methoden beschrieben.


Rheinwerk Computing - Zum Seitenanfang

validates_acceptance_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Überprüft, ob ein Attribut akzeptiert wurde. Zum Beispiel, ob beim Abschluss einer Bestellung die AGBs akzeptiert wurden:

Listing  Aufruf im Model

class Booking < ActiveRecord::Base
  validates_acceptance_of :agbs,
    :message => "Bitte bestätigen Sie die AGBs"
end

Im View definieren Sie innerhalb des Formulars das entsprechende Feld:

<% form_for(@booking) do |f| %>
  ...
  AGBS bestätigen: <%= f.check_box :agbs %>
<% end %>

Fehlermeldung

Nur wenn die Checkbox vom User angehakt wird, ist die Validierung erfolgreich. Im anderen Fall wird das Formular nicht abgeschickt und die Fehlermeldung »Bitte bestätigen Sie die AGBs« ausgegeben.

virtuelle Attribute
Ein Attribut wie agbs in unserem Beispiel muss nicht im Model bzw. in der Tabelle enthalten sein. Das Feld wird virtuell vom Validation-Helper zum Model hinzugefügt.

Folgende Optionen können verwendet werden:

  • accept:
    Gibt an, welchen Wert das entsprechende Attribut haben muss, damit die Validierung akzeptiert wird. Standard ist 1. Dieser Wert wird automatisch von dem Checkbox-Helper check_box verwendet.
  • allow_nil:
    Wenn allow_nil auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut nil ist. Standard ist false .
  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • message:
    Individuelle Fehlermeldung. Die Standardmeldung ist »must be accepted«.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Rheinwerk Computing - Zum Seitenanfang

validation_associated  Zur nächsten ÜberschriftZur vorigen Überschrift

Überprüft, ob ein assoziiertes Objekt auch valide ist. Angenommen, wir haben eine Klasse Category, die mehrere Favoriten (Bookmark) enthalten kann. Eine Kategorie soll dann als valide gelten, wenn auch die zugeordneten Favoriten valide sind.

class Category < ActiveRecord::Base
  has_many :bookmarks

  validates_associated :bookmarks,
    :message => "Assoziierte Favoriten sind ungültig"
end

Folgende Optionen können verwendet werden:

  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • message:
    Individuelle Fehlermeldung. Die Standardmeldung ist »is invalid«.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Rheinwerk Computing - Zum Seitenanfang

validates_confirmation_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Bei Anmeldeformularen muss man sehr häufig das Passwort oder die E-Mail-Adresse doppelt eingeben, damit Schreibfehler möglichst vermieden werden. Genau für diesen Zweck können Sie die Helper-Methode validates_confirmation_of einsetzen.

Doppeltes Passwort

Angenommen, wir haben eine Anmeldeseite, um einen neuen Benutzer anzulegen, und das neue Benutzerkonto wird nur angelegt, wenn das Passwort doppelt eingegeben wurde.

Im Model können Sie die Helper-Methode validates_confirmation_of wie folgt einsetzen:

class User < ActiveRecord::Base
   validates_confirmation_of :password,
     :message => "Passwörter müssen übereinstimmen",
     :on => :create
end

Im View definieren Sie innerhalb des Anmeldeformulars ein Passwortfeld password für die Passworteingabe und ein Feld password_confirmation für die Bestätigung des Passworts:

<% form_for(:user, :url => users_path) do |f| %>
  Passwort:
  <%= f.password_field :password %>
  Passwort bestätigen:
  <%= f.password_field :password_confirmation %>
<% end %>
Attribut *_confirmation ist virtuell
Das Model bzw. die zugrunde liegende Tabelle muss nicht das Attribut password_confirmation enthalten. Es wird virtuell von dem Helper erstellt. Sie benötigen für das obige Beispiel nur das Feld password in Ihrer Tabelle.

Folgende Optionen können verwendet werden:

  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • message:
    Individuelle Fehlermeldung. Die Standardmeldung ist »doesn't match«.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Rheinwerk Computing - Zum Seitenanfang

validates_exclusion_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Mit diesem Helper wird überprüft, ob der Wert eines Attributs nicht in einer Liste vorkommt.

Im folgenden Beispiel möchten wir bestimmte Usernamen ausschließen.

class User < ActiveRecord::Base
  validates_exclusion_of :username,
    :in => ["admin", "root", "webmaster"],
    :message => "Unzulässiger Benutzername"
end

Folgende Optionen können verwendet werden:

  • allow_nil:
    Wenn allow_nil auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut nil ist. Standard ist false .
  • allow_blank:
    Wenn allow_blank auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut blank (leer) ist. Standard ist false .
  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • in:
    Legt eine Liste von Werten fest, die der Wert des Attributs nicht annehmen darf. Wenn der Wert des Attributs in der Liste vorkommt, fällt die Validierung negativ aus. Die Liste kann als Array oder als Range wie z. B. 10..20 angegeben werden.
  • message:
    Individuelle Fehlermeldung. Die Standardmeldung ist »is reserved«.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Rheinwerk Computing - Zum Seitenanfang

validates_inclusion_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Dieser Validierungs-Helper überprüft, ob der Wert eines Attributs in einer Liste vorkommt.

Im folgenden Beispiel wird ein Model definiert, das nur User aus bestimmten Ländern zulässt, die mindestens 18 Jahre alt sind.

class User < ActiveRecord::Base
  validates_inclusion_of :country,
    :  validates_inclusion_of :age => 18..150,
    :message => "Das Mindestalter ist 18 Jahre"

Folgende Optionen können verwendet werden:

  • allow_nil:
    Wenn allow_nil auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut nil ist. Standard ist false.
  • allow_blank:
    Wenn allow_blank auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut blank (leer) ist. Standard ist false.
  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • in:
    Legt eine Liste von Werten fest, die der Wert des Attributs nicht annehmen darf. Wenn der Wert des Attributs in der Liste vorkommt, fällt die Validierung negativ aus. Die Liste kann als Array oder als Range wie z. B. 10..20 angegeben werden.
  • message:
    Individuelle Fehlermeldung. Die Standardmeldung ist »is not included in the list«.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Rheinwerk Computing - Zum Seitenanfang

validates_format_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Mit diesem Helper kann überprüft werden, ob das Attribut einem bestimmten Muster, das als Regulärer Ausdruck angegeben wird, entspricht.

E-Mail-Muster

Im folgenden Beispiel wird das Muster für eine E-Mail-Adresse festgelegt:

class User < ActiveRecord::Base
  validates_format_of :email,
  :with => / A([^@ s]+)@((?:[-a-z0-9]+ .)+[a-z]{2,}) Z/i
end

Folgende Optionen können verwendet werden:

  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • message:
    Individuelle Fehlermeldung. Die Standardmeldung ist »is invalid«.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • with:
    Legt den Regulären Ausdruck für die Überprüfung fest.unless: Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Rheinwerk Computing - Zum Seitenanfang

validates_length_of/validates_size_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Mit diesem Helper können Sie die Länge von Zeichenketten überprüfen. Sie können entweder eine exakte Länge (is), einen Bereich (within), ein Maximum (maximum) oder ein Minimum (minimum) angeben.

Im folgenden Beispiel werden die Längen von Attributen einer Client-Klasse festgelegt:

class Client < ActiveRecord::Base
  validates_length_of :client_nr,
    :is => 7,
    :message => "Die Kundennummer muss exakt 7-stellig sein"
  validates_length_of :password,
    :minimum => 7,
    :message => "Das Passwort muss mind. 7 Zeichen lang sein"
  validates_length_of :comment,
    :maximum => 100,
    :message => "Der Kommentar ist zu lang "
  validates_length_of :lastname,
    :within => 2..100,
    :too_short => "Der Name ist zu kurz",
    :too_long => "Der Name ist zu lang"
end
Variable Fehlermeldungen
Ihnen ist vielleicht aufgefallen, dass wir in unserem Beispiel Redundanzen haben, die zu Fehlern führen können. Wenn wir z. B. bei der ersten Deklaration den Wert für die Option is ändern, müssen wir auch den Fehlermeldungs-Text entsprechend ändern. Das ist nicht im Sinne des DRY-Prinzips. Aber Rails bietet dafür ein Lösung. Im Fehlermeldungstext kann man die Zahl durch den Platzhalter %d , wie im folgenden Beispiel gezeigt, ersetzen:
class Client < ActiveRecord::Base
  validates_length_of :client_nr,
    :is => 7,
    :message => "die Kundennummer muss exakt
		%d-stellig sein"
end

Folgende Optionen können verwendet werden:

  • allow_nil:
    Wenn allow_nil auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut nil ist. Standard ist false.
  • allow_blank:
    Wenn allow_blank auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut blank (leer) ist. Standard ist false.
  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • is:
    Es wird auf eine exakte Länge überprüft.
  • wrong_length:
    Fehlermeldung, die ausgegeben wird, wenn der Wert nicht mit dem erwarteten Wert der Option is übereinstimmt. Standard ist: »is the wrong length (should be %d characters)«.
  • maximum:
    Die zu prüfende Zeichenkette darf höchstens die angegebene Anzahl an Zeichen besitzen.
  • message:
    Fehlermeldungstext, der für die Optionen minimum, maximum und is ausgegeben werden kann. Dient auch als Alias für die Meldungen too_long, too_short und wrong_length.
  • minimum:
    Die zu prüfende Zeichenkette muss mindestens die angegebene Anzahl an Zeichen besitzen.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • too_long:
    Fehlermeldungstext, der angezeigt wird, falls die Zeichenkette zu lang ist. Der Standardwert ist »is too long (maximum is %d characters)«.
  • too_short:
    Fehlermeldungstext, der angezeigt wird, falls die Zeichenkette zu kurz ist. Der Standardwert ist »is too short (min is %d characters)«.
  • within:
    Die Länge der zu prüfenden Zeichenkette muss innerhalb des angegebenen Bereichs liegen.
  • in:
    Synonym für within
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Die Optionen is, maximum, minimum und in dürfen nicht miteinander kombiniert werden.


Rheinwerk Computing - Zum Seitenanfang

validates_numericality_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Die Methode überprüft, ob ein Wert dem Format einer Ganzzahl (ohne Komma) oder einer Fließkommazahl (mit Punkt als Dezimalzeichen) entspricht.

Im folgenden Beispiel wird festgelegt, dass die ausgewählte Menge eines Produkts einer ganzen Zahl entsprechen muss. Ist dem nicht so, wird der Fehlertext »Bitte nur ganze Zahlen eingeben« ausgegeben:

class Product < ActiveRecord::Base
  validates_numericality_of :quantity,
    :only_integer => true,
    :message => "Bitte nur ganze Zahlen eingeben"
end

Folgende Optionen können verwendet werden:

  • allow_nil:
    Wenn allow_nil auf true gesetzt wird, so wird keine Validierung durchgeführt, falls das Attribut nil ist. Standard ist false.
  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • message:
    Individuelle Fehlermeldung. Standard ist »is not a number«.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • only_integer:
    Wenn die Option auf true gesetzt wird, wird überprüft, ob der Wert dem Format einer Ganzzahl enspricht. Ist die Option auf false gesetzt, wird überpüft, ob es sich um eine Fließkommazahl (mit Punkt als Dezimalzeichen) handelt. In diesem Fall gilt auch eine Zahl ohne Dezimalzeichen als gültig.
  • greater_than:
    Überprüft, ob der zu prüfende Wert größer ist als der definierte Wert.
  • greater_than_or_equal:
    Überprüft, ob der zu prüfende Wert größer als der oder gleich dem definierten Wert ist.
  • equal_to:
    Überprüft, ob der zu prüfende Wert gleich dem definierten Wert ist.
  • less_than:
    Überprüft, ob der zu prüfende Wert kleiner als der definierte Wert ist.
  • less_than_or_equal:
    Überprüft, ob der zu prüfende Wert kleiner als der oder gleich dem definierten Wert ist.
  • odd:
    Überprüft, ob der zu prüfende Wert eine ungerade Zahl ist.
  • even:
    Überprüft, ob der zu prüfende Wert eine gerade Zahl ist.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Kombination

Die Optionen können miteinander kombiniert werden, solange sie sich nicht gegenseitig ausschließen.


Rheinwerk Computing - Zum Seitenanfang

validates_presence_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Dies ist der einfachste Validierungs-Helper. Es wird überprüft, ob die zu prüfenden Felder gesetzt sind. Im folgenden Beispiel werden in der Bookmark-Klasse die Attribute title und url als Pflichtfelder deklariert:

class Bookmark < ActiveRecord::Base
  validates_presence_of :title, :url,
    :message => "Bitte angeben"
end

Folgende Optionen können verwendet werden:

  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • message:
    Individuelle Fehlermeldung. Standard ist »can't be blank«.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.

Rheinwerk Computing - Zum Seitenanfang

validates_uniqueness_of  Zur nächsten ÜberschriftZur vorigen Überschrift

Hiermit kann überprüft werden, ob ein Wert eines Feldes in einer Datenbanktabelle nicht mehrfach vorkommt. Dies ist z. B. bei Benutzernamen oder E-Mail-Adressen sinnvoll.

class Client < ActiveRecord::Base
  validates_uniqueness_of :email,
    :case_sensitive => false,
    :message => "Die E-Mail-Addresse wird bereits verwendet"
end

Folgende Optionen können verwendet werden:

  • allow_nil:
    Wenn allow_nil auf true gesetzt wird, so wird keine Validierung durchgeführt, falls das Attribut nil ist. Standard ist false.
  • allow_blank:
    Wenn allow_blank auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut blank (leer) ist. Standard ist false.
  • case_sensitive:
    Legt fest, ob zwischen Groß- und Kleinschreibung unterschieden wird. Der Standardwert ist true , d. h., es wird zwischen Groß- und Kleinschreibung unterschieden. In MySQL wird standardmäßig bei Zeichenketten-Vergleichen nicht zwischen Groß- und Kleinschreibung unterschieden, weshalb diese Option dann keine Wirkung hat.
  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • message:
    Individuelle Fehlermeldung. Standard ist »has already been taken«.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.
  • scope:
    Legt die Spalten fest, anhand deren die Eindeutigkeit des Datensatzes festgelegt wird.

Rheinwerk Computing - Zum Seitenanfang

validates_each  topZur vorigen Überschrift

Telefonnummerprüfung"

Dieser Helper ist in der Verwendung etwas komplexer, da er mit einem Block verwendet wird. Er wird eingesetzt, wenn Sie ein oder mehrere Attribute mit eigenem Code überprüfen möchten. Im folgenden Beispiel überprüfen wir mit validates_each, ob es sich um eine korrekte Telefon- und Faxnummer handelt.

class Client < ActiveRecord::Base
  validates_each :phone, :fax do |record, attr,value|
    unless PhoneService.check(attr, value)
      record.errors.add(attr)
    end
  end
end

Die Klasse PhoneService ist eine fiktive Klasse, die mit der Methode check überprüfen kann, ob die angegebene Rufnummer korrekt ist. Der Parameter record repräsentiert das ActiveRecord-Objekt. Der Parameter attr ist in unserem Beispiel :phone und :fax . Und der Parameter value beinhaltet jeweils den Wert des entsprechenden Feldes.

Folgende Optionen können verwendet werden:

  • allow_nil:
    Wenn allow_nil auf true gesetzt wird, so wird keine Validierung durchgeführt, falls das Attribut nil ist. Standard ist false.
  • allow_blank:
    Wenn allow_blank auf true gesetzt wird, wird keine Validierung durchgeführt, falls das Attribut blank (leer) ist. Standard ist false.
  • on:
    Gibt an, ob die Überprüfung beim Speichern (:save), nur beim Erstellen (:create) oder nur beim Ändern (:update) durchgeführt werden soll. Standard ist :save.
  • if:
    Legt eine Bedingung fest für die Entscheidung, ob die Validierung durchgeführt werden soll.
  • unless:
    Eine übergebene Methode, Prozedur oder Zeichenkette, die true oder false zurückliefert, prüft, ob die Validierung nicht auszuführen ist.


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
 <<   zurück
  Zum Katalog
Zum Katalog: Ruby on Rails 2
Ruby on Rails 2
Jetzt bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Ruby on Rails 3.1






 Ruby on Rails 3.1


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Katalog: JavaScript






 JavaScript


Zum Katalog: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de