In my current Sitecore Commerce project we got an issue where the updates of templates in Storefront from Commerce Engine stopped working. There were no errors in logs and when we run the operation it finishes successfully but did not get the latest updates from Commerce Engine to Sitecore.
All of the above was working properly. Then we decided to find out the API call that Sitecore uses to perform Update Data Templates operation. Sitecore has implemented a custom Data Provider named “CatalogDataProvider” to achieve integration between Sitecore and Commerce Engine. Catalog data provider has lots of API calls those are handled by the “Sitecore.Commerce.Plugin.Catalog” at Sitecore Commerce engine side.
To get the Sellable Item information Catalog data provider uses the “GetSellableItemConnect” API call. We tried this call in Postman and found that our custom components were there is the response but without the information we stored with them.
You can see that component Id in response is same as component id we checked in the json stored in database. So something was happening at serialization time where the data from the database is lost while sending the response.
By looking at our component classe again we found that we missed the “public” access modifier with our component class and that was the reason that Commerce Engine was not able to serialize custom implementation and only adding the base component class details in response.
Always make your custom components classes as “public” in Commerce engine.