I am not able to fetch custom attributes which are created in Magento using AEM Commerce Integration Framework (CIF). If you see the logs below, my custom attribute is not present in any of the graph QL queries that are being fired. And, my custom product model is initiated after the all queries are fired. I am able to fetch the same custom attribute when I manually query for the attribute (thru postman).
There are no queries fired at any point after this line is executed:
productRetriever.extendProductQueryWith(p -> p.addCustomSimpleField("custom_attribute")
com.adobe.cq.commerce.core.components.client.MagentoGraphqlClient Try to get a graphql client from the resource at /content/demoproject/us/en/products/product-page
14.08.2021 10:05:12.907 DEBUG [[0:0:0:0:0:0:0:1] [1628915712880] GET /content/demoproject/us/en/products/product-page.html/prod-name.html HTTP/1.1] com.adobe.cq.commerce.core.components.client.MagentoGraphqlClient Crafting a configuration resource and attempting to get a GraphQL client from it...
14.08.2021 10:05:12.907 DEBUG [[0:0:0:0:0:0:0:1] [1628915712880] GET /content/demoproject/us/en/products/product-page.html/prod-name.html HTTP/1.1] com.adobe.cq.commerce.graphql.client.impl.GraphqlClientImpl Executing GraphQL query: {products(filter:{url_key:{eq:"prod-name"}}){items{__typename,sku,url_key}}}
##### Main Product Query Happens Here ####
14.08.2021 10:05:13.673 DEBUG [[0:0:0:0:0:0:0:1] [1628915712880] GET /content/demoproject/us/en/products/product-page.html/prod-name.html HTTP/1.1] com.adobe.cq.commerce.graphql.client.impl.GraphqlClientImpl Executing GraphQL query: {products(filter:{sku:{eq:"1234"}}){items{__typename,sku,name,description{html},image{label,url},thumbnail{label,url},url_key,stock_status,meta_description,meta_keyword,meta_title,price_range{minimum_price{regular_price{value,currency},final_price{value,currency},discount{amount_off,percent_off}}},media_gallery{__typename,disabled,url,label,position},categories{__typename,uid,name,image},... on ConfigurableProduct{price_range{maximum_price{regular_price{value,currency},final_price{value,currency},discount{amount_off,percent_off}}},configurable_options{label,attribute_code,values{value_index,label}},variants{attributes{code,value_index},product{sku,name,description{html},image{label,url},thumbnail{label,url},url_key,stock_status,color,price_range{minimum_price{regular_price{value,currency},final_price{value,currency},discount{amount_off,percent_off}}},media_gallery{__typename,disabled,url,label,position},categories{__typename,uid,name,image},staged}}},... on GroupedProduct{items{position,qty,product{__typename,sku,name,price_range{minimum_price{regular_price{value,currency},final_price{value,currency},discount{amount_off,percent_off}}}}}},... on BundleProduct{price_range{maximum_price{regular_price{value,currency},final_price{value,currency},discount{amount_off,percent_off}}}},staged}}}
##### My Custom Product Model is initialized Here ####
14.08.2021 10:05:16.950 INFO [[0:0:0:0:0:0:0:1] [1628915712880] GET /content/demoproject/us/en/products/product-page.html/prod-name.html HTTP/1.1] com.demo.core.models.impl.CustomProductModelImpl Inside init method:::::::1234
14.08.2021 10:05:16.950 INFO [[0:0:0:0:0:0:0:1] [1628915712880] GET /content/demoproject/us/en/products/product-page.html/prod-name.html HTTP/1.1] com.demo.core.models.impl.CustomProductModelImpl extending query
14.08.2021 10:05:16.951 INFO [[0:0:0:0:0:0:0:1] [1628915712880] GET /content/demoproject/us/en/products/product-page.html/prod-name.html HTTP/1.1] com.demo.core.models.impl.CustomProductModelImpl Outside if
14.08.2021 10:05:16.953 INFO [[0:0:0:0:0:0:0:1] [1628915712880] GET /content/demoproject/us/en/products/product-page.html/prod-name.html HTTP/1.1] com.demo.core.models.impl.CustomProductModelImpl Inside custom attribute get method
### After this there are no graphql queries fired ###
2
Answers
This issue got resolved updating to a recent version of Magento connector and CIF core components.
You may be coming across the same issue I’ve just managed to resolve with the help of the developers of the core-cif-components:
https://github.com/adobe/aem-core-cif-components/issues/504
This issue is that the out of the box model was being initialized first in the PageMetadataImpl.java. This is then cached so that it’s not fired again with the custom query.
It turns out that I just needed to add the original Product.class as an adaptable in the annotations in my custom class. That way it’s used as the model implementation in PageMetadataImpl.java. It wasn’t how it was done in the tutorial I was following which was why it was a bit confusing.