09.01.2013 Aufrufe

Michael Niethammer Dipl. Ing.(FH) TMN Systemberatung GmbH

Michael Niethammer Dipl. Ing.(FH) TMN Systemberatung GmbH

Michael Niethammer Dipl. Ing.(FH) TMN Systemberatung GmbH

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

What‘s new in<br />

Microsoft Visual Foxpro 8.0<br />

Überblick über die wichtigsten Änderungen<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 1<br />

<strong>Michael</strong> <strong>Niethammer</strong> <strong>Dipl</strong>. <strong>Ing</strong>.(<strong>FH</strong>)<br />

<strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

� Beratung und Coaching von Projekten<br />

� Schulung<br />

� Individual Entwicklung<br />

� Spezialisiert auf OO / UML / Visual FoxPro<br />

� Seit 10 Jahren FoxPro/VFP Entwickler<br />

� Div. Großprojekte<br />

VFP 8 Toolbox (1)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 2<br />

� Hilfsmittel ähnlich wie in .NET<br />

geschrieben mit VFP, Quellcode in Xsource.zip<br />

� Aufruf:<br />

� Übers Menü<br />

� Do (_ToolBox)<br />

� Gesteuert über eine VfP-Tabelle<br />

(C:\Dokumente und Einstellungen\wmn\Anwendungsdaten\Microsoft\Visual FoxPro 8\Toolbox.dbf)<br />

� Drag & Drop Funktionalität ausprobieren!!<br />

Folie 3


VFP 8 Toolbox (2)<br />

� Anpassen über ShortCut-Menü<br />

� Hinzufügen eigener Kategorien<br />

� Eigener Klassen<br />

� Konfigurieren der Toolbox<br />

� Arten von Kategorien:<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

VFP 8 Toolbox (3)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 4<br />

� Dynamische Kategorien möglich<br />

� Einzelne Dateien<br />

� Allgemeingültige Kategorien<br />

� Textblöcke<br />

