window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Lokaler Webshop, Teil III

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Die Auswahl der Artikel ist getätigt, der Warenkorb gefüllt, der Kassenvorgang abgeschlossen und eine Bestellbestätigung versandt worden. Welche Vorgänge nun noch für den in Access fingierten Webshop zu vollziehen sind, findet sich hier im letzten Beitrag zur Reihe. Vornehmlich hat der Vertrieb nun das Wort, damit die Ware zum Versand kommt.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1702_WebshopIII.zip.

Der Beitrag setzt die Serie aus den Ausgaben 08/2016 und 10/2016 fort.

Alte Bestellungen einsehen

Beim Öffnen des zentralen Shop-Formulars frmShop wird, wie früher bereits ausgeführt, aus einem Cookie die ID des Kunden ausgelesen, der den Shop zuletzt besuchte. Das übernimmt die vom Beim Laden-Ereignis (Form_Load) aufgerufene Funktion LoadTempVar:

LoadTempVar "KundeID"

Sie liest aus der Datei cookie.txt im Datenbankverzeichnis die beim letzten Schließen des Shops abgelegte ID, um sie in der TempVarKundeID” zwischenzuspeichern. Diese ID steht forthin für die Dauer der Sitzung allen weiteren Operationen zur Verfügung.

Sie wirkt sich etwa aus, wenn in der rechten oberen Ecke des Shops der Button Meine Bestellungen… angeklickt wird. Der für das Click-Ereignis hinterlegte Code findet sich in Listing 1. Zunächst erfolgt hier eine Überprüfung, ob die TempVar überhaupt schon gefüllt ist, was genau dann nicht der Fall ist, wenn sich ein Kunde zum ersten Mal im Shop bewegt. Ihr Wert beträgt dann 0. In diesem Fall erscheint das Dialog-Formular für einen Login, das nach Beendigung die TempVar KundeID selbst setzt, falls die Aktion nicht abgebrochen wird.

Private Sub cmdBestellungen_Click()
     If TempVars("KundeID") = 0 Then
         DoCmd.OpenForm "frmLogin", , , , , acDialog
     Else
         If MsgBox("Neu einloggen", vbQuestion Or vbYesNo, sLogo) = vbYes Then
             DoCmd.OpenForm "frmLogin", , , , , acDialog
         End If
     End If
     If TempVars("KundeID") = 0 Then Exit Sub
     ShowKunde
     DoCmd.OpenForm "frmBestellungen", , , "KundeID=" & TempVars("KundeID")
Private Sub ShowKunde()
     Dim sKunde As String
     
     sKunde = DLookup("[Vorname] & ' ' & [Nachname]", _
         "tblKunden", "ID=" & TempVars("KundeID"))
     Me!LblKunde.Caption = "Hallo, " & sKunde
     Me!LblKunde.Visible = True
End Sub

Listing 1: Aufruf der getätigten Bestellungen über den Button cmdBestellungen

Andernfalls kommt es zur Nachfrage nach einem neuen Login. Das könnte dann Sinn machen, falls der Kunde sich mit einer anderen E-Mail-Adresse anmelden möchte.

Wie auch immer: Nach dem Schließen der Dialoge kann KundeID immer noch den Wert 0 besitzen, worauf die Routine sang- und klanglos verlassen wird. Sonst aber öffnet sich das Formular für die Bestellungen. Zuvor allerdings wird noch ein Label im Shop-Formular über die Prozedur ShowKunde mit dem Namen des Users beschrieben, wofür eine DLookup-Funktion zum Einsatz kommt (siehe Bild 1).

Im Kopf des Shop-Forumlar frmShop blendet sich eine Begrüßungformel mit dem Namen des Kunden ein

Bild 1: Im Kopf des Shop-Forumlar frmShop blendet sich eine Begrüßungformel mit dem Namen des Kunden ein

Das über die OpenForm-Anweisung geladene Bestellungen-Formular frmBestellungen wird gleich im Aufruf über den optionalen Parameter WhereCondition nach der ID des Kunden gefiltert. Die Datenbasis für dieses Formular ist direkt die Tabelle tblBestellungen.

Allerdings spielt dies nur eine untergeordnete Rolle, denn das Formular selbst zeigt gar keine Daten an. Dies übernimmt ein im Detailbereich eingebetteter Unterbericht mit der Herkunft rptBestellungen in Berichtsansicht (siehe Bild 2).

Die Entwurfsansicht des Berichts zur Einsicht in die getätigte Bestellungen

Bild 2: Die Entwurfsansicht des Berichts zur Einsicht in die getätigte Bestellungen

Lediglich die Verknüpfung von Formularfeld KundeID zum Berichtsfeld KundeID ist vorzunehmen. Natürlich hätte man statt des Berichts auch ein Unterformular verwenden können, doch ersterer gestattet mehr Gestaltungsspielraum. Schließlich geht es hier nur um die passive Darstellung von Daten, wofür ein Bericht in der Regel die erste Wahl ist.

Der Bericht enthält im Detailbereich die Felder für die Artikelnummer (ArtNr), das Produkt, die Anzahl und den Bruttopreis einer Bestellposition. Das alles wird jedoch nach der Bestellung über deren Merkmal BestellID gruppiert, wie der Gruppen-Dialog des Berichts in Bild 3 zeigt.

Der im Entwurf des Berichts unten eingeblendete Gruppen-Dialog

Bild 3: Der im Entwurf des Berichts unten eingeblendete Gruppen-Dialog

Außerdem sortieren dessen Einstellungen noch die Bestellungen nach dem Bestelldatum (BestellDat). Im Fußbereich wird zu jeder Bestellung noch die Gesamtsumme über den hinterlegten Ausdruck Summe([Brutto]) ausgegeben.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar