By default order status will be draft unless you change it through trigger. So if you want a new order to be created it might go in recursion unless you stop it with some static variable.
Hi Shiraz After deactivating order i have to create new order with existing order but if we want to know whether order is deactivated i though status is draft Can you help me with the solution
try with below code and modify the API names as per your org.
trigger newordercreation on order (after update) {
List<order> odrerlistcreate = new List<order>();
for(order or : Trigger.New) {
If(or.Status__c == 'Draft' && or.Status__c!=trigger.oldmap.get(or.id).Status__c){
//insert the fields you want and copy any field values needed from draft record by using or variable ex: or.AccountId;
order neworder = new order();
neworder.Name = 'Test';
neworder.statu__c = 'In Progress';
neworder.AccountId = or.AccountId;
odrerlistcreate.add(neworder);
}
}
insert odrerlistcreate;
}
If you need to create order, I suppose you will need to copy order item as well. Please find below code which will help you achieve the same. Let me know if you like the solution and mark it as best answer. Thanks in advance.
Trigger OrderTrigger on order (after update) {
List<order> orderlistToInsert = new List<order>(); set<Id> orderIdSet = new set<Id>(); Map<Id, String> mapOrderIdNewOrderName = new Map<Id, String>(); List<OrderItem> orderItemListToInsert = new List<OrderItem>(); map<String,Id> mapNameandId = new Map<String,Id>(); for(order ord : Trigger.New) { orderIdSet.add(ord.Id); String newOrderName = ord.Name+'-'+ord.Id; If(ord.Status__c == 'Draft' && ord.Status__c!=trigger.oldmap.get(ord.id).Status__c){ order neworder = new order(); neworder.Name = ord.Name+'-'+ord.Id; neworder.status__c = 'In Review'; neworder.AccountId = ord.AccountId; orderlistToInsert.add(neworder); mapOrderIdNewOrderName.put(ord.Id,neworderName);
} }
if(!orderlistToInsert.isEmpty()){ insert odrerlistToInsert; for(Order ord:odrerlistToInsert){ mapNameandId.put(ord.Name,ord.Id); } } for(OrderItem item: [select Id, orderId, ListPrice, Product2Id,Quantity, TotalLineAmount from orderItem where Id IN: orderIdSet]){ orderItem oi = new orderItem(); oi.Product2Id = item.Product2Id; oi.ListPrice=item.ListPrice; oi.TotalLineAmount = item.ListPrice; oi.Quantity = item.Quantity; oi.orderId = mapNameandId.get(mapOrderIdNewOrderName.get(item.orderId)); orderItemListToInsert.add(oi);
Hi Sam,
By default order status will be draft unless you change it through trigger. So if you want a new order to be created it might go in recursion unless you stop it with some static variable.
After deactivating order i have to create new order with existing order but if we want to know whether order is deactivated i though status is draft
Can you help me with the solution
try with below code and modify the API names as per your org.
If this helps, Please mark it as best answer.
Thanks!!
Hi Sam,
If you need to create order, I suppose you will need to copy order item as well. Please find below code which will help you achieve the same. Let me know if you like the solution and mark it as best answer. Thanks in advance.
Trigger OrderTrigger on order (after update) {
List<order> orderlistToInsert = new List<order>();
set<Id> orderIdSet = new set<Id>();
Map<Id, String> mapOrderIdNewOrderName = new Map<Id, String>();
List<OrderItem> orderItemListToInsert = new List<OrderItem>();
map<String,Id> mapNameandId = new Map<String,Id>();
for(order ord : Trigger.New) {
orderIdSet.add(ord.Id);
String newOrderName = ord.Name+'-'+ord.Id;
If(ord.Status__c == 'Draft' && ord.Status__c!=trigger.oldmap.get(ord.id).Status__c){
order neworder = new order();
neworder.Name = ord.Name+'-'+ord.Id;
neworder.status__c = 'In Review';
neworder.AccountId = ord.AccountId;
orderlistToInsert.add(neworder);
mapOrderIdNewOrderName.put(ord.Id,neworderName);
}
}
if(!orderlistToInsert.isEmpty()){
insert odrerlistToInsert;
for(Order ord:odrerlistToInsert){
mapNameandId.put(ord.Name,ord.Id);
}
}
for(OrderItem item: [select Id, orderId, ListPrice, Product2Id,Quantity, TotalLineAmount from orderItem where Id IN: orderIdSet]){
orderItem oi = new orderItem();
oi.Product2Id = item.Product2Id;
oi.ListPrice=item.ListPrice;
oi.TotalLineAmount = item.ListPrice;
oi.Quantity = item.Quantity;
oi.orderId = mapNameandId.get(mapOrderIdNewOrderName.get(item.orderId));
orderItemListToInsert.add(oi);
}
if(!orderItemListToInsert.isEmpty()){
insert orderItemListToInsert;
}
}