在Business Central的AL语言中,如何订阅采购申请审批通过事件?
解决方案:采购申请审批通过的事件监听与处理
核心表修正
你之前误用了Purchase Header表——这个表对应采购订单,而非采购申请。在Business Central中,采购申请的头表是Purchase Requisition Header,配套的行表是Purchase Requisition Line。
正确的事件订阅实现
可以订阅Purchase Requisition Header表的OnAfterModifyEvent,通过对比修改前后的状态,判断是否从In Review变为Approved,触发API调用逻辑:
codeunit 50142 "PurchaseReqApprovalListener" { [EventSubscriber(ObjectType::Table, Database::"Purchase Requisition Header", 'OnAfterModifyEvent', '', false, false)] local procedure OnAfterModifyPurchaseReqHeader(var Rec: Record "Purchase Requisition Header"; var xRec: Record "Purchase Requisition Header"; RunTrigger: Boolean) begin // 校验状态是否从审核中切换为已批准 if (xRec.Status = xRec.Status::"In Review") and (Rec.Status = Rec.Status::Approved) then begin // 调用API创建采购订单 CallPurchaseOrderCreationAPI(Rec); end; end; local procedure CallPurchaseOrderCreationAPI(PurchaseReqHeader: Record "Purchase Requisition Header") begin // 在此实现API调用逻辑,比如通过HttpClient发送请求 // 示例伪代码: // HttpClient.Post('https://your-api-endpoint.com/create-po', PurchaseReqHeader); end; }
额外提示
- 选用
OnAfterModifyEvent更稳妥,此时采购申请的状态已完成更新,避免状态变更未生效就触发API。 - 若需传递采购申请的明细数据,可在触发时加载
Purchase Requisition Line表的对应记录,一并传给API。 - 确保代码单元拥有访问采购申请表、执行网络请求的权限。
内容的提问来源于stack exchange,提问作者Liam White
相关产品推荐
相关产品推荐

