Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: jww am 22.10.24 - 13:09:59

Titel: Biug im Formula-Interpreter?
Beitrag von: jww am 22.10.24 - 13:09:59
Hallo und wie üblich bei meinen Beiträgen Sorry, eine weitere Frage zur "ollen Version" zu stellen ... ich könnte mir aber denken, dass das nachfolgend beschrieben Problem auch bei neueren Versionen noch besteht - so es dort überhaupt noch doe "Formula" Unterstützung gibt.

Ich habe nun über Tage und viele Stunden versucht, einen Fehler auszumerzen der aber - so scheint es - nicht an meinem Code sonderen an einem Bug oder einer warum auch immer vorhandenen Limitierung des Interpreters für Formeln zu liegen scheint und immer zu  einem Absturz von Notes führt:

Zuerst ein paar Erklärungen:

(A) ZIEL: erstellen einer Download-Link Liste in einem "Pass-Thru-HTML" aus einer "Liste" (gleich mehr dazu).
(B) Die Realisierung erfolgt in einem Computed-Text innerhalb eines (RTF-)Body Feldes einer Maske
(C) Es sollen quasi mehrere Zeilen mit HTML Code wie '<hr><a href="##pathToFile##" download>##text##</a>' durch Zeilenumbruch getrennt, ausgegeben werden
(D) um die Ausgabe leicht modifizieren zu können, ohne programmieren zu müssen, gibt es neben dem Code-Teil noch ein Text Feld, welches einen TEXT (indirekt eine Liste, durch "|" getrennte Elemente) mit Dateinamen enthält.
(E) Das erste Element dieser Liste ist eine URL, die jedem Dateinamen vorangestellt wird


FORMEL-HINWEISE:

(1) Die unten aufgeführte Formel befindet sich in einem "Computet Text" innerhalb eines "body" RTF Felds.

(2) Die Formel bezieht einen Text, der letztendlich eine Liste darstellt, aus einem Feld namens "code_PRM", das ein Textfeld ist (OHNE Mehfachwerte)

(3) Der bezogenen Text wird in eine Liste umgewandelt

(4) Das erste Element wird in die Variable "url" geschrieben

(5) es werden die nötigen HTML-Tags in drei variable´n geschrieben (html_1 ... 3)

(6) Eine Loop geht über alle Listen-Elemente, die Dateien sind und extrahiert den n-ten Dateinamen, der in der Variablen "file" landet


PROBLEM:
Bei "kleinen" Änderungen der Texte in den html - variablen stürzt Notes ab. GANZ KONKRET NACHVOLLZIEHBAR ist folgendes:

Wenn die Zeile

     html_2 := "\" download>X";

z.B. in

    html_2 := "\" download>XXXX";

geändert wird, stürzt Notes ab.

Da ich dachte, es könne an der Anzahl Zeichen im Result-Sring liegen, habe ich schon die Zeile

      loops := @Elements(liste);

in

    loops := @Elements(liste)/2;

halbiert ... hat keine Einfluss!




Code
liste := @Explode( code_prm;"|" );
loops := @Elements(liste)/2;
html := "[<hr>" + @NewLine;

html_1 := @NewLine + "<hr><a href=\"";
[b]html_2 := "\" download>X";[/b]
html_3 := " </a> ";
html_end := @NewLine + "<hr><hr>]" + @NewLine;

url := @Subset( liste;1);

REM{ loop all list elements and produce html pass-through code };
REM { @implode( @explode( code_prm;"|" ) ; @newline);  };

@For(n := 2;  n <= loops;  n := n + 1;
   liste_use := @Subset( liste; n);
   file := @Subset( liste_use;-1);
   html := html + html_1 + url + file + html_2 + file + html_3
);

html := html + html_end;
html



Also nochmals:


Hat jemand ne Idee warum bei geringsten Änderungen Notes abstürzt?
Titel: Antw:Biug im Formula-Interpreter?
Beitrag von: Tode am 23.10.24 - 09:36:27
Kannst Du mal einen -anonymisierten- Inhalt des Feldes "code_prm" liefern? Ich habe testweise mit einer kurzen URL und 6 Dateinamen probiert und es stürzt nichts ab...

Ansonsten könntest Du das Ganze auch mal mit Transform probieren, vielleicht funktioniert ja Deine For-Schleife nicht.
Und Du musst unbedingt den Dateinamen mittels @URLEncode "sanitizen":
Code
liste := @Explode( code_prm;"|" );
loops := @Elements(liste);
url := @Subset( liste;1); 
fileListe := @Subset( liste; 1 - loops );
html := "[<hr>"; 
html_1 := "<hr><a href=\"";
html_2 := "\" download>Öffne Datei '";
html_3 := "'</a> ";
html_end := "<hr><hr>]"; 
fileLinks := html : @Transform( fileListe ; "file"; html_1 + url + @UrlEncode( "Domino" ; file ) + html_2 + file + html_3 ) : html_end;
@Implode( fileLinks ; @NewLine )

