I have one object named "Order_batch__c".I want to separate the data into two records one is parent object "order" and child object "order item"
order consists of fields : customer po,account name, customer id
order item consists of fields : nicomatic pin,quantity ordered
My requirement is to separate records in parent and child records .when ever there is an update in order batch records it has to update accordingly parent or child.
Trigger:
trigger orderitem on order_batch__c (after insert , after update) {
order__c[] orders = new order__c[] {};
order__c[] uporders=new order__c[]{};
set<string> ids=new set<string>();
set<string> ids1=new set<string>();
map<string, order_batch__c> ObjMap = new map<string, order_batch__c>();
for (order_batch__c ob : Trigger.new){
if(Trigger.isInsert){
orders.add(new order__c(Or_customer_PO_Number__c = ob.Or_customer_PO_Number__c,Account_code__c=ob.Or_customerid__c));
ids.add(ob.Or_customer_PO_Number__c);
}
if(Trigger.isupdate)
{
if (ob.Or_customer_PO_Number__c != Null){
ObjMap.put(ob.Or_customer_PO_Number__c, ob);
}
}
}
insert orders;
//list<order_batch__c> obc= new list<order_batch__c>([select id,Or_customer_PO_Number__c from order_batch__c where Or_customer_PO_Number__c in:ids Limit 1]);
list<order__c> ord= new list<order__c>([select id,Or_customer_PO_Number__c,Account_code__c from order__c where Or_customer_PO_Number__c IN :ObjMap.KeySet()]);
for (order__c ob : ord){
order_batch__c obc=ObjMap.get(ob.Or_customer_PO_Number__c);
uporders.add(new order__c(id=ob.id,Or_customer_PO_Number__c = obc.Or_customer_PO_Number__c,Account_code__c=obc.Or_customerid__c));
}
if(uporders.size() > 0){
update uporders;
}
Order_Item__c[] upitems = new Order_Item__c[] {};
Order_Item__c[] items = new Order_Item__c[] {};
Integer index = 0;
for (order_batch__c ob : Trigger.new)
{
if(Trigger.isInsert)
{
items.add(new Order_Item__c(
Name = ob.Or_Nicomatic_p_n__c,
Client_PN__c = ob.Or_clientpn__c,
Quantity__c = ob.Quantity_Ordered__c,
Request_Date__c = ob.Requested_Date__c,
Discount__c = ob.Discount__c,
Price__c = ob.Unit_price__c,
Order__c = orders[index].Id
));
index++;
}
if(Trigger.isupdate)
{
ids1.add(ob.Or_Nicomatic_p_n__c);
}
}
insert items;
List<Order_Item__c> orderlineitem=new list<order_item__c>([select id ,name,Order_customer_po_number__c from order_item__c where Order_customer_po_number__c IN :ObjMap.KeySet() and name in:ids1]);
for (order_item__c ob : orderlineitem){
order_batch__c obc=ObjMap.get(ob.Order_customer_po_number__c);
upitems.add(new order_item__c(id=ob.id,name = obc.Or_Nicomatic_p_n__c,Quantity__c = obc.Quantity_Ordered__c));
}
if(upitems.size()>0){
update upitems;
}
}
For this :insert is happening for both parent and child (order,orderitem) Update is happening for only parent .
update is not happening for child .Help me regarding this issue