[gelöst]Textbausteine via Code einfügen

22. Juli 2016 14:57

Liebe Kollegen,

Bedaure, dass ich mich schon wieder auf Euch abstützen muss. Im Bezug auf meine vorherige Frage bin ich immer noch dabei automatisiert Aufträge zu erstellen. Klappt soweit schon ordentlich.

Nun wundere ich mich, warum meine Textbaustein-Codes nicht "getriggert" werden.

Bei den Textbausteinen ist es ja so, dass wenn man händisch z.B. "BD" (=Besten Dank... bei uns) in die Spalte "No." einfügt und die Zeilenart leer lässt, dass dann in der Beschreibung auch der Text des Textbausteines, also "Besten Dank für Ihren Auftrag" erscheint.

Füge ich eine Zeile via Code hinzu, steht zwar in der korrekten Spalte "BD", aber die Spalte "Beschreibung" bleibt leer. Dies obwohl ich das Feld "No." validate, also den OnModify trigger ausführe, genau wie das von Hand auch der Fall wäre.

Code:
recSalesLine.VALIDATE("Document Type", recSalesHeader."Document Type");
recSalesLine.VALIDATE("Document No.", recSalesHeader."No.");             
recSalesLine.VALIDATE("Line No.", SalesLinePosition);
recSalesLine.VALIDATE("No.", 'BD');     // Erscheint zwar korrekt, aber die Description bleibt leer
recSalesLine.INSERT(TRUE);


Das ganze ist nicht eine Folge eines falsch aufgesetzten oder nicht aktivierten Textbausteines. Von Hand kommt die Beschreibung, nicht jedoch via Code.

Ich bin wie immer sehr dankbar für Euren entscheidenden Schupfer... danke!
Zuletzt geändert von Izzy am 22. Juli 2016 16:24, insgesamt 1-mal geändert.

Re: Textbausteine via Code einfügen

22. Juli 2016 15:22

Izzy hat geschrieben:Von Hand kommt die Beschreibung, nicht jedoch via Code.
Das liegt daran, dass der Code, welcher das Beschreibungsfeld füllen würde, nicht im Tabellenfeld (welches du per C/AL validierst), sondern im Form(!)-Feld eingebunden ist ...
Schau mal in die Subform, dort im Validate des Feldes "No." ist ein InsertExtendedText(FALSE); - und dann schau nach, was hinter dieser Funktion steht. Das muss dein Code ebenfalls durchführen.
Aber wichtig: Erst NACH dem INSERT, und zum Schluss das MODIFY nicht vergessen.

Re: Textbausteine via Code einfügen

22. Juli 2016 16:11

Hallo Natalie!

Vielen Dank für den Hinweis! Ich sehe den Punkt. Was mich immer wieder verwirrt ist, dass EVALUATE gemäss Anleitung den OnValidate Event triggert. Diesen gibts für das Feld aber sowohl in der Tabelle wie auch für die Feldspalte im Form. Ich dachte immer beide würden getriggert, da beide auch OnValidate heissen.

Hmmm... Heisst, dass meine programmtechnische Umsetzung nur den OnValidate Trigger des Feldes der Tabelle ausführt, nicht denjenigen des Forms. Irgendwie verständlich und dennoch...

Du hast natürlich Recht, da wird eine Funktion InsertExtendedText ausgeführt. Muss ich gleich mal angucken.

Danke Dir!

Re: Textbausteine via Code einfügen

22. Juli 2016 16:23

Hat geklappt wie am Schnürchen...

Hinter InsertExtendedText() des OnValidate triggers des FormFeldes(!) versteckte sich folgende Logik:

Code:
IF TransferExtendedText.SalesCheckIfAnyExtText(Rec,Unconditionally) THEN BEGIN
  CurrForm.SAVERECORD;
  TransferExtendedText.InsertSalesExtText(Rec);
END;
IF TransferExtendedText.MakeUpdate THEN
  UpdateForm(TRUE);


welche in meiner Ausgangslage vereinfacht das Ziel erfüllt und meiner rec-Variable den ExtendedText (zumindest einzeilige..) hinfügte:

Code:
IF TransferExtendedText.SalesCheckIfAnyExtText(recSalesLine,FALSE) THEN BEGIN
  TransferExtendedText.InsertSalesExtText(recSalesLine);
END;


Was mich schon verwirrte war die Tatsache, dass ich meinen Code auf Stufe Form schreibe (innerhalb eines Form Buttons). Deshalb hätte ich erwartet, dass meine recSalesLine.EVALUATE(..) Aufrufe auch den FormField-Event OnValidate() ausführen. Aber das war wohl falsch gedacht :)

DANKE DIR!!! Wünsche erholsames Wochenende!