2012-12-03 3 views
2

다음 Apex 클래스는 맞춤 웹 서비스 제품군의 일부로 작성했습니다. 모두 동일한 문제가 있지만 가장 쉬운 예입니다. 이 문제를 해결할 수 있다면 다른 웹 서비스에서도 해결할 수 있습니다.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'하기 전에, 반환 디버깅 할 경우, 그것은 코드가 작동하므로 문의 목록을 표시한다. 문제는 PHP 나 SOAPUI를 통해 Webservice를 호출하면 결과가 비어 있다는 것입니다. 물론 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 ...];'를 떠날 경우 예외가 발생하여 여러분 측의 SOAP 라이브러리가 해석하고 PHP 내에서 예외를 캐스팅해야만하는 XML 응답을 리턴 할 것입니다 ... http 결과 : //php.net/manual/en/soapserver.fault.php – eyescream

+0

오류를 던지는 것에 대해 절대적으로 맞습니다. 그러나이 작업은 거기에 더 많은 논리를 작성하기위한 준비로 수행됩니다. 하지만 처음에는 _ 결과를 다시 얻고 싶습니다. –

답변

1

몇 가지 조사를 한 후에 해결책을 찾았습니다. 리턴 클래스에 있습니다. 매개 변수는 웹 서비스 대신 공개한다 : 나는 즉시로 잘못 터지는 아무것도 표시되지 않습니다

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

차갑고, 알아두면 좋겠다 :) 자신의 대답을 받아 들여 "레이더에서"벗어날 수 있을까요? – eyescream

관련 문제