Freitag, 21. Dezember 2018

FAQ: Fragenkatalogdesigner

Wo kann man das Gitter / Raster der Designerfläche ein- und ausschalten?

Am rechten Ende der Werkzeugleiste finden Sie ein Pull-Down-Menü mit Zugriff auf die entsprechenden Funktionen:



Hinweis: Der aktuelle Modus von Gitter / Raster wird in der Stastuszeile des Designers angezeigt.



Mit welchen Tastenkombinationen kann man die Position und Größe eines Fragenkatalogobjekts verändern?

Fokussieren Sie dazu das entsprechende Objekt im Designer und verwenden Sie zum Verändern der Position und der Größe die Cursortasten bei gedrückter <Shift>-Taste (Position) bzw. <Strg>-Taste (Größe). Ein aktiviertes Raster wird dabei ignoriert.

Wie kann man im Fragenkatalogdesigner mehrere Eingabeobjekte zusammenfassen, um sie gemeinsam zu verschieben?

Ziehen Sie mit der Maus einen Rahmen um die gewünschten Elemente. Alle auf dem entstehenden Panel befindlichen Fragenkatalogobjekte können jetzt gemeinsam mit der Maus verschoben werden. 

Wie lässt sich ein "Bildschirmausdruck" aller Fragenkatalogseiten anfertigen und ausdrucken?

Wechseln Sie dazu in den Testmodus des Fragenkatalogdesigners. Dort können Sie auf einer freien Stelle das Kontextmenü aufblenden, worin Sie die gewünschte Funktion finden:



Kann man im Testmodus sehen, was für ein SQL-Skript für die Vorgabeliste eines Auswahlfeldes zuständig ist?

Wenn Sie bei gedrückter <Shift>-Taste mit der rechten Maustaste das Auswahlfeld anklicken, dann wird Ihnen der für die Vorgabeliste verantwortliche SQL-Skript in einem Hint angezeigt:


Wie kann man die Anzeige der Fragennumerierung global im Fragenkatalog ausschalten?

Öffnen Sie dazu das Pull-Down-Menü der letzten Taste der Werkzeugleiste im Fragenkatalogdesigner und schalten Sie darin die Fragennummerierung aus Sie können die Funktion im Testmodus überprüfen.



Wie kann man bei einzelnen Fragen die Anzeige der Fragennumerierung ausschalten?

Dafür gibt es im Kontextmenü des Eingabeobjekts (nicht der Frage!) die Funktion "Frage aus/einblenden".

Wie läßt sich ein Fragenkatalogobjekt auf eine andere Seite des Fragenkatalogs verschieben?

Dafür ist in dessen Kontextmenü die Funktion "Auf andere Seite verschieben..." vorgesehen. Das Untermenü enthält eine Liste der möglichen Zielseiten.

Wie lässt sich die Anzeige einer Fragenkatalogseite im Clientprogramm verhindern?

Zu diesem Zweck muss lediglich ein " * "  vor den Seitenbezeichner gesetzt werden, z. B. "*BANKVERBINDUNG".

Was ist der Unterschied zwischen Steuerungs- und Prüfskripten?

Mit Steuerungsskripten können zur Laufzeit beispielsweise die Eigenschaften von Fragekatalogobjekten verändert und damit deren Verhalten gesteuert werden. Die Auswerung erfolgt bei Fokuswechsel. Prüfskripte dienen u. a. der Verhinderung logischer Eingabefehler. Sie werden immer erst beim Speichern des Fragekatalogs ausgeführt.

Wie kann man am schnellsten eine Frage in den Prüfskripteditor übernehmen?

Wenn Sie im Testmodus den Prüfskripteditor öffnen und ihn dann so auf dem Bildschirm platzieren, dass er das betreffende Eingabeobjekt nicht überdeckt, dann finden Sie im Kontextmenü des Eingabeobjekts die gewünschten Übernahmebefehle.


Wie lässt sich die Tabulatorreihenfolge der Eingabeobjekte auf einer Fragenkatalogseite explizit festlegen?

Für diesem Zweck ist im Fragenkatalogdesigner ein spezieller Editor implementiert. Er kann über das Pull-Down-Menü der letzten Taste der Werkzeugleiste aufgerufen werden.
Was versteht man unter "Piping" von Informationen im Fragenkatalog?

Wenn man Fragenkataloge mit sehr vielen Seiten im Einsatz hat, kann der Callagent (wenn er sich z. B. auf der Seite "n" des Fragenkatalogs befindet) während des Gesprächs nur mit Mühen auf Informationen zurückgreifen, die er auf Seiten davor im Fragenkatalog bereits erfasst hat. Besser ist es, wenn diese Informationen als Text auf der gerade aktiven Seite angezeigt werden. Eine Möglichkeit, um genau so etwas zu erreichen, ist das sogenannte "Piping". 

Das Verfahren ist nicht weiter spektakulär. Als Text eines Textlabels wird einfach der Feldname des entsprechenden Eingabeelements – und zwar in geschwungenen Klammern – eingetragen. Sie können dazu auch das Kontextmenü des Textabels verwenden, wo unter dem Eintrag "Fragenkatalog" alle verfügbaren Feldnamen angeboten werden. 

Beispiel: Hier werden auf einer speziellen Fragenkatalogseite bestimmte, im Fragenkatalog vom Call-Agenten erfassten Daten noch einmal zur Überprüfung angezeigt, wobei das Verfahren des "Pipings" zur Anwendung kommt:
Lässt sich nachträglich die Seitenreihenfolge im Fragenkatalogdesigner ändern?

Aber ja, natürlich. Die entsprechende Funktion finden Sie im Kontextmenü der Seitenreiter: "Reihenfolge ändern". Es öffnet einen Dialog der Art
mit dessen Hilfe Sie die Seitenreihenfolge explizit festlegen können.

Wie erstellt man einen Standardreport mit dem Reportdesigner im SQL-Manager - Beispiel: Personalliste

In diesem Einführungsbeispiel soll Schritt für Schritt die Entwicklung eines einfachen Reports (Personalliste des Call-Centers) im WINcontact-Reportdesigner auf der Grundlage einer Datenbankabfrage im SQL-Manager vorgestellt werden.

Schritte zur Erstellung eines Reports im SQL-Manager
  1. Erstellung einer Datenbankabfrage, welche die Daten für den Report liefert.
  2. Speichern der Abfrage unter einem eindeutigen Namen in der WINcontact–Datenbank
  3. Designen eines Reports zu genau dieser Abfrage (deren Daten als Banddatenquelle bereitgestellt werden) und Speichern der Reportvorlage in der WINcontact–Datenbank
  4. Freigabe des Reports zur allgemeinen Verwendung
Aufgabenstellung

Der Report soll Name und Privatanschriften aller in WINcontact erfaßten Call-Center-Mitarbeiter in Abhängigkeit ihrer Dienststellung ausgeben, wobei die Auswahl der Dienststellung über einen Dialog im Report (und nicht in der Datenbankabfrage) erfolgen soll

Datenbereitstellung über eine SQL-Abfrage im SQL-Manager

Die Stammdaten der Call-Center-Mitarbeiter, wie sie in der Personalverwaltung des Administration-Centers angezeigt werden, sind in der globalen Tabelle NUTZER enthalten. 

1. Datenbankabfrage erstellen

Die Daten, die der Report benötigt, lassen sich schnell mit folgender Abfrage gewinnen:

SELECT
 ISNULL(ANREDE,'')+' '+ISNULL(VORNAME,'')+' '+NACHNAME AS MITARBEITER,
 CASE
  WHEN TYP=1 THEN 'Administrator'
  WHEN TYP=2 THEN 'Supervisor'
  WHEN TYP=3 THEN 'Controller'
  WHEN TYP=4 THEN 'Callagent'
  END AS DIENSTSTELLUNG,
 PPLZ+' '+PORT AS ORT,
 PORTSTEIL AS ORTSTEIL,
 PSTRASSE+' '+ISNULL(PHNR,'') AS STRASSE,
 PTELEFON, PFAX, PEMAIL
FROM TMGLOBAL..NUTZER
WHERE TYP<5
ORDER BY TYP, NACHNAME
(Außendienstmitarbeiter werden in der Abfrage ignoriert)

2. Abfrage testen und speichern

Diese Abfrage muss in der WINcontact–Datenbank unter einem eindeutigen Bezeichner gespeichert werden, da nur für in der Datenbank gespeicherte Abfragen Reporte erstellt werden können.


Anschließend ist in der Werkzeugleiste des SQL-Managers die Druckfunktion freigeschalten. Über dessen Pull-Down-Menü kann dann der Reportdesigner geöffnet werden. Achten Sie aber darauf, dass die Datenbankabfrage immer auch ein paar Datensätze liefert, um beim Reportdesign einige Testdaten zur Verfügung zu haben.

3. Reportdesign

