Codeunit 5056 CustCont-Update
- App
- Base Application
- Namespace
- Microsoft.CRM.BusinessRelation
- Versions
- 17-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/CRM/BusinessRelation/CustContUpdate.Codeunit.al294 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.BusinessRelation;
using Microsoft.CRM.Contact;
using Microsoft.CRM.Setup;
using Microsoft.Foundation.NoSeries;
using Microsoft.Sales.Customer;
codeunit 5056 "CustCont-Update"
{
Permissions = tabledata Contact = rimd,
tabledata "Contact Business Relation" = r;
trigger OnRun()
begin
end;
var
MarketingSetup: Record "Marketing Setup";
CustContactUpdateCategoryTxt: Label 'Customer Contact Orphaned Links', Locked = true;
CustContactUpdateTelemetryMsg: Label 'Contact does not exist. The contact business relation which points to it has been deleted', Locked = true;
procedure OnInsert(var Cust: Record Customer)
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnInsert(Cust, IsHandled);
if IsHandled then
exit;
MarketingSetup.Get();
if MarketingSetup."Bus. Rel. Code for Customers" = '' then
exit;
InsertNewContact(Cust, true);
end;
procedure OnModify(var Cust: Record Customer)
var
ContactBusinessRelation: Record "Contact Business Relation";
Contact: Record Contact;
OldContact: Record Contact;
ContactNo: Code[20];
NoSeries: Code[20];
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnModify(Cust, ContactBusinessRelation, IsHandled);
if not IsHandled then begin
ContactBusinessRelation.SetCurrentKey("Link to Table", "No.");
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer);
ContactBusinessRelation.SetRange("No.", Cust."No.");
if not ContactBusinessRelation.FindFirst() then
exit;
if not Contact.Get(ContactBusinessRelation."Contact No.") then begin
ContactBusinessRelation.Delete();
Session.LogMessage('0000B37', CustContactUpdateTelemetryMsg, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CustContactUpdateCategoryTxt);
exit;
end;
OldContact := Contact;
ContactNo := Contact."No.";
NoSeries := Contact."No. Series";
Contact.Validate("E-Mail", Cust."E-Mail");
OnModifyOnBeforeTransferFieldsFromCustToContact(Contact, Cust);
Contact.TransferFields(Cust);
Contact."No." := ContactNo;
Contact."No. Series" := NoSeries;
OnAfterTransferFieldsFromCustToCont(Contact, Cust);
Contact.Type := OldContact.Type;
Contact.Validate(Name);
Contact.DoModify(OldContact);
Contact.Modify(true);
if (Cust."Contact Type" = Cust."Contact Type"::Person) and
(Cust."Primary Contact No." = Contact."No.")
then begin
Cust.Validate(Contact, Contact.Name);
Cust.Modify();
end;
Cust.Get(Cust."No.");
end;
OnAfterOnModify(Contact, OldContact, Cust);
end;
procedure OnDelete(var Cust: Record Customer)
var
ContactBusinessRelation: Record "Contact Business Relation";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnDelete(Cust, ContactBusinessRelation, IsHandled);
if IsHandled then
exit;
ContactBusinessRelation.SetCurrentKey("Link to Table", "No.");
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer);
ContactBusinessRelation.SetRange("No.", Cust."No.");
ContactBusinessRelation.DeleteAll(true);
end;
procedure InsertNewContact(var Cust: Record Customer; LocalCall: Boolean)
var
ContactBusinessRelation: Record "Contact Business Relation";
Contact: Record Contact;
NoSeries: Codeunit "No. Series";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeInsertNewContact(Cust, LocalCall, IsHandled);
if IsHandled then
exit;
if not LocalCall then begin
MarketingSetup.Get();
MarketingSetup.TestField("Bus. Rel. Code for Customers");
end;
if ContactBusinessRelation.UpdateEmptyNoForContact(Cust."No.", Cust."Primary Contact No.", ContactBusinessRelation."Link to Table"::Customer) then
exit;
Contact.Init();
Contact.TransferFields(Cust);
OnAfterTransferFieldsFromCustToCont(Contact, Cust);
Contact.Validate(Contact.Name);
Contact.Validate(Contact."E-Mail");
IsHandled := false;
OnInsertNewContactOnBeforeAssignNo(Contact, IsHandled, Cust);
if not IsHandled then begin
Contact."No." := '';
Contact."No. Series" := '';
MarketingSetup.TestField("Contact Nos.");
Contact."No. Series" := MarketingSetup."Contact Nos.";
Contact."No." := NoSeries.GetNextNo(Contact."No. Series");
end;
Contact.Type := Cust."Contact Type";
Contact.SetSkipDefault();
OnBeforeContactInsert(Contact, Cust);
Contact.Insert(true);
OnInsertNewContactOnAfterContInsert(Contact, Cust);
ContactBusinessRelation.Init();
ContactBusinessRelation."Contact No." := Contact."No.";
ContactBusinessRelation."Business Relation Code" := MarketingSetup."Bus. Rel. Code for Customers";
ContactBusinessRelation."Link to Table" := ContactBusinessRelation."Link to Table"::Customer;
ContactBusinessRelation."No." := Cust."No.";
OnInsertNewContactOnBeforeContBusRelInsert(ContactBusinessRelation, Contact, Cust);
ContactBusinessRelation.Insert(true);
if Cust."Contact Type" = Cust."Contact Type"::Person then
Cust.Validate("Primary Contact No.", Contact."No.");
end;
procedure InsertNewContactPerson(var Cust: Record Customer; LocalCall: Boolean)
var
CompanyContact: Record Contact;
ContactBusinessRelation: Record "Contact Business Relation";
PersonContact: Record Contact;
begin
if not LocalCall then begin
MarketingSetup.Get();
MarketingSetup.TestField("Bus. Rel. Code for Customers");
end;
ContactBusinessRelation.SetCurrentKey("Link to Table", "No.");
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer);
ContactBusinessRelation.SetRange("No.", Cust."No.");
if ContactBusinessRelation.FindFirst() then
if CompanyContact.Get(ContactBusinessRelation."Contact No.") then begin
OnInsertNewContactPersonOnBeforeValidateType(PersonContact, Cust, CompanyContact);
PersonContact.Validate(PersonContact.Type, PersonContact.Type::Person);
PersonContact.Insert(true);
if CompanyContact.Type = CompanyContact.Type::Company then
PersonContact."Company No." := CompanyContact."No.";
PersonContact.Validate(PersonContact.Name, Cust.Contact);
if CompanyContact.Type = CompanyContact.Type::Company then
PersonContact.InheritCompanyToPersonData(CompanyContact);
PersonContact.UpdateBusinessRelation();
OnInsertNewContactPersonOnBeforeContactModify(PersonContact, Cust);
PersonContact.Modify(true);
OnInsertNewContactPersonOnAfterContactModify(PersonContact, Cust);
Cust."Primary Contact No." := PersonContact."No.";
end
end;
procedure DeleteCustomerContacts(var Customer: Record Customer)
var
Contact: Record Contact;
ContactBusinessRelation: Record "Contact Business Relation";
begin
ContactBusinessRelation.SetCurrentKey("Link to Table", "No.");
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer);
ContactBusinessRelation.SetRange("No.", Customer."No.");
if ContactBusinessRelation.FindSet() then
repeat
if Contact.Get(ContactBusinessRelation."Contact No.") then
Contact.Delete(true);
until ContactBusinessRelation.Next() = 0;
end;
procedure ContactNameIsBlank(CustomerNo: Code[20]): Boolean
var
Contact: Record Contact;
ContactBusinessRelation: Record "Contact Business Relation";
begin
ContactBusinessRelation.SetCurrentKey("Link to Table", "No.");
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer);
ContactBusinessRelation.SetRange("No.", CustomerNo);
if not ContactBusinessRelation.FindFirst() then
exit(false);
if not Contact.Get(ContactBusinessRelation."Contact No.") then
exit(true);
exit(Contact.Name = '');
end;
[IntegrationEvent(false, false)]
local procedure OnAfterOnModify(var Contact: Record Contact; var OldContact: Record Contact; var Customer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterTransferFieldsFromCustToCont(var Contact: Record Contact; Customer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeContactInsert(var Contact: Record Contact; Customer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInsertNewContact(var Customer: Record Customer; LocalCall: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeOnDelete(Customer: Record Customer; var ContactBusinessRelation: Record "Contact Business Relation"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeOnInsert(var Customer: Record Customer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeOnModify(Customer: Record Customer; var ContactBusinessRelation: Record "Contact Business Relation"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertNewContactOnAfterContInsert(var Contact: Record Contact; var Customer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertNewContactPersonOnAfterContactModify(var Contact: Record Contact; var Customer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertNewContactPersonOnBeforeValidateType(var Contact: Record Contact; Customer: Record Customer; ContComp: Record Contact)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertNewContactPersonOnBeforeContactModify(var Contact: Record Contact; Customer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertNewContactOnBeforeContBusRelInsert(var ContactBusinessRelation: Record "Contact Business Relation"; Contact: Record Contact; Customer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertNewContactOnBeforeAssignNo(var Contact: Record Contact; var IsHandled: Boolean; Customer: Record Customer);
begin
end;
[IntegrationEvent(false, false)]
local procedure OnModifyOnBeforeTransferFieldsFromCustToContact(var Contact: Record Contact; var Customer: Record Customer)
begin
end;
}