Ad
Trigger To Show Comma-separated Products In The Text Area Custom Field Whenever The Order Line Item Is Changed
Trigger to show comma-separated products in the below custom field whenever the order line item is added/updated/deleted. Custom field on Order - xyz(textArea)
I am completely new to development and have been trying a lot to write but can't move forward really. Not sure whether to write on Order Object or which one. Also, I am getting a error 1) Method does not exist or incorrect signature: void put(String, Order) from the type Map<Id,OrderItem> .
Below is the code which I wrote:-
trigger trigger_name on OrderItem (after insert, after update) {
if (trigger.isInsert || trigger.isUpdate || trigger.isDelete) {
Map<Id,OrderItem> items = new Map<Id,OrderItem>([Select id, Product2Id from OrderItem]);
for (Order ord: trigger.new) {
if (ord.OrdersProduct__c != null) {
items.put(ord.OrdersProduct__c, ord);
}
}
}
}
Ad
Answer
Welcome to the community! You are on the right track, your trigger should be on the OrderItem
object. One thing that I noticed is missing is the after delete
event in the trigger definition.
A trigger like the one below should do the trick:
trigger OrderItemTrigger on OrderItem (after insert, after update, after delete) {
// Get the modified OrderItems depending on the operation
List<OrderItem> modifiedOrderItems;
if (Trigger.isInsert || Trigger.isUpdate) {
modifiedOrderItems = Trigger.new;
}
else if (Trigger.isDelete) {
modifiedOrderItems = Trigger.old;
}
// Use the modified OrderItems to get the IDs of their parent Orders
Set<Id> orderIds = new Set<Id>();
for (OrderItem oi : modifiedOrderItems) {
orderIds.add(oi.OrderId);
}
// Retrieve all OrderItems related to the modified Orders
List<OrderItem> orderItems = [
SELECT Id, OrderId, Product2.Name
FROM OrderItem
WHERE OrderId IN :orderIds
];
// Update text area field (Order_Products__c) on Orders
Map<Id, Order> orderMap = new Map<Id, Order>();
for (OrderItem oi : orderItems) {
Id parentOrderId = oi.OrderId;
if (!orderMap.containsKey(parentOrderId)) {
orderMap.put(parentOrderId, new Order(Id = parentOrderId));
}
Order parentOrder = orderMap.get(parentOrderId);
parentOrder.Order_Products__c += oi.Product2.Name + '\n';
}
if (!orderMap.isEmpty()) {
List<Order> parentOrders = orderMap.values();
update parentOrders;
}
}
Ad
source: stackoverflow.com
Related Questions
- → Trigger a full height container when a minimum window width is reached
- → AJAX changing content of page does not work more than once?
- → Build a nested interval loop
- → Code appended with JQuery does not fire click event on input file
- → ReactJS Update ajax call to child component from onClick method from parent
- → Event listener assigned in a loop triggers all of them
- → jQuery javascript prevent continuous input change event triggers
- → Using ReactiveVars in Meteor/React
- → Recursion triggers the error "Maximum call stack size exceeded error"
- → How to detect which React component triggers onKeyUp event?
- → Proxy Getting RangeError
- → Preventing a browser from getting stuck on an AJAX request
- → PostgreSQL trigger won't inset audit value
Ad