Skip to main content
Sekhar CPQ (SFDC) a posé une question dans #Data Management

I have two classes. in the first class account object having two lookup fields like "ship from" and "ship to". but these lookup object is one that is Address__c object. these lookup fields have different records.

totalrecords.totalamount(Address__C.Ship_To__c, Address__C.Ship_From__c, contact.type);

my requirement is how to pass these two object values to second class in this first set object parameter.

testcal(Set<Address__c>AddressSet, string type)

like below method

public static Decimal testcal(Set<Address__c>AddressSet, string type){ }

i tried like below it will be working for single record. but i want to do multipule records in for loop.

 

please check below my code.

list<Account> someAddress = [SELECT ID, Ship_To__c, Ship_From__c FROM Account WHERE Id = :someID];

Set<Id> addressIds = new Set<Id>();

for(account acc:someAddress ){

addressIds.add(acc.Ship_To__c);

addressIds.add(acc.Ship_From__c);

}

Set<Addresss__c> addresses = new Set<Addresss__c>([SELECT Id, Other_Fields__c FROM Addresss__c WHERE ID IN :addressIds]);

for(account acc1:newvalues()){

TestCal(addresses, Contact.Type);

}

i had written like this but it is not passing particular account to particlur address. i got list of address in set but account for loop how to pass particular address to particular account. 

 

 
6 réponses
  1. 28 déc. 2018, 07:47
    Hi,

     

    Please try bellow.

    list<Account> someAddress = [SELECT ID, Ship_To__c, Ship_From__c FROM Account WHERE Id = :someID];

    Set<Id> addressIds = new Set<Id>();

    Map<Id, Id> mapAccountToShipToId = new Map<Id, Id>();

    Map<Id, Id> mapAccountToShipFromId = new Map<Id, Id>();

    for(account acc : someAddress ){

    mapAccountToShipToId.put(acc.Id, acc.Ship_To__c);

    mapAccountToShipFromId.put(acc.Id, acc.Ship_From__c);

    }

    addressIds.addAll(mapAccountToShipToId.values());

    addressIds.addAll(mapAccountToShipFromId.values());

    Map<Id, Addresss__c> mapAddressIdToAddress = new Map<Id, Addresss__c>();

    for(Addresss__c objAddress : [SELECT Id, Other_Fields__c FROM Addresss__c WHERE ID IN :addressIds]){

    mapAddressIdToAddress.put(objAddress.id, objAddress);

    }

    Set<Addresss__c> accountAddresses = new Set<Addresss__c> ();

    for(account acc1 : newvalues()){

    if(mapAccountToShipToId.containsKey(acc1.id) && mapAddressIdToAddress.containsKey(mapAccountToShipToId.get(acc1.id))){

    accountAddresses.add(mapAddressIdToAddress.get(mapAccountToShipToId.get(acc1.id)));

    }

    if(mapAccountToShipFromId.containsKey(acc1.id) && mapAddressIdToAddress.containsKey(mapAccountToShipFromId.get(acc1.id))){

    accountAddresses.add(mapAddressIdToAddress.get(mapAccountToShipFromId.get(acc1.id)));

    }

    TestCal(accountAddresses, Contact.Type);

    accountAddresses.clear();

    }

     

    I hope this work. Plase let me know if any issue.
0/9000