Nachdem Sie den Reportdesigner gestartet haben, sollten Sie ihn erst einmal Ihren Vorstellungen entsprechend anpassen. Wir empfehlen, dass Sie erst einmal die verfügbaren Symbolleisten und Hilfsfenster aufblenden. Dazu brauchen Sie nur im Hauptmenü unter "Ansicht" – "Symbolleisten" alle verfügbaren Einträge markieren. Der Objektinspektor sowie der Daten- und der Reportbaum sind andockbare Fenster. Sie sollten Sie mit der Maus so verschieben, dass am Ende folgende Anordnung der einzelnen Designerelemente erreicht wird:



Ganz links befindet sich die Palette mit den Reportdesignerobjekten, dann folgt der Objektinspektor, der über die <F11>-Taste ein- und ausgeschalten werden kann (ausprobieren!), dann der Reportbaum und schließlich die Arbeitsfläche, auf der der Report entworfen wird. Rechts daneben ist noch der Datenbaum angedockt. Alle diese Einstellungen bleiben auch beim Schließen des Designers erhalten.

Hinweis: Die einzelnen Symbolleisten sind ein- und ausschaltbar und können sowohl im angedockten Zustand aber auch als separate Fenster dargestellt werden.

Achten Sie bitte auf den Datenbaum. Dort finden Sie unter dem Reiter "Daten" alle von der SQL-Abfrage zurückgelieferten Datenfelder in der Banddatenquelle. Weitere Daten aus WINcontact werden über Reportvariablen und über nutzerdefinierte SQL-Variablen zur Nutzung zur Verfügung gestellt, die Sie analog über die Seite "Variablen" im Datenbaum erreichen. Außerdem finden Sie an genau der gleichen Stelle auch noch spezielle Systemvariablen, die vom Reportdesigner selbst angeboten werden.

Nach diesen wenigen Vorarbeiten können wir mit dem Design des Reports beginnen.

Wie bereits erwähnt, werden Reporte aus "Bändern" aufgebaut, die jeweils eine spezifische Funktion haben. Ein Reporttitelband z. B. wird immer nur auf die erste Seite eines mehrseitigen Reports gedruckt während ein Seitenkopfband ("PageHeader") auf jede Seite des Reports an oberster Position gedruckt wird. Daten werden gewöhnlich auf einem Masterdatenband ausgegeben, welches mit einer Datenquelle wie z. B. der Banddatenquelle verbunden ist. 

Die einzelnen Bänder erreichen Sie über die entsprechende Funktion in der senkrechten Leiste der Reportobjekte.


Als erstes fügen wir dem Report ein Masterdatenband hinzu und verbinden es mit der Banddatenquelle. Aufblenden der Reportvorschau zeigt, dass noch keine Daten angezeigt werden. Das ist auch nicht weiter verwunderlich, da das Band noch leer ist. Um den Namen der Callagenten auf dem Band auszugeben, wechseln Sie auf der rechten Seite in den Datenbaum und dort in die Banddatenquelle. Dann markieren Sie mit der Maus den Eintrag "MITARBEITER" und ziehen ihn mit gedrückter rechter Maustaste auf das Masterdatenband:


Wie bei jedem anderen Windows-Control auch können Sie das Textobjekt mit dem Datenfeld mit der Maus verschieben und auch dessen Größe ändern (probieren Sie bitte auch einmal die Kursortasten in Verbindung mit der <Shift> und der <Strg>-Taste aus, das Control muss aber fokussiert sein (Ankerkästchen)). Die Vorschau zeigt das Ergebnis:


Klicken Sie bitte als Nächstes auf den MasterData-Bandheader (worauf das Band fokussiert wird -> Ankerkästchen) und ändern Sie mit der Maus die Bandhöhe. Überprüfen sie danach den Effekt über die Reportvorschau.

Anschließend können Sie das MasterData-Band nach folgender Vorlage selbst gestalten:


Mit Hilfe der Funktionen in der Formatierungsleiste lässt sich jedes Textobjekt individuell formatieren (Mitarbeitername fett, Dienststellung rot und italic etc.).

Wie Sie in der Vorschau sehen können, werden auf dem Ausdruck jeweils in der Bandhöhe genau die Daten eines Datensatzes ausgegeben, für die auf dem Band jeweils ein Textobjekt existiert.


Jetzt führen Sie bitte auf das Textfeld "PTELEFON" einen Doppelklick aus:


Sie gelangen dann in den Textfeldeditor. In diesem Editor können Sie beliebigen Text schreiben und (immer in eckigen Klammern!) Platzhalter für Datenbankfelder und Variablen eintragen, z. B.


