2

I see that there is a related list on Orders showing the OrderItems but there is not field on orders that I can SOQL query in Apex.

2 Answers 2

4

You need to look into relationships. OrderItems will not show as a field on the Order Object, as they are a related object. Take a look at some of the documentation on relationships

http://www.salesforce.com/us/developer/docs/dbcom_soql_sosl/Content/sforce_api_calls_soql_relationships.htm

https://developer.salesforce.com/blogs/systems-integrator/2009/02/navigating-relationships.html

In general, you need to query the parent Object and include a sub query for the child records.

List<Parent_Object__c> parentList= [Select Id, Name, Field1__c, Fieldx__c (Select Id, Name, Field1__c, Fieldx__c From Child_Objects__r) From Parent_Object__c];

You can then check this query in Apex Anon

for(Parent_Object__c par : parentList) {
     system.debug('Parent Object: ' + par);
     system.debug('Children: ' + par.Child_Objects__r);
}
4

@sfdc_ninja is right. Just adding that, specifically, for the Order object you have two different ways to get the OrderItems for an Order.

A. Get as a related list by querying the Order object.

Id orderId = //somehow get this.
List<Order> orders = [
    SELECT Id, Status,
          (SELECT Id, UnitPrice, Quantity, OrderId FROM OrderItems)
    FROM Order
    WHERE Id = :orderId
];
if (orders.isEmpty()) {
   // likely an error if no Order returned...handle this somehow
}
Order o = orders.get(0);
List<OrderItem> orderItems = o.OrderItems;

B. Query the OrderItem object directly, using the OrderId field:

Id orderId = //somehow get this.
List<OrderItem> orderItems = [
    SELECT Id, UnitPrice, Quantity, OrderId,
           Order.Status
    FROM OrderItem
    WHERE OrderId = :orderId
];

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .