Customize
It's possible to embed the editor on an existing page or add an action to open the editor in a separate page.
Editor Action
The easiest way to implement the editor is to open it by an action.
Here is an example of adding the actions:
action(ActionRichTextEditor)
{
ApplicationArea = CCSTMRTE;
Caption = 'Rich Text Editor';
Image = DocumentEdit;
Promoted = true;
PromotedCategory = Process;
PromotedOnly = true;
ToolTip = 'Open the rich text editor for the selected line.';
trigger OnAction()
begin
OpenRichTextEditor(false);
CurrPage.Update(false);
end;
}
action(ActionRichTextEditorLineConversion)
{
ApplicationArea = CCSTMRTE;
Caption = 'Rich Text Editor (Line Conversion)';
Image = DocumentEdit;
Promoted = true;
PromotedCategory = Process;
PromotedOnly = true;
ToolTip = 'Open the rich text editor for the selected line and convert the text into plain text document lines, afterwards.';
Visible = PageEditable;
trigger OnAction()
begin
OpenRichTextEditor(true);
CurrPage.Update(false);
end;
}
Here is an example of calling the editor on action:
local procedure OpenRichTextEditor(LineConversion: Boolean)
var
TempRichTextLine: Record "CCS TM Line Document" temporary;
begin
TempRichTextLine.Copy(Rec, true);
OpenRichTextEditor(TempRichTextLine, LineConversion, CurrPage.Editable);
end;
procedure OpenRichTextEditor(RichTextLine: Record "CCS TM Line"; LineConversion: Boolean): Boolean
var
RichTextEditor: Page "CCS TM Rich Text Editor";
begin
RichTextEditor.SetContent(GetRichText(RichTextLine, RichTextLine.FieldNo("Rich Text")));
RichTextEditor.SetRequestPageId(Page::"CCS TM Subform");
RichTextEditor.SetEditable(true);
if RichTextEditor.RunModal() = Action::OK then begin
SetRichText(RichTextLine, RichTextEditor.GetContent());
SetLineText(RichTextLine, RichTextEditor.GetText());
RichTextLine.Modify();
DeleteChildLines(RichTextLine);
if LineConversion then
ConvertLines(RichTextLine, RichTextEditor.GetText());
exit(true);
end;
end;
The line conversion will not be handled in detail. Check codeunit 5060608 "CCS TM Rich Text Management"
for details.
Embedded Editor
The CCS TM Rich Text Editor
user control defines the rich text editor. To embed the editor on an existing page, the user control must be added, and saving and loading the content must be handled.
Here is an example of adding the user control:
group("CCS TM Rich Text Editor Group")
{
Caption = 'Rich Text Editor';
usercontrol("CCS TM Rich Text Editor"; "CCS TM Rich Text Editor")
{
ApplicationArea = CCSTMRTE;
trigger OnControlAddInReady()
var
Management: Codeunit "CCS TM Rich Text Management";
begin
CurrPage."CCS TM Rich Text Editor".InitializeEditor(Management.GetEditorToolbarString(Page::"Extended Text"));
end;
trigger OnEditorInitialized()
begin
EditorInitialized := true;
LoadContentToEditor();
end;
trigger OnEditorChange(Content: Text; Text: Text)
begin
SaveContentFromEditor(Content);
end;
}
}
Here is an example of handling the saving and loading of content:
trigger OnAfterGetCurrRecord()
begin
LoadContentToEditor();
end;
local procedure UpdateControls()
begin
if EditorInitialized then
CurrPage."CCS TM Rich Text Editor".SetReadOnly(not Editable);
end;
local procedure LoadContentToEditor()
var
Content: Text;
InStr: InStream;
begin
if not EditorInitialized then
exit;
Rec.CalcFields("CCS TM Rich Text");
Rec."CCS TM Rich Text".CreateInStream(InStr);
InStr.Read(Content);
CurrPage."CCS TM Rich Text Editor".SetContent(Content);
end;
local procedure SaveContentFromEditor(Content: Text)
var
OutStr: OutStream;
begin
if StrLen(Content) > 0 then begin
Clear(Rec."CCS TM Rich Text");
Rec."CCS TM Rich Text".CreateOutStream(OutStr);
OutStr.Write(Content);
end else
Clear(Rec."CCS TM Rich Text");
end;
To convert lines, you can listen to an event of the user control:
trigger OnConvertToLines(Content: Text; Text: Text)
begin
ConvertLines(Text);
end;
The conversion implementation could look like this:
local procedure ConvertLines(EditorText: Text)
var
Line: Text;
LineLine: Text;
Lines: List of [Text];
LineLines: List of [Text];
Management: Codeunit "CCS TM Rich Text Management";
NextLineNo: Integer;
ExtendedTextLine: Record "Extended Text Line";
begin
DeleteChildLines();
NextLineNo := 1;
Management.ConvertTextToLines(EditorText, Lines);
foreach Line in Lines do begin
Management.SplitTextToLines(Line, MaxStrLen(ExtendedTextLine.Text), LineLines);
foreach LineLine in LineLines do begin
CreateLine(NextLineNo, LineLine);
NextLineNo += 1;
end;
end;
end;
local procedure CreateLine(LineNo: Integer; Value: Text)
var
ExtendedTextLine: Record "Extended Text Line";
begin
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." := LineNo;
ExtendedTextLine.Text := Value;
ExtendedTextLine.Insert();
end;
local procedure DeleteChildLines()
var
ExtendedTextLine: Record "Extended Text Line";
begin
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.");
if not ExtendedTextLine.IsEmpty then
ExtendedTextLine.DeleteAll();
end;
Feedback
Submit feedback for this page.