Bestway USA — Business Central Extensions
This repository contains the custom AL extensions and supporting projects for Bestway USA's Microsoft Dynamics 365 Business Central environment. Each top-level folder is an independent extension (or related project) that customizes BC for service management, eCommerce integration, warehouse operations, phone/email integrations, API exposure, and reporting.
Extensions
Core
| Folder | Extension Name | Publisher | ID Range | Purpose |
|---|---|---|---|---|
BestwayUSA/ | BestwayUSA | Innovia Consulting | 50100–50149 | Core customizations — 190+ objects covering service management, sales, warehouse, eCommerce, and reporting. Defines all INVC-prefixed custom fields and tables. |
BW_DataAPIReport/ | BW_DataAPIReport | Bestway USA HG | 50000–59999 | Legacy data API and reporting. Has 20+ third-party dependencies (Dynamic Ship, Versapay, Continia, eCommerce, etc.). |
Service & CRM
| Folder | Extension Name | Publisher | ID Range | Purpose |
|---|---|---|---|---|
bc-csm-api/ | CSM API Toolkit | Bestway USA | 56100–56149 | Read-only OData v4 API for Service Orders, Lines, and Attachments (CSM integration). |
bc-csm-api-test/ | CSM API Tests | Bestway USA | 56110–56119 | Automated test codeunits for the CSM API (unit + functional tests). |
Service Order Lockout/ | Service Order Lockout | Sataware Technologies | 52400+ | Service order status management with lockout controls. |
Customer Comments Update/ | Customer Comments Update | Sataware Technologies | 52000+ | Customer record comment update functionality. |
Phone & Email Integration
| Folder | Extension Name | Publisher | ID Range | Purpose |
|---|---|---|---|---|
Cambay Solutions_BC Dialing Application/ | BC Dialing Application | Cambay Solutions | 60000–99999 | Nextiva phone/email integration — receives dialer events via API, syncs call summaries, recordings, and transcripts to Customer records via Azure Blob Storage. |
BCDialingAzure/ | (Azure Function) | — | — | C# Azure Function supporting the BC Dialing Application (not a BC extension). |
E164 Phone Format/ | E164 Phone Format | Bestway USA | 57100–57149 | E.164 phone number formatting for Customer records with bulk migration, preview, and rollback tooling. |
Warehouse & Shipping
| Folder | Extension Name | Publisher | ID Range | Purpose |
|---|---|---|---|---|
CostcoCarrierLabelBESTWAY/ | CostcoCarrierLabelBESTWAY | BestwayUSAHG | 50100–69999 | Costco-specific carrier label report (Dynamic Ship integration). |
DSGWarehouseCarrierLabel/ | DSGWarehouseCarrierLabel | BestwayUSAHG | 59100–59149 | DSG warehouse carrier label report (Dynamic Ship integration). |
WalmartWarehouseCarrierLabel_BestwayUSAHG_1.0.0.2/ | WalmartWarehouseCarrierLabel | BestwayUSAHG | 59100–59149 | Walmart warehouse carrier label report (Dynamic Ship integration). |
Reporting & Utilities
| Folder | Extension Name | Publisher | ID Range | Purpose |
|---|---|---|---|---|
Quarterly Commissions Report/ | Sales Rep Commission Report | Sataware Technologies | 55100–55149 | Sales rep quarterly commission reports (depends on Dynamics eShop). |
PO Email Notification/ | PO - Email Notification | Sataware Technologies | 80100–80149 | Sends notification emails when Purchase Orders are released, Warehouse Receipts are created, and Warehouse Receipts are posted. |
Remove Data Filter For Sent Emails/ | Remove Data Filter For Sent Emails | Sataware Technologies | 54000+ | Removes the default date filter on the Sent Emails list page. |
BesywayInc/ | BesywayInc | BesywayInc | 50900–50901 | Single-page extension (Change Tracking Base dependency). |
Dependency Chain
BestwayUSA (Innovia Consulting, v27.0.0.0)
├── bc-csm-api (CSM API Toolkit)
│ └── bc-csm-api-test (CSM API Tests + Microsoft Library Assert)
└── BW_DataAPIReport (+ Dynamic Ship, Versapay, Continia, eCommerce, etc.)
Carrier Label Extensions (Costco, DSG, Walmart)
└── Dynamic Ship + IWorks Common (Insight Works)
Quarterly Commissions Report
└── eCommerce for Dynamics 365 Business Central (Dynamics eShop)
Standalone (no extension dependencies):
├── E164 Phone Format
├── BC Dialing Application (Cambay Solutions)
├── PO Email Notification
├── Service Order Lockout
├── Customer Comments Update
└── Remove Data Filter For Sent Emails
Development Setup
Prerequisites
- VS Code with the AL Language extension
- Access to a Business Central sandbox environment (v27.0+ for newer extensions, v25.0+ for legacy)
- For
BCDialingAzure/: .NET SDK and Azure Functions tooling
Getting Started
- Open the extension folder you want to work on in VS Code
- Create a
.vscode/launch.jsonwith your sandbox tenant, environment, and authentication details (this file is gitignored) - Run AL: Download Symbols (
Cmd+Shift+P) to pull base application and dependency symbols into.alpackages/ - Press F5 (or AL: Publish) to build and deploy to the sandbox
Object ID Ranges
Each extension has a reserved ID range defined in its app.json. Never reuse IDs across extensions. Check the idRanges in the extension's app.json and its README (if present) for the next available ID.
Naming Conventions
- INVC prefix: Used on all BestwayUSA custom objects and fields (originally from Innovia Consulting)
- File naming:
{Prefix}{ObjectName}.{ObjectType}.al(e.g.,INVCSerialNo.Table.al,INVCCustomerCard.PageExt.al) - Folder structure: Objects organized by type —
Codeunit/,Table/,TableExt/,Page/,PageExt/,Enum/,EnumExt/,Report/,ReportExt/ - Newer extensions (CSM API, E164) use
namespacedeclarations (e.g.,namespace BestwayUSA.bccsmapi;)
Testing
Automated tests exist for the CSM API extension (bc-csm-api-test/). Tests use BC's auto-rollback transaction model — test data is cleaned up automatically.
To run:
- Publish
bc-csm-apito the sandbox - Open
bc-csm-api-test/in VS Code, download symbols, then publish - In the sandbox, navigate to the Test Tool page (130401)
- Add test codeunits 56111–56114 and run
Telemetry
Extension-level telemetry is configured for the following extensions via applicationInsightsConnectionString in their app.json. Telemetry flows to the Bestway USA Azure Application Insights resource alongside environment-level telemetry.
| Extension | Telemetry Configured |
|---|---|
| BC Dialing Application | Yes |
| E164 Phone Format | Yes |
| Customer Comments Update | Yes |
| PO Email Notification | Yes |
| Service Order Lockout | Yes |
Query extension telemetry in Log Analytics:
traces
| where customDimensions.extensionName == "BC Dialing Application"
| order by timestamp desc
Or across all instrumented extensions:
traces
| where customDimensions.extensionPublisher in ("Cambay Solutions", "Bestway USA", "Sataware Technologies")
| summarize count() by tostring(customDimensions.extensionName), bin(timestamp, 1h)
Deployment
To Sandbox
Press F5 in VS Code with the extension open — this builds and deploys in one step.
To Production
- Update the
versioninapp.json - Run AL: Package to build the
.appfile - Deploy via the Extension Management page in BC or the Business Central Admin Center
Change Tracking
Change documents for significant modifications are stored alongside the affected extension. See:
Cambay Solutions_BC Dialing Application/CHANGE-001_Customer-Record-Lock-Fix.md