(änderbar über Item-Properties, Text-<br />

Merge-Unterstützung!!!!!<br />

� Nur eine Ebene möglich!<br />

� Filteroption hilft enorm!!<br />

Task Pane Manager<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 5<br />

Folie 6


Task Pane Manager (1)<br />

� Erweiterung der Task-Pane<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Task Pane Manager (2)<br />

� Task Panes bereitstellen/weitergeben:<br />

weitere Panes unter<br />

http://taskpane.leafe.com/files<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 7<br />

Folie 8<br />

Code Referenzen (Suchen) (1)<br />

� Komplett neue Suchfunktionalität<br />

Folie 9


Code Referenzen (Suchen) (2)<br />

Suchoptionen<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Klassendesigner<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 10<br />

� Unterstützt auch die neuen Basisklassen<br />

� Vererbter Code in den Parentklassen<br />

kann direkt angezeigt werden:<br />

� Im Eigenschaftenfenster (rechte<br />

Maustaste)<br />

� Im Codefenster (Zusatzbutton mit Anzeige<br />

auf welcher Ableitungsstufe Code in der<br />

Methode steht!!!!)<br />

Database Engine (1)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 11<br />

� Das Verhalten wie VfP mit SQL Select-<br />

Befehlen umgeht wurde geändert!<br />

Ziel: Höhere ANSI 92 Kompatibilität<br />

Neuer Schalter:<br />

� Bisheriges Verhalten SYS(3099 , 70 )<br />

� Standard unter VfP 8 SYS(3099 , 80 )<br />

� Oder Set Enginebehaviour 70 | 80<br />

Folie 12


Database Engine (2)<br />

Unterschiede zwischen VfP8 und älteren Versionen:<br />

� DISTINCT unterstützt keine Memo oder General-<br />

Feldern mehr<br />

� UNION unterstützt Memofelder nur noch dann<br />

wenn „UNION ALL“ verwendet wird.<br />

� GROUP BY unterstützt keine Memo- oder General-<br />

Felder mehr<br />

Neues Verhalten beim Gruppieren:<br />

ungültig: SELECT company,country FROM customer GROUP BY<br />

country<br />

gültig: SELECT COUNT(company), country FROM Customer<br />

GROUP BY country<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 13<br />

Database Engine (3)<br />

Unterschiede zwischen VfP8 und älteren Versionen:<br />

� HAVING Kann auch ohne Group by<br />

verwendet werden solange im Statement<br />

KEINE Agregatfunktion verwendet wird.<br />

Ungültig:<br />

SELECT count(company),country FROM customer<br />

HAVING country="Sweden„<br />

gültig:<br />

SELECT company,country FROM customer HAVING<br />

country="Sweden"<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 14<br />

Database Engine (4)<br />

Unterschiede zwischen VfP8 und älteren Versionen:<br />

� Bei LIKE angehängte Leerstellen am<br />

Vergleichsausdruck wurden in alten VFP-<br />

Versionen nicht als gültiger<br />

Vergleichsausdruck angesehen:<br />

SELECT * FROM table1 WHERE column1<br />

LIKE "1__„<br />

findet unter VFP 7: 123<br />

unter VFP 8: 1, 12, 123<br />

1234 würde generell nicht gefunden!<br />

Folie 15


Database Engine (5)<br />

Unterschiede zwischen VfP8 und älteren Versionen:<br />

� Neuer Feldtyp: autoincrement<br />

�integer Feld,<br />

schreibgeschützt<br />

(SET AUTOINCERROR ON |<br />

OFF ).<br />

�Für freie und DBC-Tabellen<br />

möglich<br />

�Ein oder mehrere Felder in<br />

einer Tabelle möglich<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

�Schrittweite www.tmn-systemberatung.dekann<br />

Folie 16<br />

b d (f t)<br />

Database Engine (6)<br />

Unterschiede zwischen VfP8 und älteren Versionen:<br />

� Captions<br />

� können jetzt dynamisch aus einer Funktion<br />

erstellt werden. Nutzbar z.B. für<br />

mehrsprachige Anwendungen.<br />

� Maximale Länge des Ausdrucks 254 Zeichen<br />

� ACHTUNG:<br />

Ausdrücke werden auch zur Designzeit im<br />

Formdesigner ausgewertet (drag&drop von<br />

feldern aus dem Environment). Dies kann zu<br />

Problemen führen.<br />

Caption-Property des Labels:<br />

=FIELD('Company', 'customer', 1)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

View Designer (1)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 17<br />

� Funktioniert endlich auch mit Joins richtig<br />

� Priorisierung von joins möglich,<br />

sequentielle Joins durch „Prev.Join“<br />

� Suchergebnis<br />

stimmt mit den<br />

Erwartungen<br />

überein!<br />

� Alias-Namen<br />

vergebbar<br />

Folie 18


View Designer (2)<br />

� Priorisierung von Filtern:<br />

AND hat Vorrang vor OR d.h. Prio „0“<br />

führt bei folgendem View zu falschem<br />

Ergebnis.<br />

VfP 8 setzt<br />

Klammern je nach<br />

Prioritaet<br />

� FORCE Schalter<br />

um Optimierung<br />

„abzuschalten“<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

View Designer (3)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 19<br />

� SubQueries sind als Filterbedingung<br />

möglich!!!!! Neue Statements:<br />

� Exists<br />

� IN<br />

Aber:<br />

Subselect-Statements können nicht visuell<br />

gepflegt werden. Am besten Statement in<br />

die SQL-Ansicht reinkopieren.<br />

View Designer (4)<br />

� SQL- Ansicht<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 20<br />

� Zeigt jetzt auch alle DBSETPROP-Statements<br />

� View kann auch in diesem Fenster gepflegt<br />

werden.<br />

� Verbindungen werden<br />

jetzt besser genutzt (sog.<br />

Anweisungs-handles statt<br />

Connection-handles<br />

Folie 21


?<br />

Neue Basisklassen Cursoradapter (1)<br />

� Unterstützt den Zugriff auf<br />

unterschiedliche Datenquellen:<br />

� VFP-Daten<br />

� ODBC Datenquellen<br />

� ActiveX Data Objects ADO<br />

� XML<br />

� Egal welche Datenquelle in der<br />

Anwendung steht ein VFP-Cursor zur<br />

Verfügung<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 22<br />

Neue Basisklassen Cursoradapter (2)<br />

� Aufgaben der CursorAdapter-Klasse:<br />

� Zuständig für das Laden der Daten in einen VFP-<br />

Cursor<br />

� Dynamischer Zugriff auf verschiedene Datenquellen<br />

� Kontrolliert wie Datensätze angelegt, geändert und<br />

gelöscht werden<br />

� CA können nicht nur im DE einer Form verwendet<br />

werden<br />

� Funktionieren auch ohne Datenvironment (z.B. in<br />

einem Container<br />

� Keine Relationen zwischen Adaptern definierbar –<br />

aber zwischen den Ergebnis-Cursor<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 23<br />

Neue Basisklassen Cursoradapter (3)<br />

Erweiterungen/Hinweise:<br />

� Tableupdate wurde erweitert und ruft im<br />

Cursoradapter die Methoden InsertCmd,<br />

UpdateCmd, and DeleteCmd für jeden<br />

Datensatz auf!<br />

Folie 24


Report Designer (1)<br />

� Neue Report-Optionen in den Vfp-<br />

Standardeinstellungen<br />

�Optionales abspeichern der<br />

Druckerinfos im Report<br />

(Endlich!)<br />

�Optional DBC-Captions<br />

verwenden<br />

�Default Font für Berichte<br />

(Endlich!)<br />

� Im Kopf-und Fussbereich können jetzt leere Zeilen<br />

unterdrückt werden<br />

� Detaillierte © Optionen 2002 <strong>TMN</strong> <strong>Systemberatung</strong> für Zusammenfassungen<br />

<strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

� Drag & Drop von Feldern incl. Captions aus der<br />

Report Designer (2)<br />

� Seitenzahlen:<br />

neue Variable _pagetotal<br />

� Druckmodus oder Seitenansicht?<br />

Neue Funktion sys(2040)<br />

1 = Seitenansicht<br />

2 = es wird gerade gedruckt<br />

� Fenster „Drucken....“ unterdrücken<br />

jetzt durch neue Option NoDialog<br />

� Mehrere Reports in einem Druckauftrag<br />

jetzt durch neue Option NoPageEject<br />

� Systemvariablen weiterzählen<br />

jetzt durch neue Option NoReset<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Report Designer (3)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 25<br />

Folie 26<br />

� Fehlerhandling<br />

tritt ein Fehler im Bericht auf wird dieser jetzt<br />

auch in der aktuellen Fehlerroutine abgefangen<br />

und angezeigt! Fehler müssen behandelt werden.<br />

� Neue Befehlsoptionen<br />

REPORT FORM FileName1 | ? [ENVIRONMENT] [Scope]<br />

[FOR lExpression1] [WHILE lExpression2] [HEADING<br />

cHeadingText] [NOCONSOLE] [NOOPTIMIZE] [PLAIN]<br />

[RANGE nStartPage [, nEndPage]] [TO PRINTER<br />

[PROMPT] [NODIALOG] | TO FILE FileName2 [ASCII]]<br />

[NAME ObjectName] [SUMMARY] [NORESET]<br />

[NOPAGEEJECT] [PREVIEW [[IN] WINDOW WindowName<br />

| IN SCREEN] [NOWAIT]]<br />

Folie 27


Error Handling (1)<br />

Zwei Möglichkeiten:<br />

� ON ERROR command<br />

� TRY...CATCH...FINALLY (hat Vorrang)<br />

Neu: Sys(2410)<br />

Dient zur Ermittlung des errorhandlertyps:<br />

0 System handler<br />

1 TRY...CATCH...FINALLY<br />

2 Error event<br />

3 ON ERROR command<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Error Handling (2)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 28<br />

� Neu:<br />

TRY [ tryCommands ] [ CATCH [ TO VarName ] [ WHEN<br />

lExpression ] [ catchCommands ] ] [ THROW [ eUserExpression ] ]<br />

[ EXIT ] [ FINALLY [ finallyCommands ] ] ENDTRY<br />

TRY Beginn der Fehlerbehandlungsstruktur<br />

tryCommands Befehle, die Ausgeführt werden sollen<br />

(Standardfall)<br />

CATCH tritt bei der Ausführung der Befehle ein<br />

Fehler auf, wird ein Objekt vom Typ<br />

Exception angelegt und die Referenz in<br />

der Variable VarName abgelegt, die<br />

Programmausführung wird nach dem<br />

Catch-Statement fortgeführt.<br />

WHEN optionale Bedingung für die Catch-Routinen<br />

Error Handling (2a)<br />

� TRY<br />

*-- potentiell fehlerhafter Code<br />

CATCH TO VarName WHEN lBedingung1<br />

*-- Code für Bedingung1<br />

CATCH TO VarName WHEN lBedingung2<br />

*-- Code für Bedingung2<br />

THROW VarName<br />

CATCH TO VarName WHEN lBedingung3<br />

*-- Code für Bedingung3<br />

[EXIT]<br />

FINALLY<br />

*-- Code zum Aufräumen<br />

ENDTRY<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 29<br />

Folie 30


? VFP 7<br />

? VFP 8<br />

Error Handling (3)<br />

� THROW legt ein weiteres Exceptionobjekt an. Wird<br />

verwendet um Exceptions an einen höheren Error-<br />

Handler/Try-Catch-Block weiterzureichen (wenn<br />

vorhanden wird das Exceptionobjekt übergeben).<br />

� FINALLY nachfolgende Zeilen werden nach der<br />

Ausführung des TRY-Blocks abgearbeitet – IMMER<br />

auch wenn der Fehler hochgereicht wurde!<br />

(Cleanup).<br />

� Eigene Exception-Klassen können nur<br />

programmatisch erstellt werden!<br />

� Alle bisherigen Errorhandling-Funktionen können<br />

weiter verwendet werden<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Error Handling (4)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 31<br />

� ACHTUNG:<br />

Eingeschränkte Verwendung von Befehlen<br />

Command TRY CATCH FINALLY<br />

CANCEL Yes Yes Yes<br />

CLEAR ALL Yes No No<br />

CLOSE ALL Yes Yes Yes<br />

DOEVENTS Yes Yes Yes<br />

ERROR Yes Yes Yes<br />

EXIT Yes Yes Yes<br />

LOOP No No No<br />

QUIT Yes Yes Yes<br />

RELEASE Yes Yes Yes<br />

RESUME Yes Yes Y es<br />

RETRY No No No<br />

RETURN No No No<br />

RETURN TO No<br />

MASTER<br />

No No<br />

RETURN TO No<br />

<br />

No No<br />

SET STEP<br />

ON<br />

Yes Yes Yes<br />

SUSPEND Yes Yes Yes<br />

THROW Yes Yes Yes<br />

Eventbinding (1)<br />

� Neu: Eventbinding auf native VfP-Objekte<br />

� Bindevent()<br />

� Unbindevent()<br />

� RaiseEvent()<br />

� Avents()<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 32<br />

Hiermit können Objekte auf Ereignisse anderer<br />

Objekte reagieren OHNE, daß deren Code<br />

geändert werden muß!! Hiermit können auch<br />

User-Events erstellt werden!<br />

Problem: Fehlersuche<br />

Folie 33


Eventbinding (2)<br />

� Eventbinding erfolgt immer zwischen einer EventSource<br />

und einem oder mehreren Delegate(s)<br />

BINDEVENT(oEventSource, cEvent, oEventHandler, cDelegate [,<br />

nFlags])<br />

nFlags:<br />

0 00 Call delegate code before event code. (Default)<br />

1 01 Call event code before delegate code.<br />

2 10 Do not trigger event (call delegate code) when<br />

a simple method call occurs.<br />

3 11 Call event code before delegate code. Do not<br />

trigger event (call delegate code) when simple<br />

method calls occur.<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Eventbinding (3) Beispiel<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 34<br />

PUBLIC oHandler<br />

oHandler=NEWOBJECT("myhandler")<br />

DO (_browser)<br />

BINDEVENT(_SCREEN,"Resize",oHandler,"myresize")<br />

DEFINE CLASS myhandler AS Session<br />

PROCEDURE myresize<br />

IF ISNULL(_obrowser) THEN<br />

UNBINDEVENT(THIS)<br />

ELSE<br />

_obrowser.left = _SCREEN.Width - _obrowser.width<br />

ENDIF<br />

RETURN<br />

ENDDEFINE<br />

Eventbinding (4)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 35<br />

� RaiseEvent<br />

hiermit können bestimmte Ereignisse<br />

ausgelöst werden.<br />

� ACHTUNG: „Echte“ VfP-Ereignisse werden<br />

nicht ausgelöst auch wenn der Code in<br />

der Methode abläuft z.B. Gotfocus setzt<br />

den Focus nicht ins Feld.<br />

� Flags beachten<br />

Folie 36


Eventbinding (5)<br />

� Unbindevents<br />

hebt Bindungen wieder auf. Einzelne<br />

Ereignisse eines Objekts:<br />

UNBINDEVENTS( oEventSource, cEvent,<br />

oEventHandler, cDelegate )<br />

� oder alle Bindungen:<br />

UNBINDEVENTS( oEventObject )<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Eventbinding (6)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 37<br />

� Ermittlung von bestehenden Bindungen<br />

über aEvents()<br />

AEVENTS( ArrayName [, 0 | oEventObject ] )<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 38<br />

Befehlserweiterungen (1)<br />

� Index-Befehl<br />

jetzt kann bei der Anlage die Collate-<br />

Sequenz angegeben werden (Endlich!)<br />

INDEX ON eExpression TO IDXFileName | TAG<br />

TagName [ COLLATE cCollateSequence ] [OF<br />

CDXFileName] [FOR lExpression] [COMPACT]<br />

[ASCENDING | DESCENDING] [UNIQUE |<br />

CANDIDATE] [ADDITIVE]<br />

Folie 39


Befehlserweiterungen (2)<br />

� Scatter<br />

Der Scatterbefehl kann jetzt jedes<br />

beliebige VfP-Objekt um die Properties<br />

ergänzen bzw. aktualisieren. Neue Option<br />

„additive“:<br />

SCATTER [FIELDS FieldNameList | FIELDS LIKE<br />

Skeleton | FIELDS EXCEPT Skeleton] [MEMO] TO<br />

ArrayName | TO ArrayName BLANK | MEMVAR |<br />

MEMVAR BLANK | NAME ObjectName<br />

[BLANK] [ADDITIVE]<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 40<br />

Befehlserweiterungen (3)<br />

� Insert SQL-Befehl<br />

� INSERT INTO dbf_name [(fname1 [, fname2, ...])]<br />

VALUES (eExpression1 [, eExpression2, ...])<br />

� INSERT INTO dbf_name FROM ARRAY<br />

ArrayName | FROM MEMVAR | FROM NAME<br />

ObjectName (Neu! Direktes Einfügen aus<br />

Objekt, Objekt kann jedes beliebige Objekt<br />

sein mit Properies, die gleich heißen wie<br />

die Felder!!!!)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 41<br />

Befehlserweiterungen (4)<br />

� Insert Into kann jetzt Datensätze direkt<br />

aus einem Select einfügen<br />

INSERT INTO dbf_name [(fname1 [, fname2, ...])]<br />

SELECT [(fname1 [, fname2, ...])] FROM<br />

tablename WHERE condition<br />

_tally enthält danach die Anzahl der<br />

eingefügten Datensätze<br />

Folie 42


?<br />

Erweiterungen/Änderungen an der<br />

Form-Klasse<br />

� Abgeleitete Dataenvironments können verwendet<br />

werden (Builder)<br />

� In Dataenvironments können CursorAdapter<br />

verwendet werden<br />

� Neues Property BindControls an der Form<br />

ermöglicht late-binding von Daten an die Controls<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 43<br />

Erweiterungen der Grid-Klasse (1)<br />

� Highlighting der aktuellen Zeile<br />

neue Properties:<br />

HighLightForeColor, HighLightBackColor<br />

HighLightStyle, SelectedItemForeColour,<br />

SelectedItemBackColour<br />

� Sperren des Grids<br />

neues Property AllowCellSelection<br />

keine Zelle erhält mehr den Focus –<br />

Verhalten wie eine Listbox!!!!<br />

Grid wird als 1 Steuerelement mit TAB übersprungen<br />

� Keypress-Event jetzt auch am Grid! ACHTUNG: wenn<br />

Keypress in einer Column überschrieben ist, wird diese<br />

Methode ignoriert!! Hat Vorrang vor keypress vom<br />

Control einer Spalte!<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 44<br />

Erweiterungen der Grid-Klasse (2)<br />

� Sperren von Spalten<br />

ähnlich wie in Excel können Spalten jetzt „fixiert“<br />

werden.<br />

Neue Properties:<br />

LockColumns, LockColumnsleft (Anzahl zu<br />

sperrender Spalten). Zur Laufzeit read/write.<br />

Interaktiv mit der rechten Maustaste im<br />

Spaltenheader setzbar/abschaltbar<br />

� Column.visible funktioniert jetzt wie man es<br />

erwartet<br />

� Ctrl-Home und Xtrl-End positionieren im Grid<br />

Folie 45


Erweiterungen der Grid-Klasse (3)<br />

� Auto-resize der Spalten<br />

ACHTUNG: betrifft nur die aktuell sichtbaren<br />

Datensätze!<br />

Neue Properties: Grid - AllowAutoColumnFit<br />

neue Methode: Autofit (Grid u. Column)<br />

Auslösen der Größenanpassung:<br />

DBLClick auf rechte Trennlinie im Header einer<br />

Spalte<br />

DBLClick links oben Knopf im Eck des grids (nur<br />

wenn Löschmarkierung bzw.<br />

Satzmarkierung sichtbar) passt alle<br />

Spaltenbreiten an.<br />

Autofit-Methode<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

VFP Leaf-Classes<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 46<br />

� Was ist das?<br />

Basis-Klassen für Klassen, die in<br />

Containern enthalten sind:<br />

Pages, Grid-Columns, Grid-Headers,<br />

Option-Buttons, Command-Group-<br />

Buttons<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 47<br />

Erweiterungen der Grid-Klasse (4)<br />

� Ableiten von Column-/Header-Klassen<br />

auch diese Klassen können jetzt abgeleitet werden!<br />

Neue Properties am Grid:<br />

MemberClass und MemberClassLibrary<br />

kann nur im Eigenschaftenfenster oder zur Laufzeit<br />

(zuerst Lib dann Klasse!) umgestellt werden.<br />

ACHTUNG: Alle Spalten werden neu erstellt (Namen!),<br />

bisherige Einstellungen gehen verloren.<br />

Abgeleitete Klassen können nur programmatisch (PRG-<br />

Datei) erstellt werden. Diese Klassen können auch mit<br />

Addobject im Grid-Init instanziiert werden.<br />

Folie 48


?<br />

Erweiterungen der Grid-Klasse (5)<br />

� Header können jetzt mehrzeilig angezeigt werden:<br />

headerheight am Grid richtig setzen<br />

in den Header wordwrap-Property auf .t.<br />

� Header nur einmal je Column,<br />

in der Regel 2 Aufrufe erforderlich:<br />

grid.removeobject(„Header1“)<br />

grid.addobject(„myHeader“,myHeaderClass“)<br />

� Neues Header-Property: Picture<br />

hiermit können jetzt Text und Bild angezeigt<br />

werden (property: Alignment beachten)<br />

� Checkboxen lassen sich jetzt zentrieren<br />

PageFrames<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 49<br />

� Neues Property: TabOrientation<br />

� Tabs können jetzt an allen 4 Seiten eines<br />

Pageframes angezeigt werden.<br />

Vorsicht: Umstellung des Properties<br />

bringt Probleme, wenn Controls am Rand<br />

positioniert wurden<br />

� Pages können auf abgeleiteten SubKlassen<br />

aufgesetzt werden<br />

� Hotkeys funktionieren immer an den Seiten<br />

werden die Buchstaben nicht unterstrichen,<br />

die Ausrichtung der Texte entspricht nicht<br />

der Norm<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 50<br />

Neue Basisklassen Collections<br />

� Neue Basisklasse<br />

Hinzufügen von Elementen über<br />

collection.Add(„Text1“,“ID1“) && ID1 = Schlüsselwert<br />

Zugriff auf Elemente über<br />

? Collection.Item(1)<br />

? Collection(1) && item als default-<br />

? Collection(„ID1“) && Methode, case-sensitive!<br />

Collection.Remove( eIndex ) eIndex = Element<br />

-1 alles löschen<br />

keine ContainerKlasse!<br />

Einzelne Elemente im Debugger nicht sichtbar!<br />

Array lassen sich damit nicht verwalten!<br />

Collections können geschachtelt werden.<br />

Folie 51


Anzeige von Grafiken, Icons....<br />

� Grafikdateien werden jetzt über GDI+<br />

angezeigt. Hierdurch können jetzt<br />

erheblich mehr Dateitypen dargestellt<br />

werden – auch animierte GIFs.<br />

� Neue Properties am ImageControl:<br />

RotateFlip<br />

Combobox<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 52<br />

� Neues Property: PictureSelectionDisplay<br />

0 (None) Does not display the image in the text box<br />

(Default)<br />

1 (Clip) The image is clipped to the same height of the<br />

text box The width of the image remains the same.<br />

2 (Isometric) The image resizes to fit the height of the<br />

text box while maintaining its original proportions.<br />

3 (Stretch) The image resizes to fit the height of the<br />

text box but does not maintain its original<br />

proportions. The width of the image remains the<br />

same.<br />

� Neues Property: MaxLength begrenzt die maximale<br />

Eingabelänge bei Drop-Down Combos<br />

Neue Basisklassen EMPTY<br />

� EMPTY<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 53<br />

� Keine eigenen Methoden<br />

neue Properties nur über addproperty(),<br />

removeproperty() manipulierbar.<br />

� keine eigenen Methoden definierbar<br />

� Kann nicht abgeleitet werden<br />

� Sehr schnell, kein Speicheroverhead<br />

� Speziell für temporäre Objekte<br />

verwendbar (scatter/gather)<br />

Folie 54


?<br />

XML Adapter Klasse<br />

� Unterstützt die Arbeit mit XML-Daten<br />

neu: Unterstützung für hierarchische<br />

XML-Daten<br />

z.B. .NET Dataset � VFP Cursor<br />

(1..n)<br />

� Manipulation der Daten als auch der XML-<br />

Schemata<br />

� XMLADAPTER hat 2 MemberKlassen:<br />

XMLTable , XMLField<br />

� WICHTIG: MSXML 5.0 SP1 erforderlich!<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

XML Adapter Klasse<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 55<br />

� Felder mit dezimalstellen werden jetzt bei<br />

XMLtoCursor auf N(20,19) Stellen richtig<br />

gemappt<br />

� Felder mit Null-Values führen nicht mehr<br />

zu leeren Tags<br />

� Über den Schalter Parameter 8192 kann<br />

in einen bestehenden Cursor importiert<br />

werden – das Flag ist jetzt auch<br />

dokumentiert!<br />

XML WebServices<br />

Einführung 1<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 56<br />

Folie 57


XML WebServices<br />

Einführung 2<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

XML WebServices (1)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 58<br />

� Registrierung vorhandener XML-Services weiterhin<br />

über Tools-Intellisense-Manager – Types<br />

� Verwendung im Code unter VFP7:<br />

LOCAL loBabelfishService as babelfish<br />

LOCAL loWS<br />

loWS =<br />

NEWOBJECT("Wsclient",HOME()+"ffc\_webservices.vcx")<br />

loWS.cWSName = "babelfish"<br />

loBabelfishService =<br />

loWS.SetupClient("http://www.xmethods.net/sd/2001/BabelFi<br />

shService.wsdl", "BabelFishService", "BabelFishPort")<br />

Anzeige der verfügbaren XML-Services direkt über Intellisense.<br />

XML WebServices (2)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 59<br />

� Unter VFP 8 werden registrierte XML-<br />

Webservices nicht mehr als Klasse<br />

angezeigt. Verwendung nur noch über die<br />

Toolbox wo registrierte XML-WebServices<br />

automatisch angezeigt werden Per<br />

Drag&Drop in den Code übernehmen.<br />

Coding beachten: Neue Syntax incl. Try-<br />

Catch-Konstrukt.<br />

� Erheblich erweiterter Web-Service-Builder<br />

Folie 60


XML WebServices (3)<br />

� WebServices verwenden jetzt das SoapToolkit 3.0 incl.<br />

Zugeh. Isapi-Listener.<br />

� Eigene Com-Server-Klassen können über 2 Wege als<br />

Web-Service veröffentlicht werden:<br />

� WebService – Assistent<br />

� Task-Pane- XML Web-Services<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 61<br />

XML WebServices anlegen<br />

� Voraussetzungen:<br />

� Soap Toolkit<br />

� IIS installiert und aktiv<br />

� Virtuelles Verzeichnis (WSDL, WSM-<br />

Files)<br />

� VFP-Projekt anlegen<br />

� Com Klasse anlegen OLEPUBLIC!!!<br />

� Multi-threaded COM server (dll)<br />

erstellen<br />

� Task Pane XML Web Services:<br />

„Publish Your XML Web Service“ �<br />

WSDL, WSM-Files erstellen.<br />

VORSICHT: Advanced-Option beachten<br />

Methoden beachten<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 62<br />

XML WebServices anlegen<br />

� Den erstellten Web Service über die<br />

Taskpane noch registrieren nicht<br />

vergessen!<br />

� IIS muss für den Test gestartet sein<br />

sonst gibt’s Timeout-Fehler<br />

Folie 63


Sonstige Erweiterungen/ Änderungen<br />

� Im Quellcode neues Intellisense-ShortCut<br />

WS � zeigen<br />

� ADOCKSTATE(axx,1) erstellt ein Array mit den<br />

docking-Infos aller aktiven VFP-Fenster<br />

� Einsatz von Visual Source Safe<br />

Anzeige der verfügbaren DBs stimmt jetzt<br />

� Active Documents werden nicht mehr unterstützt!<br />

In Vfp 7 und 8!!!!!!!<br />

� Anzahl übergebbarer Datensätze an XLS wurde<br />

erhöht: von 16,384 auf 65,535<br />

� Defaultwert für MVCOUNT wurde von 1,024<br />

auf 16,384 erhöht<br />

� Quellcode wird jetzt farbig ausgedruckt (auch per<br />

type.... To printer)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 64<br />

Sonstige Erweiterungen/ Änderungen<br />

� Tooltiplänge jetzt maximal 4095 Zeichen lang und<br />

mehrzeilig.<br />

Zeilenumbrüche können mit chr(13) erzwungen<br />

werden.<br />

� Unterstützung für XP-themes neu: sys(2700),<br />

_screen.themes<br />

� Neues Property PicturePosition auf Buttons,<br />

Checkboxen, Option Groups<br />

� Hyperlinks in Text- und Editboxen aktiv Property:<br />

enablehyperlinks, CTRL+Click zum auslösen, auch<br />

Mailto u. FTP:.... funktioniert!<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 65<br />

Sonstige Erweiterungen/ Änderungen<br />

� Menü-Designer: neue Option um Menüpunkte zu<br />

verschieben<br />

� Neue Funktion EVL(lcField,“kein Wert erfasst“) =<br />

empty value<br />

� Indexdateien haben jetzt wieder Ihre „normale“<br />

Größe (VFP7SP1-Problem wurde behoben)<br />

� ALLOWEXTERNAL=ON<br />

in interner config.fpw<br />

�Interne und externe config.fpw<br />

parallel<br />

�Zuerst wird die interne, dann<br />

die externe verarbeitet<br />

�Nicht für COM-Server<br />

Folie 66


Sonstige Erweiterungen/ Änderungen<br />

�VFP verhindert nun bei falscher Satzanzahl im<br />

Header die Zerstörung der Tabelle. Wie solche<br />

Tabellen beim Öffnen geprüft werden ist<br />

einstellbar:<br />

SET TABLEVALIDATE TO 0 ... 3<br />

�VFP erzeugt jetzt einen Fehler, wenn die 2 GB –<br />

Grenze bei Tabellen und Memos überschritten<br />

wird, anstatt die Tabelle oder Memodatei zu<br />

zerstören (error Code 1190)<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 67<br />

Sonstige Erweiterungen/ Änderungen<br />

� SYS(602)<br />

Ein-/Ausschalten von Offscreen-Bitmaps<br />

� Nützlich für Terminalserver/Citrix<br />

� Bislang nur in config.fpw über<br />

BITMAP=ON|OFF global bestimmbar<br />

ACHTUNG:<br />

gültig beim Start von Formularen!<br />

� SET ORDER ... ASCENDING|DESCENDING<br />

arbeitet jetzt arbeitsbereichbezogen und<br />

nicht mehr tabellenbezogen<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 68<br />

Sonstige Erweiterungen/ Änderungen<br />

� Ri-Code Generator<br />

� Etliche Bugs wurden beseitigt<br />

� Packen nicht mehr erforderlich<br />

� Indexdateigröße – Fehler in VFP 7 – ist<br />

wieder normal<br />

� Erstellen und zerstören von Objekten<br />

erheblich beschleunigt<br />

� COMPOBJ() bringt beim Vergleich von<br />

NULL-Values keine falsche Meldung mehr<br />

Folie 69


Sonstige Erweiterungen/ Änderungen<br />

� Refresh-Methode gibt’s es jetzt auch am<br />

Label und am Shape<br />

� Neue Methoden: MoveItem, OnMoveItem<br />

in Listboxen<br />

� COM Server: neue verbesserte<br />

Schnittstelle für Array-Parameter,<br />

Unterstützung von ByteArrays<br />

(comarray())<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 70<br />

Sonstige Erweiterungen/ Änderungen<br />

� Verborgene Dateien und Verzeichnisse<br />

werden von File, Directory, CD, Set<br />

Default erkannt<br />

� DisplayPath() (neu in VFP 7) behält jetzt<br />

Groß- u. Kleinbuchstaben bei<br />

� Textmerge-Funktionen verbessert<br />

Leerzeichen, Tabs, Returns am<br />

Zeilenanfang können gezielt<br />

verwendet/gelöscht werden<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 71<br />

Sonstige Erweiterungen/ Änderungen<br />

� Neu: Set Notify Cursor ON | OFF<br />

Anzeige von Statusinformationen zum aktuellen<br />

Cursor<br />

� DOEVENTS nur noch ohne Klammer einsetzbar<br />

� Prüfsummenfunktion sys(2007) jetzt auch mit 32bit<br />

Operation verwendbar<br />

� Neu: Prüfsummenfunktion für ganzen Datensatz<br />

(ohne Memo- u. Generalfelder) SYS(2017)<br />

� Neu: Sys(2450) legt fest wo Funktionen zuerst<br />

gesucht werden<br />

Folie 72


Sonstige Erweiterungen/ Änderungen<br />

� aGetClass() ist in der Runtime nicht mehr<br />

verfügbar (in Vfp 7 dagegen schon).<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Anregungen und Fragen<br />

?<strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

Schwabstr. 7<br />

74360 Ilsfeld<br />

info@tmn-systemberatung.de<br />

www.tmn-systemberatung.de<br />

© 2002 <strong>TMN</strong> <strong>Systemberatung</strong> <strong>GmbH</strong><br />

www.tmn-systemberatung.de<br />

Folie 73<br />

Folie 74

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!