Apex Solution for Splitting Orders Based on Order Line Items in Salesforce




When managing orders in Salesforce, we sometimes face the need to split orders based on their order line items. Recently, I encountered such a challenge: under a specific contract, there were 18 orders, each containing three order line items. The task was to split these orders so that each new order would contain only one order line item.

The first step in this task was to query all the orders under a specific contract. Then, for each order, we needed to query its associated order line items. Initially, I considered directly modifying the OrderId field of the OrderItem records, but this is not allowed in Salesforce, as once an OrderItem is created, its OrderId cannot be changed.

Therefore, I took a different approach: create a new order and a new order item record for each order line item. In this way, each new order would have only one associated order line item. This required associating the new order items with the new orders after inserting the new orders.

Here is an example of the Apex code that accomplishes this functionality:


public class SplitOrders { public static void splitOrdersByLineItems(String contractId) { // Query all orders under a specific contract List<Order> originalOrders = [SELECT Id FROM Order WHERE ContractId = :contractId]; List<Order> newOrders = new List<Order>(); List<OrderItem> newOrderItems = new List<OrderItem>(); for (Order originalOrder : originalOrders) { List<OrderItem> orderItems = [SELECT Id, Product2Id, Quantity, UnitPrice FROM OrderItem WHERE OrderId = :originalOrder.Id]; for (OrderItem originalItem : orderItems) { Order newOrder = new Order(); newOrder.ContractId = contractId; newOrders.add(newOrder); OrderItem newItem = new OrderItem(); newItem.Product2Id = originalItem.Product2Id; newItem.Quantity = originalItem.Quantity; newItem.UnitPrice = originalItem.UnitPrice; newOrderItems.add(newItem); } } insert newOrders; for (Integer i = 0; i < newOrders.size(); i++) { newOrderItems[i].OrderId = newOrders[i].Id; } insert newOrderItems; } }


留言

這個網誌中的熱門文章

Salesforce證照考試心得 (Administrator and Advanced Administrator)

ISC2 CC (Certified in Cybersecurity Certification) 考試心得