現在、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;
}
}