2

現在、OpportunityLineItem のトリガーに取り組んでいます。Salesforce のすべての製品は「基本」製品です。

営業担当者が製品を商談に追加する場合、実際の価格は製品に設定されたすべてのオプションに依存するため、実際の価格を取得するために当社の Web サイトに電話する mpn (製品の一意の ID) も入力する必要があります。私のトリガーは、クラスを呼び出してリクエストを行うことです。これまでのところ、機能しています! しかし、productID と mpn の同じペアを追加したい場合は機能しません。

問題:

セールスマンは製品 OpportunityLineItem を追加しますが、この製品はすでに Opportunity の現在の OpportunityLineItem にあるため、機能しません。

まず、SOQL リクエストが複数の結果を返すため、トリガーは価格を取得しません。

ここで私のトリガー:

trigger GetRealPrice on OpportunityLineItem (after insert) {
    for(OpportunityLineItem op : Trigger.new){
        RequestTest.getThePrice(op.Id_UAD__c,op.MPN__c,op.OpportunityId);  
    }
}

ここでは呼び出されたクラスです。

public class RequestTest {
    //Future annotation to mark the method as async.
    @Future(callout=true)
    public static void getThePrice(Decimal idUad, String mpnProduct,String opID){
        // Build the http request
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        req.setEndpoint('http://www.site.com/mpn.getprice?id='+idUad+'&mpn='+mpnProduct);
        req.setMethod('GET'); 

         String result;
         HttpResponse res = http.send(req);
         System.debug(res.getBody());
         result = res.getBody();
          Decimal price = Decimal.valueof(result);

         System.debug(opID);
         OpportunityLineItem op = [SELECT UnitPrice FROM OpportunityLineItem 
                                  WHERE Id_UAD__c = :idUad
                                  AND OpportunityId = :opID 
                                  AND MPN__c = :mpnProduct] ;
        System.debug('you went through step1');

        op.UnitPrice = price;
        System.debug('This is the opportunity price'+op.UnitPrice);
        update op;
    }
}
4

1 に答える 1

0

トリガー内の各項目をループしているため、項目 ID を渡します。次に、項目ごとに更新を処理するようにメソッドを変更します。

trigger GetRealPrice on OpportunityLineItem (after insert) {
  for(OpportunityLineItem op : Trigger.new){
    RequestTest.getThePrice(op.Id_UAD__c,op.MPN__c,op.Id);  
  }
}

...

public class RequestTest {
  //Future annotation to mark the method as async.
  @Future(callout=true)
  public static void getThePrice(Decimal idUad, String mpnProduct,String opLineID){
    ...
    Decimal price = Decimal.valueof(result);
    System.debug(opID);
    OpportunityLineItem op = [SELECT UnitPrice FROM OpportunityLineItem 
                              WHERE Id = :opLineID] ;

    op.UnitPrice = price;
    System.debug('This is the opportunity price'+op.UnitPrice);
    update op;
  }
}
于 2012-07-02T18:09:51.443 に答える