Table 5104 Segment Interaction Language

App
Base Application
Namespace
Microsoft.CRM.Segment
Versions
17-28

Fields, 7Keys, 1Procedures, 9

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/CRM/Segment/SegmentInteractionLanguage.Table.al497 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.Segment;

using Microsoft.CRM.Contact;
using Microsoft.CRM.Interaction;
using System.Globalization;
using System.Integration.Word;
using System.Utilities;

table 5104 "Segment Interaction Language"
{
    Caption = 'Segment Interaction Language';
    DataClassification = CustomerContent;
    LookupPageID = "Segment Interaction Languages";

    fields
    {
        field(1; "Segment No."; Code[20])
        {
            Caption = 'Segment No.';
            TableRelation = "Segment Header";
        }
        field(2; "Segment Line No."; Integer)
        {
            Caption = 'Segment Line No.';
            TableRelation = "Segment Line"."Line No." where("Segment No." = field("Segment No."));
        }
        field(3; "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(4; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies the description of the Segment Interaction Language. This field will not be displayed in the Word attachment.';
        }
        field(5; "Attachment No."; Integer)
        {
            Caption = 'Attachment No.';
        }
        field(6; Subject; Text[100])
        {
            Caption = 'Subject';
            ToolTip = 'Specifies the subject text. The text in the field is used as the subject in e-mails and Word documents.';

            trigger OnValidate()
            var
                SegmentHeader: Record "Segment Header";
                SegLine: Record "Segment Line";
                UpdateLines: Boolean;
            begin
                SegmentHeader.Get("Segment No.");
                if "Segment Line No." = 0 then
                    if SegmentHeader.SegLinesExist('') then
                        UpdateLines := Confirm(StrSubstNo(UpdateSegmentLinesQst, FieldCaption(Subject)), true);

                if SegmentHeader."Language Code (Default)" = "Language Code" then
                    if SegmentHeader."Subject (Default)" = xRec.Subject then begin
                        SegmentHeader."Subject (Default)" := Subject;
                        SegmentHeader.Modify();
                        Modify();
                    end;

                if not UpdateLines then
                    exit;

                SegLine.SetRange("Segment No.", "Segment No.");
                if "Segment Line No." = 0 then
                    SegLine.SetRange("Interaction Template Code", SegmentHeader."Interaction Template Code")
                else begin
                    SegLine.Get("Segment No.", "Segment Line No.");
                    SegLine.SetRange("Interaction Template Code", SegLine."Interaction Template Code");
                end;
                SegLine.SetRange("Language Code", "Language Code");
                SegLine.SetRange(Subject, xRec.Subject);
                SegLine.ModifyAll(Subject, Subject);
            end;
        }
        field(7; "Word Template Code"; Code[30])
        {
            DataClassification = CustomerContent;
            TableRelation = "Word Template".Code where("Table ID" = const(5106)); // Only Interaction Merge Data word templates are allowed
        }
    }

    keys
    {
        key(Key1; "Segment No.", "Segment Line No.", "Language Code")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        SegmentHeader: Record "Segment Header";
        SegmentLine: Record "Segment Line";
        Contact: Record Contact;
        SegmentInteractionLanguage: Record "Segment Interaction Language";
    begin
        SegmentHeader.Get(Rec."Segment No.");
        if (Rec."Segment Line No." = 0) and
           (Rec."Language Code" = SegmentHeader."Language Code (Default)")
        then begin
            SegmentInteractionLanguage.SetRange("Segment No.", Rec."Segment No.");
            SegmentInteractionLanguage.SetRange("Segment Line No.", 0);
            SegmentInteractionLanguage.SetFilter("Language Code", '<>%1', Rec."Language Code");
            if SegmentInteractionLanguage.FindFirst() then begin
                SegmentHeader."Language Code (Default)" := SegmentInteractionLanguage."Language Code";
                SegmentHeader."Subject (Default)" := SegmentInteractionLanguage.Subject;
            end else begin
                SegmentHeader."Language Code (Default)" := '';
                SegmentHeader."Subject (Default)" := '';
            end;
            SegmentHeader.Modify();
        end;
        SegmentHeader.CalcFields("Attachment No.");

        if Rec."Segment Line No." = 0 then begin
            SegmentLine.SetRange("Segment No.", Rec."Segment No.");
            SegmentLine.SetRange("Attachment No.", Rec."Attachment No.");
            if SegmentLine.Find('-') then
                repeat
                    if Contact.Get(SegmentLine."Contact No.") then begin
                        if (Contact."Language Code" <> "Language Code") and
                           SegmentInteractionLanguage.Get("Segment No.", 0, Contact."Language Code")
                        then begin
                            SegmentLine."Language Code" := Contact."Language Code";
                            SegmentLine.Subject := SegmentInteractionLanguage.Subject;
                            SegmentLine."Attachment No." := SegmentInteractionLanguage."Attachment No.";
                            SegmentLine."Word Template Code" := SegmentInteractionLanguage."Word Template Code";
                        end else begin
                            SegmentLine."Language Code" := SegmentHeader."Language Code (Default)";
                            SegmentLine.Subject := SegmentHeader."Subject (Default)";
                            SegmentLine."Attachment No." := SegmentHeader."Attachment No.";
                            SegmentLine."Word Template Code" := SegmentHeader."Word Template Code";
                        end;
                        SegmentLine.Modify();
                    end;
                until SegmentLine.Next() = 0;
        end else begin // UNIQUE Attachment
            SegmentLine.Get("Segment No.", Rec."Segment Line No.");
            if SegmentLine."Attachment No." = Rec."Attachment No." then begin
                SegmentInteractionLanguage.SetRange("Segment No.", Rec."Segment No.");
                SegmentInteractionLanguage.SetRange("Segment Line No.", Rec."Segment Line No.");
                SegmentInteractionLanguage.SetFilter("Language Code", '<>%1', Rec."Language Code");
                if SegmentInteractionLanguage.FindFirst() then begin
                    SegmentLine."Language Code" := SegmentInteractionLanguage."Language Code";
                    SegmentLine.Subject := SegmentInteractionLanguage.Subject;
                    SegmentLine."Attachment No." := SegmentInteractionLanguage."Attachment No.";
                    SegmentLine."Word Template Code" := SegmentInteractionLanguage."Word Template Code";
                end else
                    if SegmentLine."Interaction Template Code" = SegmentHeader."Interaction Template Code" then begin
                        Contact.Get(SegmentLine."Contact No.");
                        if SegmentInteractionLanguage.Get("Segment No.", 0, Contact."Language Code") then begin
                            SegmentLine."Language Code" := Contact."Language Code";
                            SegmentLine.Subject := SegmentInteractionLanguage.Subject;
                            SegmentLine."Attachment No." := SegmentInteractionLanguage."Attachment No.";
                            SegmentLine."Word Template Code" := SegmentInteractionLanguage."Word Template Code";
                        end else begin
                            SegmentLine."Language Code" := SegmentHeader."Language Code (Default)";
                            SegmentLine.Subject := SegmentHeader."Subject (Default)";
                            SegmentLine."Attachment No." := SegmentHeader."Attachment No.";
                            SegmentLine."Word Template Code" := SegmentHeader."Word Template Code";
                        end;
                    end else begin
                        SegmentLine."Language Code" := '';
                        SegmentLine.Subject := '';
                        SegmentLine."Attachment No." := 0;
                        SegmentLine."Word Template Code" := '';
                    end;
                SegmentLine.Modify();
            end;
        end;

        RemoveAttachment(false);
    end;

    trigger OnInsert()
    var
        Contact: Record Contact;
        SegmentHeader: Record "Segment Header";
        SegmentLine: Record "Segment Line";
        SegmentInteractionLanguage: Record "Segment Interaction Language";
        FirstSegIntLanguage: Boolean;
    begin
        if Rec."Segment Line No." = 0 then begin
            SegmentInteractionLanguage.SetRange("Segment No.", Rec."Segment No.");
            SegmentInteractionLanguage.SetRange("Segment Line No.", 0);
            FirstSegIntLanguage := SegmentInteractionLanguage.IsEmpty();

            SegmentLine.SetRange("Segment No.", Rec."Segment No.");
            SegmentHeader.Get(Rec."Segment No.");
            SegmentLine.SetRange("Interaction Template Code", SegmentHeader."Interaction Template Code");
            if SegmentLine.Find('-') then
                repeat
                    if FirstSegIntLanguage then begin
                        if SegmentLine.AttachmentInherited() or
                           (SegmentLine."Attachment No." = 0)
                        then begin
                            SegmentLine."Language Code" := Rec."Language Code";
                            SegmentLine.Subject := Rec.Subject;
                            SegmentLine."Attachment No." := Rec."Attachment No.";
                            SegmentLine."Word Template Code" := Rec."Word Template Code";
                            SegmentLine.Modify();
                        end
                    end else
                        if SegmentLine.AttachmentInherited() or (SegmentLine."Attachment No." = 0) then
                            if Contact.Get(SegmentLine."Contact No.") then
                                if Contact."Language Code" = "Language Code" then begin
                                    SegmentLine."Language Code" := Rec."Language Code";
                                    SegmentLine.Subject := Rec.Subject;
                                    SegmentLine."Attachment No." := Rec."Attachment No.";
                                    SegmentLine."Word Template Code" := Rec."Word Template Code";
                                    SegmentLine.Modify();
                                end;
                until SegmentLine.Next() = 0;
        end else begin
            SegmentLine.Get("Segment No.", Rec."Segment Line No.");
            SegmentLine."Language Code" := Rec."Language Code";
            SegmentLine.Subject := Rec.Subject;
            SegmentLine."Attachment No." := Rec."Attachment No.";
            SegmentLine."Word Template Code" := Rec."Word Template Code";
            SegmentLine.Modify();
        end;
    end;

    trigger OnRename()
    var
        SegmentHeader: Record "Segment Header";
        SegmentLine: Record "Segment Line";
        Contact: Record Contact;
    begin
        SegmentHeader.Get("Segment No.");
        SegmentHeader.CalcFields("Attachment No.");
        if (Rec."Segment Line No." = 0) and
           (SegmentHeader."Language Code (Default)" = xRec."Language Code")
        then begin
            SegmentHeader."Language Code (Default)" := Rec."Language Code";
            SegmentHeader.Modify();
        end;

        if Rec."Segment Line No." = 0 then begin
            SegmentLine.SetRange("Segment No.", Rec."Segment No.");
            SegmentLine.SetRange("Attachment No.", Rec."Attachment No.");
            if SegmentLine.Find('-') then
                repeat
                    SegmentLine."Language Code" := SegmentHeader."Language Code (Default)";
                    SegmentLine."Attachment No." := SegmentHeader."Attachment No.";
                    SegmentLine."Word Template Code" := SegmentHeader."Word Template Code";
                    SegmentLine.Modify();
                until SegmentLine.Next() = 0;

            SegmentLine.Reset();
            SegmentLine.SetRange("Segment No.", Rec."Segment No.");
            SegmentLine.SetRange("Interaction Template Code", SegmentHeader."Interaction Template Code");
            if SegmentLine.Find('-') then
                repeat
                    if SegmentLine.AttachmentInherited() or (SegmentLine."Attachment No." = 0) then
                        if Contact.Get(SegmentLine."Contact No.") then
                            if Contact."Language Code" = Rec."Language Code" then begin
                                SegmentLine."Language Code" := Rec."Language Code";
                                SegmentLine.Subject := Rec.Subject;
                                SegmentLine."Attachment No." := Rec."Attachment No.";
                                SegmentLine."Word Template Code" := Rec."Word Template Code";
                                SegmentLine.Modify();
                            end;
                until SegmentLine.Next() = 0;
        end else begin
            SegmentLine.Get(Rec."Segment No.", Rec."Segment Line No.");
            if SegmentLine."Language Code" = xRec."Language Code" then begin
                SegmentLine."Language Code" := Rec."Language Code";
                SegmentLine."Attachment No." := Rec."Attachment No.";
                SegmentLine."Word Template Code" := Rec."Word Template Code";
                SegmentLine.Modify();
            end;
        end;
    end;

    var
        CreateProcessCanceledLbl: Label 'You have canceled the create process.';
        ReplaceExistingAttachmentQst: Label 'Replace existing attachment?';
        ImportFailedMsg: Label 'The import was canceled or the specified file could not be accessed. The import failed.';
        InheritedLbl: Label 'Inherited';
        UniqueLbl: Label 'Unique';
        UpdateSegmentLinesQst: Label 'You have modified %1.\\Do you want to update the segment lines with the same Interaction Template Code and Language Code?', Comment = '%1 = Subject caption';

    [Scope('OnPrem')]
    procedure CreateAttachment()
    var
        SegmentInteractionLanguage: Record "Segment Interaction Language";
        Attachment: Record Attachment;
        NewAttachmentNo: Integer;
    begin
        if "Attachment No." <> 0 then begin
            if not Confirm(ReplaceExistingAttachmentQst, false) then
                exit;
            RemoveAttachment(false);
        end;

        if GuiAllowed() then
            if Attachment.ImportAttachmentFromClientFile('', false, true) then
                NewAttachmentNo := Attachment."No.";

        if NewAttachmentNo <> 0 then begin
            "Attachment No." := NewAttachmentNo;
            if SegmentInteractionLanguage.Get("Segment No.", "Segment Line No.", "Language Code") then
                Modify()
            else
                Insert(true);
            UpdateSegLineAttachment(0);
        end else
            Error(CreateProcessCanceledLbl);
    end;

    internal procedure CreateWordTemplateAttachment(var TempBlob: Codeunit "Temp Blob"; FileName: Text)
    var
        SegmentInteractionLanguage: Record "Segment Interaction Language";
        Attachment: Record Attachment;
        NewAttachmentNo: Integer;
        InStream: InStream;
    begin
        if "Attachment No." <> 0 then begin
            if not Confirm(ReplaceExistingAttachmentQst, false) then
                exit;
            RemoveAttachment(false);
        end;

        if GuiAllowed() then begin
            TempBlob.CreateInStream(InStream);
            NewAttachmentNo := Attachment.ImportAttachmentFromStream(InStream, FileName);
        end;

        if NewAttachmentNo <> 0 then begin
            "Attachment No." := NewAttachmentNo;
            if SegmentInteractionLanguage.Get("Segment No.", "Segment Line No.", "Language Code") then
                Modify()
            else
                Insert(true);
            UpdateSegLineWordTemplateAttachment(NewAttachmentNo);
        end else
            Error(CreateProcessCanceledLbl);
    end;

    [Scope('OnPrem')]
    procedure OpenAttachment()
    var
        Attachment: Record Attachment;
    begin
        if "Attachment No." = 0 then
            exit;
        Attachment.Get("Attachment No.");
        Attachment.OpenAttachment("Segment No." + ' ' + Description, false, "Language Code");
    end;

    [Scope('OnPrem')]
    procedure CopyFromAttachment()
    var
        SegmentInteractionLanguage: Record "Segment Interaction Language";
        AttachmentManagement: Codeunit AttachmentManagement;
        NewAttachNo: Integer;
    begin
        if "Attachment No." <> 0 then begin
            if not Confirm(ReplaceExistingAttachmentQst, false) then
                exit;
            RemoveAttachment(false);
            Commit();
        end;

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

    [Scope('OnPrem')]
    procedure ImportAttachment()
    var
        Attachment: Record Attachment;
    begin
        if "Attachment No." <> 0 then begin
            if not Confirm(ReplaceExistingAttachmentQst, false) then
                exit;
            RemoveAttachment(false);
        end;

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

    [Scope('OnPrem')]
    procedure ExportAttachment()
    var
        Attachment: Record Attachment;
        FileName: Text[1024];
    begin
        if Attachment.Get("Attachment No.") then begin
            if Attachment."Storage Type" = Attachment."Storage Type"::Embedded then
                Attachment.CalcFields("Attachment File");
            Attachment.ExportAttachmentToClientFile(FileName);
        end;
    end;

    [Scope('OnPrem')]
    procedure RemoveAttachment(Prompt: Boolean)
    var
        Attachment: Record Attachment;
        OldAttachmentNo: Integer;
    begin
        OldAttachmentNo := "Attachment No.";
        if Attachment.Get("Attachment No.") and (not Attachment."Read Only") then
            if Attachment.RemoveAttachment(Prompt) then begin
                "Attachment No." := 0;
                Modify();
            end;
        UpdateSegLineAttachment(OldAttachmentNo);
    end;

    local procedure UpdateSegLineAttachment(OldAttachmentNo: Integer)
    var
        SegmentLine: Record "Segment Line";
        SegmentHeader: Record "Segment Header";
    begin
        if "Segment Line No." = 0 then begin
            SegmentHeader.Get("Segment No.");
            SegmentLine.SetRange("Segment No.", "Segment No.");
            SegmentLine.SetRange("Interaction Template Code", SegmentHeader."Interaction Template Code");
            SegmentLine.SetRange("Language Code", "Language Code");
            SegmentLine.SetRange("Attachment No.", OldAttachmentNo);
            SegmentLine.ModifyAll("Attachment No.", "Attachment No.");
        end else begin
            SegmentLine.SetRange("Segment No.", "Segment No.");
            SegmentLine.SetRange("Line No.", "Segment Line No.");
            SegmentLine.SetRange("Attachment No.", OldAttachmentNo);
            if SegmentLine.FindFirst() then begin
                SegmentLine."Attachment No." := "Attachment No.";
                SegmentLine.Modify();
            end;
        end;
    end;

    local procedure UpdateSegLineWordTemplateAttachment(AttachmentNo: Integer)
    var
        SegmentHeader: Record "Segment Header";
    begin
        SegmentHeader.Get("Segment No.");
        SegmentHeader."Modified Word Template" := AttachmentNo;
        SegmentHeader.Modify();
    end;

    procedure AttachmentText(): Text[30]
    begin
        if "Attachment No." = 0 then
            exit('');

        if "Segment Line No." = 0 then
            exit(InheritedLbl);

        exit(UniqueLbl);
    end;

    procedure Caption() CaptionText: Text
    var
        SegmentHeader: Record "Segment Header";
        SegmentLine: Record "Segment Line";
        Contact: Record Contact;
    begin
        SegmentHeader.Get("Segment No.");
        CaptionText := Format("Segment No.") + ' ' + SegmentHeader.Description;
        if "Segment Line No." <> 0 then begin
            SegmentLine.Get("Segment No.", "Segment Line No.");
            if Contact.Get(SegmentLine."Contact No.") then;
            CaptionText := CaptionText + ' ' + Format(SegmentLine."Contact No.") + ' ' + Contact.Name;
        end;
    end;
}