How to Create API with Header and line data & Auto-Posting APIs in Business Central
1. Creating a Custom API Page
-
Define
PageType = API -
Required API properties (
APIPublisher,APIGroup,APIVersion,EntityName, etc.) -
Create Purchase Order header API
-
Add subpage for lines
API: https://api.businesscentral.dynamics.com/v2.0/<EnvironmentName>/api/<APIPublisher>/<APIgroup>/v2.0/companies(<CompanyId>)/purchaseorderapis?$filter=no eq 'PR-ORD-0017869'&$expand=purchaseorderlineapis
Method: GET
Response: Get header and line response.
3. Creating an API to Post Purchase Orders
-
Business scenario: Convert PO → Posted Purchase Invoice
-
Create global function with [serviceEnabled].
API:
https://api.businesscentral.dynamics.com/v2.0/<EnvironmentName>/api/<APIPublisher>/<APIgroup>/v2.0/companies(<CompanyId>)/purchaseorderapis(<systemidfrompurchaseheader>)/Microsoft.NAV.Createpurchaseinvoice
Method: post
[ServiceEnabled]
[Scope('Cloud')]
procedure Createpurchaseinvoice(): Text
var
PostedInvNo: Code[20];
begin
PostedInvNo := CreateInvoiceFromPO(Rec."No.");
exit('Posted Doc No. ' + PostedInvNo);
end;
procedure CreateInvoiceFromPO(PONo: Code[20]): Code[20]
var
PurchHeader: Record "Purchase Header";
PurchPost: Codeunit "Purch.-Post";
PostedInv: Record "Purch. Inv. Header";
begin
if not PurchHeader.Get(PurchHeader."Document Type"::Order, PONo) then
Error('Purchase Order %1 not found.', PONo);
UpdateQtyToInvoice(PurchHeader);
PurchHeader.Invoice := true;
PurchHeader.Modify();
PurchPost.Run(PurchHeader);
PostedInv.Reset();
PostedInv.SetRange("Order No.", PONo);
if PostedInv.FindLast() then
exit(PostedInv."No.")
else
Error('No posted invoice created for %1', PONo);
end;
This way you can easily post order.
Thank you
Dharmendra Chavda
Comments
Post a Comment