Wenn Sie mehrzeiligen Text eintragen, müssen Sie i. d. R. auch die Höhe des entsprechenden Textobjektes auf dem Band (und eventuell die Bandhöhe) anpassen.

Wir haben Ihnen demonstriert, wie man durch "Holen" und "Verschieben" eines Datenbankfeldes aus dem Datenbaum ein Reportband füllen kann. Sie können natürlich auch ein "pures" Textobjekt einfügen, in dem Sie es einfach der Reportobjektpalette entnehmen. Einfach anklicken, dass an der Maus hängende Textobjekt auf dem Band ablegen und in das anschließend aufgeblendete Memo-Objekt (=Textfeldeditor) den gewünschten Text schreiben. Das ist die ganze Vorgehensweise. Mit diesem Wissen können Sie jetzt das Datenband noch etwas schöner gestalten, beispielsweise so:



Die Linie als obere Begrenzung wurde mit dem Linienwerkzeug aus der Reportobjektpalette realisiert.

Kommen wir jetzt zum Objektinspektor. Achten Sie einmal darauf: Immer wenn Sie auf der Arbeitsfläche ein Objekt markieren (sichtbar an den Ankerkästchen), wird dieses Objekt mit all seinen Eigenschaften in den Objektinspektor eingetragen. Wenn Sie z. B. das erste Textfeld ("MITARBEITER") auf dem Masterdatenband markieren, dann finden Sie u. a. folgende Eintragungen im Objektinspektor:


Die Bedeutung der einzelnen Einträge wird Ihnen dabei immer kurz und bündig in der Infobox im unteren Teil des Objektinspektors angezeigt (hier "Align"). Um die Funktionsweise zu verstehen, wählen Sie einfach einmal die Eigenschaft "BrushStyle" aus und aus der Klappbox, die aufgeblendet wird, wenn Sie in das dazugehörige Eingabefeld klicken, den Wert "bsDiagCross". Den Effekt können Sie sowohl im Designer als auch in der Reportvorschau beobachten. Und damit dürfte bereits das Funktionsprinzip des Objektinspektors klar geworden sein. Wir empfehlen Ihnen, dass Sie jetzt noch die eine oder andere Eigenschaft des Textobjektes ändern und den Effekt im Vorschaumodus beobachten.

Neben dem Objektinspektor besitzen die meisten Reportobjekte auch noch ein individuelles Kontextmenü, über das weitere Funktionen zur Verfügung gestellt werden. Es lässt sich nach Fokussierung des Objektes über die rechte Maustaste öffnen.

Was jetzt noch fehlt, ist ein Reporttitel mit ein paar Angaben zum Call-Center und zum Bearbeiter dieses Reports. Sie brauchen dazu erst einmal nur ein Reporttitelband auf die Arbeitsfläche legen. Im Objektinspektor setzen wir dann die Höhe (=Height) des Bandes auf 4 Zentimeter (kleiner Hinweis: im Hauptmenü unter Ansicht – Optionen können Sie festlegen, ob Sie als Längenmaß im Report Zentimeter, Zoll oder Pixel verwenden möchten). Auf dieses Band platzieren wir dann ein Textobjekt aus der Objektpalette und geben als Text "Personalliste Call-Center" ein. Danach ändern wir die Eigenschaft "Align" im Objektinspektor noch auf "baWidth", wodurch das Band über die gesamte Seite gezogen wird. Zum Schluss sollten Sie das Textobjekt noch mit den Funktionen der Formatierungsleiste in Schriftart und Schriftgröße anpassen.

Jetzt wollen wir zum ersten Mal die Reportvariablen verwenden, die von WINcontact zur Verfügung gestellt werden. Dazu legen Sie wieder ein Rechteckobjekt auf das Reporttitelband und tragen als Text "Call-Center:" ein. Achten Sie jetzt bitte einmal auf die Werkzeugleiste des Texteditor bzw. Memofenster. Sie finden dort als erste Funktion "Ausdruck einfügen". Ein Klick darauf öffnet den Ausdruckeditor (er ist weitgehend mit dem Datenbaum am rechten Rand des Designers identisch), in dem Sie auf die Seite "Variablen" wechseln. Dort finden Sie u. a. den Zweig "Auftragnehmer". Der "Auftragnehmer" sind Sie, d. h. hier werden in Form von Variablen die Angaben zur Verfügung gestellt, die Sie im Administration-Center im Hauptmenü unter "Einstellungen Call-Center" eingetragen haben.

