다음 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 것 같습니다. 나는 그것을 편집하고 클래스에 정의 된대로 필드를 추가하려고했지만 도움이되지 않습니다.
...하지만 당신이 정말로 SELECT 거의 아무것도 넣지는 사실에 관계없이 (즉, 같은 오류를 캡처해야합니까)? 당신이 간단한 [return [SELECT ...];'를 떠날 경우 예외가 발생하여 여러분 측의 SOAP 라이브러리가 해석하고 PHP 내에서 예외를 캐스팅해야만하는 XML 응답을 리턴 할 것입니다 ... http 결과 : //php.net/manual/en/soapserver.fault.php – eyescream
오류를 던지는 것에 대해 절대적으로 맞습니다. 그러나이 작업은 거기에 더 많은 논리를 작성하기위한 준비로 수행됩니다. 하지만 처음에는 _ 결과를 다시 얻고 싶습니다. –