You need to sign in to do that
Don't have an account?
Need help for Trigger - create child records for selected values in a Multiselect Picklist
Hi Awesome coders, I am new to programming and need help with this Trigger. Your help is greatly appreciated !!
I have two Objects,
1. Package_Shipment_Order__c (Parent) ,
2.Package_Shipment_Delivery__c (Child) M_Detail relationship .
Parent object has a multi select picklist field ‘States__c’ . When User selects a couple of states, child records to be created on Package_Shipment_Delivery__c. Error is highlighted in Bold
trigger PicklistCreateChild on Package_Shipment_Order__c (after insert , after update) {
List<Package_Shipment_Delivery__c> PkgShipDe = new List<Package_Shipment_Delivery__c>();
for(Package_Shipment_Order__c PkgShipOr : Trigger.new){
if (PkgShipOr.Shipment_States__c != Null){
List<String> ShipStates = PkgShipOr.Shipment_States__c.Split(';');
If(ShipStates != Null && ShipStates.size()>0){
for (String ShipSt : ShipStates){
Package_Shipment_Delivery__c PkShipDe = new Package_Shipment_Delivery__c();
PkShipDe.Package_Shipment_Orders__c = PkgShipOr.Id;
PkShipDe.State__c = PkgShipDe.get(ShipSt);
PkgShipDe.add(PkShipDe) ;
}
}
}
Insert PkgShipDe;
All Answers
Here, you are using List's get method, which accepts index, whereas you are passing Shipping State's value (ShipSt). To access elements from List<String> ShipStates, you can change the inner for loop as below instead of for (String ShipSt : ShipStates) - For more reference - https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_list.htm
Let me know if this helps.
Thank you very much for guiding about List methods. Reference links are very helpful :)
I still see the error on the same line as 'Illegal assignment from Package_Shipment_Delivery__c to String'.
Here are the changes:
//TODO - Need to create child records only for selected mutiselect values in Picklist
trigger SelectedPicklistCreateChildOnDelivery on Package_Shipment_Order__c (after insert, after update) {
List<Package_Shipment_Delivery__c> PkgShipDe = new List<Package_Shipment_Delivery__c>();
for(Package_Shipment_Order__c PkgShipOr : Trigger.new) {
if (PkgShipOr.Shipment_States__c != Null) {
List<String> ShipStates = PkgShipOr.Shipment_States__c.Split(';');
If(ShipStates != Null && ShipStates.size()>0) {
for (String States : ShipStates ) {
for (integer i=0 ; i<ShipStates.size() ; i++) {
Package_Shipment_Delivery__c PkShipDeliv = new Package_Shipment_Delivery__c();
PkShipDeliv.Package_Shipment_Orders__c = PkgShipOr.Id;
PkShipDeliv.State__c = PkgShipDe.get(i);
PkgShipDe.add(PkShipDeliv) ;
}
}
}
Insert PkgShipDe;
}
} }
Hi Moon,
Thank you very much. It worked perfectly !!