Here’s a tip to help resolve a System.QueryException ‘No such column’ when the field exists in the schema
Turns out I was generating a SOQL Select in class A using Schema.Describe to get all fields from OpportunityLineItem resulting in:
Select createdbyid, hasrevenueschedule, description, isdeleted, quantity, systemmodstamp, totalprice, hasschedule, createddate, subtotal, discount, lastmodifiedbyid, currencyisocode, pricebookentryid, lastmodifieddate, id, unitprice, servicedate, listprice, sortorder, hasquantityschedule, from OpportunityLineItem
Yet, when this query was executed by class B, i got an error System.QueryException ‘No such column subtotal’
‘subtotal’ is not a field I normally use in OpportunityLineItem so I wondered if it had been removed or added in the most recent SFDC Version (31). Nope.
Here was the issue:
- Class A, that generated the SOQL from the Schema.Describe was at V27.0, recently upgraded from V13.0
- Class B, that executed the generated SOQL from the Schema.Describe was at V16.0 (!)
- Test Class T, that executed Class A and B was at V27.0
So, the Schema.describe in class A found all the fields known to SFDC version 27.0 which included OpportunityLineItem.subtotal but when executed by a much older class B (version 16), the subtotal field wasn’t part of the schema at that point in history so QueryException ensued.
Updating class B to V27.0 resolved the issue