Exporting customer credit limit and open balance is a common requirement for organizations integrating Dynamics 365 Finance & Operations (D365FO) with third-party systems. This guide shows how to automate the export process using a custom data entity and recurring integration jobs.
Business Scenario
Many businesses need to share customer credit and balance information with external apps for credit checks, reporting, or integration with CRM and finance platforms. Manual exports are error-prone and inefficient. Automating this process ensures data accuracy and timely updates.
Solution Overview
A custom data entity is created in D365FO to expose key fields:
- Customer account
- Credit limit
- Open balance
- Currency code
- Credit rating
- On-hold status
This entity is used in a recurring data job, enabling incremental exports based on change tracking.
Data Entity Structure: Fox_CustomerCreditBalanceEntity
The entity is defined with mapped and unmapped fields:
Mapped Fields:
- CustomerAccount (CustTable.AccountNum)
- OnHoldStatus (CustTable.Blocked)
- CreditLimit (CustTable.CreditMax)
- CreditRating (CustTable.CreditRating)
- CreditLimitIsMandatory (CustTable.MandatoryCreditLimit)
- Party (CustTable.Party)
- NameAlias (DirPartyTable_FK.Name)
Unmapped/Computed Fields:
- CurrencyCode (computed in postLoad)
- CustOpenBalance (computed in postLoad)
Key Methods
postLoad()
Populates virtual fields after loading:
x++public void postLoad() { CustTable custTable = CustTable::find(this.CustomerAccount); this.CurrencyCode = infolog.isoCurrencyCode() ? infolog.isoCurrencyCode() : Ledger::accountingCurrency(CompanyInfo::find().RecId); this.CustOpenBalance = custTable.balanceMST(); super(); }
defaultCTQuery()
Defines change tracking query for incremental export:
x++public static Query defaultCTQuery() { Query q = new Query(); QueryBuildDataSource custTableQBDS = q.addDataSource(tableNum(CustTable)); QueryBuildDataSource qbdCustTrans = custTableQBDS.addDataSource(tableNum(CustTrans)); qbdCustTrans.addLink(fieldNum(CustTable, AccountNum), fieldNum(CustTrans, AccountNum)); qbdCustTrans.addRange(fieldNum(CustTrans,TransDate)).value(SysQuery::range(dateNull(),dateMax())); QueryBuildDataSource qbdDirParty = DirPartyBaseEntity::addChangeTrackingDataSourcesForPartyBase(custTableQBDS, fieldNum(CustTable, Party)); return q; }
Relations
- Links to
CustTablefor customer data - Links to
DirPartyTable_FKfor party name - Staging table relation:
Fox_CustomerCreditBalanceStaging(via CustomerAccount)
Step-by-Step Implementation
1. Create the Data Entity
- Define fields and methods as above
- Map fields to source tables
- Implement
postLoadfor computed values
2. Configure Recurring Data Job
- Set up recurring integration job in D365FO Data Management
- Enable incremental push using change tracking
- Set "Prevent zero uploads" to Yes
- Schedule as needed
3. Export and Integrate
- Exported files contain customer credit and balance data
- Integrate with third-party apps via API, file transfer, or middleware
- Monitor job status and troubleshoot errors in Data Management workspace
Practical Tips
- Use change tracking to minimize unnecessary exports
- Secure sensitive data with proper permissions and encryption
- Test integration with sample data before production rollout
- Refer to official Microsoft docs for recurring integration setup: Preventing uploads when there are no records
Business Value
Automating customer credit and balance exports:
- Improves data accuracy and timeliness
- Reduces manual work and errors
- Supports scalable, asynchronous integration
- Enables real-time credit checks and reporting
Ready to streamline your customer credit and balance integration? Set up your custom data entity and recurring job today!