Table 5103 Interaction Tmpl. Language, source in 29

Source29

src/Layers/W1/BaseApp/CRM/Interaction/InteractionTmplLanguage.Table.al356 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.CRM.Interaction;

using Microsoft.CRM.Setup;
using Microsoft.Foundation.Reporting;
using System.Environment;
using System.Globalization;
using System.Integration.Word;
using System.IO;
using System.Reflection;
using System.Utilities;

table 5103 "Interaction Tmpl. Language"
{
    Caption = 'Interaction Tmpl. Language';
    DataClassification = CustomerContent;
    LookupPageID = "Interact. Tmpl. Languages";

    fields
    {
        field(1; "Interaction Template Code"; Code[10])
        {
            Caption = 'Interaction Template Code';
            ToolTip = 'Specifies the code for the interaction template that you have selected.';
            Editable = false;
            TableRelation = "Interaction Template";
        }
        field(2; "Language Code"; Code[10])
        {
            Caption = 'Language Code';
            ToolTip = 'Specifies the language that is used when translating specified text on documents to foreign business partner, such as an item description on an order confirmation.';
            TableRelation = Language;
        }
        field(3; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies the description of the interaction template language. This field will not be displayed in the Word attachment.';
        }
        field(4; "Attachment No."; Integer)
        {
            Caption = 'Attachment No.';
        }
        field(5; "Custom Layout Code"; Code[20])
        {
            Caption = 'Custom Layout Code';
            ToolTip = 'Specifies the number of the report layout.';
            TableRelation = "Custom Report Layout" where("Report ID" = const(Report::"Email Merge"));

            trigger OnValidate()
            begin
                if Rec."Custom Layout Code" <> '' then
                    Rec.Validate("Report Layout Name", '');
                CalcFields("Custom Layout Description");
            end;
        }
        field(6; "Custom Layout Description"; Text[250])
        {
            CalcFormula = lookup("Custom Report Layout".Description where(Code = field("Custom Layout Code")));
            Caption = 'Custom Layout Description';
            Editable = false;
            FieldClass = FlowField;
        }
        field(7; "Word Template Code"; Code[30])
        {
            ToolTip = 'Specifies the Word template to use when you create communications for an interaction. The Word template will create either a document or be used as the body text in an email.';
            DataClassification = CustomerContent;
            TableRelation = "Word Template".Code where("Language Code" = field("Language Code"), "Table ID" = const(Database::"Interaction Merge Data")); // Only Interaction Merge Data word templates with same language code are allowed
        }
        field(8; "Report Layout Name"; Text[250])
        {
            Caption = 'Report Layout Name';
            ToolTip = 'Specifies the report layout that will be used.';
            TableRelation = "Report Layout List".Name where("Report ID" = const(Report::"Email Merge"));

            trigger OnLookup()
            var
                ReportLayoutList: Record "Report Layout List";
                ReportManagement: Codeunit ReportManagement;
                Handled: Boolean;
            begin
                ReportLayoutList.SetRange("Report ID", Report::"Email Merge");
                ReportManagement.OnSelectReportLayout(ReportLayoutList, Handled);
                if not Handled then
                    exit;
                "Report Layout Name" := ReportLayoutList.Name;
                "Report Layout AppID" := ReportLayoutList."Application ID";
            end;

            trigger OnValidate()
            var
                ReportLayoutList: Record "Report Layout List";
            begin
                if "Report Layout Name" <> '' then begin
                    ReportLayoutList.SetRange(Name, "Report Layout Name");
                    ReportLayoutList.SetRange("Report ID", Report::"Email Merge");

                    if not IsNullGuid("Report Layout AppID") then
                        ReportLayoutList.SetRange("Application ID", "Report Layout AppID");
                    if not ReportLayoutList.FindFirst() then begin
                        ReportLayoutList.SetRange("Application ID");
                        ReportLayoutList.FindFirst();
                    end;
                    Rec."Report Layout AppID" := ReportLayoutList."Application ID";
                end else
                    Clear(Rec."Report Layout AppID");
            end;
        }
        field(9; "Report Layout AppID"; Guid)
        {
            Caption = 'Email Body Layout AppID';
            ToolTip = 'Specifies which app the report layout belongs to.';
            TableRelation = "Report Layout List"."Application ID" where("Report ID" = const(Report::"Email Merge"));
        }
    }

    keys
    {
        key(Key1; "Interaction Template Code", "Language Code")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    begin
        RemoveAttachment(false);
    end;

    trigger OnRename()
    var
        InteractionTemplate: Record "Interaction Template";
    begin
        InteractionTemplate.Get("Interaction Template Code");
        if xRec."Language Code" <> "Language Code" then
            if InteractionTemplate."Language Code (Default)" = xRec."Language Code" then begin
                InteractionTemplate."Language Code (Default)" := "Language Code";
                InteractionTemplate.Modify();
            end;
    end;

    var
        AttachmentRecord: Record Attachment;
        ClientTypeManagement: Codeunit "Client Type Management";
#pragma warning disable AA0074
        Text000: Label 'You have canceled the create process.';
        Text001: Label 'Replace existing attachment?';
        Text002: Label 'You have canceled the import process.';
        Text005: Label 'Export Attachment';
#pragma warning restore AA0074

    procedure CreateAttachment()
    var
        Attachment: Record Attachment;
        InteractTmplLanguage: Record "Interaction Tmpl. Language";
        NewAttachNo: Integer;
        IsHandled: Boolean;
    begin
        if "Attachment No." <> 0 then begin
            if Attachment.Get("Attachment No.") then
                Attachment.TestField("Read Only", false);
            if not Confirm(Text001, false) then
                exit;
        end;

        IsHandled := false;
        OnCreateAttachmentOnAfterInitialChecks(Rec, NewAttachNo, IsHandled);
        if IsHandled then
            exit;

        if ("Custom Layout Code" = '') and ("Report Layout Name" = '') then begin
            if ClientTypeManagement.GetCurrentClientType() in [CLIENTTYPE::Web, CLIENTTYPE::Tablet, CLIENTTYPE::Phone, CLIENTTYPE::Desktop] then
                if Attachment.ImportAttachmentFromClientFile('', false, false) then
                    NewAttachNo := Attachment."No.";
        end else
            NewAttachNo := CreateHTMLCustomLayoutAttachment();

        if NewAttachNo <> 0 then begin
            if "Attachment No." <> 0 then
                RemoveAttachment(false);
            "Attachment No." := NewAttachNo;
            if InteractTmplLanguage.Get("Interaction Template Code", "Language Code") then
                Modify()
            else
                Insert();
        end else
            Error(Text000);
    end;

    procedure CreateHTMLCustomLayoutAttachment(): Integer
    var
        Attachment: Record Attachment;
    begin
        OnBeforeCreateHTMLCustomLayoutAttachment();

        Attachment.Init();
        Attachment."Storage Type" := Attachment."Storage Type"::Embedded;
        Attachment."File Extension" := 'HTML';
        Attachment.Insert(true);
        if "Custom Layout Code" <> '' then
            Attachment.WriteHTMLCustomLayoutAttachment('', "Custom Layout Code")
        else
            Attachment.WriteHTMLCustomLayoutAttachment('', "Report Layout Name");
        exit(Attachment."No.");
    end;

    procedure OpenAttachment()
    var
        Attachment: Record Attachment;
    begin
        if "Attachment No." = 0 then
            exit;
        OnOpenAttachmentOnBeforeGetAttachment(Rec, Attachment);
        Attachment.Get("Attachment No.");
        OnBeforeOpenAttachment(Rec, Attachment);
        Attachment.OpenAttachment("Interaction Template Code" + ' ' + Description, false, "Language Code");
    end;

    procedure CopyFromAttachment()
    var
        InteractTmplLanguage: Record "Interaction Tmpl. Language";
        Attachment: Record Attachment;
        AttachmentManagement: Codeunit AttachmentManagement;
        NewAttachNo: Integer;
    begin
        if Attachment.Get("Attachment No.") then
            Attachment.TestField("Read Only", false);

        if "Attachment No." <> 0 then begin
            if not Confirm(Text001, false) then
                exit;
            RemoveAttachment(false);
            "Attachment No." := 0;
            Modify();
            Commit();
        end;

        InteractTmplLanguage.SetFilter("Attachment No.", '<>%1', 0);
        if PAGE.RunModal(0, InteractTmplLanguage) = ACTION::LookupOK then begin
            NewAttachNo := AttachmentManagement.InsertAttachment(InteractTmplLanguage."Attachment No.");
            if NewAttachNo <> 0 then begin
                "Attachment No." := NewAttachNo;
                Modify();
            end;
        end;
    end;

    procedure ImportAttachment()
    var
        Attachment: Record Attachment;
    begin
        if "Attachment No." <> 0 then begin
            if Attachment.Get("Attachment No.") then
                Attachment.TestField("Read Only", false);
            if not Confirm(Text001, false) then
                exit;
        end;

        if Attachment.ImportAttachmentFromClientFile('', false, false) then begin
            "Attachment No." := Attachment."No.";
            OnImportAttachmentOnBeforeModify(Attachment);
            Modify();
        end else
            Error(Text002);
    end;

    procedure ExportAttachment()
    var
        MarketingSetup: Record "Marketing Setup";
        TempBlob: Codeunit "Temp Blob";
        FileMgt: Codeunit "File Management";
        FileName: Text;
        FileFilter: Text;
        ExportToFile: Text;
    begin
        MarketingSetup.Get();
        ExportToFile := '';
        if not AttachmentRecord.Get("Attachment No.") then
            exit;

        case AttachmentRecord."Storage Type" of
            AttachmentRecord."Storage Type"::Embedded:
                begin
                    AttachmentRecord.CalcFields("Attachment File");
                    if AttachmentRecord."Attachment File".HasValue() then begin
                        FileName := "Interaction Template Code" + '.' + AttachmentRecord."File Extension";
                        TempBlob.FromRecord(AttachmentRecord, AttachmentRecord.FieldNo("Attachment File"));
                        FileMgt.BLOBExport(TempBlob, FileName, true);
                    end;
                end;
            AttachmentRecord."Storage Type"::"Disk File":
                begin
                    if MarketingSetup."Attachment Storage Type" = MarketingSetup."Attachment Storage Type"::"Disk File" then
                        MarketingSetup.TestField("Attachment Storage Location");
                    FileFilter :=
                      UpperCase(AttachmentRecord."File Extension") +
                      ' (*.' + AttachmentRecord."File Extension" + ')|*.' + AttachmentRecord."File Extension";
                    ExportToFile := "Interaction Template Code" + '.' + AttachmentRecord."File Extension";
                    FileMgt.DownloadHandler(
                      AttachmentRecord."Storage Pointer" + '\' + Format(AttachmentRecord."No.") + '.' + AttachmentRecord."File Extension",
                      Text005, '', FileFilter, ExportToFile);
                end;
            else
                OnExportAttachmentOnStorageTypeCaseElse(Rec, xRec, AttachmentRecord, MarketingSetup, ExportToFile, FileFilter, FileName);
        end;
    end;

    procedure RemoveAttachment(Prompt: Boolean)
    var
        Attachment: Record Attachment;
    begin
        if Attachment.Get("Attachment No.") then
            if Attachment.RemoveAttachment(Prompt) then begin
                "Attachment No." := 0;
                Modify();
            end;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnImportAttachmentOnBeforeModify(var Attachment: Record Attachment)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCreateHTMLCustomLayoutAttachment()
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnCreateAttachmentOnAfterInitialChecks(var InteractionTmplLanguage: Record "Interaction Tmpl. Language"; var NewAttachNo: Integer; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnOpenAttachmentOnBeforeGetAttachment(var InteractionTmplLanguage: Record "Interaction Tmpl. Language"; var Attachment: Record Attachment)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeOpenAttachment(var InteractionTmplLanguage: Record "Interaction Tmpl. Language"; var Attachment: Record Attachment)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnExportAttachmentOnStorageTypeCaseElse(var InteractionTmplLanguage: Record "Interaction Tmpl. Language"; xInteractionTmplLanguage: Record "Interaction Tmpl. Language"; var AttachmentRecord: Record Attachment; var MarketingSetup: Record "Marketing Setup"; var ExportToFile: Text; var FileFilter: Text; var FileName: Text)
    begin
    end;
}