Jetzt noch die beiden Textobjekten formatieren und den Report ausprobieren:


Auf die gleiche Weise können Sie jetzt noch weitere Textobjekte im Reporttitelband anordnen, z. B.


Das Reporttitelband wird immer nur auf die erste Seite eines mehrseitigen Reports gedruckt. Möchte man, dass auch auf jeder anderen Seite ein Seitenheader erscheint, dann muss noch zusätzlich ein Seitenkopfband ("PageHeader") in den Report eingefügt und mit Text versehen werden:


Wie die Vorschau zeigt, wird dieser Header überflüssigerweise auch auf der ersten Seite angezeigt. Aber hier hilft der Objektinspektor weiter. Das Band "PageHeader" besitzt nämlich die Eigenschaft "PrintOnFirstPage", die Sie einfach nur auf "False" setzen müssen, um den Druck des Seitenkopfes auf der Titelseite zu unterdrücken.

Jetzt benötigen wir nur noch ein Seitenfußband ("PageFooter") für die Aufnahme der Seitennumerierung:


Dabei wird für die Anzeige der jeweils aktuellen Seitennummer die Systemvariable [Page] verwendet, die zentriert in ein Textobjekt eingetragen werden muß.

Damit ist die Gestaltung des Reports erst einmal abgeschlossen.

Der zweite Teil der Aufgabenstellung besteht darin, dass dieser Report auch in Abhängigkeit der Dienststellung der Mitarbeiter ausgegeben werden soll (also jeweils nur Administratoren, Supervisoren, Controller oder Callagenten). Diese Anforderung wollen wir über einen Dialog im Report lösen, in dem der Anwender die jeweilige Dienststellung auswählen kann, deren Mitarbeiter auszudrucken sind. Wir kommen an dieser Stelle zum ersten Mal mit der Programmierschnittstelle eines Reports in Berührung. 

Ein Dialogfenster in einen Report zu integrieren ist ganz einfach. Setzen Sie den Mauszeiger in die Reiterleiste "Code – Date – Page1" und wählen Sie aus dem Kontextmenü "Neuer Dialog". Als Reaktion darauf wird eine neue Seite "DialogPage1" mit einem leeren Dialogformular im Reportdesigner angelegt.

Beachten Sie auch, dass sich die Objektpalette am linken Rand geändert hat. Dort wird jetzt eine Vielzahl von neuen Dialogelementen (ähnlich wie im Fragenkatalogdesigner) angeboten.

Mit der Maus oder über den Objektinspektor können Sie die Größe des Dialogfensters nach Bedarf verändern. Danach legen Sie bitte zwei Schaltflächen (Buttons) auf den Dialog und ändern deren Beschriftung auf "Weiter" und "Abbrechen" (Objektinspektor, Eigenschaft "Caption"):


Jeder Button besitzt die Eigenschaft ModalResult, welches festlegt, wie und auf welche Weise das modale Dialogfenster geschlossen wird. Die Klappbox im Objektinspektor stellt dafür mehrere Auswahlmöglichkeiten bereit. Der Taste "Weiter" erhält "mrOK", was bewirkt, dass das Dialogfenster geschlossen und anschließend der Report aufgeblendet wird. "mrCancel" bricht dagegen den Dialog und damit auch die Reporterstellung ab. Diesen Eigenschaftswert müssen Sie der Taste "Abbrechen" zuweisen. Anschließend können Sie das Verhalten im Vorschaumodus überprüfen. 

Als Nächstes integrieren wir eine Klappbox (Kombinationsfeld) in den Dialog und beschriften ihn mit einem Textlabel:


Jetzt brauchen wir nur noch die Klappbox mit Vorgaben füllen. Die Vorgabenliste entspricht der Eigenschaft "Items" der Klappbox. Sie ist über den Objektinspektor zugänglich:


Außerdem sollten Sie noch die Eigenschaft "Text" löschen (es sei denn, Sie möchten die Klappbox mit einer Vorgabe belegen).

Damit ist die Erstellung des Auswahldialogs abgeschlossen. Wir müssen jetzt nur noch die Funktionalität des Reports anpassen (d. h., dass er z. B. nur die "Callagenten" auflistet, wenn in der Klappbox "Callagent" ausgewählt wurde). Dazu nutzen wir die Programmierschnittstelle des Reportdesigners aus.

