Der Makro-Editor unterstützt MapBasic-Funktionen und ist mit einer erweiterten Syntax für Feldfunktionen, Schlüsselworte und Variablen versehen.
Feldfunktionen sind als Platzhalter zu verstehen und werden mit dem Zeichen # vor und hinter der Feldfunktion vom übrigen Makrotext abgesetzt.
Sämtliche Feldfunktionen eines Makros werden nach Aufruf des Makros in einem Dialog zur Dateneingabe bereitgestellt.
Pro Makro können maximal 10 Feldfunktionen benutzt werden, es müssen aber keine Feldfunktionen benutzt werden.
Die Schlüsselworte lösen bestimmte Ereignisse aus oder steuern den Makroablauf
Variablen dienen der Zwischenpufferung von Werten, auf die im späteren Makroablauf zugegriffen werden kann.
Mit den Funktionen können GeoAS- und MapInfo-Funktionen aufgerufen und über Parameterlisten gesteuert werden.
Damit im Makro-Assistenten auf Grafikattribute (Centroid, Area, ObjectLen, etc.) zugegriffen werden kann, wird beim GeoAS-Start ein globales Koordinatensystem gesetzt, entsprechend dem ersten Layer im Hauptkartenfenster. Sofern dies nicht das gewünschte Koordinatensystem ist, kann es im Makro mit set coordsys... explizit gesetzt werden.
<Macro> … </Macro> |
Makrostruktur Mit den Tags <Macro> … <Macro> können mehrere Makros in einem Makro zusammengefasst und nacheinander ausgeführt werden. Jedes Makro innerhalb eines Tags wird separat ausgeführt und hat den vollen Funktionsumfang - inklusive eigenem Public-Bereich und eigenständiger Eingabedialoge. Kommandos außerhalb der Tags werden ignoriert.
Beispiel: <Macro> Select Beschreibung from #Tabelle:Bäume;Grünflächen# into MeineWahl noselect </Macro> <Macro> Note #Auswahl:(MeineWahl.Beschreibung)# </Macro> |
end public |
Public-Block Vor dem eigentlichen Makro kann ein zusätzlicher Makro-Block stehen, der separat und zuerst ausgeführt wird. Mit dem Schlüsselwort end public wird das Ende des vorgeschalteten Public-Blocks definiert.
Das Makro wird in zwei einzelne und nacheinander ausgeführte Teile gesplittet und es werden zwei separate 'run command' ausgeführt. So kann man vorab Bedingungen schaffen, die für den Rest des Makros erforderlich sind, z. B. für die Feldfunktionen im Dialog oder für Description und Helpfile.
Der vor end public stehende Teil darf keine Feldfunktionen (#) erhalten. Ohne end public wird das Makro direkt ausgeführt. |
Description(Text) |
Public-Block Bringt vor Ausführung des Makros einen Beschreibungstext mit der Möglichkeit die Fortführung abzubrechen.
Beispiel: description(Wollen Sie wirklich die Festplatte neu formatieren?)
str1="#Ihr Name lautet#" |
Helpfile(Datei) |
Public-Block Auf dem Description-Dialog UND auf dem Feldfunktionen-Dialog erscheint eine [?]-Schaltfläche zum Öffnen der Hilfedatei. Die Hilfedatei kann ohne Pfadangabe im GeoAS-Dir oder im Help-Dir liegen. Eine Absolutpfadangabe ist auch möglich. Es sind alle Formate zulässig. Die Hilfedatei wird so geöffnet, wie sie auch per Doppelklick im Dateiexplorer geöffnet werden würde.
Beispiel: Helpfile(Wasserdokumentation.pdf) |
SelectionCheck(Tabelle) |
Die Routine prüft, ob eine Selektion auf Basis der angegebenen Relation existiert. Gibt eine Meldung aus, wenn dem nicht so ist und bricht die Ausführung des Makros ab. Beispiel: SelectionCheck(Baum) |
SelectionCheck(Tabelle:n) |
Die Routine prüft, ob eine Selektion auf Basis der angegebenen Relation existiert mit genau n Zeilen. Gibt eine Meldung aus, wenn dem nicht so ist und bricht die Ausführung des Makros ab. Beispiel: SelectionCheck(Baum:1) -> Es muss genau ein Baum selektiert sein. |
TableCheck(Tabelle1, Tabelle2, ...) |
Die Routine prüft, ob die angegebenen Tabellen geöffnet sind. TableCheck(Flurstücke, Baum) |
GroupCheck(Gruppe1, Gruppe2, ...) |
Die Routine prüft, ob die angegebenen Datengruppen geöffnet sind. GroupCheck(ALKIS) |
MapCheck(Layer1, Layer 2, ...) |
Die Routine prüft, ob die angegebenen Layer im Kartenfenster enthalten sind. Beispiel: MapCheck(Flurstücke, Gebäude) Die Prüfung auf vorhandene thematische Kartenlayer ist auch möglich. Thematische Kartenlayer werden immer direkt oberhalb des Basislayers in der Layerkontrolle platziert. Mit dem Zusatz -1, -2, etc. kann explizit ein bestimmter thematischer Layer über dem Basislayer angesprochen werden (in der Regel ist es genau einer). Beispiel: Es wird ein thematischer Layer für den Basislayer Flurstücke erwartet: MapCheck(Flurstücke-1) |
Kommentare im Makro [ Kommentar ]
|
In einen Makro-Code können beliebige Kommentare eingefügt werden, die sich nicht auf den Makrolauf auswirken. Syntax Nach jeder öffnenden eckigen Klammer "[" wird die nächstfolgende schließende eckige Klammer "]" gesucht. Wenn eine schließende Klammer fehlt, wird der gesamte Text bis zum Makroende als Kommentar interpretiert. Beispiel: [Makro zur Ermittlung der Hoehendifferenz] Int1=100 Select * from MeineTabelle where H=int1
[Hoehe ist Integer. Hier kann auch ein ganzer Block stehen]
Note "Fertig" |
DisableCommentHandler |
Die Kommentar-Markierung [ ] kann mit dem Schlüsselwort DisableCommentHandler abgeschaltet werden. Dadurch kann man die eckigen Klammern auch als normale Zeichen im Skript verwenden. |
PrintCommand |
Wenn dieser Parameter gesetzt ist, werden Kommandos, die zur Laufzeit ausgeführt werden, im Infofenster ausgegeben. Beispiel: PrintCommand=true |
Hinweise zur Syntax |
1.Variablen (str1, int1, ...) können auch in den Funktionen genutzt werden (außer im Public-Bereich), auch mit Stringverkettung zwischen Variablen und freien Texten. 2.Leerzeichen sind zulässig. Funktion(Parameter) und Funktion ( Parameter ) funktioniert beides 3.Doppelhochkommata sind vielfach nicht erforderlich: Formular(Filename) und Formular("Filename") funktioniert beides. Ausnahme: Bei Stringverkettungen sind "" erforderlich (z. B. str + "Filename"). 4.Beliebige Schreibweise für Boolean-Parameter (True T, 1, False, F, 0). Mit oder ohne "" (außer bei 0 oder1). 5.Parameterlisten müssen nicht vollständig angegeben werden. Für fehlende Parameter werden Defaultwerte gesetzt. Allerdings kann nur "hinten" weggelassen werden. Bei fehlenden Parametern in der Mitte der Liste verschiebt sich die Zuordnung und das führt zu Fehlfunktionen. |
n = Schlüsselwort n = Platzhalter n = Variable |
GetUserName |
Das Schlüsselwort liefert den Usernamen des angemeldeten Benutzers als Text zurück. |
||||||||||||||||
GeoASDir |
Das Schlüsselwort liefert das GeoAS-Installationsverzeichnis als Text zurück. Siehe auch GetPath() |
||||||||||||||||
PathTemp |
Das Schlüsselwort liefert den Temporärpfad als Text zurück. |
||||||||||||||||
R$, Q$ |
Schlüsselwörter, die anstatt der chr$()-Funktion genutzt werden können.
R$ fügt einen Zeilenumbruch in einen Text ein. Beispiel: print "Dies ist die erste Zeile" + R$ + "und dies die zweite"
Q$ fügt ein Doppelhochkomma in einen Text ein. Dieses Schlüsselwort ist insbesondere nützlich, wenn ein Text bereits reguläre Doppelhochkommata enthält. Beispiel: print "Dies ist ein " + Q$ + "Ausdruck" + Q$ + " in Hochkommata!" |
||||||||||||||||
|
Variablen Im Makro stehen eine Anzahl bereits vordefinierter Variablen zur Verfügung. Diese Variablen können direkt genutzt werden und müssen nicht per dim- /undim-Anweisung verwaltet werden. Pro Datentyp sind 9 Variablen definiert.
|
||||||||||||||||
n = Schlüsselwort n = Platzhalter n = Variable |
DialogTitle |
Titel des Dialogs (optional) Beispiel: DialogTitle="BORIS Daten" |
|||||||||||||||||||||||||||||||||||||
DialogDescription |
Beschreibungstext auf dem Dialog (optional) Beispiel: DialogDescription="Die Bodenrichtwerte werden vom Server BORIS GDS Hessen heruntergaladen." |
|||||||||||||||||||||||||||||||||||||
DialogDescriptionHeight |
Höhe des Beschreibungstextes auf dem Dialog (integer in px, optional) Beispiel: DialogDescriptionHeight=30 |
|||||||||||||||||||||||||||||||||||||
#Text# |
Dialog-Editfeld und Beschriftung 'Text' |
|||||||||||||||||||||||||||||||||||||
#Text:Baum# |
Dialog-Editfeld und Beschriftung, aber mit einem eingetragenem Wert 'Baum' im Editfeld |
|||||||||||||||||||||||||||||||||||||
#selection# |
Schlüsselwort! Vor Makroausführung wird gecheckt, ob eine Selektion da ist |
|||||||||||||||||||||||||||||||||||||
#Baum:selection# |
Schlüsselwort! Vor Makroausführung wird gecheckt ob eine Selektion aus der Tabelle 'Baum' da ist |
|||||||||||||||||||||||||||||||||||||
#Text:Baum;Grün;Test# |
Dialog-Pulldown-Feld, mit fixer Werteliste |
|||||||||||||||||||||||||||||||||||||
#Text:Baum;Grün;Test:ListBoxHeight=50# |
Dialog-Listbox, mit fixer Werteliste und Listboxhöhe (in Pixeln). Beispiel
|
|||||||||||||||||||||||||||||||||||||
#Text:(Table.Column)# |
Dialog-Pulldown-Feld, die Werteliste wird aus Tabele.Column bestimmt. (siehe auch #Wert:GetValue;Table.Column#) |
|||||||||||||||||||||||||||||||||||||
#Label:Checkbox,T# |
Dialog Checkbox - kann einer Variablen einen Boolean-Wert über eine Checkbox zuweisen. Label ist freier Text zur Beschriftung der Textbox. Die Bedingung T/F (True(False) bestimmt. ob die Checkbox standardmäßig angehakt oder nicht angehakt ist.
Gibt es auch für SELECT Befehle, siehe nachstehend |
|||||||||||||||||||||||||||||||||||||
Layername, Tabellenname (auch für abhängige Pulldowns)
#Text:GetLayer;Type# #Text:GetTable;Type# |
Dialog-Pulldown-Feld. Die Werteliste enthält: a) bei GetLayer: Layer des aktiven Kartenfensters b) bei GetTable: Geöffnete Tabellen
Mit der optionalen Angabe eines Typs kann die Werteliste eingeschränkt werden. Mehrere Typen können kommagetrennt angegeben werden. Wird die Option nicht gesetzt, werden alle Typen berücksichtigt (Type=0).
|
|||||||||||||||||||||||||||||||||||||
Spaltenname
#Text:GetColumn;Table;ColType# |
Dialog-Pulldown-Feld mit optionaler Abhängigkeit. Die Werteliste enthält Spaltennamen der angegebenen Tabelle.
Table a) explizite Angabe eines Tabellennamens b) Angabe des Schlüsselwortes Previous. Mit diesem Schlüsselwort wird das Ergebnis des vorangestellten Pulldown als Tabellenname genutzt.
Mit der optionalen Angabe eines Spaltentyps kann die Werteliste eingeschränkt werden. Mehrere Typen können kommagetrennt angegeben werden. Wird diese Option gesetzt, muss eine Table oder Previous angegeben sein. Wird die Option nicht gesetzt, werden Previous und ColType=0 automatisch verwendet.
|
|||||||||||||||||||||||||||||||||||||
Spaltenwert (auch für abhängige Pulldowns)
#Text:GetValue;Table.Column# |
Dialog-Pulldown-Feld mit optionaler Abhängigkeit. Die Werteliste enthält Einträge einer Tabellenspalte.
Table und Column a) explizite Angabe der Tabelle und der Spalte (durch einem Punkt getrennt) b) Angabe des Schlüsselwortes Previous. Mit diesem Schlüsselwort wird das Ergebnis des vorangestellten Pulldown als Column genutzt. Ist dort ebenfalls das Schlüsselwortes Previous angegeben, wird als Table ebenfalls das Ergebnis des vorangestellten Pulldowns genutzt.
|
|||||||||||||||||||||||||||||||||||||
#Label:Checkbox,F,T# |
Dialog Checkbox - kann in einem Select-Befehl einen Boolean-Wert über eine Checkbox zuweisen. "Label" ist freier Text zur Beschriftung der Textbox. Die 1. Bedingung T oder F (True/False) bestimmt, ob die Checkbox standardmäßig angehakt oder nicht angehakt ist. Die 2. Bedingung definiert die Bindung auf genau einen Wert T (True) bzw. F (False). Trifft er zu, wird er berücksichtigt, ansonsten ignoriert (entweder/oder). Die Bedingung ist optional und macht nur Sinn, wenn mehrere Checkboxen in einem Dialog genutzt werden.
|
|||||||||||||||||||||||||||||||||||||
#Text:(Tabelle.Spalte):ListBoxHeight=50# |
Dialog-Listbox, die Werteliste wird aus Tabelle.Spalte bestimmt, mit Listboxhöhe (in Pixeln). Beispiel
|
|||||||||||||||||||||||||||||||||||||
#Datum:curdate()# |
Dialog-Editfeld mit voreingetragenem Systemdatum |
|||||||||||||||||||||||||||||||||||||
#Jahr:year()# |
Dialog-Editfeld mit voreingetragenem Jahr des Systemdatums |
|||||||||||||||||||||||||||||||||||||
#Monat:month()# |
Dialog-Editfeld mit voreingetragenem Monat des Systemdatums |
|||||||||||||||||||||||||||||||||||||
#Tag:day()# |
Dialog-Editfeld mit voreingetragenem Tag des Systemdatums |
|||||||||||||||||||||||||||||||||||||
#Zeit:time(12)# |
Dialog-Editfeld mit voreingetragener Systemzeit (12 / 24 Std) |
|||||||||||||||||||||||||||||||||||||
#Text:SaveFile:Filename# |
Fügt in einen Dialog ein Eingabefeld für einen Dateinamen ein, inkl. Auswahlmöglichkeit aus dem Dateisystem (FileSaveAsDialog) und puffert den Rückgabewert in eine Variable. Werden ein Filename und/oder ein Dateityp (Extension) übergeben, wird der FileSaveAsDialog mit den entsprechenden Voreinstellungen geöffnet. Beispiel: str1=#Ausgabedatei:SaveFile:D:\test.txt# str1=#Ausgabedatei:SaveFile:*.txt# str1=#Ausgabedatei:SaveFile:*.*# str1=#Ausgabedatei:SaveFile:# (Doppelpunkt nicht vergessen. Wie *.* aber das Editfeld ist anfangs leer) |
|||||||||||||||||||||||||||||||||||||
#Text:OpenFile:Filename# |
Fügt in einen Dialog ein Eingabefeld für einen Dateinamen ein, inkl. Auswahlmöglichkeit aus dem Dateisystem (FileOpenDialog) und puffert den Rückgabewert in eine Variable. Werden ein Filename und/oder ein Dateityp (Extension) übergeben, wird der FileOpenDialog mit den entsprechenden Voreinstellungen geöffnet. Beispiele: str1=#Eingabedatei:OpenFile:D:\test.txt# str1=#Eingabedatei:OpenFile:*.txt# str1=#Eingabedatei:OpenFile:*.*# str1=#Eingabedatei:OpenFile:# (Doppelpunkt nicht vergessen. Wie *.* aber das Editfeld ist anfangs leer) |
|||||||||||||||||||||||||||||||||||||
TextWidth |
legt die Breiten der Control-Beschriftungen auf dem Auto-Dialog fest (in Pixeln). Beispiel: TextWidth=30, Default ist 75 |
|||||||||||||||||||||||||||||||||||||
EditWidth |
legt die Breiten der Editfelder, Pulldowns und Listboxen auf dem Auto-Dialog fest (in Pixeln). Beispiel: EditWidth=100, Default ist 100 |
|||||||||||||||||||||||||||||||||||||
ControlSpacing=3 |
Abstand zwischen den Controls auf dem Auto-Dialog (in Pixeln) |
|||||||||||||||||||||||||||||||||||||
RestoreDialogValues(True/False) |
Wenn True, werden die im Dialog gemachten Eingaben jedes Mal gespeichert und beim nächsten Aufruf des Makros wieder eingestellt (auch nach einem Neustart von GeoAS). False ist Default, auch wenn RestoreDialogValues nicht definiert ist. Der Aufruf muss in einem Makro nur einmal vorkommen. |
|||||||||||||||||||||||||||||||||||||
n = vorgegebene Syntax n = Schlüsselwort n = Platzhalter n = frei definierbar n = Variable |
Autokartei |
Ruft die Standard-Karteikartenfunktion von GeoAS auf (wie rechte Maustaste) |
||||||||||||||||||||||||||||||||||||||||||||||
ZoomSelection |
Entspricht Auswahl-zentrieren (zoomt auf Objektgröße) |
||||||||||||||||||||||||||||||||||||||||||||||
ShowSelection |
Entspricht Auswahl-suchen (behält den Zoombereich) |
||||||||||||||||||||||||||||||||||||||||||||||
GetPath(Pfadname) |
GetPath() sucht im GeoAS Management in der Pfadtabelle den angegebenen Pfadnamen oder den Primärschlüssel (GUID) und liefert den zugehörigen Netzwerkpfad zurück.
Beispiel 1 Formular(GetPath(Programmpfad) + "Formular\ALKIS \Lageplan.wor",T,T)
Beispiel2 str1=GetPath(Programmpfad) str2="Formular\ALKIS \Lageplan.wor" Formular(str1+str2,True,False)
|
||||||||||||||||||||||||||||||||||||||||||||||
ExecuteAssistant(Name) |
Aus einem Makro heraus können Funktionen aufgerufen werden, die mit den Assistenten Ansicht, Darstellung und Thema erstellt wurden. Aufruf der unter dem Namen Marktplatz gespeicherten Ansicht: ExecuteAssistant(Marktplatz) Auch die Verwendung von Feldfunktionen ist zulässig. In diesem Beispiel werden zwei Darstellungen zur Ausführung angeboten. ExecuteAssistant(#Darstellung:ALKIS Standard;Tatsächliche Nutzung#) |
||||||||||||||||||||||||||||||||||||||||||||||
PackRestore(Tabelle) |
Komprimiert die angegebene Tabelle. Sind ungesicherte Änderungen vorhanden, wird zuvor automatisch gespeichert. Sofern es sich um einen Layer im aktiven Kartenfenster handelt, wird der Layer nach dem Komprimieren wieder an der gleichen Stelle im aktiven Kartenfenster hinzugefügt. In weiteren Kartenfenstern wird der Layer nicht wieder hinzugefügt. |
||||||||||||||||||||||||||||||||||||||||||||||
CloseTable(Tabelle) |
Schließt die angegebene Relation. Beispiel CloseTable(Baum) |
||||||||||||||||||||||||||||||||||||||||||||||
SetFrontwindow(Fenstername) |
Funktion, um ein existierendes Fenster zum aktiven Fenster zu machen. Beispiele: SetFrontwindow(Hauptfenster) SetFrontwindow(Bäume Kartenfenster) |
||||||||||||||||||||||||||||||||||||||||||||||
RunGeoASMenu(ID) |
Führt eine GeoAS Funktion aus, die eine Menü-ID hat. Beispiel: RunGeoASMenu(112), öffnet den Druckdialog.
|
||||||||||||||||||||||||||||||||||||||||||||||
AutoShade(...) |
AutoShade erzeugt eine dynamische thematische Karte für Flächen- oder Linienobjekte. Dazu kann entweder eine Farbtabelle oder ein automatischer Farbverlauf benutzt werden. Vor und nach AutoShade sind auch andere Kommandos zulässig. AutoShade darf aber nur einmal innerhalb eines Makros vorkommen. Farbtabelle: Die Farbtabelle ist eine MapInfo-Tabelle und fix vorgegeben: \Lib\Shade\ColorTable.tab. Sie kann zusätzlich zur ID-Spalte beliebig viele Spalten haben. Jede Spalte entspricht einer eigenen Farbtabelle und enthält die Farbwerte gemäß der Brush/Pen-Definition von MapInfo. Die Farbwerte sind NICHT attributgebunden. Sie werden nacheinander benutzt, sortiert nach der Spalte ID. Die Anzahl der (gefüllten) Zeilen ist unerheblich, es kann lange und kurze Farbtabellen geben. Übersteigt die Anzahl der Attribute die Anzahl der verfügbaren Farbwerte, wird wieder von oben angefangen.
Unter Karte-> Optionen -> Kartentools -> Farbtabelle aktualisieren können thematische Karten aus dem Thema-Assistenten in die ColorTable überführt werden.
Farbverlauf: Durch Angabe zweier MapInfo-Farbwerte (von - nach) kann jeder beliebige Farbverlauf erzeugt werden. Die gesetzten Farbwerte können über das GeoAS Menü Optionen > Zusatzprogramme > aktiven Stil zeigen ermittelt werden.
Syntax 1: AutoShade(Tabellenname,Spaltenname,Spaltename in Farbtabelle) Syntax 2: AutoShade(Tabellenname,Spaltenname,vonFarbwert,nachFarbwert)
Beispiel 1: Fartabelle AutoShade(Flurstücke,Flur,Solid) Flur ist eine Spalte der Tabelle Flurstücke. Solid ist eine Spalte in der ColorTable.
Statt einer fixen Tabelle kann auch das Schlüsselwort Selection verwendet werden. In diesem Fall werden nur die selektierten Objekte thematisch dargestellt, alle anderen werden ausgeblendet. AutoShade(Selection,Flur,Solid)
Beispiel 2: Farbverlauf AutoShade(Flurstücke,Flur,255,13172735) Dunkelblau -> Hellblau AutoShade(Flurstücke,Flur,16711680,65280) Rot -> Grün
Beispiel 3: Sämtliche Möglichkeiten eines Makros stehen zur Verfügung. Der Aufruf könnte also auch mit Feldfunktionen kombiniert werden und so aussehen: AutoShade(#Tabelle:Flurstücke#,#Spalte:Flur#,#Farbtabelle:Full;Solid;Light#) |
||||||||||||||||||||||||||||||||||||||||||||||
LegendDock(...) |
Öffnet die Legende zum aktiven Kartenfenster. LegendDock(True) |
||||||||||||||||||||||||||||||||||||||||||||||
TableDialog(...) |
Öffnet ein Tabellenfenster in einem Dialog. Alle im Dialog ausgewählten Datensätze werden nach [Weiter] als Tabelle Selection bereitgestellt, auf die im weiteren Makroverlauf zugegriffen werden kann.
Syntax 1: TableDialog(TableName) Syntax 2: TableDialog(TableName, TableDialogTitle, TableDialogDescription, hDes, wDlg, hDlg) TableName (Tabellenname) TableDialogTitle (Dialogüberschrift) TableDialogDescription (Beschreibungstext auf dem Dialog unter der Tabelle) hDes (integer, Höhe des Beschreibungstextes in px. Der Text kann auch mehrzeilig angezeigt werden, pro Zeile 8 px) wDlg (integer, Breite des Dialogs in px) hDlg (integer, Höhe des Dialogs in px)
Wichtig: Wenn innerhalb eines Parameters ein Komma vorkommt, muss dieser Parameter gequotet ("...") werden. Ansonsten kann auch auf Hochkommata verzichtet werden.
Beispiel 1: Aufruf mit nur einem Parameter: TableDialog(Flurstücke)
Beispiel 2: Einige wichtige Parameter gesetzt: TableDialog(Flurstücke, Flurstücke-Auswahldialog, ,0, 0, 0)
Beispiel 3: Alle Parameter gesetzt: TableDialog(Flurstücke,Flurstücke-Auswahldialog,Selektieren Sie in der Tabelle die gewünschten Flurstücke,16,150,200)
Beispiel 4: Aufruf mit vorheriger Selektion: SELECT Gemarkung,Flur,Flurstück FROM Flurstücke WHERE Gemarkung="Hausen" order by Flur INTO Gesamt noselect TableDialog(Gesamt,Flurstücke Auswahldialog,"Selektieren Sie in der Tabelle die gewünschten Flurstücke."+R$+R$+"(Mehrfachauswahl mit STRG oder SHIFT)",28,200,200) Close table Gesamt Browse * from Selection |
||||||||||||||||||||||||||||||||||||||||||||||
BrowseDialog(Table) |
Öffnet ein Tabellenfenster in einem Dialog, entsprechend der Funktion Tabellendialog in GeoAS. Im Unterschied zum TableDialog wird hier nur ein Parameter übergeben und der Dialog hat zusätzliche Funktionen zum Sortieren, Gruppieren und Filtern. Beispiel: BrowseDialog(Flurstücke) |
||||||||||||||||||||||||||||||||||||||||||||||
UrlEncode$(Text) |
Umlaute und Sonderzeichen in einem Text werden URL-konform codiert.
Beispiel: str1="Höchst am Main" print "Das ist die URL von " +str1 +": " + EncodeURL$(str1)
Ergebnis nach Ausführung des Makros: Das ist die URL von Höchst am Main: H%C3%B6chst%20am%20Main |
||||||||||||||||||||||||||||||||||||||||||||||
PrintFile(File,Content) |
Schreibt einen Text in eine Datei. Syntax: PrintFile(File,Content) Nach der letzten Zeile, die in die Textdatei eingefügt wird, wird automatisch ein Zeilenumbruch eingefügt. Beispiel: str1="Max Mustermann" + R$ + "Rathausstraße 1" + R$ + "65432 Hausen" |
||||||||||||||||||||||||||||||||||||||||||||||
ReadFile(File) |
Liest den Inhalt einer Textdatei und speichert ihn in einer Variablen. Syntax: ReadFile(File) Beispiel: str1=ReadFile(GetPath(Datenpfad) + "Bauhof\Adressse.txt") |
||||||||||||||||||||||||||||||||||||||||||||||
ShellAndWait(Prog,Parameter) |
Führt das angegebene Programm aus und wartet mit dem Makro, bis das Programm beendet ist. Die "Wait"-Eigenschaft ist notwendig, wenn das Programm asynchron läuft und im Makro auf Ergebnisse des Programmlaufs zugegriffen wird. Zwingend notwendig ist die Angabe des Programms. Die Parametern können optional angegeben werden, in der gleichen Form wie das Programm sie auch bei Aufruf über die Eingabeaufforderung benötigen würde. Beispiel: ShellAndWait(PathTemp+"GDS.cmd","") |
||||||||||||||||||||||||||||||||||||||||||||||
n = Schlüsselwort n = Platzhalter n = Variable |
TabToExcel() TabToExcel(Tabelle1, Tabelle2, ...) |
Exportiert die angegebenen Tabellen direkt nach Excel. Wird keine Tabelle angegeben, öffnet sich ein Dialog zur Auswahl einer gewünschten Tabelle. |
PlotTemplate() PlotTemplate(Plotvorlage) |
Syntax 1: PlotTemplate() Öffnet den Auswahldialog der Plotvorlagen und führt anschließend die gewählte Plotvorlage aus.
Syntax 2: PlotTemplate(Plotvorlage) Erzeugt mit der angegebenen Plotvorlage direkt ein Layout. Der Name der Plotvorlage wird ohne den Teil in Klammern angegeben.
Beispiel: PlotTemplate(ALKIS mit Eigentümer) |
Formular() Formular(Datei, Serie, Center) |
Syntax 1: Formular() Öffnet den Auswahldialog der Formularvorlagen und führt anschließend die gewählte Formularvorlage aus.
Syntax 2: Formular(Datei, Serie, Center) Führt die angegebene Formularvorlage direkt aus. Datei: Dateiname (string) Serie: Für jedes selektierte Objekt ein eigenes Formular (logical, True/False) Center: Selektionsmenge zentrieren (logical, True/False) Beispiel: Formular(D:\GeoAS64\Application\Project\Makro\ALKIS.wor,T,F) |
MapAndReport(...) |
MapAndReport(...) führt eine Map&Report Vorlage (*.rdl) aus.
Syntyax: MapAndReport(TemplatePath, OutputFolder ,CenterReport , MultiReport ,DPI, FilePattern, MergeResult, Debug, Quiet, Value1, Value2, Value3, Value4, Value5)
-t TemplatePath as string -o OutputFolder as string -c CenterReport as logical -m MultiReport as logical -i DPI as integer -f FilePattern as string -mr MergeResult as logical -d Debug as logical -q Quiet as logical -v Value1 as string -v Value2 as string -v Value3 as string -v Value4 as string -v Value5 as string
Eine detaillierte Beschreibung der Übergabeparameter finden Sie in der Dokumentation von Map&Report.
Die Parameterliste muss nicht vollständig angegeben werden. Für fehlende Parameter werden Defaultwerte gesetzt. Allerdings kann nur "hinten" weggelassen werden. Bei fehlenden Parameter in der Mitte der Liste verschiebt sich die Zuordnung und das führt zu Fehlfunktionen. Siehe Beispiel Makro3
Beispiel Makro1 MapAndReport("D:\...\Versiegelung.rdl","D\GeoAS64\Demodaten",F,F,300,"",F,F,F,"")
Beispiel Makro2 Jeder Parameter kann auch über die Variablen str1, int1, log1, etc. gesteuert werden. (Ausnahme: Wenn FilePattern die Zeichen # enthält, werden diese vom Makro-Parser als Feldtrennzeichen interpretiert. Werden die Zeichen direkt in die Parameterliste geschrieben, kann der Parser damit umgehen (wie im Beispiel unten). Soll der Inhalt von FilePattern über eine Variable gesteuert werden, muss anstatt # ein | verwendet werden. Beispielweise so: str4="|ColIndexInt |\|ColIndexInt| ..." )
str1="D:\GeoAS64\Application\Project\Report\Versiegelung\" str2="Versiegelung.rdl" str3="D\GeoAS64\Demodaten" int1=300 log1="F" MapAndReport(str1+str2,str3, true, log1, int1,"#ColIndexInt #\#ColIndexInt#_#ColKassenzeichen#_#Timestamp", false, false, false, "")
Beispiel Makro3 str1=GetPath(Programmpfad) + "Report\Versiegelung\Versiegelung.rdl" str2="D\GeoAS64\Demodaten" MapAndReport(str1,str2) |
n = Schlüsselwort n = Platzhalter n = Variable |
Sofern Daten aus einer externen Datenbank geöffnet sind, kann der SQL-Befehl mit den folgenden Funktionen auch direkt an die Datenbank geschickt werden. Besonders bei großen Datenmengen ist dies signifikant performanter, als die heruntergeladenen Daten zu benutzen. Zur Nutzung solcher SQL-Befehle müssen die Daten in einer Datengruppe des GeoAS Managements enthalten sein.
|
||
ExecuteSQLInto() |
ExecuteSQLInto() ersetzt die Funktion
Die Funktion ist explizit für Selektionen in der Datenbank konzipiert, deren Ergebnis anschließend wieder in GeoAS auf die Ausgangstabelle übertragen werden soll. Erläuterung: In größeren Datenmengen (schon ab ein paar hundert Datensätzen) benötigt ein Select in einer verlinkten DB-Tabelle mit den MapInfo Bordmitteln oder MapBasic sehr viel Zeit. Die Funktion führt daher die Abfrage direkt in der DB durch und überträgt nur das Ergebnis durch eine grafische Verschneidung (die sehr performant ist) wieder auf die in GeoAS geöffnete Tabelle. Dieser "kleine Umweg" ist die einzige Möglichkeit, DB-Tabellen zufriedenstellend abzufragen und die Selektion in den geöffneten Daten in MapInfo nutzen zu können.
ExecuteSQLInto zerlegt das SQLCommand und ermittelt für alle Tabellennamen in { }, um welche Datenbank es sich handelt und ob es eine physikalische Tabelle oder ein View ist. Neue Views werden automatisch mit der SessionID erweitert und registriert. ExecuteSQLInto ist die einzige SQL-Funktion, die eine Selektion aus MapInfo an die Datenbank übergeben und eine Tabelle oder Selektion an GeoAS zurückliefern kann.
Diese Funktion ersetzt die alte Syntax BeginSQL ... EndSQL (die aus kompatibilitätsgründen aber noch unterstützt wird). Funktional gibt es keine Unterschiede. Variablen (str1, int2, etc.) müssen nicht mehr mit @ markiert werden und können - wie bei allen anderen Funktionen auch - in Stringverkettungen genutzt werden.
Syntax: ExecuteSQLInto(SQLCommand, destTable, Noselect, DoLink, DoHide)
SQLCommand (Typ string): Das Kommando wird an die DB geschickt und ausgeführt. Damit die DB eindeutig zugeordnet werden kann, muss mindestens ein Tabellenname in geschweiften Klammern stehen. Geschweifte Klammern sind außerdem für alle Tabellennamen erforderlich, die in der DB eine SessionID bekommen haben.
destTable (Typ string): Der Name, unter dem eine Abfrage (View) in der Datenbank angelegt und in GeoAS geöffnet wird (entspricht der INTO-Anweisung von MapBasic)
NoSelect (Typ logical) = true: Das Ergebnis wird in GeoAS nicht selektiert. Der Parameter ist optional (Default = false). Wird er weggelassen, müssen auch die nachfolgenden Übergabeparameter weggelassen werden.
DoLink (Typ logical): Als Standard wird die Abfrage als neue, temporäre Tabelle geöffnet. DoLink=true überträgt die Selektion wieder auf die Ausgangstabelle, die temporäre Tabelle wird geschlossen. DoLink funktioniert nur mit kartierbaren Relationen. DoLink und Hide schließen sich gegenseitig aus. Der Parameter ist optional (Default = false). Wird er weggelassen, müssen auch die nachfolgenden Übergabeparameter weggelassen werden.
DoHide (Typ logical) = true: Das Ergebnis wird nur in der Datenbank unter dem vergebenen Namen als View vorgehalten und nicht in GeoAS geöffnet. Für diese Variante ist die neue Funktion ExecuteSQL besser geeignet. Der Parameter ist optional (Default = false). Wird er weggelassen, müssen auch die nachfolgenden Übergabeparameter weggelassen werden.
Autocol (Schlüsselwort , kein Übergabeparameter): Autocol kann anstelle des * oder einer Spaltenaufzählung im SQL-Kommando eingesetzt werden. Es ersetzt alle im GeoAS Management für die angefragte Tabelle definierten Spalten. Auf diese Weise wird sichergestellt, dass keine unzulässigen Spalten zurückgegeben werden, die in MapInfo nicht verarbeitet werden können.
Beispiel für die Verwendung von Autocol SELECT * FROM Versiegelung_Flächen - kann in GeoAS nicht geöffnet werden, wenn z. B zwei grafische Spalten existieren. SELECT autocol FROM Versiegelung_Flächen - funktioniert, wenn die zweite grafische Spalte im GeoAS Management als versteckt deklariert wurde.
Beispiel str1="select * from Liegenschaften where id=5" str2="Auswahl_5" ExecuteSQLInto(str1, str2, true, true, false) |
|
ExecuteSQL() |
Die Funktion führt beliebige SQL-Kommandos (Select, Update, Insert, Delete, Create, etc.) in der Datenbank aus. Es können mehrere SQL-Kommandos enthalten sein (durch ; getrennt). ExecuteSQL erkennt keine Tabellen in { }, registriert keine Views/Tabellen und liefert nichts an GeoAS zurück.
Soll ein View oder eine neue Tabelle in der Datenbank erzeugt werden, kann der Name mit dem Zusatz %SID% (Großbuchstaben, steht für SessionID) versehen werden. Der View oder die Tabelle wird dann mit diesem Namenszusatz erzeugt. Der neue Name wird aber nicht registriert, d. h., dass er in der Funktion ExecuteSQLInto() nicht mit {Name} angesprorchen werden kann. Die Verwendung von %SID% für neue Tabellen/Views ist nicht zwingend, wird aber dringend empfohlen (wegen Mehrbenutzerbetrieb). Um erzeugte Views oder Tabellen in GeoAS zu öffnen oder zu aktualisieren kann OpenOrRefreshSQL() verwendet werden.
Syntax: ExecuteSQL(BaseTable, SQLCommand, TimeOut, Transaction)
BaseTable (Typ string) ist eine Tabelle aus der Datenbank, auf die sich das Kommando bezieht. Die Angabe ist erforderlich, da das SQL-Kommando nicht analysiert (geparced) wird und die Zuordnung bekannt sein muss.
SQLCommand (Typ string): Das Kommando wird an die DB geschickt und ausgeführt. Sofern Makro-Variablen (str1, int1 ...) verwendet werden, sind diese wie üblich per Stringverkettung einzubringen (@str1, @int1 etc. funktioniert hier nicht). Siehe Beispiel 2.
TimeOut (Typ integer): Zeit bis zur Schließung der DB-Verbindung für diese Aktion. Der Parameter ist optional (Default = 30 sec). Wird er weggelassen, müssen auch die nachfolgenden Übergabeparameter weggelassen werden.
Transaction (Typ logical): Schlüsselwort, das in der DB eine Transaction-Routine anstößt (sofern definiert). Der Parameter ist optional (Default = false). Wird er weggelassen, müssen auch die nachfolgenden Übergabeparameter weggelassen werden.
Beispiel 1 ExecuteSQL("Baum","Update Baum set SyncID=0 where SyncID=12", 30, false) oder auch ExecuteSQL(Baum,Update Baum set SyncID=0 where SyncID=12)
Beispiel 2 str1="Baum" str2="CREATE VIEW MyView%SID% AS SELECT BaumID FROM Baum where BezirkID=1" int1=30 log1="True" ExecuteSQL(str1,str2,int1,log1) |
|
ExecuteSQLScalar() |
Wie ExecuteSQL, aber es wird ein einziger numerischer Wert (als String) zurückgeliefert. Das SQL-Kommando muss dazu geeignet sein (Sum, Min, Max, Count, etc)
Syntax: Result=ExecuteSQLScalar(BaseTab,SQLCommand, TimeOut, Transaction)
Beispiel 1 int1=ExecuteSQLScalar(Baum, select max(BaumID) from Baum where ObjektID = 233) print int1
Beispiel 2 int1=233 int2=ExecuteSQLScalar("Baum", "select max(BaumID) from Baum where ObjektID = " + int1, 50, false) print int2 |
|
SaveAsDbTable() |
Speichert eine MapInfo Relation als physikalische Tabelle in die Datenbank.
Syntax: Result=SaveAsDbTable(SourceTableName,DestTableName,BaseTableName)
SourceTableName: Vorhandene Tabelle in MapInfo DestTableName: Tabellenname für die neue Tabelle in der Datenbank BaseTableName: Name der Haupttabelle der Gruppe in der Datenbank. Die Angabe ist erforderlich, damit die neue Tabelle der richtigen Gruppe zugeordnet werden kann. |
|
CreateViewSQL() |
Die Funktion erzeugt einen neuen View in der Datenbank. Es darf nur ein einziges SQL-Kommando enthalten sein, das den View definiert. CreateViewSQL parst keine { } und liefert nichts an GeoAS zurück. Der ViewName wird automatisch mit der SessionID erweitert und registriert. Dadurch kann der View auch in ExecuteSQLInto mit {ViewName} angesprorchen werden. Um auf solche Views oder Tabellen in GeoAS zugreifen zu können, kann die Funktion ExecuteSQLInto() verwendet werden, da die {ViewName}-Syntax dank der Registrierung des Views angewandt werden kann. Alternativ kann der View auch mit OpenOrRefreshSQL() direkt geöffnet werden.
CreateViewSQL füht CREATE OR ALTER VIEW aus. Vorhandene Views gleichen Namens müssen daher nicht vor dem Erzeugen gelöscht werden.
Syntax: CreateViewSQL(SourceTable, DestTable, SQLCommand)
SourceTable (Typ string) ist eine Tabelle aus der Datenbank, auf die sich das Kommando bezieht. Die Angabe ist erforderlich, da das SQL-Kommando nicht analysiert (geparst) wird und die Zuordnung bekannt sein muss.
DestTable (Typ string) ist der Name für den neuen View.
SQLCommand (Typ string): Das Kommando wird an die DB geschickt und ausgeführt. Sofern Makro-Variablen (str1, int1 ...) verwendet werden, sind diese wie üblich per Stringverkettung einzubringen.
Es gibt drei Varianten für ein SQLCommand: 1.leer: "Select * From SourceTable" wird benutzt 2.beginnt mit SELECT oder WITH: Komplettes SQLCommand wird benutzt 3.beginnt nicht mit SELECT und enthält nur eine WHERE-Bedingung: SQL wird zusammengesetzt aus "SELECT * FROM SourceTable WHERE " + SQLCommand
Besipiel 1 CreateViewSQL(Baum, MyView, BezirkID=1)
Besipiel 2 str1="Baum" str2="MyView" str3="SELECT BaumID FROM Baum where BezirkID=1" CreateViewSQL(str1, str2, str3) |
|
OpenOrRefreshSQL() |
a) Öffnet eine Tabelle oder einen View aus der Datenbank als Tabelle in GeoAS. b) Führt eine Select-Abfrage in der Datenbank aus und öffnet diese als Tabelle in GeoAS.
Ist die Tabelle bereits geöffnet, wird sie aktualisiert. Die Funktion erkennt automatisch, wenn es ich um eine registrierte Tabelle/View mit SessionID handelt.
Syntax: OpenOrRefreshSQL(BaseTable, destTablename, SQLCommand)
BastTable (Typ string): Tabelle/View aus der DB, die geöffnet werden soll oder auf die sich das SQLCommand bezieht.
destTable (Typ string): Tabellenname, unter der die Tabelle/View in GeoAS geöffnet wird.
SQLCommand (Typ string): Ist kein SQLCommand angegeben, wird die gesamte Tabelle/View BaseTable geöffnet. Ansonsten wird die Select-Abfrage ausgeführt und die Auswahl geöffnet. Es wird dazu in der Datenbank KEIN View angelegt. Der Parameter ist optional (Default = ""). Wird er weggelassen, müssen auch die nachfolgenden Übergabeparameter weggelassen werden.
Beispiel 1 - Die DB-Tabelle Baum wird unter dem Namen Test in GeoAS geöffnet. OpenOrRefreshSQL(Baum,Test)
Beispiel 2 - Die Auswahl aus der DB-Tabelle Baum wird unter dem Namen Test in GeoAS geöffnet. str1="SELECT BaumID FROM Baum where BezirkID=2" OpenOrRefreshSQL(Baum,Test,str1)
Beispiel 3 - Der DB-View MyView wird unter dem Namen Test in GeoAS geöffnet. OpenOrRefreshSQL(MyView,Test) |
|
n = Schlüsselwort n = Platzhalter n = Variable |
Bitte beachten Sie beim Erstellen von Makros, dass ein Limit von 30000 Zeichen (je Makro) nicht überschritten wird.
Dieses Limit gilt sowohl für Makros, die unmittelbar in das Textfeld des Makro-Assistenten eingetragen werden, als auch für Makros, die per externer Textdatei verlinkt werden.
Bei textintensiven Makros empfehlen wir, diese per MapBasic in eine *.mbx-Datei zu kompilieren. Die *.mbx-Datei kann dann über den Makro-Assistenten als Makro verlinkt werden.