Version 4.9 of CSM-Core introduces a comprehensive B2B automation framework for synchronizing Companies, Contacts, Locations, and Role Assignments with connected channel systems.
This release also delivers an interface-driven architecture for Sales Channel Type loading, a refactored listing availability calculation engine, and a wide range of improvements to product listing, media handling, and CSM Company management.
B2B Automation: New Types, Subtypes, and Role Center Integration
Introduces new 'CSM API Automation Subtype' enum values for B2B operations: Get Company Contacts, Get Locations, Send Company, Send Contact, Send Location, Send Company Status, and Send Role Assignment.
Adds dedicated automation subtype codeunits for each B2B operation, each implementing the 'CSMProcessAPIAutomationForSubtype' interface with success/failure return values.
Adds a Status Requires Update field on the CSM Company record to track when a company record must be pushed to the channel.
Adds a Run B2B Automation action to the Role Center, allowing users to trigger B2B sync processes directly from the home screen.
Raise new integration events 'OnProcessAutomationOnBeforeProcessB2BAutomationForSubtype' and 'OnProcessAutomationOnAfterProcessB2BAutomation' for partners to intercept or extend B2B automation processing.
Sales Channel Type Interface Pattern for Per-Type Loading
This feature introduces three new interfaces on the 'CSMCORE Sales Channel Type' enum: 'CSMSChTypLoadExec' (Execution Module), 'CSMSChTypLoadAPISet' (API Set), and 'CSMSChTypLoadAPIAuto' (Automation).
Auto-Import Customer Contacts and Locations upon BC Customer Validation
Register Core Value Processing Functions on Install
CSM Core Utility Value Processing Functions are now automatically registered during CSM installation via 'RegisterCoreValueProcessingFunctionMethod()' in the Install codeunit.
The CSM Setup record record is also initialized on install if not already present.
Listing Availability Calculation: Dedicated Codeunit with Error Isolation
Listing availability calculation logic has been refactored into a dedicated 'CSM Calc Listing Availability' codeunit (ID 70338290)
Supports two modes: Basic Availability (single inventory location) and Advanced Availability (per-location percentage and threshold rules)
A companion 'CSM Listing Availability Events' codeunit centralizes integration event definitions, allowing partners to intercept calculations without modifying core logic
Error isolation ensures a calculation failure for one listing does not block processing of other listings.
Core Media Utility Public Functions
Sales Channel Default Weight Unit for Listings
A Default Weight Unit field has been added to the CSM Sales Channel record and is used to pre-populate the Weight Unit on new Listings created for that Sales Channel, ensuring consistency across all listings for a given channel.
Added Missing Application Operations
B2B Contact Role Assignment: Automatic Single-Role API Calls
When a Contact Role Name is selected on the CSM Company Contact Location Roles page, the system now automatically triggers a single-role API call to either assign or revoke and reassign the role on the channel, eliminating the need for a separate manual sync step
Introduces 'SendSingleCompanyContactRoleAssignment' procedure in 'CSM B2B Management' codeunit, with overloads for both page-action and automation contexts
Automatically selects the correct execution modifier (insert vs. modify) based on whether the External ID is already populated.
Core Listing Management Support Improvements
'SENAPISendProductChildren' now creates API Message Parameters for child listings and their listing attributes, enabling channel apps to receive structured child data.
Core Value Processing functions for Listing Price and Weight now work for both parent and child CSM Listings
'OnAfterSubmitProductImageToChannelOperation' integration event now fires for each product image sent rather than once after all images complete, allowing per-image processing.
New 'OnSubmitProductImagesToChannel_OnAfterFilterCSMProductInformation' event enables filtering of product images before they are sent to the channel.
New table keys added to 'CSM Item Attribute Option' and 'CSM Listing Attribute' tables to improve query performance
Core Value Processing 'GetParameterRecord' procedures changed from local to internal scope, enabling reuse across extensions
Product Information Improvements for Lookup and Image Handling
CSM Data Export: Validate, Modify, and Insert Trigger Fields
WooCommerce Refactor Core Support Additions
Improved CSM Order Filtering for API Engine Automations
API Engine Send Listing Image: Updated Event and GraphQL Compatibility
Load Defaults Visibility Control on Sales Channel Page
API Engine Dependency Updated to 1.21.0.0
SEN Common Minimum Version Updated to 2.12
When a CSM Company Location was created from a BC Customer or Ship-To Address, the Name field was left blank. The fix ensures the Name is populated from the source BC record in both the Customer and Ship-To Address location type implementations.
BC Ship-To Addresses Not Displaying on CSM Company
A filtering condition in the CSM Company table prevented BC Ship-To Addresses from appearing in the related lookup. The extraneous filter has been removed and Ship-To Addresses now display correctly.
The validation logic for BC Customer No. on a CSM Company record has been tightened to provide accurate feedback and prevent unnecessary field modifications when the value has not changed.
Duplicate Address Field Captions on CSM Company Location Lists
Multiple address fields on the CSM Company Location List and CSM Company Locations Subpage shared the same caption, causing confusion when viewing or filtering records. Unique, descriptive captions have been assigned to each address field.
CSM Item Attribute Refresh from Item Variation Options
When refreshing CSM Item Attributes from Item Variation Options, the refresh included options from all attributes rather than filtering to only the options linked to the specific CSM Item Attribute. The filter is now correctly applied.
Primary Contact No. Set to Blank in GetCustomer
The 'GetCustomer' routine was incorrectly handling the Primary Contact No. field. The field is now correctly set to blank when appropriate to prevent unintended contact assignments during template-based customer creation.
Removed GETORDERS from Core API Engine Dataload
The 'GETORDERS' API operation was included in the Core API Engine Dataload but is channel-specific and should not be part of the core set. It has been removed to prevent incorrect configuration during installation.