Jedes Reportobjekt besitzt neben seinen "Eigenschaften" auch "Ereignisse", die hinter dem gleichnamigen Reiter im Objektinspektor aufgelistet werden. Solche Ereignisse sind z. B.:
  • OnBeforePrint wird ausgeführt, bevor das Objekt gedruckt wird
  • OnAfterPrint wird ausgeführt, nachdem das Objekt gedruckt wurde
In unserem Fall ist das Ereignis "OnBeforePrint" interessant und zwar das des Hauptdatenbandes "MasterData1". Dieses Band wird für jeden Datensatz der Banddatenquelle mit den darauf liegenden Textobjekten genau einmal ausgegeben. Dabei wird es nur dann gedruckt, wenn es auch sichtbar, d. h. dessen Eigenschaft "Visible" gleich "True" (also "wahr"), ist. Und genau diese Eigenschaft wollen wir ausnutzen, um entsprechend der Klappboxauswahl die auszugebenden Personaldaten nach der Dienststellung zu filtern. Bevor das Masterband gedruckt wird (Ereignis "OnBeforePrint") muss es entweder sichtbar oder unsichtbar geschalten werden je nachdem, ob der jeweils von der Banddatenquelle zurückgelieferte Datensatz im Feld "Dienststellung" den Wert enthält, der auch in der Klappbox des Dialoges ausgewählt wurde oder nicht. Dazu ist ein klein wenig Programmcode notwendig. Zuerst fokussieren Sie bitte das Hauptdatenband "MasterData1" auf der Reportseite und wechseln anschließend im Objektinspektor auf die Ereignisseite. Darin führen Sie einen Doppelklick auf das freie Feld neben dem Ereignis "OnBeforePrint" aus, worauf automatisch eine leere Ereignisbehandlungsroutine auf der Codeseite angelegt wird:

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin

end;


Darin muss jetzt lediglich festgelegt werden, dass, wenn der von der Banddatenquelle übergebene Datensatz als "Dienststellung" den gleichen Wert enthält wie die Klappbox im Dialogfenster, das Band "sichtbar" geschalten wird und ansonsten unsichtbar. Wenn die Klappbox dagegen leer ist, dann muß das Masterdatenband immer "sichtbar" sein, damit alle Personaldatensätze im Report ausgegeben werden. In Pascalscript sieht das dann so aus:

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
  if ComboBox1.Text<>'' then
   if Trim(<BandDatenQuelle."DIENSTSTELLUNG">)=ComboBox1.Text then
    MasterData1.Visible:=True
   else MasterData1.Visible:=False;
end;


Dazu folgende Anmerkungen: Sie können in einem Script auf jedes Reportobjekt über dessen Namen (so wie er im Kopf des Objektinspektors erscheint) und mit einem Punkt (".") dazwischen auf jede Eigenschaft des Objektes zugreifen, z. B. mit ComboBox1.Text auf den Inhalt der Klappbox im Dialogfenster. Datenbankfelder und Reportvariablen haben die gleiche Syntax wie auf der Reportseite, nur dass die eckigen Klammern durch spitze Klammern ersetzt sind, z. B. <BandDatenQuelle."DIENSTSTELLUNG">.

Und damit ist der Report fertig. Wenn Sie möchten, können Sie sich noch etwas mit dem Codeeditor beschäftigen. Er erlaubt z. B. das Setzen von Haltepunkten und das Anzeigen von Variableninhalten zur Laufzeit, was bei einem sehr umfangreichen Scriptcode sehr beim Debugging helfen kann.

Jetzt brauchen Sie nur noch das SQL-Script im SQL-Manager global freigeben und Sie können die Personalliste im Administration-Center jederzeit unter "Auswertung" (Projektbaumeintrag "Administrator") anzeigen und ausdrucken lassen.

Donnerstag, 20. Dezember 2018

Erstellung einer Datenbankabfrage mit dem SQL-Abfragenassistenten

Mit dem SQL-Abfragen-Assistenten lassen sich im Dialog Auswertungen über die WINcontact Datenbank erstellen, ohne dass dazu spezielle SQL-Kenntnisse erforderlich sind. Das folgende Beispiel erklärt schrittweise, wie man eine Liste mit Fragenkatalogantworten für Adressen, die jeweils einem Nettokontakt im Fragenkatalog entsprechen, erstellen kann. Die Ergebnisse sind dabei nach dem Kurznamen zu sortieren.


Wir wählen dazu auf der ersten Seite des Assistenten den letzten Abfragetyp aus und wechseln auf die Folgeseite:


Hier wählen Sie in der gewünschten Reihenfolge aus der linken Baumstruktur alle Felder aus, die Sie in der Ergebnistabelle angezeigt haben möchten. 


Auf der rechten Seite wird dazu analog eine Tabellenansicht mit zwei Spalten  – Feldname und Spaltenbezeichner – aufgebaut. Wenn Sie möchten, können Sie darin die Spaltenbezeichner ändern. Markieren Sie dazu als Beispiel das Feld PLZ und geben Sie in der oberen Eingabezeile stattdessen "Postleitzahl" ein. Mit dem blauen Doppelpfeil können Sie anschließend die Änderung in die Tabellenansicht übernehmen.  Mit "Weiter" gelangen Sie in die Vorschau, wo Ihnen neben dem generierten SQL-Skript auch die Ergebnistabelle angezeigt wird:



Mit der Taste [<Zurück] können Sie jederzeit wieder zurück in die Feldauswahl gehen.

Da wir nur Nettokontakte benötigen, müssen wir unsere Ergebnismenge noch einschränken und zwar durch die Bedingung LAST_STATUS='ABOVERKAUF' (was in unserem Beispiel einem Nettokontakt entspricht).


Die Stelle, wo Sie im Assistenten eine derartige Auswahlbedingung formulieren können, ist die Seite "Auswahlbedingung". Wenn Sie auf diese Seite gewechselt haben, suchen Sie sich in der Baumstruktur auf der linken Seite das Vergleichsfeld  aus (Abarbeitungsliste, Kontaktstatus letzter Kontakt)  und überführen es mit einem Doppelklick in die rechte Eingabemaske. Jetzt brauchen Sie nur noch den Vergleichsoperator und den Vergleichswert zuzuweisen, was über die beiden im Assistenten angebotenen Auswahlfelder schnell erledigt ist.  Auch hier übernehmen Sie mit dem blauen Doppelpfeil das Auswahlkriterium in die Liste der Auswahlbedingungen:



Das Ergebnis können Sie wieder auf der Folgeseite einsehen. Ähnlich können Sie auch Sortierungsfelder festlegen:


Wenn Sie in ihrer Abfrage mehrere Sortierbedingungen verwenden, können Sie diese über die beiden Pfeiltasten am rechten Rand beliebig umsortieren.

Das ist fast schon alles. Wenn Sie jetzt mit [Weiter >] auf die letzte Seite des Assistenten wechseln, können Sie sowohl den automatisch erzeugten SQL-Skript als auch die Ergebnistabelle, die dieser Skript liefert, einsehen:


Mit  [Übernehmen] müssen Sie zum Schluss die Abfrage in den SQL-Editor des SQL-Managers übernehmen:


Dort können Sie ihn dann, wie jedes andere SQL-Skript auch, ausführen, weiter bearbeiten, speichern oder einen Report dazu erstellen.

Wie designt man einen Report so, dass er sich optimal in ein Format Ihrer Wahl exportieren lässt

Die Qualität der Umsetzung eines Reports in Wysiwyg-fähige Formate (XLS, PDF, RTF und HTML) hängt entscheidend vom Design der dazugehörigen Reportvorlage ab. Ziel ist es, dass ein Ausdruck sowie eine Exportdatei den Report möglichst genauso wiedergibt, wie ihn auch die Vorschau darstellt.

Vermeiden Sie Überlagerungen und richten Sie Reportobjekte genau zueinander aus

Beim Export werden die einzelnen Bestandteile i. d. R. in Tabellenfelder oder Gitter aufgelöst. Zwei sich nicht überlagernde Textfelder ergeben zwei Tabellenzellen, während bei Überlappung insgesamt 7 Zellen entstehen:


Überlappungen können bei der Umsetzung zu Ungenauigkeiten, zu langen Exportzeiten und zu komplizierten MS Excel - Spreadsheets führen.

Hinweis: Nutzen Sie die Ausrichtmöglichkeiten im Reportdesigner, um Überlappungen möglichst zu vermeiden (z. B. Ausrichtungspalette, Hilfsgitter mit Align-Funktion, Guidelines bei der Objektpositionierung).

Verwenden Sie zum Einrahmen von Texten die Rahmeneigenschaften

Es ist nicht günstig, grafische Objekte Textobjekten zu unterlegen, nur weil man damit einen Rahmen oder eine Füllung erreichen möchte. Nutzen Sie für diesen Zweck die Eigenschaften, welche die Textobjekte im WINcontact - Reportdesigner nativ zur Verfügung stellen (Frame, Brushstyle, Color).

