Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Antworten
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Beitrag von larsg »

Hi,

Ich war mir sicher das ich das schonmal gemeldet hab und das Problem zwischenzeitlich behoben wurde, dann hab ich das hier gefunden:
viewtopic.php?f=6&t=10330&p=45462#p45473
Ich hab das nur zusätzlich zu einem anderen Bug gemeldet :oops: und das ist dann wohl untergegangen, daher hiermit ein neuer Versuch.

Was sollte passieren?
Strings sollten in jedem Teil einer Actions- oder Sub-Sektion gleichermaßen behandelt werden, inkl. der Verarbeitung von Zeichenverkettungen.

Was ist passiert?
Wenn ich eine lokale Funktion mit einem String-Parameter aufrufe, und für den String-Parameter eine Zeichenverkettung angebe, läuft die Funktion in einen Fehler.

skript

Code: Alles auswählen

[Actions]
DefFunc Test(Val $Test$:String):Void
   Comment $Test$
EndFunc

SetLogLevel=9
Test("a"+"b")
Sind im Log Fehlermeldungen zu sehen?

log

Code: Alles auswählen

[6] [2021-03-25 09:49:39.005] []   Search "c:\opsi.org\log\opsi-script-part-*"
[8] [2021-03-25 09:49:39.009] []   File "c:\opsi.org\log\opsi-script-part-o0BVzK851q.log"
[8] [2021-03-25 09:49:39.012] []     The file is 0 day(s) old, no deletion
[1] [2021-03-25 09:49:39.029] [] --
[1] [2021-03-25 09:49:39.032] [] --
[1] [2021-03-25 09:49:39.037] [] c:\opsi.org\log\opsi-script-part-M7zhr3I53H.log
[1] [2021-03-25 09:49:39.040] [] opsi-script 4.12.4.12 started at >>
[1] [2021-03-25 09:49:39.042] [] opsi-script log file with encoding utf8
[1] [2021-03-25 09:49:39.045] [] startmessage opsi-script created at CentralForm.FormCreate: 25.03.2021 09:42:36
[1] [2021-03-25 09:49:39.047] [] Loading skin from: C:\Program Files (x86)\opsi.org\opsi-client-agent\opsi-winst\..\custom\winstskin
[1] [2021-03-25 09:49:39.050] [] Called with parameter: C:\tmp\test.opsiscript
[1] [2021-03-25 09:49:39.052] [] startmessage StartProgramModes and create log: 25.03.2021 09:42:36
[1] [2021-03-25 09:49:39.055] [] Compiled with FPC: 3.2.0 for: Win32-i386
[1] [2021-03-25 09:49:39.058] [] pm: 2 25.03.2021 09:42:36
[1] [2021-03-25 09:49:39.061] [] Cleanup old part files at 25.03.2021 09:42:37
[1] [2021-03-25 09:49:39.063] [] Loading skin from: C:\Program Files (x86)\opsi.org\opsi-client-agent\opsi-winst\..\custom\winstskin
[1] [2021-03-25 09:49:39.066] [] Cleanup old part files at 25.03.2021 09:49:39
[6] [2021-03-25 09:49:39.068] [] Using new Depot path:  C:\opsi.org\cache\depot
[1] [2021-03-25 09:49:39.073] [] 
[1] [2021-03-25 09:49:39.075] [] ============ Version 4.12.4.12 script "C:\tmp\test.opsiscript"
[1] [2021-03-25 09:49:39.078] []              used script encoding: cp1252
[1] [2021-03-25 09:49:39.082] []              used system encoding: cp1252
[1] [2021-03-25 09:49:39.086] []              start: 2021-03-25  09:49:39
[1] [2021-03-25 09:49:39.090] []              on client named    "L01451"
[1] [2021-03-25 09:49:39.093] []              loggedin user    ""
[1] [2021-03-25 09:49:39.099] []              opsi-script running as    "adm_gruenheidl"
[1] [2021-03-25 09:49:39.102] []              opsi-script running with admin privileges
[1] [2021-03-25 09:49:39.106] []              opsi-script running in standard script mode
[1] [2021-03-25 09:49:39.110] [] executing: "C:\Program Files (x86)\opsi.org\opsi-client-agent\opsi-winst\winst32.exe"
[1] [2021-03-25 09:49:39.114] [] system infos:
[1] [2021-03-25 09:49:39.116] [] 20-79-18-C6-63-18  -  PC hardware address
[1] [2021-03-25 09:49:39.119] [] l01451.ci.civitec.de  -  IP name
[1] [2021-03-25 09:49:39.123] [] 10.1.0.1  -  IP address
[1] [2021-03-25 09:49:39.128] [] DEU  -  System default locale
[7] [2021-03-25 09:49:39.132] [] Registry started without redirection (64 Bit)
[7] [2021-03-25 09:49:39.136] [] Registry started readonly
[7] [2021-03-25 09:49:39.140] [] Registry started without redirection (64 Bit)
[6] [2021-03-25 09:49:39.144] [] Registry key [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion]  opened
[6] [2021-03-25 09:49:39.147] [] Key closed
[1] [2021-03-25 09:49:39.151] [] MS Windows 10.0 64 Bit, Release: 1909, Edition: Enterprise Edition
[1] [2021-03-25 09:49:39.156] [] 
[7] [2021-03-25 09:49:39.161] [] Registry started readonly
[7] [2021-03-25 09:49:39.164] [] Registry started without redirection (64 Bit)
[6] [2021-03-25 09:49:39.168] [] Registry key [HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion]  opened
[6] [2021-03-25 09:49:39.172] [] Key closed
[7] [2021-03-25 09:49:39.215] [] Starting with script...
[6] [2021-03-25 09:49:39.218] [] Added defined function: test to the known functions
[6] [2021-03-25 09:49:39.224] [] LogLevel was 7
[6] [2021-03-25 09:49:39.229] [] LogLevel set to 9
[9] [2021-03-25 09:49:39.238] [] Parsingprogress: r: Test("a"+"b") exp:
[9] [2021-03-25 09:49:39.255] [] Parsingprogress: r: ("a"+"b") exp: Test
[8] [2021-03-25 09:49:39.273] [] We are coming from function with index: -1 (-1 = base)
[8] [2021-03-25 09:49:39.292] [] We enter the defined function: test with 1 lines. inDefFuncLevel: 1 and index: 0
[8] [2021-03-25 09:49:39.311] [] Paramnr: 0 is : "a"
[8] [2021-03-25 09:49:39.317] [] Paramnr: 0 is the string: a
[2] [2021-03-25 09:49:39.332] [] Syntax Error: Parameter parsing failed: ")" expected  , or ) expected.
[8] [2021-03-25 09:49:39.350] [] We leave the defined function: test ; inDefFuncLevel: 0
[3] [2021-03-25 09:49:39.363] [] Call of defined function: Test failed
[1] [2021-03-25 09:49:39.400] [] ___________________
[1] [2021-03-25 09:49:39.416] [] script finished: success
[1] [2021-03-25 09:49:39.428] [] 0 errors
[1] [2021-03-25 09:49:39.441] [] 0 warnings
[1] [2021-03-25 09:49:39.454] [] 
[1] [2021-03-25 09:49:39.473] [] 
[8] [2021-03-25 09:49:39.487] [] End of CreateAndProcessScript
Mit welchen Schritten kann das Problem nachgestellt werden?
o. a. Skript via winst aufrufen

