2012-12-03 102 views
2

我已經編寫了以下Apex類作爲一套自定義Web服務的一部分。都有同樣的問題,但這是最簡單的例子;如果我能解決這個問題,我可以解決它的其他Web服務。Salesforce如何返回自定義錯誤對象

global class WebServiceA4S { 
    global class returngetEnquiries { 
     public String status {get;set;} 
     public String error {get;set;} 
     public List<Enquiry__c> results {get;set;} 
    } 

    Webservice static returngetEnquiries getEnquiries() { 
     returngetEnquiries rtnError = new returngetEnquiries(); 
     rtnError.status='success'; 
     rtnError.error = ''; 
     rtnError.results = new List<Enquiry__c>(); 
     // id en name 
     try { 
      list<Enquiry__c> tmp = [Select id,name From Enquiry__c]; 
      rtnError.results = tmp; 
     } 
     catch(Exception e) { 
      rtnError.status='error'; 
      rtnError.error = String.valueof(e); 

     } 


    return rtnError; 
     } 
} 

現在,如果我調試rtnError返回,就在「返回rtnError」之前,它確實表明查詢的列表,以便代碼工作。 問題是,如果我調用Webservice(通過PHP或SOAPUI),結果是空的。 我使用當然由salesforce創建的類中的wsdl。

我也看了一下WSDL,它看起來像這樣:

... 
<xsd:complexType name="returngetEnquiries"> 
    <xsd:sequence/> 
</xsd:complexType> 
<xsd:element name="getEnquiries"> 
    <xsd:complexType> 
     <xsd:sequence/> 
    </xsd:complexType> 
</xsd:element> 
<xsd:element name="getEnquiriesResponse"> 
<xsd:complexType> 
    <xsd:sequence> 
    <xsd:element name="result" type="tns:returngetEnquiries" nillable="true"/> 
    </xsd:sequence> 
</xsd:complexType> 
</xsd:element> 
... 

它看起來像returngetEnquiries沒有定義。我試圖編輯它並添加類中定義的字段,但這沒有幫助。

+0

我沒有看到任何立即飛出的錯...但是你真的要捕捉這樣的錯誤(不管事實SELECT很少會扔東西)?如果你留下簡單的'return [SELECT ...];',拋出的異常就會冒泡並返回給你XML響應,你的身邊的SOAP庫應該解釋並且在PHP中也拋出一個異常...就像http ://php.net/manual/en/soapserver.fault.php – eyescream

+0

你是完全正確的拋出錯誤。然而,這是爲了準備在那裏建立更多的邏輯而完成的。但首先,我想獲得_some_結果。 –

回答

1

經過一番調查,我找到了解決辦法。它在返回類中。該參數應該是Web服務,而不是公衆:

global class returngetEnquiries { 
    webservice String status {get;set;} 
    webservice String error {get;set;} 
    webservice List<Enquiry__c> results {get;set;} 
} 
+0

酷,很高興知道:)你介意接受你自己的答案,所以它會「脫離雷達」? – eyescream

相關問題