• ooheman das
  • 0 Points
  • Member since 2019

  • Chatter
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
  • 3
I have one custom object margin_calculator_... and this object have lookup of Opportunity.when we update Opportunity at a particular stage here [ stagename-'Margin cal...' () ]in this stage if there is at least one record in my custom object margin_calculator_... it should allow to update oppty at this stage or if there is no custom object records for that oppty it should not allow to update oppty at that stage.
i tried too much but not able to do in both condion.my code is working 
but something is missing please help me out.
Thanks in advance.
your help will be appericiated.
my code is as follows-
trigger OpportunityTrigger on Opportunity (before update) {
    List<Margin_Calculator_Version__c> marginLst =new List<Margin_Calculator_Version__c>();    
    marginLst = [SELECT Id, Name, Opportunity__r.Id FROM Margin_Calculator_Version__c WHERE Opportunity__r.Id IN :Trigger.new]; 
        for(Opportunity opp:Trigger.new){
            for(Margin_Calculator_Version__c marginversion:marginLst){
                Set<Id> oppId = new Set<Id>();
                if((oppId.Contains(opp.Id)) && (opp.StageName=='Margin Calculation'))
                    update opp;
                    opp.addError('Please create one record in margin version');

  • March 08, 2020
  • Like
  • 0

Hi all,

We need to implement the following pattern at my org:
  • callout to external data source
  • if that callout takes too long (according to some configurable threshold), log an error (ie do some DML)
  • if that callout timed out on the remote server, try it again
Recognizing the potential for the dreaded "You have uncommitted work pending. Please commit or rollback before calling out." error, I put the error logging code in a future method, thus isolating the DML from the callouts. However, the error is still being thrown. I reduced the issue down to this pattern:
public static void foo() {
    Http http = new Http();
    HttpRequest req = new Httprequest();
    req.setEndpoint('https://test.salesforce.com'); //whatever endpoint
    http.send(req); //works fine
    http.send(req); //throws calloutexception

@future public static void bar() {

Am I correct to assume that calling a future method counts as a DML operation? Is there any documentation I'm missing somewhere?