Tech-Tipps – Die 4 Tipps vom April sind da!

von Add Komoncharoensiri, Leiter der technischen Dienste bei 4D Inc.

Als 4D Entwickler müssen Sie mit den neuen Entwicklungen Schritt halten, die 4D kontinuierlich herausbringt. Neben den Tipps und Tricks, die das Produktteam zur Verfügung stellt, sind die Tech Tips eine weitere Referenz, um einige der 4D Konzepte zu lernen.

Dieser Artikel behandelt 4 Tipps:

  • Behandlung von SQL-Platzhaltern als literale Zeichenfolge
  • Programmatische Ermittlung des Projektnamens
  • Präemptive Methoden in derselben Aufrufkette sollten ebenfalls präemptiv sein
  • Erstellen eines neuen View Pro-Dokuments basierend auf einem Sheet

Wie werden SQL-Wildcard-Zeichen als literale Zeichenfolge behandelt?

Im Gegensatz zu 4D, das nur ein Platzhalterzeichen („@“) kennt, hat SQL mehrere Platzhalterzeichen (z. B. „%“, „?“, „_“, „#“ usw.). SQL verwendet Platzhalterzeichen, um ein oder mehrere Zeichen in einer Zeichenfolge zu ersetzen. Hier finden Sie eine Liste der SQL-Platzhalterzeichen. SQL-Wildcards werden hauptsächlich mit dem LIKE-Operator und der WHERE-Klausel verwendet, um nach einem bestimmten Muster in einer Spalte zu suchen.

Bei der Abfrage von Strings, die SQL-Jokerzeichen enthalten, mit dem WHERE/LIKE-Operator in 4D SQL müssen die Jokerzeichen mit einem Escape-Zeichen versehen werden, damit sie als Literalzeichen behandelt werden. Die ESCAPE-Klausel wird im LIKE-Operator unterstützt, um das Escape-Zeichen anzugeben.

Ein Beispiel: Die abzufragenden Daten enthalten „Kunde_1“, „Kunde_11“, „Mitarbeiter_1“ und „Mitarbeiter_11“. Ziel ist es, alle Zeichenketten zu finden, die mit „_1“ enden.

Da der Unterstrich („_“) eines der Platzhalterzeichen in SQL ist, muss er mit einem Escape-Zeichen versehen werden, damit er als Literalzeichen behandelt wird. Dies kann als solches geschrieben werden.

ARRAY TEXT($results; 0)
Begin SQL
   SELECT ID from Table_1
   WHERE Field_2 LIKE '%\_1' ESCAPE '\'
   INTO : $results
End SQL

Ein Backslash-Zeichen („\“) wird vor den Unterstrich („_“) gesetzt, und dann wird der Backslash als Escape-Zeichen definiert. Das Escape-Zeichen sorgt dafür, dass SQL das folgende Zeichen als Literalzeichen behandelt.

Programmatisch den Projektnamen ermitteln.

Wenn Sie im Projektmodus arbeiten, wird manchmal der Name der Projektanwendung benötigt. Um den Projektnamen programmatisch abzurufen, verwenden Sie den Befehl Folder mit der Konstante fk database folder. Die Eigenschaft „name“ des zurückgegebenen Ordnerobjekts ist der Name des Projekts. Wenn zum Beispiel ein Projekt mit dem Namen „Beispielprojekt“ erstellt wurde, wird in der folgenden Zeile:

$projectName:=Folder(fk database folder).name

$projectName gibt „example project“ in der Projektanwendung zurück.

Präemptive Methoden unter der gleichen Aufrufkette sollten ebenfalls präemptiv sein

Alle Methoden innerhalb derselben Aufrufkette müssen ebenfalls preemptiv / thread-safe sein, wenn sie mit einer preemptiven Methode arbeiten. Dazu gehören typische Projektmethoden und Methoden innerhalb von Klassenmethoden wie collection.sort(), bei denen das erste Argument ein Methodenname ist.

Darüber hinaus umfassen thread-sichere Methoden Bedingungen wie z.B.:

  • muss die Eigenschaft „Kann in präemptiven Prozessen ausgeführt werden“ oder „indifferent“ aktiviert haben
  • Darf keine thread-unsicheren Plugins enthalten
  • Darf keine prozessübergreifenden Variablen verwenden
  • Darf keine schnittstellenbezogenen Befehle aufrufen (z. B. DIALOG)

Erstellen eines neuen VP-Dokuments basierend auf einem Blatt

Es ist möglich, ein neues 4D View Pro Dokument zu erstellen, das auf einem bestimmten Blatt eines anderen 4D View Pro Dokuments basiert.

Nachfolgend finden Sie eine Utility-Methode, die den Namen des View Pro Bereichs als ersten Parameter und die gewünschte Blattindexnummer annimmt, um ein neues Dokument zu erstellen, das nur das Blatt als Objekt enthält:


// VP_Extract_Sheet
#DECLARE($vpAreaName_t : Text; \
$sheetIdx_l : Integer)\
->$newVP_ob : Object

var $srcVP_ob : Object

$srcVP_ob:=VP Export to object($vpAreaName_t)

$newVP_ob:=OB Copy($srcVP_ob)

$newVP_ob.spreadJS.sheets:=New object( \
VP Get sheet name($vpAreaName_t; $sheetIdx_l); \
$newVP_ob.spreadJS.sheets[VP Get sheet name($vpAreaName_t; $sheetIdx_l)])

$newVP_ob.spreadJS.activeSheetIndex:=0
$newVP_ob.spreadJS.sheetCount:=1

Damit können bestimmte Blätter aus einem VP-Dokument oder jedes in einen VP-Bereich importierte Dokument als eigenes VP-Dokument extrahiert werden.

Schlusswort

Das waren unsere 4 Tipps und Tricks für den April! Ich hoffe, Sie haben etwas Neues gelernt und werden diese in Ihrer täglichen Arbeit anwenden.

Wenn Ihnen die obigen Tipps gefallen haben, finden Sie weitere in der 4D Knowledge Base, einer Bibliothek mit Informationen über die 4D Technologie, in der wöchentlich technische Tipps und monatlich Technotes veröffentlicht werden. Sie hilft Kunden seit Jahren, Antworten auf ihre Probleme zu finden, und wird dies auch in den kommenden Jahren tun.

Add Komoncharoensiri
Add Komoncharoensiri ist seit 2000 ein wichtiges Mitglied des technischen Support-Teams. Komoncharoensiri begann seine Karriere im Unternehmen als Technical Support Engineer und arbeitete sich dann 2003 zum 4D Evangelist, 2006 zum Internal Application Manager und 2007 zum Director of Technical Services hoch. 2000 erhielt Add einen BS-Abschluss in Computerwissenschaften von der San Jose State University. Seine Leidenschaft gilt der User Experience (UX) und der Programmierung von Benutzeroberflächen. Er war an der Entwicklung und Verwaltung der Websites 4D Knowledgebase und 4D Partner Central beteiligt.