Das Wissen aller Anwender nutzen

Im Allplan Connect Forum tauschen sich Anwender aus, geben wertvolle Tipps oder beraten sich bei ganz konkreten Aufgabenstellungen − auch international.
Und damit wirklich keine Frage unbeantwortet bleibt, unterstützen die Mitarbeiter des Technischen Supports ebenfalls aktiv das Forum.

Es erwarten Sie:

  • Foren-Vielfalt aus CAD Architektur, CAD Ingenieurbau uvm.
  • Tipps von User für User
  • international: Deutsch, Englisch, Italienisch, Französisch und Tschechisch

Melden Sie sich jetzt an und diskutieren Sie mit!

Zur Registrierung

[Frage] Verwendung von Python String-Funktionen in Formeln [Gelöst]


Es wissen vielleicht manche, manche vielleicht noch nicht:
ab V2022 ist es möglich, im Formel-Editor auch Excel und Python-Funktionen anzuwenden. Die Funktion soll am besten mit entsprechendem "Präfix" versehen werden, damit der Allplan Formelinterpreter sich bei Fehlererkennung leichter tut. Die Präfixe sehen folgendermaßen aus (korrigiere mich bitte, wenn ich hier falsch liege):
A: Allplan Funktion
X: Excel Funktion
P: Python Funktion
V: VBS Funktion aus functions.vbs

Jetzt meine erste Frage:
Ich mache bestimmt was falsch bei der Verwendung von den Python Funktionen im Formel-Editor. Angenommen, dass ich einen String in Python modifizieren will, gehe ich so vor:

my_string = "Hello World!"

my_new_string = my_string.lower()

So bekomme ich als Ergebnis den my_new_string = "hello world!"

Übertragen wir das auf den Allplan-Formel-Editor: Wie soll dort die Formel aussehen, um z.B. mit dem Attribut "Bezeichnung" das gleiche zu erreichen? Folgende Formel funktioniert nicht:

p:@507@.lower()

Zweite Frage:
kann ich mir eine Datei mit selbst definierten Python-Funktionen erstellen, wie das der Fall bei functions.vbs ist? VBS wollen wir nicht verwenden, denn es funktioniert leider nicht zuverlässig auf allen Rechnern.

Hinweis vorab:
Das o.g. ist ganz leicht mit Excel Funktion zu erledigen

X:KLEIN(@507@)

Die Vorgehensweise scheitert aber, wenn ich das Beschriftungsbild/Legende/Formelattribut einer meinen Partner-Büros zur Verfügung stellen will, die vielleicht nicht die deutsche Version von Office-Paket verwenden. Hier wäre die Möglichkeit der Verwendung von englischen Excel-Bibliotheken ganz sinnvoll.

Vielen Dank!

Lösung anzeigen Lösung verbergen

In /STD/Scripts/functions.py hinzufügen:

def to_lower(txt):
    return txt.lower()

Aufruf in der Formel:

""+p:to_lower(@507@)
1 - 10 (12)

Hallo, hier wurde auch über das Thema diskutiert und klärt evtl. einige Fragen.
Link
Edit: Hier ebenfalls Link

VG
Marcus

In /STD/Scripts/functions.py hinzufügen:

def to_lower(txt):
    return txt.lower()

Aufruf in der Formel:

""+p:to_lower(@507@)

Vielen Dank, es hat funktioniert.
Allerdings muss man bei Formelattributen einen Umweg nehmen. Der Formelinterpreter akzeptiert den folgenden Ausdruck nicht

p:MeinePythonFunktion(Argument1,Argument2)

sondern nur folgender:
MeinePythonFunktion(Argument1,Argument2)

Die zweite Variante funktioniert aber nicht - die Python-Funktion wird nicht ausgeführt. Man muss in der Datei AttributeDefinitionCollectionLocal_de.xml manuell die Formel mit dem Präfix schreiben, dann funktioniert es. Etwas komisch

p:MeinePythonFunktion(Argument1,Argument2)

umbauen zu
python:MeinePythonFunktion(Argument1,Argument2)

sollte funktionieren

VG
Marcus

Auf Allplanseite muss ein Semikolon eingesetzt werden:
--> p:MeinePythonFunktion(Argument1;Argument2)

> python:MeinePythonFunktion(Argument1,Argument2)
--> das ist keine gültige Syntax...

Grüße
rb

Allplan Product Owner

.

VG
Marcus

Ich glaube nicht, dass das Komma das Problem ist. Also klar, man soll den Semikolon einsetzen - mein Beispiel war fehlerhaft. Der Allplan-Formelinterpreter akzeptiert jedoch auch keine Python-Funktion mit einem Argument, wenn man den Präfix davor setzt (sh. Anhang). Und ohne Präfix funktioniert nicht.
Dieses Problem tritt nur bei der Eingabe von einem Formelattribut. Bei Beschriftungsbilder geht es. In einer Legende habe ich nicht versucht.

Anhänge (1)

Typ: image/png
100-mal heruntergeladen
Größe: 41,27 KiB

bei mir nicht - welche Meldung wird angezeigt, wenn man den Mauszeiger über das "!"-Icon hält?

Allplan Product Owner

Anhänge (1)

Typ: image/jpeg
69-mal heruntergeladen
Größe: 21,61 KiB

Zitiert von: Rainer_Buehne
bei mir nicht - welche Meldung wird angezeigt, wenn man den Mauszeiger über das "!"-Icon hält?

Oh, der Hinweis war entscheidend. Ich habe nicht erwartet, dass der Formelinterpreter auch die in functions.py definierte Funktionen auf Richtigkeit überprüft. Er ist davon ausgegangen, dass der Argument @507@ eine Fließkommazahl ist und deshalb die Methode replace() nicht drauf angewendet werden kann und somit den Syntax nicht akzeptiert. Ich habe das Argument einfach in String am Anfang der Funktion konvertiert und jetzt ist die Meldung nicht mehr da. Ohne hat es auch funktioniert, man musste nur die Kontrolle vom Allplan umgehen.

Warum der Interpreter angenommen hat, dass das Argument eine Fließkommazahl ist, kann ich nicht nachvollziehen. Die Abfrage des Attributstyps aus dem AttributeDefinitionCollectionLocal.xml ist anscheinend nicht implementiert.

Auf jeden Fall wäre die Geschichte zu vermeiden, wenn ich genauer geschaut hätte, was Allplan mir zu kommunizieren hat

1 - 10 (12)

https://campus.allplan.com/ verwendet Cookies  -  Mehr Informationen

Akzeptieren