[EventSubscriber(ObjectType::Report, Report::"Move IC Trans. to Partner Comp", 'OnICInboxTransactionCreated', '', false, false)]
local procedure AcceptOnAfterInsertICInboxTransaction(var Sender: Report "Move IC Trans. to Partner Comp"; var ICInboxTransaction: Record "IC Inbox Transaction"; PartnerCompanyName: Text)
var
ICPartner: Record "IC Partner";
TempRegisteredPartner: Record "IC Partner" temporary;
FeatureTelemetry: Codeunit "Feature Telemetry";
ICMapping: Codeunit "IC Mapping";
ICDataExchange: Interface "IC Data Exchange";
begin
ICPartner.SetRange("Inbox Details", PartnerCompanyName);
if not ICPartner.FindFirst() then
exit;
ICDataExchange := ICPartner."Data Exchange Type";
ICDataExchange.GetICPartnerFromICPartner(ICPartner, TempRegisteredPartner);
FeatureTelemetry.LogUptake('0000IIX', ICMapping.GetFeatureTelemetryName(), Enum::"Feature Uptake Status"::Used);
FeatureTelemetry.LogUsage('0000IIY', ICMapping.GetFeatureTelemetryName(), 'IC Inbox Transaction Created');
if TempRegisteredPartner."Auto. Accept Transactions" then
if not IsICInboxTransactionReturnedByPartner(ICInboxTransaction."Transaction Source") then
ICDataExchange.EnqueueAutoAcceptedICInboxTransaction(ICPartner, ICInboxTransaction);
end;
If you try "Go To Definition" for "EnqueueAutoAcceptedICInboxTransaction", then you will end up landing on an Interface where you will not be able to see any Code.
So better go to Codeunit 532 and search for "EnqueueAutoAcceptedICInboxTransaction" and copy paste it in your custom code.
procedure EnqueueAutoAcceptedICInboxTransaction(ICPartner: Record "IC Partner"; ICInboxTransaction: Record "IC Inbox Transaction")
var
JobQueueEntry: Record "Job Queue Entry";
begin
if not JobQueueEntry.ChangeCompany(ICPartner."Inbox Details") then
Error(FailedToChangeCompanyErr, JobQueueEntry.TableCaption, ICPartner.Name);
if not JobQueueEntry.ReadPermission() then
Error(MissingPermissionToReadTableErr, JobQueueEntry.TableCaption, ICPartner.Name);
JobQueueEntry."Object Type to Run" := JobQueueEntry."Object Type to Run"::Codeunit;
JobQueueEntry."Object ID to Run" := Codeunit::"IC Inbox Outbox Subs. Runner";
JobQueueEntry."Maximum No. of Attempts to Run" := 3;
JobQueueEntry."Recurring Job" := false;
JobQueueEntry."Record ID to Process" := ICInboxTransaction.RecordId;
JobQueueEntry."Job Queue Category Code" := JobQueueCategoryCodeTxt;
JobQueueEntry."Run in User Session" := false;
JobQueueEntry.Status := JobQueueEntry.Status::Ready;
JobQueueEntry.Description := StrSubstNo(AutoAcceptTransactionTxt, ICInboxTransaction."Transaction No.", ICInboxTransaction."IC Partner Code", ICInboxTransaction."Document No.");
JobQueueEntry.Insert(true);
CODEUNIT.Run(CODEUNIT::"Job Queue - Enqueue", JobQueueEntry);
end;
Bringing It Together-
Finally, we can combine both steps into a single reusable procedure and call it whenever posting IC journal lines:
procedure AutoSendAndAutoAcceptTransaction(var GenJnlPostLine: Codeunit "Gen. Jnl.-Post Line"; var GenJournalLines: Record "Gen. Journal Line"; ICPartnerCode: Code[20])
var
ICInboxOutboxMgt: Codeunit ICInboxOutboxMgt;
ICTransactionNo: Integer;
ICSetup: Record "IC Setup";
ICPartner: Record "IC Partner";
ICInboxTransaction: Record "IC Inbox Transaction";
begin
GenJnlPostLine.RunWithCheck(GenJournalLines);
ICTransactionNo := ICInboxOutboxMgt.CreateOutboxJnlTransaction(GenJournalLines, false);
ICInboxOutboxMgt.CreateOutboxJnlLine(ICTransactionNo, 1, GenJournalLines);
ModifyAndRunOutboxTransactionNo(ICTransactionNo);
ICSetup.Get();
if ICPartner.Get(ICPartnerCode) then begin
ICInboxTransaction.ChangeCompany(ICPartner."Inbox Details");
if ICInboxTransaction.Get(ICTransactionNo, ICSetup."IC Inbox Details", ICInboxTransaction."Transaction Source"::"Created by Partner", ICInboxTransaction."Document Type"::" ") then
EnqueueAutoAcceptedICInboxTransaction(ICPartner, ICInboxTransaction);
end;
end;
Now, when you post your Custom IC Journal Lines — either together with invoices or through custom actions — they will be automatically sent and accepted without requiring the standard Auto-Send or Auto-Accept settings.
If you notice that your custom Enqueue function is being triggered but Auto-Accept still doesn’t complete, check the Job Queue Log Entries for any errors that may have occurred during processing.
Occasionally, you might encounter an error similar to the one shown below.
The IC Inbox Transaction does not exist. Identification fields and values: Transaction No.='257',IC Partner Code='Random',Transaction Source='Created by Partner',Document Type=' '
This can be safely ignored — it happens when the standard Auto-Accept logic runs after your custom code has already accepted the transaction, resulting in a duplicate attempt.