2012-05-10 5 views
0

Webサービスを呼び出すクラスから次のエラーが発生します。ここではここでapplyURLString( - ここmyWSSalesforce Webserviceエラー

public void applyURLString(ID ArgBuildID) { 

    Builder__c current_build = [SELECT id, name, LLURL__c, column1, column2, Opportunity__c 
       FROM Builder__c 
       WHERE id = :ArgBuildID]; 

     if(current_build.LLURL__c == null || current_build.LLURL__c.trim().length() == 0) 
      { 

       String tmpFolderName = current_build.column1 + ' - ' + current_build.column2; 

       String LLWSResultPattern = '[0-9]{2,}'; 

       String myWSXMLResult = myWS.invokeExternalWs(tmpFolderName,'test'); 

       Boolean LLWSPatternMatched = pattern.matches(LLWSResultPattern,myWSXMLResult); 
       if(LLWSPatternMatched) 
       { 
        Opportunity oppt = [SELECT Id,Name 
             FROM Opportunity 
             WHERE Id = :current_build.Opportunity__c 
             LIMIT 1]; 
        oppt.LLURL__c = 'https://someService/' + myWSXMLResult; 
        update oppt; 
       } 
      } 
    } 

UPDATE#2を実行している私のクラスがある:

global class myWS 
{ 

    WebService static string invokeExternalWs(string childValue, string parentValue) 
    { 
     HttpRequest req = new HttpRequest(); 
     req.setEndpoint('https://externalURL/Services'); 
     req.setMethod('POST'); 
     req.setHeader('Content-Type', 'text/xml; charset=utf-8'); 
     req.setHeader('SOAPAction', 'http://externalService/externalMethod'); 
     string b = '--soap request goes here--'; 
     req.setBody(b); 
     Http http = new Http(); 
     try { 
      //Execute web service call here 
      String xObjectID =''; 
      HTTPResponse res = http.send(req); 
      Dom.Document doc = res.getBodyDocument(); 
      String soapNS = 'http://schemas.xmlsoap.org/soap/envelope/'; 
      Dom.XmlNode root = doc.getRootElement(); 
      for(dom.XmlNode node1 : root.getChildElements()) { 
       for(dom.XmlNode node2 : node1.getChildElements()) { 
        for(dom.XmlNode node3 : node2.getChildElements()) { 
         for(dom.XmlNode node4 : node3.getChildElements()) { 
          xObjectID = node4.getText(); 
         } 
        } 
       } 
      } 

     return xObjectID; 
     } catch(System.CalloutException e){ 
      return 'ERROR:' + e; 
    }   
} 
} 

UPDATEは:ここでは

"You have uncommitte​d work pending. Please commit or rollback before calling out" 

は、Webサービスを呼び出しているクラスです。 )が実行されます。これは、HTTP要求の前にDMLが実行される唯一の場所です。しかし、私は新しいBuilderのレコードのIDが必要です。

Builder__c insertBuild = new Builder__c();  
insertBuild.Opportunity__c = opportunityId; 
insertBuild.Product_Group__c = selectedBuild.Product_Group__c; 
insertBuild.Manual_Build_Product__c = selectedBuild.Manual_Build_Product__c; 

insert insertBuild; 

applyURLString(insertBuild.Id); 

このエラーが発生する理由はありますか?

+0

このクラスを呼び出すクラス/トリガーが必要です。データベースの更新後にコールアウトを行う場合、このメッセージが表示されます。 – JCD

+0

私は上記の実行コードを追加しました。 – user891859

+0

もう一度(#2)コードを更新して問題が発生していると想定しています。 – user891859

答えて

0

@ @注釈を使用する@JCDの提案は私の問題を解決しました。再度、感謝します!

関連する問題