
Texteditor
procedure EditText(var Text: Text; MaxLineStrLen: Integer; MaxTextLen: Integer; ReadOnly: Boolean) TextModified: Boolean
...
field(10; "Text"; Text[1000])
{
DataClassification = CustomerContent;
Caption = 'Text', Comment = 'DEU="Text"';
}
field(15; "Starting Date"; Date)
{
...Da jeder Textzeile zusätzlich zum Text noch ein Startdatum und ein Enddatum hinterlegt werden kann und das Textfeld selbst groß genug ist, wurde hier nachfolgende einfache Lösung gewählt, welche den Text nicht auf mehrere Zeilen aufgesplittet. Ein Zeilenumbruch im Text ist trotzdem möglich.
Wichtig dabei ist, dass das Textfeld in der Page auf Editable = false; gesetzt wird, da in dieser Lösung die Zeilenumbrüche (nicht sichtbar) ebenfalls im Textfeld gespeichert werden....
procedure EditText(Editable: Boolean)
var
NCEXTextEditorMgt: Codeunit "NCEX Text Editor Mgt.";
TempText: Text;
begin
TempText := Text;
if not NCEXTextEditorMgt.EditText(TempText, 0, MaxStrLen(Text), not Editable) then
exit;
Text := CopyStr(TempText, 1, MaxStrLen(Text));
end;
...
Page
...
field("Text"; Rec."Text")
{
ApplicationArea = All;
ToolTip = 'Specifies the text. Click on the field to edit the text.', Comment = 'DEU="Gibt den Text an. Klicken Sie auf das Feld, um den Text zu bearbeiten."';
Editable = false;
AssistEdit = true;
trigger OnAssistEdit()
begin
Rec.EditText(CurrPage.Editable());
CurrPage.Update();
end;
}
...procedure EditText(RecordRef: RecordRef; TextFieldNo: Integer; var TempBlob: Codeunit "Temp Blob"; ReadOnly: Boolean) TextModified: Boolean


pageextension 50000 "NVX Extended Text Lines" extends "Extended Text Lines"
{
actions
{
addfirst(Processing)
{
action(NVXTextEditorAction)
{
ApplicationArea = All;
Caption = 'Text Editor', Comment = 'DEU="Texteditor"';
Image = Edit;
ToolTip = 'Edit the text in the text editor.', Comment = 'DEU="Bearbeiten Sie den Text im Texteditor."';
trigger OnAction()
var
ExtendedTextLine: Record "Extended Text Line";
NCEXTextEditorMgt: Codeunit "NCEX Text Editor Mgt.";
TempBlob: Codeunit "Temp Blob";
RecordRef: RecordRef;
InStream: InStream;
NextLineNo: Integer;
TempText: Text;
begin
Clear(ExtendedTextLine);
ExtendedTextLine.SetRange("Table Name", Rec."Table Name");
ExtendedTextLine.SetRange("No.", Rec."No.");
ExtendedTextLine.SetRange("Language Code", Rec."Language Code");
ExtendedTextLine.SetRange("Text No.", Rec."Text No.");
RecordRef.GetTable(ExtendedTextLine);
if not NCEXTextEditorMgt.EditText(RecordRef, ExtendedTextLine.FieldNo(Text), TempBlob, not CurrPage.Editable()) then
exit;
ExtendedTextLine.LockTable();
ExtendedTextLine.DeleteAll();
NextLineNo := 10000;
TempBlob.CreateInStream(InStream);
while (not InStream.EOS()) do begin
Clear(ExtendedTextLine);
ExtendedTextLine."Table Name" := Rec."Table Name";
ExtendedTextLine."No." := Rec."No.";
ExtendedTextLine."Language Code" := Rec."Language Code";
ExtendedTextLine."Text No." := Rec."Text No.";
ExtendedTextLine."Line No." := NextLineNo;
NextLineNo += 10000;
InStream.ReadText(TempText);
ExtendedTextLine.Text := CopyStr(TempText, 1, MaxStrLen(ExtendedTextLine.Text));
ExtendedTextLine.Insert();
end;
end;
}
}
}
}procedure EditText(var TempBlob: Codeunit "Temp Blob"; MaxLineStrLen: Integer; MaxTextLen: Integer; ReadOnly: Boolean) TextModified: Boolean
...
field(50000; "Text Preview"; Text[250])
{
DataClassification = CustomerContent;
Caption = 'Text Preview', Comment = 'DEU="Textvorschau"';
}
field(50001; "Text Storage"; Blob)
{
DataClassification = CustomerContent;
Caption = 'Text Storage', Comment = 'DEU="Textspeicher"';
}
procedure EditText(Editable: Boolean)
var
NCEXTextEditorMgt: Codeunit "NCEX Text Editor Mgt.";
TempBlob: Codeunit "Temp Blob";
InStream: InStream;
OutStream: OutStream;
NewText: Text;
begin
CalcFields("Text Storage");
"Text Storage".CreateInStream(InStream);
TempBlob.CreateOutStream(OutStream);
CopyStream(OutStream, InStream);
if not NCEXTextEditorMgt.EditText(TempBlob, 0, 0, not Editable) then
exit;
TempBlob.CreateInStream(InStream);
InStream.Read(NewText);
SaveText(NewText);
end;
procedure SaveText(NewText: Text)
var
OutStream: OutStream;
begin
"Text Storage".CreateOutStream(OutStream);
OutStream.Write(NewText);
"Text Preview" := CopyStr(NewText, 1, MaxStrLen("Text Preview"));
end;
...
Page
...
field("Text Preview"; Rec."Text Preview")
{
ApplicationArea = All;
ToolTip = 'Specifies the text. Click on the field to edit the text.', Comment = 'DEU="Gibt den Text an. Klicken Sie auf das Feld, um den Text zu bearbeiten."';
Editable = false;
AssistEdit = true;
trigger OnAssistEdit()
begin
Rec.EditText(CurrPage.Editable());
CurrPage.Update();
end;
}
...table 50000 "Text Editor Options"
{
DataClassification = SystemMetadata;
Caption = 'Text Editor Options', Comment = 'DEU="Texteditor Optionen"';
TableType = Temporary;
ReplicateData = false;
fields
{
field(1; "Primary Key"; Code[10])
{
DataClassification = SystemMetadata;
Caption = 'Primary Key', Comment = 'DEU="Primärschlüssel"';
}
field(2; "Table No."; Integer)
{
DataClassification = SystemMetadata;
Caption = 'Table No.', Comment = 'DEU="Tabellennr."';
}
}
keys
{
key(Key1; "Primary Key")
{
}
}
}
Page Extension
pageextension 50000 "Text Editor 2" extends "NCEX Text Editor 2"
{
actions
{
addlast(Processing)
{
action(AddTableCaptionAction)
{
ApplicationArea = All;
Caption = 'Add Table Caption', Comment = 'DEU="Tabellenbeschriftung hinzufügen"';
ToolTip = 'Adds the table caption to the text.', Comment = 'DEU="Fügt die Tabellenbeschriftung zum Text hinzu."';
Visible = AddTableCaptionVisible;
Enabled = AddTableCaptionEnabled;
Image = Add;
trigger OnAction()
var
TempTextEditorOptions: Record "Text Editor Options" temporary;
AllObjWithCaption: Record AllObjWithCaption;
TableCaption: Text;
begin
ExtendedOptionsRecordRef.SetTable(TempTextEditorOptions);
AllObjWithCaption.Get(AllObjWithCaption."Object Type"::Table,TempTextEditorOptions."Table No.");
TableCaption := AllObjWithCaption.TableCaption();
InsertTextAtCurrentPosition(TableCaption);
end;
}
}
addlast(Promoted)
{
actionref(AddTableCaptionAction_Promoted; AddTableCaptionAction) { }
}
}
var
AddTableCaptionVisible: Boolean;
AddTableCaptionEnabled: Boolean;
trigger OnOpenPage()
begin
AddTableCaptionVisible := (ExtendedOptionsID = Database::"Text Editor Options");
AddTableCaptionEnabled := not GetReadOnly();
end;
}
Aufruf des Editors
...
var
TempTextEditorOptions: Record "Text Editor Options" temporary;
NCEXTextEditorMgt: Codeunit "NCEX Text Editor Mgt.";
ExtendedOptionsRecordRef: RecordRef;
...
NCEXTextEditorMgt.SetPageCaption('TEST');
Clear(TempTextEditorOptions);
TempTextEditorOptions."Table No." := Database::Customer;
TempTextEditorOptions.Insert();
ExtendedOptionsRecordRef.GetTable(TempTextEditorOptions);
NCEXTextEditorMgt.SetExtendedOptions(ExtendedOptionsRecordRef);
if not NCEXTextEditorMgt.EditText(TempBlob, 0, 0, not Editable) then
exit;
...

![]() | NAVAX Knowledge Assistant KI-gestützter Informationsassistent der Fragen anhand Ihrer eigenen Wissensdatenbank beantwortet. Weitere Informationen ![]() |