Table 5076 Segment Header
- App
- Base Application
- Namespace
- Microsoft.CRM.Segment
- Versions
- 17-28
Fields, 27Keys, 3Procedures, 16Events, 19
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/CRM/Segment/SegmentHeader.Table.al1156 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.BusinessRelation;
using Microsoft.CRM.Campaign;
using Microsoft.CRM.Contact;
using Microsoft.CRM.Interaction;
using Microsoft.CRM.Profiling;
using Microsoft.CRM.Setup;
using Microsoft.CRM.Team;
using Microsoft.EServices.EDocument;
using Microsoft.Foundation.NoSeries;
using Microsoft.Inventory.Ledger;
using System.Globalization;
using System.Integration;
using System.Integration.Word;
using System.Reflection;
using System.Security.User;
using System.Utilities;
table 5076 "Segment Header"
{
Caption = 'Segment Header';
DataCaptionFields = "No.", Description;
DataClassification = CustomerContent;
LookupPageID = "Segment List";
fields
{
field(1; "No."; Code[20])
{
Caption = 'No.';
ToolTip = 'Specifies the number of the involved entry or record, according to the specified number series.';
trigger OnValidate()
begin
if "No." <> xRec."No." then begin
RMSetup.Get();
NoSeries.TestManual(RMSetup."Segment Nos.");
"No. Series" := '';
end;
end;
}
field(2; Description; Text[100])
{
Caption = 'Description';
ToolTip = 'Specifies the description of the segment.';
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo(Description), CurrFieldNo <> 0);
end;
}
field(3; "Campaign No."; Code[20])
{
Caption = 'Campaign No.';
ToolTip = 'Specifies the number of the campaign for which the segment has been created.';
TableRelation = Campaign;
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Campaign No."), CurrFieldNo <> 0);
end;
}
field(4; "Salesperson Code"; Code[20])
{
Caption = 'Salesperson Code';
ToolTip = 'Specifies the code of the salesperson responsible for this segment and/or interaction.';
TableRelation = "Salesperson/Purchaser" where(Blocked = const(false));
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Salesperson Code"), CurrFieldNo <> 0);
end;
}
field(5; "Correspondence Type (Default)"; Enum "Correspondence Type")
{
Caption = 'Correspondence Type (Default)';
trigger OnValidate()
var
Attachment: Record Attachment;
InteractionTemplate: Record "Interaction Template";
TemplateFound: Boolean;
begin
if InteractionTemplate.Get(Rec."Interaction Template Code") then
if InteractionTemplate."Word Template Code" <> '' then
TemplateFound := true;
if Attachment.Get("Attachment No.") then
TemplateFound := true;
if not TemplateFound then
exit;
if "Correspondence Type (Default)" <> "Correspondence Type (Default)"::" " then
UpdateSegLinesByFieldNo(FieldNo("Correspondence Type (Default)"), CurrFieldNo <> 0);
end;
}
field(6; "Interaction Template Code"; Code[10])
{
Caption = 'Interaction Template Code';
ToolTip = 'Specifies the interaction template code of the interaction involving the segment.';
TableRelation = "Interaction Template".Code;
trigger OnValidate()
var
InteractionTemplate: Record "Interaction Template";
begin
InteractionTemplate.Get(Rec."Interaction Template Code");
Rec.Validate("Word Template Code", InteractionTemplate."Word Template Code");
UpdateSegLinesByFieldNo(FieldNo("Interaction Template Code"), CurrFieldNo <> 0);
end;
}
field(7; "Unit Cost (LCY)"; Decimal)
{
AutoFormatExpression = '';
AutoFormatType = 2;
Caption = 'Unit Cost (LCY)';
MinValue = 0;
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Unit Cost (LCY)"), CurrFieldNo <> 0);
end;
}
field(8; "Unit Duration (Min.)"; Decimal)
{
AutoFormatType = 0;
Caption = 'Unit Duration (Min.)';
DecimalPlaces = 0 : 0;
MinValue = 0;
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Unit Duration (Min.)"), CurrFieldNo <> 0);
end;
}
field(9; "Attachment No."; Integer)
{
CalcFormula = lookup("Segment Interaction Language"."Attachment No." where("Segment No." = field("No."),
"Segment Line No." = const(0),
"Language Code" = field("Language Code (Default)"),
"Word Template Code" = const('')));
Caption = 'Attachment No.';
FieldClass = FlowField;
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Attachment No."), CurrFieldNo <> 0);
end;
}
field(10; Date; Date)
{
Caption = 'Date';
ToolTip = 'Specifies the date that the segment was created.';
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo(Date), CurrFieldNo <> 0);
end;
}
field(11; "Campaign Target"; Boolean)
{
Caption = 'Campaign Target';
ToolTip = 'Specifies that the segment is part of the target of the campaign to which it is linked.';
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Campaign Target"), CurrFieldNo <> 0);
end;
}
field(12; "Information Flow"; Option)
{
BlankZero = true;
Caption = 'Information Flow';
ToolTip = 'Specifies the direction of the information that is part of the interaction created for the segment. There are two options: Inbound and Outbound.';
OptionCaption = ' ,Outbound,Inbound';
OptionMembers = " ",Outbound,Inbound;
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Information Flow"), CurrFieldNo <> 0);
end;
}
field(13; "Initiated By"; Option)
{
BlankZero = true;
Caption = 'Initiated By';
ToolTip = 'Specifies whether the interaction recorded for this segment was initiated by your company or by one of your contacts. The Us option indicates that your company was the initiator; the Them option indicates that a contact was the initiator.';
OptionCaption = ' ,Us,Them';
OptionMembers = " ",Us,Them;
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Initiated By"), CurrFieldNo <> 0);
end;
}
field(14; "No. Series"; Code[20])
{
Caption = 'No. Series';
Editable = false;
TableRelation = "No. Series";
}
field(15; "Campaign Response"; Boolean)
{
Caption = 'Campaign Response';
ToolTip = 'Specifies that the interaction created for the segment is the response to a campaign.';
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Campaign Response"), CurrFieldNo <> 0);
end;
}
field(16; "No. of Lines"; Integer)
{
CalcFormula = count("Segment Line" where("Segment No." = field("No.")));
Caption = 'No. of Lines';
ToolTip = 'Specifies the number of lines within the segment.';
Editable = false;
FieldClass = FlowField;
}
field(17; "Cost (LCY)"; Decimal)
{
AutoFormatExpression = '';
AutoFormatType = 1;
CalcFormula = sum("Segment Line"."Cost (LCY)" where("Segment No." = field("No.")));
Caption = 'Cost (LCY)';
Editable = false;
FieldClass = FlowField;
}
field(18; "Duration (Min.)"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Segment Line"."Duration (Min.)" where("Segment No." = field("No.")));
Caption = 'Duration (Min.)';
DecimalPlaces = 0 : 0;
Editable = false;
FieldClass = FlowField;
}
field(19; "Language Code (Default)"; Code[10])
{
Caption = 'Language Code (Default)';
TableRelation = Language;
trigger OnLookup()
var
SegInteractLanguage: Record "Segment Interaction Language";
begin
Modify();
Commit();
SegInteractLanguage.SetRange("Segment No.", "No.");
SegInteractLanguage.SetRange("Segment Line No.", 0);
if "Language Code (Default)" <> '' then
SegInteractLanguage.Get("No.", 0, "Language Code (Default)");
if PAGE.RunModal(0, SegInteractLanguage) = ACTION::LookupOK then begin
Get("No.");
"Language Code (Default)" := SegInteractLanguage."Language Code";
"Subject (Default)" := SegInteractLanguage.Subject;
Modify();
end else
Get("No.");
CalcFields("Attachment No.");
end;
trigger OnValidate()
var
SegInteractLanguage: Record "Segment Interaction Language";
begin
if "Language Code (Default)" = xRec."Language Code (Default)" then
exit;
if not SegInteractLanguage.Get("No.", 0, "Language Code (Default)") then begin
"Subject (Default)" := '';
if Confirm(Text010, true, SegInteractLanguage.TableCaption(), "Language Code (Default)") then begin
SegInteractLanguage.Init();
SegInteractLanguage."Segment No." := "No.";
SegInteractLanguage."Segment Line No." := 0;
SegInteractLanguage."Language Code" := "Language Code (Default)";
SegInteractLanguage.Description := Format("Interaction Template Code") + ' ' + Format("Language Code (Default)");
SegInteractLanguage.Insert(true);
end else
Error('');
end else
"Subject (Default)" := SegInteractLanguage.Subject;
end;
}
field(20; "Interaction Group Code"; Code[10])
{
Caption = 'Interaction Group Code';
TableRelation = "Interaction Group";
}
field(21; "No. of Criteria Actions"; Integer)
{
CalcFormula = count("Segment Criteria Line" where("Segment No." = field("No."),
Type = const(Action)));
Caption = 'No. of Criteria Actions';
ToolTip = 'Specifies the number of actions you have taken when modifying the segmentation criteria, that is, when adding contacts to the segment, refining, or reducing it.';
Editable = false;
FieldClass = FlowField;
}
field(22; "Send Word Docs. as Attmt."; Boolean)
{
Caption = 'Send Word Docs. as Attmt.';
ToolTip = 'Specifies that the Microsoft Word document should be sent as an attachment in the e-mail message.';
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Send Word Docs. as Attmt."), CurrFieldNo <> 0);
end;
}
field(23; "Ignore Contact Corres. Type"; Boolean)
{
Caption = 'Ignore Contact Corres. Type';
ToolTip = 'Specifies that the correspondence type that you select in the Correspondence Type (Default) field should be used. If there is no check mark, the program uses the correspondence type selected on the Contact Card.';
}
field(24; "Subject (Default)"; Text[100])
{
Caption = 'Subject (Default)';
trigger OnValidate()
var
SegInteractLanguage: Record "Segment Interaction Language";
UpdateLines: Boolean;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeValidateSubjectDefault(Rec, xRec, IsHandled);
if IsHandled then
exit;
if SegLinesExist(FieldCaption("Subject (Default)")) then
UpdateLines := Confirm(StrSubstNo(Text011, FieldCaption("Subject (Default)")), true);
if SegInteractLanguage.Get("No.", 0, "Language Code (Default)") then begin
SegInteractLanguage.Subject := "Subject (Default)";
SegInteractLanguage.Modify();
Modify();
end;
if not UpdateLines then
exit;
SegLine.SetRange("Segment No.", "No.");
SegLine.SetRange("Interaction Template Code", "Interaction Template Code");
SegLine.SetRange("Language Code", "Language Code (Default)");
SegLine.SetRange(Subject, xRec."Subject (Default)");
SegLine.ModifyAll(Subject, "Subject (Default)");
end;
}
field(25; "Campaign Description"; Text[100])
{
CalcFormula = lookup(Campaign.Description where("No." = field("Campaign No.")));
Caption = 'Campaign Description';
ToolTip = 'Specifies a description of the campaign to which the segment is related. The description is copied from the campaign card.';
Editable = false;
FieldClass = FlowField;
}
field(26; "Word Template Code"; Code[30])
{
ToolTip = 'Specifies the Word Template code to use for merging.';
DataClassification = CustomerContent;
TableRelation = "Word Template".Code where("Table ID" = const(5106)); // Only Interaction Merge Data word templates are allowed
trigger OnValidate()
begin
UpdateSegLinesByFieldNo(FieldNo("Word Template Code"), CurrFieldNo <> 0);
end;
}
field(27; "Modified Word Template"; Integer)
{
CalcFormula = lookup("Segment Interaction Language"."Attachment No." where("Segment No." = field("No."),
"Segment Line No." = const(0),
"Language Code" = field("Language Code (Default)"),
"Word Template Code" = field("Word Template Code")));
Caption = 'Modified Word Template';
FieldClass = FlowField;
}
}
keys
{
key(Key1; "No.")
{
Clustered = true;
}
key(Key2; "Salesperson Code")
{
}
key(Key3; "Campaign No.")
{
}
}
fieldgroups
{
fieldgroup(DropDown; "No.", Description, "Campaign No.")
{
}
}
trigger OnDelete()
var
SegmentHistory: Record "Segment History";
SegmentCriteriaLine: Record "Segment Criteria Line";
SegmentInteractionLanguage: Record "Segment Interaction Language";
begin
SegmentCriteriaLine.SetRange("Segment No.", "No.");
SegmentCriteriaLine.DeleteAll(); // Must be deleted first!
SegmentHistory.SetRange("Segment No.", "No.");
SegmentHistory.DeleteAll();
SegmentInteractionLanguage.SetRange("Segment No.", "No.");
SegmentInteractionLanguage.DeleteAll(true);
SegLine.SetRange("Segment No.", "No.");
SegLine.DeleteAll(true);
Get("No.");
end;
trigger OnInsert()
begin
if "No." = '' then begin
RMSetup.Get();
RMSetup.TestField("Segment Nos.");
if NoSeries.AreRelated(RMSetup."Segment Nos.", xRec."No. Series") then
"No. Series" := xRec."No. Series"
else
"No. Series" := RMSetup."Segment Nos.";
"No." := NoSeries.GetNextNo("No. Series");
end;
if "Salesperson Code" = '' then
SetDefaultSalesperson();
Date := WorkDate();
end;
var
RMSetup: Record "Marketing Setup";
SegHeader: Record "Segment Header";
SegLine: Record "Segment Line";
NoSeries: Codeunit "No. Series";
SegCriteriaManagement: Codeunit SegCriteriaManagement;
SegHistMgt: Codeunit SegHistoryManagement;
#pragma warning disable AA0074
#pragma warning disable AA0470
Text002: Label 'You have modified %1.\\Do you want to update the segment lines where the Interaction Template Code is %2?';
Text003: Label '%1 may not be modified without updating lines when inherited attachments exist.';
Text005: Label 'Segment %1 already contains %2 %3.\Are you sure you want to reuse a %4?';
Text006: Label 'Segment %1 already contains %2 %3.\Are you sure you want to reuse a %4?';
Text010: Label 'Do you want to create %1 %2?';
Text011: Label 'You have modified %1.\\Do you want to update the corresponding segment lines?';
Text012: Label 'You have modified %1.\\Do you want to apply the %1 %2 to all segment lines?', Comment = 'You have modified Meeting.\\Do you want to apply the Meeting BUS to all segment lines?';
#pragma warning restore AA0470
#pragma warning restore AA0074
WordTemplateUsedErr: Label 'You cannot use an attachment when a Word template has been specified.';
TempTemplateFileNameLbl: Label 'Temp Template';
TempTemplateExtensionLbl: Label '.docx', Locked = true;
ModifyExistingWordTemplateMsg: Label 'Modify existing modified Word template?';
procedure AssistEdit(OldSegHeader: Record "Segment Header"): Boolean
begin
SegHeader := Rec;
RMSetup.Get();
RMSetup.TestField("Segment Nos.");
if NoSeries.LookupRelatedNoSeries(RMSetup."Segment Nos.", OldSegHeader."No. Series", SegHeader."No. Series") then begin
SegHeader."No." := NoSeries.GetNextNo(SegHeader."No. Series");
Rec := SegHeader;
exit(true);
end;
end;
procedure CreateOpportunities()
var
SegmentLine: Record "Segment Line";
begin
SegmentLine.SetRange("Segment No.", "No.");
SegmentLine.SetFilter("Contact No.", '<>%1', '');
if SegmentLine.FindSet() then
repeat
SegmentLine.CreateOpportunity();
until SegmentLine.Next() = 0;
end;
procedure CreateSegInteractions(InteractionTemplateCode: Code[10]; SegmentNo: Code[20]; SegmentLineNo: Integer)
var
InteractionTmplLanguage: Record "Interaction Tmpl. Language";
SegInteractLanguage: Record "Segment Interaction Language";
Attachment: Record Attachment;
AttachmentManagement: Codeunit AttachmentManagement;
IsHandled: Boolean;
begin
SegInteractLanguage.SetRange("Segment No.", SegmentNo);
SegInteractLanguage.SetRange("Segment Line No.", SegmentLineNo);
SegInteractLanguage.DeleteAll(true);
IsHandled := false;
OnCreateSegInteractionsOnAfterDeleteAll(InteractionTemplateCode, SegmentNo, SegmentLineNo, IsHandled);
if IsHandled then
exit;
InteractionTmplLanguage.Reset();
InteractionTmplLanguage.SetRange("Interaction Template Code", InteractionTemplateCode);
if InteractionTmplLanguage.Find('-') then
repeat
SegInteractLanguage.Init();
SegInteractLanguage."Segment No." := SegmentNo;
SegInteractLanguage."Segment Line No." := SegmentLineNo;
SegInteractLanguage."Language Code" := InteractionTmplLanguage."Language Code";
SegInteractLanguage.Description := InteractionTmplLanguage.Description;
SegInteractLanguage."Word Template Code" := InteractionTmplLanguage."Word Template Code";
if Attachment.Get(InteractionTmplLanguage."Attachment No.") then
SegInteractLanguage."Attachment No." := AttachmentManagement.InsertAttachment(InteractionTmplLanguage."Attachment No.");
SegInteractLanguage.Insert(true);
until InteractionTmplLanguage.Next() = 0;
end;
local procedure CopyFromTemplate(InteractionTemplate: Record "Interaction Template")
begin
"Language Code (Default)" := InteractionTemplate."Language Code (Default)";
"Interaction Group Code" := InteractionTemplate."Interaction Group Code";
"Unit Cost (LCY)" := InteractionTemplate."Unit Cost (LCY)";
"Unit Duration (Min.)" := InteractionTemplate."Unit Duration (Min.)";
"Information Flow" := InteractionTemplate."Information Flow";
"Initiated By" := InteractionTemplate."Initiated By";
"Campaign Target" := InteractionTemplate."Campaign Target";
"Campaign Response" := InteractionTemplate."Campaign Response";
"Correspondence Type (Default)" := InteractionTemplate."Correspondence Type (Default)";
"Ignore Contact Corres. Type" := InteractionTemplate."Ignore Contact Corres. Type";
"Word Template Code" := InteractionTemplate."Word Template Code";
UpdateSegLinesByFieldNo(FieldNo("Correspondence Type (Default)"), false);
UpdateSegLinesByFieldNo(FieldNo("Language Code (Default)"), false);
UpdateSegLinesByFieldNo(FieldNo("Word Template Code"), false);
end;
procedure UpdateSegLinesByFieldNo(ChangedFieldNo: Integer; AskQuestion: Boolean)
var
"Field": Record "Field";
Question: Text[260];
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeUpdateSegLinesByFieldNo(Rec, ChangedFieldNo, AskQuestion, IsHandled);
if IsHandled then
exit;
Field.Get(DATABASE::"Segment Header", ChangedFieldNo);
if not SegLinesExist(Field."Field Caption") then begin
if "No." <> '' then
UpdateSegHeader("Interaction Template Code",
ChangedFieldNo = FieldNo("Interaction Template Code"));
exit;
end;
if AskQuestion then begin
if ChangedFieldNo = FieldNo("Interaction Template Code") then
Question := StrSubstNo(Text012, Field."Field Caption", "Interaction Template Code")
else
Question := StrSubstNo(Text002, Field."Field Caption", "Interaction Template Code");
if not Confirm(Question, true) then begin
if ChangedFieldNo = FieldNo("Interaction Template Code") then begin
SegLine.SetRange("Segment No.", "No.");
if SegLine.Find('-') then
repeat
if SegLine.AttachmentInherited() then
Error(Text003, FieldCaption("Interaction Template Code"));
until SegLine.Next() = 0;
end;
UpdateSegHeader("Interaction Template Code",
ChangedFieldNo = FieldNo("Interaction Template Code"));
exit;
end;
end;
SegLine.Reset();
SegLine.SetRange("Segment No.", "No.");
if ChangedFieldNo <> FieldNo("Interaction Template Code") then
SegLine.SetRange("Interaction Template Code", "Interaction Template Code");
if not SegLine.IsEmpty() then
case ChangedFieldNo of
FieldNo(Description):
SegLine.ModifyAll(Description, Description);
FieldNo("Campaign No."):
SegLine.ModifyAll("Campaign No.", "Campaign No.");
FieldNo("Salesperson Code"):
SegLine.ModifyAll("Salesperson Code", "Salesperson Code");
FieldNo("Correspondence Type (Default)"):
SegLine.ModifyAll("Correspondence Type", "Correspondence Type (Default)");
FieldNo("Interaction Template Code"):
begin
SegLine.ModifyAll("Interaction Template Code", "Interaction Template Code");
UpdateSegHeader("Interaction Template Code", true);
end;
FieldNo("Unit Cost (LCY)"):
SegLine.ModifyAll("Cost (LCY)", "Unit Cost (LCY)");
FieldNo("Unit Duration (Min.)"):
SegLine.ModifyAll("Duration (Min.)", "Unit Duration (Min.)");
FieldNo(Date):
SegLine.ModifyAll(Date, Date);
FieldNo("Campaign Target"):
SegLine.ModifyAll("Campaign Target", "Campaign Target");
FieldNo("Information Flow"):
SegLine.ModifyAll("Information Flow", "Information Flow");
FieldNo("Initiated By"):
SegLine.ModifyAll("Initiated By", "Initiated By");
FieldNo("Campaign Response"):
SegLine.ModifyAll("Campaign Response", "Campaign Response");
FieldNo("Interaction Group Code"):
SegLine.ModifyAll("Interaction Group Code", "Interaction Group Code");
FieldNo("Send Word Docs. as Attmt."):
SegLine.ModifyAll("Send Word Doc. As Attmt.", "Send Word Docs. as Attmt.");
FieldNo("Attachment No."):
SegLine.ModifyAll("Attachment No.", "Attachment No.");
FieldNo("Word Template Code"):
SegLine.ModifyAll("Word Template Code", "Word Template Code");
end;
OnAfterUpdateSegLinesByFieldNo(Rec, ChangedFieldNo);
end;
procedure SegLinesExist(ChangedFieldName: Text[100]): Boolean
begin
SegLine.Reset();
SegLine.SetRange("Segment No.", "No.");
if ChangedFieldName <> FieldCaption("Interaction Template Code") then
SegLine.SetRange("Interaction Template Code", "Interaction Template Code");
exit(SegLine.Find('-'));
end;
procedure ReuseLogged(LoggedSegEntryNo: Integer)
var
LoggedSeg: Record "Logged Segment";
InteractLogEntry: Record "Interaction Log Entry";
SegmentLine: Record "Segment Line";
NextLineNo: Integer;
begin
if LoggedSegEntryNo = 0 then begin
CalcFields("No. of Criteria Actions");
if "No. of Criteria Actions" <> 0 then
if not Confirm(
Text005, false,
"No.", "No. of Criteria Actions", FieldCaption("No. of Criteria Actions"), LoggedSeg.TableCaption())
then
exit;
if PAGE.RunModal(PAGE::"Logged Segments", LoggedSeg) <> ACTION::LookupOK then
exit;
end else
LoggedSeg.Get(LoggedSegEntryNo);
SegmentLine.LockTable();
SegmentLine.SetRange("Segment No.", "No.");
if SegmentLine.FindLast() then
NextLineNo := SegmentLine."Line No.";
Clear(SegCriteriaManagement);
SegCriteriaManagement.InsertReuseLogged("No.", LoggedSeg."Entry No.");
InteractLogEntry.SetCurrentKey("Logged Segment Entry No.");
InteractLogEntry.SetRange("Logged Segment Entry No.", LoggedSeg."Entry No.");
OnReuseLoggedOnBeforeFindInteractLogEntries(Rec, LoggedSeg, InteractLogEntry);
if InteractLogEntry.Find('-') then
repeat
NextLineNo := NextLineNo + 10000;
InsertSegmentLine(SegmentLine, InteractLogEntry, NextLineNo);
SegHistMgt.InsertLine("No.", SegmentLine."Contact No.", SegmentLine."Line No.");
until InteractLogEntry.Next() = 0;
OnAfterReuseLogged(Rec, LoggedSeg);
end;
procedure ReuseCriteria()
var
SavedSegCriteria: Record "Saved Segment Criteria";
SavedSegCriteriaLineAction: Record "Saved Segment Criteria Line";
SavedSegCriteriaLineFilter: Record "Saved Segment Criteria Line";
Cont: Record Contact;
ContProfileAnswer: Record "Contact Profile Answer";
ContMailingGrp: Record "Contact Mailing Group";
InteractLogEntry: Record "Interaction Log Entry";
ContJobResp: Record "Contact Job Responsibility";
ContIndustGrp: Record "Contact Industry Group";
ContBusRel: Record "Contact Business Relation";
ValueEntry: Record "Value Entry";
AddContacts: Report "Add Contacts";
ReduceContacts: Report "Remove Contacts - Reduce";
RefineContacts: Report "Remove Contacts - Refine";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeReuseCriteria(Rec, IsHandled);
if IsHandled then
exit;
CalcFields("No. of Criteria Actions");
if "No. of Criteria Actions" <> 0 then
if not Confirm(
Text006, false,
"No.", "No. of Criteria Actions", FieldCaption("No. of Criteria Actions"), SavedSegCriteria.TableCaption())
then
exit;
if PAGE.RunModal(PAGE::"Saved Segment Criteria List", SavedSegCriteria) <> ACTION::LookupOK then
exit;
SavedSegCriteriaLineAction.SetRange("Segment Criteria Code", SavedSegCriteria.Code);
SavedSegCriteriaLineAction.SetRange(Type, SavedSegCriteriaLineAction.Type::Action);
if SavedSegCriteriaLineAction.Find('-') then
repeat
SegHeader.SetRange("No.", "No.");
Cont.Reset();
ContProfileAnswer.Reset();
ContMailingGrp.Reset();
InteractLogEntry.Reset();
ContJobResp.Reset();
ContIndustGrp.Reset();
ContBusRel.Reset();
ValueEntry.Reset();
SavedSegCriteriaLineFilter.SetRange("Segment Criteria Code", SavedSegCriteria.Code);
SavedSegCriteriaLineFilter.SetRange(
"Line No.", SavedSegCriteriaLineAction."Line No." + 1,
SavedSegCriteriaLineAction."Line No." + SavedSegCriteriaLineAction."No. of Filters");
if SavedSegCriteriaLineFilter.Find('-') then
repeat
case SavedSegCriteriaLineFilter."Table No." of
DATABASE::Contact:
Cont.SetView(SavedSegCriteriaLineFilter."Table View");
DATABASE::"Contact Profile Answer":
ContProfileAnswer.SetView(SavedSegCriteriaLineFilter."Table View");
DATABASE::"Contact Mailing Group":
ContMailingGrp.SetView(SavedSegCriteriaLineFilter."Table View");
DATABASE::"Interaction Log Entry":
InteractLogEntry.SetView(SavedSegCriteriaLineFilter."Table View");
DATABASE::"Contact Job Responsibility":
ContJobResp.SetView(SavedSegCriteriaLineFilter."Table View");
DATABASE::"Contact Industry Group":
ContIndustGrp.SetView(SavedSegCriteriaLineFilter."Table View");
DATABASE::"Contact Business Relation":
ContBusRel.SetView(SavedSegCriteriaLineFilter."Table View");
DATABASE::"Value Entry":
ValueEntry.SetView(SavedSegCriteriaLineFilter."Table View");
end;
until SavedSegCriteriaLineFilter.Next() = 0;
case SavedSegCriteriaLineAction.Action of
SavedSegCriteriaLineAction.Action::"Add Contacts":
begin
Clear(AddContacts);
AddContacts.SetTableView(SegHeader);
AddContacts.SetTableView(Cont);
AddContacts.SetTableView(ContProfileAnswer);
AddContacts.SetTableView(ContMailingGrp);
AddContacts.SetTableView(InteractLogEntry);
AddContacts.SetTableView(ContJobResp);
AddContacts.SetTableView(ContIndustGrp);
AddContacts.SetTableView(ContBusRel);
AddContacts.SetTableView(ValueEntry);
AddContacts.SetOptions(
SavedSegCriteriaLineAction."Allow Existing Contacts",
SavedSegCriteriaLineAction."Expand Contact",
SavedSegCriteriaLineAction."Allow Company with Persons",
SavedSegCriteriaLineAction."Ignore Exclusion");
AddContacts.UseRequestPage(false);
OnReuseContactsOnBeforeAddContactsRun(AddContacts, SavedSegCriteriaLineAction);
AddContacts.RunModal();
end;
SavedSegCriteriaLineAction.Action::"Remove Contacts (Reduce)":
begin
Clear(ReduceContacts);
ReduceContacts.SetTableView(SegHeader);
ReduceContacts.SetTableView(Cont);
ReduceContacts.SetTableView(ContProfileAnswer);
ReduceContacts.SetTableView(ContMailingGrp);
ReduceContacts.SetTableView(InteractLogEntry);
ReduceContacts.SetTableView(ContJobResp);
ReduceContacts.SetTableView(ContIndustGrp);
ReduceContacts.SetTableView(ContBusRel);
ReduceContacts.SetTableView(ValueEntry);
ReduceContacts.SetOptions(SavedSegCriteriaLineAction."Entire Companies");
ReduceContacts.UseRequestPage(false);
OnReuseContactsOnBeforeReduceContactsRun(ReduceContacts, SavedSegCriteriaLineAction);
ReduceContacts.RunModal();
end;
SavedSegCriteriaLineAction.Action::"Remove Contacts (Refine)":
begin
Clear(RefineContacts);
RefineContacts.SetTableView(SegHeader);
RefineContacts.SetTableView(Cont);
RefineContacts.SetTableView(ContProfileAnswer);
RefineContacts.SetTableView(ContMailingGrp);
RefineContacts.SetTableView(InteractLogEntry);
RefineContacts.SetTableView(ContJobResp);
RefineContacts.SetTableView(ContIndustGrp);
RefineContacts.SetTableView(ContBusRel);
RefineContacts.SetTableView(ValueEntry);
ReduceContacts.SetOptions(SavedSegCriteriaLineAction."Entire Companies");
RefineContacts.UseRequestPage(false);
OnReuseContactsOnBeforeRefineContactsRun(RefineContacts, SavedSegCriteriaLineAction);
RefineContacts.RunModal();
end;
else
OnReuseCriteriaSavedSegmentCriteriaLineCaseElse(SegHeader, SavedSegCriteriaLineAction);
end;
until SavedSegCriteriaLineAction.Next() = 0;
end;
procedure SaveCriteria()
var
SegCriteriaLine: Record "Segment Criteria Line";
SavedSegCriteria: Record "Saved Segment Criteria";
SavedSegCriteriaLine: Record "Saved Segment Criteria Line";
SaveSegCriteria: Page "Save Segment Criteria";
FormAction: Action;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeSaveCriteria(Rec, IsHandled);
if IsHandled then
exit;
CalcFields("No. of Criteria Actions");
TestField("No. of Criteria Actions");
SaveSegCriteria.RunModal();
SaveSegCriteria.GetValues(FormAction, SavedSegCriteria.Code, SavedSegCriteria.Description);
if FormAction = ACTION::OK then begin
SavedSegCriteria.Insert(true);
SegCriteriaLine.SetRange("Segment No.", "No.");
SegCriteriaLine.Find('-');
repeat
SavedSegCriteriaLine.Init();
SavedSegCriteriaLine."Segment Criteria Code" := SavedSegCriteria.Code;
SavedSegCriteriaLine."Line No." := SegCriteriaLine."Line No.";
SavedSegCriteriaLine.Action := SegCriteriaLine.Action;
SavedSegCriteriaLine.Type := SegCriteriaLine.Type;
SavedSegCriteriaLine."Table No." := SegCriteriaLine."Table No.";
SavedSegCriteriaLine."Table View" := SegCriteriaLine."Table View";
SavedSegCriteriaLine."Allow Existing Contacts" := SegCriteriaLine."Allow Existing Contacts";
SavedSegCriteriaLine."Expand Contact" := SegCriteriaLine."Expand Contact";
SavedSegCriteriaLine."Allow Company with Persons" := SegCriteriaLine."Allow Company with Persons";
SavedSegCriteriaLine."Ignore Exclusion" := SegCriteriaLine."Ignore Exclusion";
SavedSegCriteriaLine."Entire Companies" := SegCriteriaLine."Entire Companies";
SavedSegCriteriaLine."No. of Filters" := SegCriteriaLine."No. of Filters";
OnSaveCriteriaOnBeforeInsertSegmentCriteriaLine(SegCriteriaLine, SavedSegCriteriaLine);
SavedSegCriteriaLine.Insert();
until SegCriteriaLine.Next() = 0;
end;
end;
[Scope('OnPrem')]
procedure MaintainAttachment()
begin
if "Interaction Template Code" = '' then
exit;
if Rec."Word Template Code" <> '' then
Error(WordTemplateUsedErr);
if "Attachment No." <> 0 then
OpenAttachment()
else begin
CreateAttachment();
CalcFields("Attachment No.");
end;
end;
[Scope('OnPrem')]
procedure CreateAttachment()
var
SegmentInteractionLanguage: Record "Segment Interaction Language";
begin
if Rec."Word Template Code" <> '' then
Error(WordTemplateUsedErr);
if not SegmentInteractionLanguage.Get("No.", 0, "Language Code (Default)") then begin
SegmentInteractionLanguage.Init();
SegmentInteractionLanguage."Segment No." := "No.";
SegmentInteractionLanguage."Segment Line No." := 0;
SegmentInteractionLanguage."Language Code" := "Language Code (Default)";
SegmentInteractionLanguage.Description := Format("Interaction Template Code") + ' ' + Format("Language Code (Default)");
SegmentInteractionLanguage.Subject := "Subject (Default)";
end;
SegmentInteractionLanguage.CreateAttachment();
end;
internal procedure CreateWordTemplateAttachment()
var
Attachment: Record Attachment;
WordTemplate: Record "Word Template";
SegmentInteractionLanguage: Record "Segment Interaction Language";
TempBlob: Codeunit "Temp Blob";
OutStream: OutStream;
begin
CalcFields("Modified Word Template");
if "Modified Word Template" <> 0 then begin
if not Dialog.Confirm(ModifyExistingWordTemplateMsg, true) then begin
WordTemplate.Get(Rec."Word Template Code");
Attachment.Get("Modified Word Template");
Attachment."Attachment File".CreateOutStream(OutStream);
WordTemplate.Template.ExportStream(OutStream);
Attachment.Modify();
end;
ModifyWordTemplateAttachment();
end else begin
if not SegmentInteractionLanguage.Get("No.", 0, "Language Code (Default)") then begin
SegmentInteractionLanguage.Init();
SegmentInteractionLanguage."Segment No." := "No.";
SegmentInteractionLanguage."Segment Line No." := 0;
SegmentInteractionLanguage."Language Code" := "Language Code (Default)";
SegmentInteractionLanguage.Description := Format("Interaction Template Code") + ' ' + Format("Language Code (Default)");
SegmentInteractionLanguage.Subject := "Subject (Default)";
SegmentInteractionLanguage."Word Template Code" := "Word Template Code";
end;
WordTemplate.Get(Rec."Word Template Code");
TempBlob.CreateOutStream(OutStream);
WordTemplate.Template.ExportStream(OutStream);
SegmentInteractionLanguage."Word Template Code" := Rec."Word Template Code";
SegmentInteractionLanguage.CreateWordTemplateAttachment(TempBlob, TempTemplateFileNameLbl + TempTemplateExtensionLbl);
CalcFields("Modified Word Template");
if "Modified Word Template" <> 0 then
ModifyWordTemplateAttachment();
end;
end;
local procedure ModifyWordTemplateAttachment()
var
Attachment: Record Attachment;
DocumentServiceManagement: Codeunit "Document Service Management";
TempBlob: Codeunit "Temp Blob";
InStream: InStream;
OutStream: OutStream;
begin
Attachment.Get("Modified Word Template");
Attachment.CalcFields("Attachment File");
Attachment."Attachment File".CreateInStream(InStream);
TempBlob.CreateOutStream(OutStream);
CopyStream(OutStream, InStream);
if DocumentServiceManagement.EditInOneDrive(TempTemplateFileNameLbl + TempTemplateExtensionLbl, 'docx', Enum::"Doc. Sharing Conflict Behavior"::Replace, TempBlob) then begin
Attachment."Attachment File".CreateOutStream(OutStream);
TempBlob.CreateInStream(InStream);
CopyStream(OutStream, InStream);
Attachment.Modify();
end;
end;
[Scope('OnPrem')]
procedure OpenAttachment()
var
SegmentInteractionLanguage: Record "Segment Interaction Language";
begin
if Rec."Word Template Code" <> '' then
Error(WordTemplateUsedErr);
if SegmentInteractionLanguage.Get("No.", 0, "Language Code (Default)") then
if SegmentInteractionLanguage."Attachment No." <> 0 then
SegmentInteractionLanguage.OpenAttachment();
end;
[Scope('OnPrem')]
procedure ImportAttachment()
var
SegmentInteractionLanguage: Record "Segment Interaction Language";
begin
if Rec."Word Template Code" <> '' then
Error(WordTemplateUsedErr);
if not SegmentInteractionLanguage.Get("No.", 0, "Language Code (Default)") then begin
SegmentInteractionLanguage.Init();
SegmentInteractionLanguage."Segment No." := "No.";
SegmentInteractionLanguage."Segment Line No." := 0;
SegmentInteractionLanguage."Language Code" := "Language Code (Default)";
SegmentInteractionLanguage.Description :=
Format("Interaction Template Code") + ' ' + Format("Language Code (Default)");
SegmentInteractionLanguage.Insert(true);
end;
SegmentInteractionLanguage.ImportAttachment();
end;
[Scope('OnPrem')]
procedure ExportAttachment()
var
SegmentInteractionLanguage: Record "Segment Interaction Language";
begin
if Rec."Word Template Code" <> '' then
Error(WordTemplateUsedErr);
if SegmentInteractionLanguage.Get("No.", 0, "Language Code (Default)") then
if SegmentInteractionLanguage."Attachment No." <> 0 then
SegmentInteractionLanguage.ExportAttachment();
end;
[Scope('OnPrem')]
procedure RemoveAttachment(Prompt: Boolean)
var
SegmentInteractionLanguage: Record "Segment Interaction Language";
begin
if Rec."Word Template Code" <> '' then
Error(WordTemplateUsedErr);
if SegmentInteractionLanguage.Get("No.", 0, "Language Code (Default)") then
if SegmentInteractionLanguage."Attachment No." <> 0 then
SegmentInteractionLanguage.RemoveAttachment(Prompt);
end;
procedure UpdateSegHeader(InteractTmplCode: Code[10]; InteractTmplChange: Boolean)
var
InteractionTemplate: Record "Interaction Template";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeUpdateSegHeader(Rec, InteractTmplCode, InteractTmplChange, IsHandled, CurrFieldNo);
if not IsHandled then
if InteractTmplChange then begin
Modify();
Get("No.");
"Interaction Template Code" := InteractTmplCode;
"Subject (Default)" := '';
if InteractionTemplate.Get("Interaction Template Code") then begin
CopyFromTemplate(InteractionTemplate);
if (GetFilter("Campaign No.") = '') and (InteractionTemplate."Campaign No." <> '') then
"Campaign No." := InteractionTemplate."Campaign No.";
CreateSegInteractions("Interaction Template Code", "No.", 0);
end else begin
CopyFromTemplate(InteractionTemplate);
if GetFilter("Campaign No.") = '' then
"Campaign No." := '';
end;
OnUpdateSegHeaderOnBeforeSecondModify(Rec);
Modify();
CalcFields("Attachment No.");
end;
OnAfterUpdateSegHeader(Rec);
end;
local procedure SetDefaultSalesperson()
var
UserSetup: Record "User Setup";
begin
if not UserSetup.Get(UserId) then
exit;
if UserSetup."Salespers./Purch. Code" <> '' then
Validate("Salesperson Code", UserSetup."Salespers./Purch. Code");
end;
local procedure InsertSegmentLine(var SegmentLine: Record "Segment Line"; InteractionLogEntry: Record "Interaction Log Entry"; LineNo: Integer)
begin
SegmentLine.Init();
SegmentLine."Segment No." := "No.";
SegmentLine."Line No." := LineNo;
SegmentLine.Validate("Contact No.", InteractionLogEntry."Contact No.");
SegmentLine."Campaign No." := InteractionLogEntry."Campaign No.";
SegmentLine.Insert(true);
OnAfterInsertSegmentLine(SegmentLine, InteractionLogEntry);
end;
[IntegrationEvent(false, false)]
local procedure OnAfterReuseLogged(var SegmentHeader: Record "Segment Header"; LoggedSegment: Record "Logged Segment")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnReuseLoggedOnBeforeFindInteractLogEntries(var SegmentHeader: Record "Segment Header"; LoggedSegment: Record "Logged Segment"; var InteractionLogEntry: Record "Interaction Log Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterUpdateSegHeader(var SegmentHeader: Record "Segment Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterUpdateSegLinesByFieldNo(var SegmentHeader: Record "Segment Header"; CalledByFieldNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeReuseCriteria(var SegmentHeader: Record "Segment Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateSegHeader(var SegmentHeader: Record "Segment Header"; InteractTmplCode: Code[10]; InteractTmplChange: Boolean; var IsHandled: Boolean; CurrentFieldNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateSegLinesByFieldNo(SegmentHeader: Record "Segment Header"; ChangedFieldNo: Integer; var AskQuestion: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnReuseCriteriaSavedSegmentCriteriaLineCaseElse(var SegmentHeader: Record "Segment Header"; var SavedSegmentCriteriaLine: Record "Saved Segment Criteria Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInsertSegmentLine(var SegmentLine: Record "Segment Line"; InteractionLogEntry: Record "Interaction Log Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeSaveCriteria(var SegmentHeader: Record "Segment Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnReuseContactsOnBeforeAddContactsRun(var AddContacts: Report "Add Contacts"; var SavedSegCriteriaLineAction: Record "Saved Segment Criteria Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnReuseContactsOnBeforeReduceContactsRun(var ReduceContacts: Report "Remove Contacts - Reduce"; var SavedSegCriteriaLineAction: Record "Saved Segment Criteria Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnReuseContactsOnBeforeRefineContactsRun(var RefineContacts: Report "Remove Contacts - Refine"; var SavedSegCriteriaLineAction: Record "Saved Segment Criteria Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnUpdateSegHeaderOnBeforeSecondModify(var SegmentHeader: Record "Segment Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeValidateSubjectDefault(var SegmentHeader: Record "Segment Header"; xSegmentHeader: Record "Segment Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCreateSegInteractionsOnAfterDeleteAll(InteractionTemplateCode: Code[10]; SegmentNo: Code[20]; SegmentLineNo: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnSaveCriteriaOnBeforeInsertSegmentCriteriaLine(var SegmentCriteriaLine: Record "Segment Criteria Line"; var SavedSegmentCriteriaLine: Record "Saved Segment Criteria Line")
begin
end;
}