カスタムWebサービススイートの一部として、次のApexクラスを作成しました。すべて同じ問題がありますが、これが最も簡単な例です。これを解決できれば、他のWebサービスでも解決できます。
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をデバッグすると、「return rtnError」の直前に、照会のリストが表示されるため、コードが機能します。問題は、(PHPまたはSOAPUIを介して)Webサービスを呼び出すと、結果が空になることです。もちろん、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が定義されていないようです。それを編集して、クラスで定義されているようにフィールドを追加しようとしましたが、それは役に立ちません。