Mit diesen Beispieldaten:
code_prm := "http://www.test.de/|file.xml|file2.xml|file3.xml|file4.html|file5.doc|ein langer dateiname.xls";

Erhältst Du dieses Ergebnis:

[<hr>
<hr><a href="http://www.test.de/file.xml" download>Öffne Datei 'file.xml'</a> 
<hr><a href="http://www.test.de/file2.xml" download>Öffne Datei 'file2.xml'</a> 
<hr><a href="http://www.test.de/file3.xml" download>Öffne Datei 'file3.xml'</a> 
<hr><a href="http://www.test.de/file4.html" download>Öffne Datei 'file4.html'</a> 
<hr><a href="http://www.test.de/file5.doc" download>Öffne Datei 'file5.doc'</a> 
<hr><a href="http://www.test.de/ein%20langer%20dateiname.xls" download>Öffne Datei 'ein langer dateiname.xls'</a> 
<hr><hr>]


Wobei ich persönlich mir ja die doppelten Trennlinien am Anfang und am Ende sparen würde... aber das ist Geschmackssache
Titel: Antw:Biug im Formula-Interpreter?
Beitrag von: jww am 23.10.24 - 10:26:57
Hi Tode, danke für Deine Hilfe!

In meinem Feld code_PRM ssteht folgendes:

http://l123456.dynalias.com:90/merlin/video/|01 Kapitel 1 Intro.mp4|02 Sitzposition - Sitzhoehe.mp4|03 Sitzposition und Setaufbau.mp4|04 Stockhaltung.mp4|05 Rebound Training.mp4|06 Fusstechnik.mp4|07 Stickings.mp4|08 Stickings Warm Up 1.mp4|09 Stickings Warm Up 2.mp4|10 Techniktraining Intro.mp4|11 Techniktraining Uebung.mp4|12 Rudiment Training Intro.mp4|13 Rudiment Training Uebung.mp4|14 Kapitel 2 Intro.mp4|15 Bewegungspyramide.mp4|16 Polymetrik.mp4|17 Koordinationsebenen.mp4|18 Kapitel 3 Intro.mp4|19 Kapitel 4 Intro.mp4|20 Kapitel 5 Intro.mp4

Ich bin mir eigentlich auch sicher, dass es irgend ein interner Fehler sein muß, weil die Änderungen, die bei mir die Abstürze provozieren, sind reine Textänderungen in den String-Variablen.

Dir <hr>'s hab' ich nur für Testzwecke drin. EIGENTLICH sollte die page noch aufgehübscht werden, aber wenn das schon bei diesen wenigen Bytes crasht ...

Das mit dem URLEnCODE ist, by the way, ne gute Idee - danke dafür!

Mit welcher Version arbeitest Du?

Auch der Ansat zmit Transform ist interessant ... vielleicht liegt's ja sogar am FOR?
Titel: Antw:Biug im Formula-Interpreter?
Beitrag von: jww am 23.10.24 - 10:48:54
Und gleich noch ne Rückmeldung: Mit Deinem Code stürzt Notes bei mir auch nicht ab. Selbst dann nicht, wenn ich die Anzahl der files deutlich erhöhe (habe das mal verdreifacht).

Insofern: 1000 Dank für die Verbesserung meines Codes. Ich hake das für mich mal unter "FOR-Problem" ab.

Gibt mir aber doch zu denken: Da ich schon seit Jahren nur noch sporadisch mit Notes arbeite (programmierend) und fast nur noch PHP und Python bzw. c# mache, habe ich das Thema "Arbeiten mit Listen" ein wenig aus den Augen verloren. Das war ja immer schon eine Stärke von Notes/Domino.
Titel: Antw:Biug im Formula-Interpreter?
Beitrag von: Tode am 23.10.24 - 12:00:51
Ja, tatsächlich ist die Arbeit mit Listen die ganz große Stärke... Insofern könnte man sich sogar das Transform sparen, ein einfaches Listenaddieren hätte es auch getan:

Code
liste := @Explode( code_prm;"|" );
loops := @Elements(liste);
fileListe := @Subset( liste; 1 - loops );
url := @Subset( liste;1); 
html := "[<hr>"; 
html_1 := "<hr><a href=\"";
html_2 := "\" download>Öffne Datei '";
html_3 := "'</a> ";
html_end := "<hr><hr>]"; 
fileLinks := html : (html_1 + url + @URLEncode( "Domino" ; fileListe ) + html_2 + fileListe + html_3 ) : html_end;
@Implode( fileLinks ; @NewLine )

Ich hatte auf die Schnelle natürlich nur mit der bei mir aktuell aktivierten Version 12.0.2 getestet, kann schon sein, dass hier ein Crash gefixt wurde in irgendeiner Version....

Titel: Antw:Biug im Formula-Interpreter?
Beitrag von: jww am 29.10.24 - 19:38:17
Anyways. Funzt bei mir nun ohne crash, insofern: Nochmals 1000 Dank!