Codeunit 5371 CRM Synch. Job Management, source in 29

Source29

src/Layers/W1/BaseApp/Integration/D365Sales/CRMSynchJobManagement.Codeunit.al70 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.Dataverse;

using Microsoft.Integration.SyncEngine;
using System.Threading;

codeunit 5371 "CRM Synch. Job Management"
{

    trigger OnRun()
    begin
    end;

    procedure SetInitialState(var CRMSynchJobStatusCue: Record "CRM Synch. Job Status Cue")
    begin
        CRMSynchJobStatusCue.Reset();
        if not CRMSynchJobStatusCue.FindFirst() then begin
            CRMSynchJobStatusCue.Init();
            CRMSynchJobStatusCue.Code := GetDefaultPkValue();
            CRMSynchJobStatusCue.Insert();
        end;
        SetFilters(CRMSynchJobStatusCue);
    end;

    procedure OnReset(var CRMSynchJobStatusCue: Record "CRM Synch. Job Status Cue")
    begin
        CRMSynchJobStatusCue.Reset();
        CRMSynchJobStatusCue.FindFirst();
        CRMSynchJobStatusCue."Reset Date" := GetLastFailedDate(GetDefaultJobRunner());
        CRMSynchJobStatusCue.Modify();
        SetFilters(CRMSynchJobStatusCue);
    end;

    local procedure FindLastJobQueue(var JobQueueEntry: Record "Job Queue Entry"; JobToRun: Integer): Boolean
    begin
        JobQueueEntry.SetRange(Status, JobQueueEntry.Status::Error);
        JobQueueEntry.SetRange("Object ID to Run", JobToRun);
        exit(JobQueueEntry.FindLast());
    end;

    local procedure GetLastFailedDate(JobToRun: Integer): DateTime
    var
        JobQueueEntry: Record "Job Queue Entry";
    begin
        if FindLastJobQueue(JobQueueEntry, JobToRun) then
            exit(JobQueueEntry."Last Ready State");
        exit(CreateDateTime(Today, Time));
    end;

    local procedure GetDefaultPkValue(): Code[10]
    begin
        exit('0');
    end;

    local procedure SetFilters(var CRMSynchJobStatusCue: Record "CRM Synch. Job Status Cue")
    begin
        CRMSynchJobStatusCue.SetRange("Object ID to Run", GetDefaultJobRunner());
        CRMSynchJobStatusCue.SetFilter("Date Filter", '>%1', CRMSynchJobStatusCue."Reset Date");
    end;

    procedure GetDefaultJobRunner(): Integer
    begin
        exit(CODEUNIT::"Integration Synch. Job Runner");
    end;
}