Codeunit 1411 Doc. Exch. Links, source in 29
Source29
src/Layers/W1/BaseApp/eServices/EDocument/DocExchLinks.Codeunit.al130 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.EServices.EDocument;
using Microsoft.Sales.History;
codeunit 1411 "Doc. Exch. Links"
{
Permissions = TableData "Sales Invoice Header" = rm,
TableData "Sales Cr.Memo Header" = rm;
trigger OnRun()
begin
end;
var
DocExchServiceMgt: Codeunit "Doc. Exch. Service Mgt.";
UnSupportedTableTypeErr: Label 'The %1 table is not supported.', Comment = '%1 is the table.';
procedure UpdateDocumentRecord(DocRecRef: RecordRef; DocIdentifier: Text; DocOrigIdentifier: Text)
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeUpdateDocumentRecord(DocRecRef, DocIdentifier, DocOrigIdentifier, IsHandled);
if IsHandled then
exit;
DocRecRef.Find();
case DocRecRef.Number of
DATABASE::"Sales Invoice Header":
SetInvoiceDocSent(DocRecRef, DocIdentifier, DocOrigIdentifier);
DATABASE::"Sales Cr.Memo Header":
SetCrMemoDocSent(DocRecRef, DocIdentifier, DocOrigIdentifier);
else
Error(UnSupportedTableTypeErr, DocRecRef.Number);
end;
end;
[Scope('OnPrem')]
procedure CheckAndUpdateDocExchCrMemoStatus(SalesCrMemoHeader: Record "Sales Cr.Memo Header")
var
NewStatus: Enum "Sales Document Exchange Status";
begin
NewStatus := MapDocExchStatusToSalesCMStatus(
DocExchServiceMgt.GetDocumentStatus(SalesCrMemoHeader.RecordId, SalesCrMemoHeader."Document Exchange Identifier", SalesCrMemoHeader."Doc. Exch. Original Identifier"));
if NewStatus <> SalesCrMemoHeader."Document Exchange Status"::"Sent to Document Exchange Service" then begin
SalesCrMemoHeader.Validate(SalesCrMemoHeader."Document Exchange Status", NewStatus);
SalesCrMemoHeader.Modify(true);
end;
end;
[Scope('OnPrem')]
procedure CheckAndUpdateDocExchInvoiceStatus(SalesInvoiceHeader: Record "Sales Invoice Header")
var
NewStatus: Enum "Sales Document Exchange Status";
begin
NewStatus := MapDocExchStatusToSalesInvStatus(
DocExchServiceMgt.GetDocumentStatus(SalesInvoiceHeader.RecordId, SalesInvoiceHeader."Document Exchange Identifier", SalesInvoiceHeader."Doc. Exch. Original Identifier"));
if NewStatus <> SalesInvoiceHeader."Document Exchange Status"::"Sent to Document Exchange Service" then begin
SalesInvoiceHeader.Validate(SalesInvoiceHeader."Document Exchange Status", NewStatus);
SalesInvoiceHeader.Modify(true);
end;
end;
local procedure SetInvoiceDocSent(DocRecRef: RecordRef; DocIdentifier: Text; DocOriginalIdentifier: Text)
var
SalesInvoiceHeader: Record "Sales Invoice Header";
begin
DocRecRef.SetTable(SalesInvoiceHeader);
SalesInvoiceHeader.Validate("Document Exchange Identifier",
CopyStr(DocIdentifier, 1, MaxStrLen(SalesInvoiceHeader."Document Exchange Identifier")));
SalesInvoiceHeader.Validate("Doc. Exch. Original Identifier",
CopyStr(DocOriginalIdentifier, 1, MaxStrLen(SalesInvoiceHeader."Doc. Exch. Original Identifier")));
SalesInvoiceHeader.Validate("Document Exchange Status", SalesInvoiceHeader."Document Exchange Status"::"Sent to Document Exchange Service");
SalesInvoiceHeader.Modify(true);
end;
local procedure SetCrMemoDocSent(DocRecRef: RecordRef; DocIdentifier: Text; DocOriginalIdentifier: Text)
var
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
begin
DocRecRef.SetTable(SalesCrMemoHeader);
SalesCrMemoHeader.Validate("Document Exchange Identifier",
CopyStr(DocIdentifier, 1, MaxStrLen(SalesCrMemoHeader."Document Exchange Identifier")));
SalesCrMemoHeader.Validate("Doc. Exch. Original Identifier",
CopyStr(DocOriginalIdentifier, 1, MaxStrLen(SalesCrMemoHeader."Doc. Exch. Original Identifier")));
SalesCrMemoHeader.Validate("Document Exchange Status", SalesCrMemoHeader."Document Exchange Status"::"Sent to Document Exchange Service");
SalesCrMemoHeader.Modify(true);
end;
local procedure MapDocExchStatusToSalesInvStatus(DocExchStatus: Text): Enum "Sales Document Exchange Status"
begin
case UpperCase(DocExchStatus) of
'FAILED':
exit("Sales Document Exchange Status"::"Delivery Failed");
'SENT':
exit("Sales Document Exchange Status"::"Delivered to Recipient");
'PENDING_CONNECTION':
exit("Sales Document Exchange Status"::"Pending Connection to Recipient");
else
exit("Sales Document Exchange Status"::"Sent to Document Exchange Service");
end;
end;
local procedure MapDocExchStatusToSalesCMStatus(DocExchStatus: Text): Enum "Sales Document Exchange Status"
begin
case UpperCase(DocExchStatus) of
'FAILED':
exit("Sales Document Exchange Status"::"Delivery Failed");
'SENT':
exit("Sales Document Exchange Status"::"Delivered to Recipient");
'PENDING_CONNECTION':
exit("Sales Document Exchange Status"::"Pending Connection to Recipient");
else
exit("Sales Document Exchange Status"::"Sent to Document Exchange Service");
end;
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateDocumentRecord(DocRecRef: RecordRef; DocIdentifier: Text; DocOrigIdentifier: Text; var IsHandled: Boolean)
begin
end;
}