Bei welche Versionen der beteiligten Komponenten tritt das Problem auf?
opsi-winst 4.12.4.12
Benutzeravatar
wolfbardo
uib-Team
Beiträge: 1354
Registriert: 01 Jul 2008, 12:10

Re: Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Beitrag von wolfbardo »

Das Verhalten hat m.E. nichts mit Lokale Funktionen zu tun.:

Der Aufruf sollte mit

Code: Alles auswählen

Test('"a"+"b"')
erfolgen.

Gruss
Bardo Wolf


OPSICONF 2024
https://opsi.org/en/opsiconf/

opsi-Basisworkshops:

22. - 25. 04. 2024


opsi support - uib gmbh
For productive opsi installations we recommend maintainance + support contracts which are the base of opsi development.

http://www.uib.de
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Beitrag von larsg »

Dann erhalte ich in der Funktion den String

Code: Alles auswählen

"a"+"b"
In der Funktion soll aber der String ankommen.

Wenn ich einer Variable den Wert "a"+"b" zuweise, ist der Wert doch auch ab oder nicht?

Wenn ich Argumente mit Zeichenverkettung an eine integrierte Funktion übergebe, bspw

Code: Alles auswählen

Calculate($Wert$+"+1")
dann funktioniert das doch auch wie zu erwarten, warum nicht bei lokalen Funktionen?

