Codeunit 5458 Graph Collection Mgt - Contact

App
Base Application
Namespace
Microsoft.Integration.Graph
Versions
17-28

Procedures, 93

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Integration/Graph/GraphCollectionMgtContact.Codeunit.al1154 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.Integration.Graph;

using Microsoft.CRM.Comment;
using Microsoft.CRM.Contact;
using Microsoft.Foundation.Address;
using System;
using System.Reflection;
using System.Text;

codeunit 5458 "Graph Collection Mgt - Contact"
{

    trigger OnRun()
    begin
    end;

    var
        JSONManagement: Codeunit "JSON Management";
        WebsiteType: Option Other,Home,Work,Blog,"Profile";
        PhoneType: Option Home,Business,Mobile,Other,Assistant,HomeFax,BusinessFax,OtherFax,Pager,Radio;
        AddressType: Option Unknown,Home,Business,Other;
        BusinessType: Option Company,Individual;
        FlagStatusOption: Option NotFlagged,Complete,Flagged;
        PropertyIdErr: Label 'The PropertyId is not correct. Expected: %1, Actual %2.', Comment = '%1 and %2 are a string like: ''Integer {47ac1412-279b-41cb-891e-58904a94a48b} Name IsCustomer'' ';
        BusinessTypePropertyIdTxt: Label 'String {bdba944b-fc2b-47a1-8ba4-cafc4ae13ea2} Name BusinessType', Locked = true;
        IsCustomerPropertyIdTxt: Label 'Integer {47ac1412-279b-41cb-891e-58904a94a48b} Name IsCustomer', Locked = true;
        IsVendorPropertyIdTxt: Label 'Integer {ccf57c46-c10e-41bb-b8c5-362b185d2f98} Name IsVendor', Locked = true;
        IsBankPropertyIdTxt: Label 'Integer {a8ef117a-16d9-4cc6-965a-d2fbe0177e61} Name IsBank', Locked = true;
        IsNavCreatedPropertyIdTxt: Label 'Integer {6023a623-3b6c-492d-9ef5-811850c088ac} Name IsNavCreated', Locked = true;
        IsLeadPropertyIdTxt: Label 'Integer {37829b75-e5e4-4582-ae12-36f754e4bd7b} Name IsLead', Locked = true;
        IsContactPropertyIdTxt: Label 'Integer {f4be2302-782e-483d-8ba4-26fb6535f665} Name IsContact', Locked = true;
        IsPartnerPropertyIdTxt: Label 'Integer {65ebabde-6946-455f-b918-a88ee36182a9} Name IsPartner', Locked = true;
        NavIntegrationIdTxt: Label 'String {d048f561-4dd0-443c-a8d8-f397fb74f1df} Name NavIntegrationId', Locked = true;

    procedure GetEmailAddress(Index: Integer; var Name: Text; var Address: Text)
    var
        JObject: DotNet JObject;
    begin
        Clear(Name);
        Clear(Address);
        if Index >= JSONManagement.GetCollectionCount() then
            exit;

        JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Name', Name);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Address', Address);
    end;

    procedure AddEmailAddress(Name: Text; Address: Text)
    var
        JObject: DotNet JObject;
    begin
        if Address = '' then
            exit;

        JObject := JObject.JObject();
        JSONManagement.AddJPropertyToJObject(JObject, 'Name', Name);
        JSONManagement.AddJPropertyToJObject(JObject, 'Address', Address);
        JSONManagement.AddJObjectToCollection(JObject);
    end;

    procedure UpdateEmailAddress(EmailAddressesString: Text; Index: Integer; Address: Text): Text
    var
        JObject: DotNet JObject;
    begin
        JSONManagement.InitializeCollection(EmailAddressesString);
        if Index > JSONManagement.GetCollectionCount() then // cannot add where index would leave empty slots.
            exit(EmailAddressesString);

        if JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index) then begin
            JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'Name', '');
            JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'Address', Address)
        end else
            AddEmailAddress('', Address);

        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure GetWebsiteByIndex(Index: Integer; var Type: Option; var Address: Text; var DisplayName: Text; var Name: Text)
    var
        JObject: DotNet JObject;
    begin
        if Index >= JSONManagement.GetCollectionCount() then
            exit;

        JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index);
        JSONManagement.GetEnumPropertyValueFromJObjectByName(JObject, 'Type', Type);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Address', Address);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'DisplayName', DisplayName);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Name', Name);
    end;

    local procedure GetWebsiteByType(Type: Option; var Address: Text; var DisplayName: Text; var Name: Text)
    var
        JObject: DotNet JObject;
    begin
        WebsiteType := Type;
        if not JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(WebsiteType, 0, 0)) then
            exit;
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Address', Address);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'DisplayName', DisplayName);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Name', Name);
    end;

    procedure AddWebsite(Type: Option; Address: Text; DisplayName: Text; Name: Text)
    var
        JObject: DotNet JObject;
    begin
        if Address = '' then
            exit;
        JObject := JObject.JObject();
        WebsiteType := Type;
        JSONManagement.AddJPropertyToJObject(JObject, 'Type', Format(WebsiteType, 0, 0));
        JSONManagement.AddJPropertyToJObject(JObject, 'Address', Address);
        JSONManagement.AddJPropertyToJObject(JObject, 'DisplayName', DisplayName);
        JSONManagement.AddJPropertyToJObject(JObject, 'Name', Name);
        JSONManagement.AddJObjectToCollection(JObject);
    end;

    procedure UpdateWebsite(Type: Option; Address: Text)
    var
        JObject: DotNet JObject;
    begin
        WebsiteType := Type;
        if not JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(WebsiteType, 0, 0)) then begin
            if Address = '' then
                exit;
            JObject := JObject.JObject();
            JSONManagement.AddJObjectToCollection(JObject);
        end else
            JObject.Remove('Type');
        JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'Address', Address);
    end;

    procedure GetImAddress(Index: Integer; var ImAddress: Text)
    var
        JObject: DotNet JObject;
    begin
        if Index >= JSONManagement.GetCollectionCount() then
            exit;

        JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index);
        JSONManagement.GetStringValueFromJObject(JObject, ImAddress);
    end;

    procedure AddImAddress(ImAddress: Text)
    var
        JObject: DotNet JObject;
    begin
        if ImAddress = '' then
            exit;

        JObject := JObject.JObject();
        JSONManagement.AddJValueToJObject(JObject, ImAddress);
        JSONManagement.AddJObjectToCollection(JObject);
    end;

    procedure GetPhoneByIndex(Index: Integer; var Type: Option; var Number: Text)
    var
        JObject: DotNet JObject;
    begin
        if Index >= JSONManagement.GetCollectionCount() then
            exit;

        JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index);
        JSONManagement.GetEnumPropertyValueFromJObjectByName(JObject, 'Type', Type);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Number', Number);
    end;

    procedure GetPhoneByType(Type: Option; var Number: Text)
    var
        JObject: DotNet JObject;
    begin
        PhoneType := Type;
        if not JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(PhoneType, 0, 0)) then
            exit;

        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Number', Number);
    end;

    procedure AddPhone(Type: Option; Number: Text)
    var
        JObject: DotNet JObject;
    begin
        PhoneType := Type;
        if Number = '' then
            exit;

        JObject := JObject.JObject();
        JSONManagement.AddJPropertyToJObject(JObject, 'Type', Format(PhoneType, 0, 0));
        JSONManagement.AddJPropertyToJObject(JObject, 'Number', Number);
        JSONManagement.AddJObjectToCollection(JObject);
    end;

    procedure GetPostalAddressByIndex(Index: Integer; var Type: Option; var PostOfficeBox: Text; var Street: Text; var City: Text; var State: Text; var CountryOrRegion: Text; var PostalCode: Text)
    var
        JObject: DotNet JObject;
    begin
        if Index >= JSONManagement.GetCollectionCount() then
            exit;

        JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index);
        JSONManagement.GetEnumPropertyValueFromJObjectByName(JObject, 'Type', Type);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'PostOfficeBox', PostOfficeBox);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Street', Street);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'City', City);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'State', State);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'CountryOrRegion', CountryOrRegion);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'PostalCode', PostalCode);
    end;

    local procedure GetPostalAddressByType(Type: Option; var Address: Text[100]; var Address2: Text[50]; var City: Text[30]; var County: Text[30]; var CountryRegionCode: Code[10]; var PostCode: Code[20])
    var
        JObject: DotNet JObject;
        value: Text;
    begin
        AddressType := Type;
        if not JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(AddressType, 0, 0)) then
            exit;

        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'Street', value);
        SplitStreet(value, Address, Address2);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'City', value);
        City := CopyStr(value, 1, MaxStrLen(value));
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'State', value);
        County := CopyStr(value, 1, MaxStrLen(value));
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'CountryOrRegion', value);
        CountryRegionCode := FindCountryRegionCode(value);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JObject, 'PostalCode', value);
        PostCode := CopyStr(value, 1, MaxStrLen(PostCode));
    end;

    procedure AddPostalAddress(Type: Option; PostOfficeBox: Text; Street: Text; City: Text; State: Text; CountryOrRegion: Text; PostalCode: Text)
    var
        JObject: DotNet JObject;
    begin
        JObject := JObject.JObject();
        AddressType := Type;
        JSONManagement.AddJPropertyToJObject(JObject, 'Type', Format(AddressType, 0, 0));
        JSONManagement.AddJPropertyToJObject(JObject, 'PostOfficeBox', PostOfficeBox);
        JSONManagement.AddJPropertyToJObject(JObject, 'Street', Street);
        JSONManagement.AddJPropertyToJObject(JObject, 'City', City);
        JSONManagement.AddJPropertyToJObject(JObject, 'State', State);
        JSONManagement.AddJPropertyToJObject(JObject, 'CountryOrRegion', CountryOrRegion);
        JSONManagement.AddJPropertyToJObject(JObject, 'PostalCode', PostalCode);
        JSONManagement.AddJObjectToCollection(JObject);
    end;

    procedure GetChildren(Index: Integer; var Child: Text)
    var
        JObject: DotNet JObject;
    begin
        if Index >= JSONManagement.GetCollectionCount() then
            exit;

        JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index);
        JSONManagement.GetStringValueFromJObject(JObject, Child);
    end;

    procedure AddChildren(Child: Text)
    var
        JObject: DotNet JObject;
    begin
        if Child = '' then
            exit;

        JObject := JObject.JObject();
        JSONManagement.AddJValueToJObject(JObject, Child);
        JSONManagement.AddJObjectToCollection(JObject);
    end;

    procedure GetFlag(var CompletedDateTime: Text; var CompletedTimeZone: Text; var DueDateTime: Text; var DueTimeZone: Text; var StartDateTime: Text; var StartTimeZone: Text; var FlagStatus: Option)
    var
        JsonObject: DotNet JObject;
        JObjectVariant: Variant;
    begin
        JSONManagement.GetJSONObject(JsonObject);
        if JSONManagement.GetPropertyValueFromJObjectByName(JsonObject, 'CompletedDateTime', JObjectVariant) then begin
            JSONManagement.GetStringPropertyValueFromJObjectByName(JObjectVariant, 'CompletedDateTime', CompletedDateTime);
            JSONManagement.GetStringPropertyValueFromJObjectByName(JObjectVariant, 'CompletedTimeZone', CompletedTimeZone);
        end;
        if JSONManagement.GetPropertyValueFromJObjectByName(JsonObject, 'DueDateTime', JObjectVariant) then begin
            ;
            JSONManagement.GetStringPropertyValueFromJObjectByName(JObjectVariant, 'DateTime', DueDateTime);
            JSONManagement.GetStringPropertyValueFromJObjectByName(JObjectVariant, 'TimeZone', DueTimeZone);
        end;
        if JSONManagement.GetPropertyValueFromJObjectByName(JsonObject, 'StartDateTime', JObjectVariant) then begin
            ;
            JSONManagement.GetStringPropertyValueFromJObjectByName(JObjectVariant, 'DateTime', StartDateTime);
            JSONManagement.GetStringPropertyValueFromJObjectByName(JObjectVariant, 'TimeZone', StartTimeZone);
        end;

        JSONManagement.GetEnumPropertyValueFromJObjectByName(JsonObject, 'FlagStatus', FlagStatusOption);
        FlagStatus := FlagStatusOption;
    end;

    procedure AddFlag(CompletedDateTime: Text; CompletedTimeZone: Text; DueDateTime: Text; DueTimeZone: Text; StartDateTime: Text; StartTimeZone: Text; FlagStatus: Option)
    var
        JObject: DotNet JObject;
        JsonObject: DotNet JObject;
    begin
        JSONManagement.GetJSONObject(JsonObject);

        JObject := JObject.JObject();
        JSONManagement.AddJPropertyToJObject(JObject, 'DateTime', CompletedDateTime);
        JSONManagement.AddJPropertyToJObject(JObject, 'TimeZone', CompletedTimeZone);
        JSONManagement.AddJObjectToJObject(JsonObject, 'CompletedDateTime', JObject);
        JObject := JObject.JObject();

        JSONManagement.AddJPropertyToJObject(JObject, 'DateTime', DueDateTime);
        JSONManagement.AddJPropertyToJObject(JObject, 'TimeZone', DueTimeZone);
        JSONManagement.AddJObjectToJObject(JsonObject, 'DueDateTime', JObject);
        JObject := JObject.JObject();
        JSONManagement.AddJPropertyToJObject(JObject, 'DateTime', StartDateTime);
        JSONManagement.AddJPropertyToJObject(JObject, 'TimeZone', StartTimeZone);
        JSONManagement.AddJObjectToJObject(JsonObject, 'StartDateTime', JObject);
        FlagStatusOption := FlagStatus;
        JSONManagement.AddJPropertyToJObject(JsonObject, 'FlagStatus', Format(FlagStatusOption, 0, 0));
    end;

    procedure GetCategory(Index: Integer; var Category: Text)
    var
        JObject: DotNet JObject;
    begin
        if Index >= JSONManagement.GetCollectionCount() then
            exit;

        JSONManagement.GetJObjectFromCollectionByIndex(JObject, Index);
        JSONManagement.GetStringValueFromJObject(JObject, Category);
    end;

    procedure AddCategory(Category: Text)
    var
        JObject: DotNet JObject;
    begin
        JObject := JObject.JObject();
        JSONManagement.AddJValueToJObject(JObject, Category);
        JSONManagement.AddJObjectToCollection(JObject);
    end;

    local procedure HasPostalAddress(Type: Option): Boolean
    var
        JObject: DotNet JObject;
    begin
        AddressType := Type;
        exit(JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(AddressType, 0, 0)))
    end;

    procedure HasHomeAddressOrPhone(PostalAddressesString: Text; PhonesString: Text; WebsitesString: Text): Boolean
    var
        HasAddress: Boolean;
        HasPhones: Boolean;
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        HasAddress := HasPostalAddress(AddressType::Home);
        JSONManagement.InitializeCollection(PhonesString);
        HasPhones := HasPhone(PhoneType::Home) or HasPhone(PhoneType::HomeFax);
        JSONManagement.InitializeCollection(WebsitesString);
        exit(HasAddress or HasPhones or HasWebsite(WebsiteType::Home));
    end;

    procedure HasBusinessAddressOrPhone(PostalAddressesString: Text; PhonesString: Text; WebsitesString: Text): Boolean
    var
        HasAddress: Boolean;
        HasPhones: Boolean;
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        HasAddress := HasPostalAddress(AddressType::Business);
        JSONManagement.InitializeCollection(PhonesString);
        HasPhones := HasPhone(PhoneType::Business) or HasPhone(PhoneType::BusinessFax);
        JSONManagement.InitializeCollection(WebsitesString);
        exit(HasAddress or HasPhones or HasWebsite(WebsiteType::Work));
    end;

    procedure HasBusinessAddress(PostalAddressesString: Text): Boolean
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        exit(HasPostalAddress(AddressType::Business));
    end;

    procedure HasOtherAddressOrPhone(PostalAddressesString: Text; PhonesString: Text; WebsitesString: Text): Boolean
    var
        HasAddress: Boolean;
        HasPhones: Boolean;
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        HasAddress := HasPostalAddress(AddressType::Other);
        JSONManagement.InitializeCollection(PhonesString);
        HasPhones := HasPhone(PhoneType::Other) or HasPhone(PhoneType::OtherFax);
        JSONManagement.InitializeCollection(WebsitesString);
        exit(HasAddress or HasPhones or HasWebsite(WebsiteType::Other));
    end;

    local procedure UpdatePostalAddress(Type: Option; Address: Text[100]; Address2: Text[50]; City: Text[30]; County: Text[30]; CountryRegionCode: Code[10]; PostCode: Code[20])
    var
        JObject: DotNet JObject;
    begin
        AddressType := Type;
        if (Address = '') and (Address2 = '') and (City = '') and (County = '') and (PostCode = '') then begin
            if JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(AddressType, 0, 0)) then
                JObject.Remove();
            exit;
        end;

        if not JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(AddressType, 0, 0)) then begin
            JObject := JObject.JObject();
            JSONManagement.AddJPropertyToJObject(JObject, 'Type', Format(AddressType, 0, 0));
            JSONManagement.AddJObjectToCollection(JObject);
            JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(AddressType, 0, 0));
        end;
        JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'Street', ConcatenateStreet(Address, Address2));
        JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'City', City);
        JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'State', County);
        JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'CountryOrRegion', CountryRegionCode);
        JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'PostalCode', PostCode);
    end;

    procedure UpdateHomeAddress(PostalAddressesString: Text; Address: Text[100]; Address2: Text[50]; City: Text[30]; County: Text[30]; CountryRegionCode: Code[10]; PostCode: Code[20]): Text
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        UpdatePostalAddress(AddressType::Home, Address, Address2, City, County, CountryRegionCode, PostCode);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateBusinessAddress(PostalAddressesString: Text; Address: Text[100]; Address2: Text[50]; City: Text[30]; County: Text[30]; CountryRegionCode: Code[10]; PostCode: Code[20]): Text
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        UpdatePostalAddress(AddressType::Business, Address, Address2, City, County, CountryRegionCode, PostCode);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateOtherAddress(PostalAddressesString: Text; Address: Text[100]; Address2: Text[50]; City: Text[30]; County: Text[30]; CountryRegionCode: Code[10]; PostCode: Code[20]): Text
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        UpdatePostalAddress(AddressType::Other, Address, Address2, City, County, CountryRegionCode, PostCode);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure GetHomeAddress(PostalAddressesString: Text; var Address: Text[100]; var Address2: Text[50]; var City: Text[30]; var County: Text[30]; var CountryRegionCode: Code[10]; var PostCode: Code[20])
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        GetPostalAddressByType(AddressType::Home, Address, Address2, City, County, CountryRegionCode, PostCode);
    end;

    procedure GetBusinessAddress(PostalAddressesString: Text; var Address: Text[100]; var Address2: Text[50]; var City: Text[30]; var County: Text[30]; var CountryRegionCode: Code[10]; var PostCode: Code[20])
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        GetPostalAddressByType(AddressType::Business, Address, Address2, City, County, CountryRegionCode, PostCode);
    end;

    procedure GetOtherAddress(PostalAddressesString: Text; var Address: Text[100]; var Address2: Text[50]; var City: Text[30]; var County: Text[30]; var CountryRegionCode: Code[10]; var PostCode: Code[20])
    begin
        JSONManagement.InitializeCollection(PostalAddressesString);
        GetPostalAddressByType(AddressType::Other, Address, Address2, City, County, CountryRegionCode, PostCode);
    end;

    local procedure HasPhone(Type: Option): Boolean
    var
        JObject: DotNet JObject;
    begin
        PhoneType := Type;
        exit(JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(PhoneType, 0, 0)));
    end;

    local procedure UpdatePhone(Type: Option; Number: Text)
    var
        JObject: DotNet JObject;
    begin
        PhoneType := Type;
        if not JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(PhoneType, 0, 0)) then begin
            if Number = '' then
                exit;
            JObject := JObject.JObject();
            JSONManagement.AddJPropertyToJObject(JObject, 'Type', Format(PhoneType, 0, 0));
            JSONManagement.AddJObjectToCollection(JObject);
            JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(PhoneType, 0, 0))
        end;
        JSONManagement.ReplaceOrAddJPropertyInJObject(JObject, 'Number', Number);
    end;

    procedure UpdateHomePhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::Home, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateBusinessPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::Business, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateMobilePhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::Mobile, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateOtherPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::Other, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateAssistantPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::Assistant, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateHomeFaxPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::HomeFax, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateBusinessFaxPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::BusinessFax, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateOtherFaxPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::OtherFax, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdatePagerPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::Pager, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateRadioPhone(PhonesString: Text; Number: Text): Text
    begin
        JSONManagement.InitializeCollection(PhonesString);
        UpdatePhone(PhoneType::Radio, Number);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure GetHomePhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::Home, Number);
    end;

    procedure GetBusinessPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::Business, Number);
    end;

    procedure GetMobilePhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::Mobile, Number);
    end;

    procedure GetOtherPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::Other, Number);
    end;

    procedure GetAssistantPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::Assistant, Number);
    end;

    procedure GetHomeFaxPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::HomeFax, Number);
    end;

    procedure GetBusinessFaxPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::BusinessFax, Number);
    end;

    procedure GetOtherFaxPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::OtherFax, Number);
    end;

    procedure GetPagerPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::Pager, Number);
    end;

    procedure GetRadioPhone(PhonesString: Text; var Number: Text)
    begin
        JSONManagement.InitializeCollection(PhonesString);
        GetPhoneByType(PhoneType::Radio, Number);
    end;

    local procedure HasWebsite(Type: Option): Boolean
    var
        JObject: DotNet JObject;
    begin
        WebsiteType := Type;
        exit(JSONManagement.GetJObjectFromCollectionByPropertyValue(JObject, 'Type', Format(WebsiteType, 0, 0)));
    end;

    procedure GetWorkWebsite(WebsitesString: Text; var Address: Text[80])
    var
        Name: Text;
        DisplayName: Text;
    begin
        JSONManagement.InitializeCollection(WebsitesString);
        GetWebsiteByType(WebsiteType::Work, Address, Name, DisplayName);
    end;

    procedure GetHomeWebsite(WebsitesString: Text; var Address: Text[80])
    var
        Name: Text;
        DisplayName: Text;
    begin
        JSONManagement.InitializeCollection(WebsitesString);
        GetWebsiteByType(WebsiteType::Home, Address, Name, DisplayName);
    end;

    procedure UpdateWorkWebsite(WebsitesString: Text; Address: Text[80]): Text
    begin
        JSONManagement.InitializeCollection(WebsitesString);
        UpdateWebsite(WebsiteType::Work, Address);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure UpdateHomeWebsite(WebsitesString: Text; Address: Text[80]): Text
    begin
        JSONManagement.InitializeCollection(WebsitesString);
        UpdateWebsite(WebsiteType::Home, Address);
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure HasBusinessType(BusinessTypeString: Text): Boolean
    begin
        exit(HasExtendedProperty(BusinessTypeString, BusinessTypePropertyIdTxt));
    end;

    [TryFunction]
    procedure TryGetBusinessTypeValue(BusinessTypeString: Text; var Value: Text)
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(BusinessTypeString);
        JSONManagement.GetJSONObject(JsonObject);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId);
        if not (PropertyId = BusinessTypePropertyIdTxt) then
            Error(PropertyIdErr, BusinessTypePropertyIdTxt, PropertyId);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'Value', Value);
        Evaluate(BusinessType, Value, 0);
    end;

    procedure GetBusinessType(BusinessTypeString: Text; var Type: Option)
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(BusinessTypeString);
        JSONManagement.GetJSONObject(JsonObject);
        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = BusinessTypePropertyIdTxt then begin
                JSONManagement.GetEnumPropertyValueFromJObjectByName(JsonObject, 'Value', BusinessType);
                Type := BusinessType;
                exit;
            end;

        Type := BusinessType::Individual;
    end;

    procedure AddBusinessType(Type: Option): Text
    var
        JsonObject: DotNet JObject;
    begin
        JSONManagement.InitializeEmptyObject();
        JSONManagement.GetJSONObject(JsonObject);
        BusinessType := Type;
        JSONManagement.AddJPropertyToJObject(JsonObject, 'PropertyId', BusinessTypePropertyIdTxt);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'Value', Format(BusinessType, 0, 0));
        exit(JSONManagement.WriteObjectToString());
    end;

    local procedure HasExtendedProperty(ExtendedPropertyString: Text; ExpectedPropertyId: Text): Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(ExtendedPropertyString);
        JSONManagement.GetJSONObject(JsonObject);
        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            exit(ExpectedPropertyId = PropertyId);
    end;

    local procedure GetExtendedPropertyBoolValue(ExtendedPropertyString: Text; ExpectedPropertyId: Text; var Value: Text)
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
        BooleanValue: Boolean;
    begin
        JSONManagement.InitializeObject(ExtendedPropertyString);
        JSONManagement.GetJSONObject(JsonObject);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId);
        if not (PropertyId = ExpectedPropertyId) then
            Error(PropertyIdErr, ExpectedPropertyId, PropertyId);
        JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'Value', Value);
        Evaluate(BooleanValue, Value, 2);
    end;

    procedure HasIsCustomer(IsCustomerString: Text): Boolean
    begin
        exit(HasExtendedProperty(IsCustomerString, IsCustomerPropertyIdTxt));
    end;

    procedure GetIsCustomer(IsCustomerString: Text) IsCustomer: Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(IsCustomerString);
        JSONManagement.GetJSONObject(JsonObject);

        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = IsCustomerPropertyIdTxt then begin
                JSONManagement.GetBoolPropertyValueFromJObjectByName(JsonObject, 'Value', IsCustomer);
                exit(IsCustomer);
            end;

        exit(false);
    end;

    [TryFunction]
    procedure TryGetIsCustomerValue(IsCustomerString: Text; var Value: Text)
    begin
        GetExtendedPropertyBoolValue(IsCustomerString, IsCustomerPropertyIdTxt, Value);
    end;

    procedure AddIsCustomer(IsCustomer: Boolean): Text
    var
        JsonObject: DotNet JObject;
    begin
        JSONManagement.InitializeEmptyObject();
        JSONManagement.GetJSONObject(JsonObject);

        JSONManagement.AddJPropertyToJObject(JsonObject, 'PropertyId', IsCustomerPropertyIdTxt);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'Value', Format(IsCustomer, 0, 2));

        exit(JSONManagement.WriteObjectToString());
    end;

    procedure HasIsVendor(IsVendorString: Text): Boolean
    begin
        exit(HasExtendedProperty(IsVendorString, IsVendorPropertyIdTxt));
    end;

    procedure GetIsVendor(IsVendorString: Text) IsVendor: Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(IsVendorString);
        JSONManagement.GetJSONObject(JsonObject);

        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = IsVendorPropertyIdTxt then begin
                JSONManagement.GetBoolPropertyValueFromJObjectByName(JsonObject, 'Value', IsVendor);
                exit(IsVendor);
            end;
        exit(false);
    end;

    [TryFunction]
    procedure TryGetIsVendorValue(IsVendorString: Text; var Value: Text)
    begin
        GetExtendedPropertyBoolValue(IsVendorString, IsVendorPropertyIdTxt, Value);
    end;

    procedure AddIsVendor(IsVendor: Boolean): Text
    var
        JsonObject: DotNet JObject;
    begin
        JSONManagement.InitializeEmptyObject();
        JSONManagement.GetJSONObject(JsonObject);

        JSONManagement.AddJPropertyToJObject(JsonObject, 'PropertyId', IsVendorPropertyIdTxt);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'Value', Format(IsVendor, 0, 2));

        exit(JSONManagement.WriteObjectToString());
    end;

    procedure HasIsBank(IsBankString: Text): Boolean
    begin
        exit(HasExtendedProperty(IsBankString, IsBankPropertyIdTxt));
    end;

    procedure GetIsBank(IsBankString: Text) IsBank: Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(IsBankString);
        JSONManagement.GetJSONObject(JsonObject);

        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = IsBankPropertyIdTxt then begin
                JSONManagement.GetBoolPropertyValueFromJObjectByName(JsonObject, 'Value', IsBank);
                exit(IsBank);
            end;
        exit(false);
    end;

    [TryFunction]
    procedure TryGetIsBankValue(IsBankString: Text; var Value: Text)
    begin
        GetExtendedPropertyBoolValue(IsBankString, IsBankPropertyIdTxt, Value);
    end;

    procedure AddIsBank(IsBank: Boolean): Text
    var
        JsonObject: DotNet JObject;
    begin
        JSONManagement.InitializeEmptyObject();
        JSONManagement.GetJSONObject(JsonObject);

        JSONManagement.AddJPropertyToJObject(JsonObject, 'PropertyId', IsBankPropertyIdTxt);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'Value', Format(IsBank, 0, 2));

        exit(JSONManagement.WriteObjectToString());
    end;

    procedure GetIsNavCreated(IsNavCreatedString: Text) IsNavCreated: Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(IsNavCreatedString);
        JSONManagement.GetJSONObject(JsonObject);

        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = IsNavCreatedPropertyIdTxt then begin
                JSONManagement.GetBoolPropertyValueFromJObjectByName(JsonObject, 'Value', IsNavCreated);
                exit(IsNavCreated);
            end;
        exit(false);
    end;

    procedure AddIsNavCreated(IsNavCreated: Boolean): Text
    var
        JsonObject: DotNet JObject;
    begin
        JSONManagement.InitializeEmptyObject();
        JSONManagement.GetJSONObject(JsonObject);

        JSONManagement.AddJPropertyToJObject(JsonObject, 'PropertyId', IsNavCreatedPropertyIdTxt);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'Value', Format(IsNavCreated, 0, 2));

        exit(JSONManagement.WriteObjectToString());
    end;

    procedure GetNavIntegrationId(NavIntegrationIdString: Text) NavIntegrationId: Guid
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(NavIntegrationIdString);
        JSONManagement.GetJSONObject(JsonObject);
        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = NavIntegrationIdTxt then
                JSONManagement.GetGuidPropertyValueFromJObjectByName(JsonObject, 'Value', NavIntegrationId);

        exit(NavIntegrationId);
    end;

    procedure AddNavIntegrationId(IntegrationId: Guid): Text
    var
        JsonObject: DotNet JObject;
    begin
        JSONManagement.InitializeEmptyObject();
        JSONManagement.GetJSONObject(JsonObject);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'PropertyId', NavIntegrationIdTxt);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'Value', IntegrationId);

        exit(JSONManagement.WriteObjectToString());
    end;

    procedure HasIsContact(IsContactString: Text): Boolean
    begin
        exit(HasExtendedProperty(IsContactString, IsContactPropertyIdTxt));
    end;

    procedure GetIsContact(IsContactString: Text) IsContact: Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(IsContactString);
        JSONManagement.GetJSONObject(JsonObject);

        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = IsContactPropertyIdTxt then begin
                JSONManagement.GetBoolPropertyValueFromJObjectByName(JsonObject, 'Value', IsContact);
                exit(IsContact);
            end;

        exit(false);
    end;

    [TryFunction]
    procedure TryGetIsContactValue(IsContactString: Text; var Value: Text)
    begin
        GetExtendedPropertyBoolValue(IsContactString, IsContactPropertyIdTxt, Value);
    end;

    procedure AddIsContact(IsContact: Boolean): Text
    var
        JsonObject: DotNet JObject;
    begin
        JSONManagement.InitializeEmptyObject();
        JSONManagement.GetJSONObject(JsonObject);

        JSONManagement.AddJPropertyToJObject(JsonObject, 'PropertyId', IsContactPropertyIdTxt);
        JSONManagement.AddJPropertyToJObject(JsonObject, 'Value', Format(IsContact, 0, 2));

        exit(JSONManagement.WriteObjectToString());
    end;

    procedure HasIsLead(IsLeadString: Text): Boolean
    begin
        exit(HasExtendedProperty(IsLeadString, IsLeadPropertyIdTxt));
    end;

    procedure GetIsLead(IsLeadString: Text) IsLead: Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(IsLeadString);
        JSONManagement.GetJSONObject(JsonObject);

        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = IsLeadPropertyIdTxt then begin
                JSONManagement.GetBoolPropertyValueFromJObjectByName(JsonObject, 'Value', IsLead);
                exit(IsLead);
            end;

        exit(false);
    end;

    [TryFunction]
    procedure TryGetIsLeadValue(IsLeadString: Text; var Value: Text)
    begin
        GetExtendedPropertyBoolValue(IsLeadString, IsLeadPropertyIdTxt, Value);
    end;

    procedure HasIsPartner(IsPartnerString: Text): Boolean
    begin
        exit(HasExtendedProperty(IsPartnerString, IsPartnerPropertyIdTxt));
    end;

    procedure GetIsPartner(IsPartnerString: Text) IsPartner: Boolean
    var
        JsonObject: DotNet JObject;
        PropertyId: Text;
    begin
        JSONManagement.InitializeObject(IsPartnerString);
        JSONManagement.GetJSONObject(JsonObject);

        if JSONManagement.GetStringPropertyValueFromJObjectByName(JsonObject, 'PropertyId', PropertyId) then
            if PropertyId = IsPartnerPropertyIdTxt then begin
                JSONManagement.GetBoolPropertyValueFromJObjectByName(JsonObject, 'Value', IsPartner);
                exit(IsPartner);
            end;

        exit(false);
    end;

    [TryFunction]
    procedure TryGetIsPartnerValue(IsPartnerString: Text; var Value: Text)
    begin
        GetExtendedPropertyBoolValue(IsPartnerString, IsPartnerPropertyIdTxt, Value);
    end;

    procedure ConcatenateStreet(Address: Text; Address2: Text): Text
    var
        TypeHelper: Codeunit "Type Helper";
    begin
        if Address2 = '' then
            exit(Address);
        exit(Address + TypeHelper.CRLFSeparator() + Address2);
    end;

    procedure SplitStreet(Street: Text; var Address: Text[100]; var Address2: Text[50])
    var
        TypeHelper: Codeunit "Type Helper";
        NewLinePos: Integer;
    begin
        NewLinePos := StrPos(Street, TypeHelper.CRLFSeparator());
        if NewLinePos = 0 then begin
            Address := CopyStr(Street, 1, MaxStrLen(Address));
            exit;
        end;

        if NewLinePos > MaxStrLen(Address) then
            Address := CopyStr(Street, 1, MaxStrLen(Address))
        else
            Address := CopyStr(Street, 1, NewLinePos - 1);
        Address2 := CopyStr(Street, NewLinePos + 2);
    end;

    procedure FindCountryRegionCode(CountryOrRegion: Text): Code[10]
    var
        CountryRegion: Record "Country/Region";
        Regex: DotNet Regex;
        Match: DotNet Match;
        Matches: DotNet MatchCollection;
        Abbreviation: Text;
    begin
        if CountryOrRegion = '' then
            exit('');

        if StrLen(CountryOrRegion) <= MaxStrLen(CountryRegion.Code) then
            if CountryRegion.Get(CountryOrRegion) then
                exit(CountryRegion.Code);

        CountryRegion.SetRange(Name, CountryOrRegion);
        if CountryRegion.Count = 1 then begin
            CountryRegion.FindFirst();
            exit(CountryRegion.Code);
        end;

        if StrPos(CountryOrRegion, ' ') > 0 then begin
            Matches := Regex.Matches(CountryOrRegion, '\b([A-Z])');
            if Matches.Count > 0 then begin
                foreach Match in Matches do
                    Abbreviation += Match.Value();
                if CountryRegion.Get(Abbreviation) then
                    exit(CountryRegion.Code);
            end;
        end;

        CountryRegion.Init();
        CountryRegion.Code := CopyStr(CountryOrRegion, 1, MaxStrLen(CountryRegion.Code));
        CountryRegion.Name := CopyStr(CountryOrRegion, 1, MaxStrLen(CountryRegion.Name));
        CountryRegion.Insert(true);
        exit(CountryRegion.Code);
    end;

    procedure GetContactComments(Contact: Record Contact): Text
    var
        RlshpMgtCommentLine: Record "Rlshp. Mgt. Comment Line";
        TypeHelper: Codeunit "Type Helper";
        CommentString: Text;
    begin
        RlshpMgtCommentLine.SetRange("Table Name", RlshpMgtCommentLine."Table Name"::Contact);
        RlshpMgtCommentLine.SetRange("No.", Contact."No.");
        if RlshpMgtCommentLine.FindSet() then
            repeat
                if (CommentString <> '') or (RlshpMgtCommentLine.Comment = '') then
                    CommentString += TypeHelper.CRLFSeparator();
                CommentString += RlshpMgtCommentLine.Comment;
            until RlshpMgtCommentLine.Next() = 0;
        exit(CommentString);
    end;

    procedure SetContactComments(Contact: Record Contact; PersonalNotes: Text)
    var
        RlshpMgtCommentLine: Record "Rlshp. Mgt. Comment Line";
    begin
        RlshpMgtCommentLine.SetRange("Table Name", RlshpMgtCommentLine."Table Name"::Contact);
        RlshpMgtCommentLine.SetRange("No.", Contact."No.");
        if not RlshpMgtCommentLine.IsEmpty() then
            RlshpMgtCommentLine.DeleteAll();
        if PersonalNotes <> '' then begin
            RlshpMgtCommentLine."Table Name" := RlshpMgtCommentLine."Table Name"::Contact;
            RlshpMgtCommentLine."No." := Contact."No.";
            RlshpMgtCommentLine.Date := Today;
            InsertNextContactCommentLine(RlshpMgtCommentLine, PersonalNotes);
        end;
    end;

    local procedure InsertNextContactCommentLine(var RlshpMgtCommentLine: Record "Rlshp. Mgt. Comment Line"; RemainingPersonalNotes: Text)
    var
        TypeHelper: Codeunit "Type Helper";
        CrLfPos: Integer;
    begin
        CrLfPos := StrPos(RemainingPersonalNotes, TypeHelper.CRLFSeparator());

        if (CrLfPos <> 0) and (CrLfPos <= MaxStrLen(RlshpMgtCommentLine.Comment) + 1) then begin
            RlshpMgtCommentLine.Comment := CopyStr(RemainingPersonalNotes, 1, CrLfPos - 1);
            RemainingPersonalNotes := CopyStr(RemainingPersonalNotes, CrLfPos + 2);
        end else begin
            RlshpMgtCommentLine.Comment := CopyStr(RemainingPersonalNotes, 1, MaxStrLen(RlshpMgtCommentLine.Comment));
            RemainingPersonalNotes := CopyStr(RemainingPersonalNotes, MaxStrLen(RlshpMgtCommentLine.Comment) + 1);
        end;

        RlshpMgtCommentLine."Line No." += 10000;
        RlshpMgtCommentLine.Insert();
        RlshpMgtCommentLine.Date := 0D;
        if RemainingPersonalNotes <> '' then
            InsertNextContactCommentLine(RlshpMgtCommentLine, RemainingPersonalNotes);
    end;

    procedure InitializeCollection(JSONString: Text)
    begin
        JSONManagement.InitializeCollection(JSONString);
    end;

    procedure InitializeObject(JSONString: Text)
    begin
        JSONManagement.InitializeObject(JSONString);
    end;

    procedure IsBlankOrEmptyJsonObject(JSONString: Text): Boolean
    var
        JSONManagement2: Codeunit "JSON Management";
        EmptyJsonObjectString: Text;
    begin
        JSONManagement2.InitializeEmptyObject();
        EmptyJsonObjectString := JSONManagement2.WriteObjectToString();
        exit((JSONString = '') or (JSONString = EmptyJsonObjectString));
    end;

    procedure WriteCollectionToString(): Text
    begin
        exit(JSONManagement.WriteCollectionToString());
    end;

    procedure WriteObjectToString(): Text
    begin
        exit(JSONManagement.WriteObjectToString());
    end;
}