API Customization
WebConnector API customizations in Business Central are possible through extensions to this app. Through appropriate events, new services can be integrated into the existing WebConnector solution. In addition, certain events also enable the enrichment or manipulation of data.
Add new services
To add new services to the WebConnector, events must be subscribed to. Then in the WebConnector Setup click on WebConnector Services and then Find Services.
Add codeunit services
Add an event subscriber to the codeunit.
[EventSubscriber(ObjectType::Table, Database::"WebConnector ServicesTWC", 'OnDiscoverWebConnectorServices', '', true, true)]
local procedure InsertWebConnectorService(sender: Record "WebConnector ServicesTWC")
var
WebConnectorServiceType: enum WebConnectorServiceTypeTWC;
begin
sender.SetupWebConnectorService(WebConnectorServiceType::Codeunit, Codeunit::"<Ihre Codeunit>", '<Ihr Servicename>');
end;
Example codeunit service
A codeunit as web service can be created standalone or in combination with an XML port. For this the XML port is passed as VAR parameter in the codeunit. This allows the complex structure to be used as a parameter directly with a SOAP client. The following example shows a simple implementation of the service Outbound Contact, which can be used to export contact master data for a customer number.
Codeunit Outobund Contact
codeunit 5371212 "Outbound ContactTWC"
{
[Scope('Cloud')]
procedure GetContactsFromCustomer(var OutboundContact: XMLport "Outbound ContactTWC"; CustomerNo: Code[20])
var
ContactBusinessRelation: Record "Contact Business Relation";
Contact: Record Contact;
begin
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer);
ContactBusinessRelation.SetRange("No.", CustomerNo);
ContactBusinessRelation.FindFirst();
Contact.SetRange("Company No.", ContactBusinessRelation."Contact No.");
OutboundContact.SetTableView(Contact);
end;
[EventSubscriber(ObjectType::Table, Database::"WebConnector ServicesTWC", 'OnDiscoverWebConnectorServices', '', true, true)]
local procedure InsertWebConnectorService(sender: Record "WebConnector ServicesTWC")
var
WebConnectorServiceType: enum WebConnectorServiceTypeTWC;
begin
sender.SetupWebConnectorService(WebConnectorServiceType::Codeunit, Codeunit::"Outbound ContactTWC", 'OutboundContact');
end;
}
XML Port Outbound Contact
xmlport 5371211 "Outbound ContactTWC"
{
Direction = Export;
Encoding = UTF8;
FormatEvaluate = Xml;
UseDefaultNamespace = true;
schema
{
textelement(Contacts)
{
MaxOccurs = Once;
tableelement(Contact;Contact)
{
XmlName = 'Contact';
fieldelement(No;Contact."No.")
{
}
fieldelement(Name;Contact.Name)
{
}
fieldelement(Type;Contact.Type)
{
}
fieldelement(CompanyNo;Contact."Company No.")
{
}
}
}
}
}
Important: The properties FormatEvaluate = Xml and UseDefaultNamespace = true of the XML port must be set in all cases.
Add page services
To add page services create a code unit, e.g. "WebConnector Cust. Page Subscriber", and bind to the event there to add new services.
[EventSubscriber(ObjectType::Table, Database::"WebConnector ServicesTWC", 'OnDiscoverWebConnectorServices', '', true, true)]
local procedure WebConnectorServicesOnDiscoverWebConnectorServices(sender: Record "WebConnector ServicesTWC")
var
WebConnectorServiceType: enum WebConnectorServiceTypeTWC;
begin
sender.SetupWebConnectorService(WebConnectorServiceType::Page, Page::"<your Page>", '<your Service name>');
// additional pages can be entered here.
end;
Examples for Pages
Pages can be easily created and registered as a WebConnector service with the event corresponding event. The following is a simple example for item variants:
page 5371208 "Item VariantTWC"
{
Caption = 'Item Variant';
UsageCategory = None;
DeleteAllowed = false;
PageType = Document;
SourceTable = "Item Variant";
layout
{
area(content)
{
group(Allgemein)
{
field("Code"; Code)
{
ApplicationArea = all;
ToolTip = 'Specifies Code';
}
field("Item No."; "Item No.")
{
ApplicationArea = all;
ToolTip = 'Specifies Item No.';
}
field(Description; Description)
{
ApplicationArea = all;
ToolTip = 'Specifies Description';
}
field("Description 2"; "Description 2")
{
ApplicationArea = all;
ToolTip = 'Specifies Description 2';
}
}
}
}
}
Available events
Inb. Doc. Check Doc. Dup.TWC
CheckSalesHeaderDuplicateOnAfterFilterCreateInboundSalesDocLogEntrySalesHeaderExtNo
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR SalesHeader: Record "Sales Header"
CheckSalesHeaderDuplicateOnAfterFilterInboundSalesDocLogEntrySalesShipHeaderExtNo
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR SalesHeader: Record "Sales Shipment Header"
CheckSalesHeaderDuplicateOnAfterFilterCreateInboundSalesDocLogEntrySalesHeaderYourRef
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR SalesHeader: Record "Sales Header"
CheckSalesHeaderDuplicateOnAfterFilterInboundSalesDocLogEntrySalesShipHeaderYourRef
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR SalesHeader: Record "Sales Shipment Header"
CheckSalesHeaderDuplicateOnAfterFilterCreateInboundSalesDocLogEntrySalesHeaderCreatedDocNo
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR SalesHeader: Record "Sales Header"
CheckInboundSalesHeaderDuplicateOnAfterFilterInboundSalesHeaderFilterCreatedExtNo
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
CheckInboundSalesHeaderDuplicateOnAfterFilterInboundSalesHeaderFilterCreatedDocNo
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
InbDocCreateDocument.Codeunit
CreateSalesHeaderOnBeforeInsertSalesHeader
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR SalesHeader: Record "Sales Header"
CreateSalesHeaderOnBeforeModifySalesHeader
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR SalesHeader: Record "Sales Header"
CreateSalesLineOnBeforeInsertSalesLine
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
SalesHeader: Record "Sales Header";
InboundSalesLine: Record "Inbound Sales LineTWC";
VAR SalesLine: Record "Sales Line"
CreateSalesLineOnBeforeModifySalesLine
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
SalesHeader: Record "Sales Header";
InboundSalesLine: Record "Inbound Sales LineTWC";
VAR SalesLine: Record "Sales Line"
CreateSalesDocumentOnAfterDocumentIsInserted
Parameter:
Var InboundSalesHeader: Record "Inbound Sales HeaderTWC";
Var SalesHeader: Record "Sales Header"
OnValidateCustomerBankAccountFieldFromInboundSalesHeader
Parameter:
var CustomerBankAcc: Record "Customer Bank Account";
InboundSalesHeader: Record "Inbound Sales HeaderTWC"
CreateSalesHeaderOnBeforeTestfieldSellToContactNo
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC"
var SalesHeader: Record "Sales Header"
var IsHandled: Boolean
CreateSalesHeaderOnBeforeValidateSellToContactNo
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC"
var SalesHeader: Record "Sales Header"
var IsHandled: Boolean
CreateSalesHeaderOnBeforeUpdateSalesHeader
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC"
var SalesHeader: Record "Sales Header"
CreateSalesLineOnAfterModifySalesLine
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC"
SalesHeader: Record "Sales Header"
InboundSalesLine: Record "Inbound Sales LineTWC"
var SalesLine: Record "Sales Line"
InbDocCreateContact.Codeunit
CreateBillToContactOnBeforeInsertContact
Parameter
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR Contact: Record Contact
CreateBillToContactOnBeforeModifyContact
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR Contact: Record Contact
CreateSellToContactOnBeforeInsertContact
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
VAR Contact: Record Contact
CreateSellToContactOnBeforeModifyContact
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC"
VAR Contact: Record Contact
CreateSellToContactOnAfterCreateCustomer
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
Contact: Record Contact
CreateBillToContactOnAfterCreateCustomer
Parameter:
InboundSalesHeader: Record "Inbound Sales HeaderTWC";
Contact: Record Contact
SalesManagement.Codeunit
AddToTempSalesHeaderOnBeforeInsertTempSalesHeader
Parameter:
FromTempSalesHeader: Record "Sales Header" temporary;
VAR TempSalesHeader: record "Sales Header" temporary
AddToTempSalesHeaderOnBeforeModifyTempSalesHeader
Parameter:
FromTempSalesHeader: Record "Sales Header" temporary
VAR TempSalesHeader: record "Sales Header" temporary
AddToTempSalesLineOnBeforeInsertTempSalesLine
Parameter:
FromTempSalesHeader: Record "Sales Header" temporary;
FromTempSalesLine: Record "Sales Line" temporary;
var TempSalesLine: Record "Sales Line"
AddToTempSalesLineOnBeforeModifyTempSalesLine
Parameter:
FromTempSalesHeader: Record "Sales Header" temporary;
FromTempSalesLine: Record "Sales Line" temporary;
var TempSalesLine: Record "Sales Line"
CreateContactFromShopOnBeforeInsertContact
Parameter:
SalesHeader: Record "Sales Header";
var Contact: Record Contact
CreateContactFromShopOnBeforeModifyContact
Parameter:
SalesHeader: Record "Sales Header";
var Contact: Record Contact
CreateShippingAddressOnBeforeInsertShipToAddress
Parameter:
SalesHeader: Record "Sales Header";
var ShipToAddress: Record "Ship-to Address"
CreateShippingAddressOnBeforeModifyShipToAddress
Parameter:
SalesHeader: Record "Sales Header";
var ShipToAddress: Record "Ship-to Address"
InbDocCheckMgt.codeunit
ProcessingAllowedOnBeforeFindCheckInbDocCode
Parameter:
var CheckInbDocCode: Record "Inb. Doc. Test Step DetailsTWC"
local procedure OnAfterProcessTestPlan
Parameter:
InbSalesHeader: Record "Inbound Sales HeaderTWC"
InbDocCode: Record "Inb. Doc. Test Step DetailsTWC"
local procedure OnBeforeCreateTestplan
Parameter:
var TestPlan: Record "Inb. Sales Doc. Test PlanTWC"
InbSalesHeader: Record "Inbound Sales HeaderTWC"
Inb. Doc. Check PositionsTWC.codeunit
OnAfterCheckPositions
Parameter:
InboundSalesLine: Record "Inbound Sales LineTWC";
var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary;
ItemErrorStateList: List of [Text]
OnBeforeModifyUpdateInboundDocumentCode
Parameter:
var InboundDocumentCode: Record "Inb. Doc. Test Step DetailsTWC";
var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary;
ItemErrorStateList: List of [Text]
Inb. Doc. Identify ContactTWC.codeunit
FindContactOnBeforeContactFindlast
Parameter:
var Contact: Record Contact;
InboundSalesHeader: Record "Inbound Sales HeaderTWC"