Oder hab ich irgendwas falsch verstanden?
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Beitrag von larsg »

Hi,

wie schauts denn aus hiermit?
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Beitrag von larsg »

:roll:

Ich warte nun seit mehr als 3 Monaten auf eine Antwort.
Der geschilderte Bug besteht auch in OPSI-WInst Version 4.12.4.21 weiterhin.

Bitte nicht falsch verstehen, mir ist bewusst das der Support über dieses Forum keine Miete bezahlt.
Aber ich mein, was nützt es wenn ich hier Rückmeldungen zu einem Bug gebe, die offenbar niemanden interessieren?

Ich will ja nicht das mein Problem umgehend gelöst wird.
Mir reicht eine kurze Rückmeldung wie z.B.
"Schauen wir uns vrstl. in KW XY nochmal an, momentan keine Zeit."
"Problem erkannt, steht aber ganz unten auf der Liste und wird vielleicht irgendwann gefixt."
Dann weiß ich zumindest woran ich bin.
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3319
Registriert: 04 Jun 2008, 14:27

Re: Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Beitrag von d.oertel »

Hallo,

sorry für die späte Antwort aber dieser Thread war vorher nicht bei mir als opsi-script Entwickler gelandet.

How ever:
Man kann zwar postulieren das die Welt so sein sollte:
"Strings sollten in jedem Teil einer Actions- oder Sub-Sektion gleichermaßen behandelt werden, inkl. der Verarbeitung von Zeichenverkettungen."

Ist sie aber nicht und wird auch nicht im Handbuch behauptet.
Es gibt viele Stellen im opsi-script wo evtl. nur string literale oder nur variablen stehen dürfen aber keine beliebigen Stringexpressions.
Von daher betrachte ich das nicht als Bug (nicht vorhandene zugesicherte Eigenschaft)
sondern als gut begründeten Featurerequest.

Im konkreten Fall ist das Problem das es zwar eine interne Funktion gibt um beliebige Stringexpressions aufzulösen. Diese wird sogar aufgerufen. Aber schon vorher schlägt der Parser zu:
Der beschließt mit dem ersten Anführungszeichen das es ein string ist und mit dem zweiten das der Parameter zuende ist. Und so bleibt im Beispiel nur das a übrig und nach dem Parameter sollte eine Klammerzu kommen - kommt aber nicht : Fehler.

Ich habe das in unserem internen Ticketsystem als Feature #4683 aufgenommen.
Ich kann aber nicht versprechen, das das schnell geht.
Grund ist das das Parameter parsen an dieser Stelle sehr knifflig ist.
Aber ich schaue mal .....

gruss und Danke für den Hinweis

detlef oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: Lokale Funktionen: Parameterübergabe mit Zeichenverkettung

Beitrag von larsg »

Hi,

Auch sorry meinerseits für die späte Rückmeldung, aktuell viel zu tuen...

Danke für die Antwort und für die Aufnahme als Feature Request :)

Es fehlt in jedem Fall ein entsprechender Hinweis im Handbuch, das diese Funktionalität (Übergabe von Strings als Zeichenverkettung) bei lokalen Funktionen aktuell nicht möglich ist.

In OPSI integrierte Funktionen können mit Zeichenverkettung umgehen, dazu gibt es sogar diverse Beispiele im Handbuch, und ich kann mich nicht erinnern das ich jemals Probleme damit hatte. Also würde ich als Anwender davon ausgehen das diese Funktionalität auch bei lokalen Funktionen gegeben ist. Das der Parser hier komplett unterschiedlich arbeitet kann ich ja nicht wissen ;)
Antworten