These custom APIs were created for reading V1 attribute values from massive attribute JSONs, with 50 or even more attributes assigned to single product. Use these when you need to read just few attributes and do not need the map of all attribute values.

Boolean / Checkbox V1 attribute

Callable ah = new AttributeHelper();
SObject qli = [SELECT vlocity_cmt__JSONAttribute__c FROM QuoteLineItem WHERE Id='...'];

Object value = ah.call( 'getAttributeValueOfCheckbox', new Map<String,Object>{'item'=>item, 'attributeCode'=>'ATT_BOOLEAN'} );

Picklist / Dropdown V1 attribute

Callable ah = new AttributeHelper();
SObject qli = [SELECT vlocity_cmt__JSONAttribute__c FROM QuoteLineItem WHERE Id='...'];

Object value = ah.call( 'getAttributeValueOfPicklist', new Map<String,Object>{'item'=>item, 'attributeCode'=>'ATT_PICKLIST'} );

Text Input V1 attribute

Callable ah = new AttributeHelper();
SObject qli = [SELECT vlocity_cmt__JSONAttribute__c FROM QuoteLineItem WHERE Id='...'];

Object value = ah.call( 'getAttributeValueOfText', new Map<String,Object>{'item'=>item, 'attributeCode'=>'ATT_TEXT'} );

Number Input V1 attribute

Callable ah = new AttributeHelper();
SObject qli = [SELECT vlocity_cmt__JSONAttribute__c FROM QuoteLineItem WHERE Id='...'];

Object value = ah.call( 'getAttributeValueOfNumber', new Map<String,Object>{'item'=>item, 'attributeCode'=>'ATT_NUMBER'} );