Table of Contents

Anpassen

Es ist möglich, den Editor auf einer bestehenden Seite einzubetten oder eine Aktion hinzuzufügen, um den Editor auf einer separaten Seite zu öffnen.

Editor-Aktion

Der einfachste Weg, den Editor zu implementieren, ist, ihn über eine Aktion zu öffnen.

Hier ist ein Beispiel für das Hinzufügen der Aktionen:

action(ActionRichTextEditor)
{
    ApplicationArea = CCSTMRTE;
    Caption = 'Rich-Text-Editor';
    Image = DocumentEdit;
    Promoted = true;
    PromotedCategory = Process;
    PromotedOnly = true;
    ToolTip = 'Öffnen Sie den Rich-Text-Editor für die ausgewählte Zeile.';

    trigger OnAction()
    begin
        OpenRichTextEditor(false);
        CurrPage.Update(false);
    end;
}
action(ActionRichTextEditorLineConversion)
{
    ApplicationArea = CCSTMRTE;
    Caption = 'Rich-Text-Editor (Zeilenumwandlung)';
    Image = DocumentEdit;
    Promoted = true;
    PromotedCategory = Process;
    PromotedOnly = true;
    ToolTip = 'Öffnen Sie den Rich-Text-Editor für die ausgewählte Zeile und wandeln Sie den Text anschließend in reine Text-Dokumentenzeilen um.';
    Visible = PageEditable;

    trigger OnAction()
    begin
        OpenRichTextEditor(true);
        CurrPage.Update(false);
    end;
}

Hier ist ein Beispiel für den Aufruf des Editors bei einer Aktion:

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;

Die Zeilenumwandlung wird nicht im Detail behandelt. Prüfen Sie codeunit 5060608 "CCS TM Rich Text Management" für Details.

Integrierter Editor

Das Benutzersteuerelement CCS TM Rich Text Editor definiert den Rich-Text-Editor. Um den Editor in eine bestehende Seite einzubetten, muss das Benutzersteuerelement hinzugefügt werden, außerdem muss das Speichern und Laden des Inhalts gehandhabt werden.

Hier ist ein Beispiel für das Hinzufügen der Benutzersteuerung:

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;
    }
}

Hier ist ein Beispiel für die Handhabung des Speicherns und Ladens von Inhalt:

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;

Um Zeilen umzuwandeln, nutzen Sie ein Ereignis der Benutzersteuerung:

trigger OnConvertToLines(Content: Text; Text: Text)
begin
    ConvertLines(Text);
end;

Die Konvertierungsimplementierung könnte wie folgt aussehen:

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
Senden Sie Feedback für diese Seite. (Beachten Sie, dass diese Umfrage auf Englisch ist.)