Im Reportdesigner Reporte mit Geschäftsgrafiken erstellen

Zur Visualisierung von Kampagnenergebnissen werden gern graphische Darstellungen in Form von Geschäftsgrafiken verwendet. Der Reportdesigner von WINcontact stellt zu diesem Zweck ein spezielles Objekt zur Verfügung, mit dessen Hilfe sich eine große Zahl verschiedener Geschäftsgrafiktypen in einen Report integrieren lassen. Das können Balkendiagramme, Tortendiagramme aber auch Linien- und Flächendiagramme sein. Sie lassen sich "flach"  oder in 3D-Darstellung  in Farben und Musterungen ihrer Wahl ausgeben. Dabei sind die Variationsmöglichkeiten in punkto Gestaltung sehr vielfältig wie ein Blick auf die Eigenschaften dieses Objektes im Objektinspektor beweist. 

Das folgende Beispiel zeigt, wie sich mit wenigen Einstellungen ein Balkendiagramm erzeugen lässt, in dem die Anzahl der Stimmen in Bezug auf eine Partei (Projekt 1 im Testmandanten, Frage: "Welche von den Volksparteien mögen Sie?") ausgegeben werden. Man kann in diesem Fall übrigens auf Bänder im Report verzichten.

Ausgangspunkt:  
Diese SQL-Anweisung  gibt jeweils die Anzahl der Stimmen pro Partei im gesamten Projekt zurück. Sie müssen sie im SQL-Manager unter dem Namen "Statistik Stimmenanzahl Parteien" speichern.

SELECT 'Die Linke' AS Partei, COUNT(*) AS Anzahl FROM WAHL2002 
WHERE VOLKSPARTEI_5=1
UNION
SELECT 'Grüne', COUNT(*) FROM WAHL2002 WHERE VOLKSPARTEI_6=1
UNION
SELECT 'FDP', COUNT(*) FROM WAHL2002 WHERE VOLKSPARTEI_4=1
UNION
SELECT 'NPD', COUNT(*) FROM WAHL2002 WHERE VOLKSPARTEI_7=1
UNION
SELECT 'CSU', COUNT(*) FROM WAHL2002 WHERE VOLKSPARTEI_2=1
UNION
SELECT 'CDU', COUNT(*) FROM WAHL2002 WHERE VOLKSPARTEI_1=1
UNION
SELECT 'SPD', COUNT(*) FROM WAHL2002 WHERE VOLKSPARTEI_3=1

Auf der Grundlage dieser Abfrage soll ein entsprechendes Balkendiagramm im Reportdesigner entworfen werden. Sie benötigen dazu nur zwei Textobjekte für die Titelzeilen und ein Diagrammobjekt, welches aus der Objektpalette entnommen und auf der Arbeitsfläche positioniert wird. Dabei wird der Diagramm-Assistent aufgeblendet (er öffnet sich auch bei einem Doppelklick auf das Objekt). In ihm ist zugleich der Objektinspektor für das Chart-Objekt (welches Bestandteil des Diagramm-Objektes ist) integriert.

Als Erstes müssen Sie den Diagrammtyp festlegen. Klicken Sie dazu im oberen Teil des Assistenten auf das entsprechende Icon, worauf sich die Diagrammauswahl öffnet. Dort  wählen wir ein farbiges Balkendiagramm mit vertikalen Balken aus.

Im nächsten Schritt ändert sich der Assistent dahingehend, dass Sie jetzt die Daten spezifizieren müssen, die im Diagramm dargestellt werden sollen. Dafür ist ein Series-Objekt zuständig. Hier müssen Sie einige Einstellungen vornehmen, die sich auf  die Datenquelle und die Werte beziehen, die im Balkendiagramm dargestellt werden sollen.  Als Datenquelle verwenden wir die Banddatenquelle, die von unserer SQL-Anweisung mit Daten versorgt wird:


Anschließend können Sie bereits im Vorschaumodus einen Blick auf das Diagramm werfen.  An diesem Punkt empfehlen wir Ihnen, dass Sie jetzt etwas mit diesem Diagramm spielen, in dem Sie im Objektinspektor des Assistenten die eine oder andere Eigenschaft des Chart- und des Series-Objekts verändern und in der Vorschau das Resultat begutachten. Auf diese Weise bekommen Sie ein Gefühl dafür, an welchen "Schrauben"  man drehen muss, damit am Ende die Geschäftsgrafik genau dem entspricht, wie Sie es sich vorgestellt haben.