2

カスタム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が定義されていないようです。それを編集して、クラスで定義されているようにフィールドを追加しようとしましたが、それは役に立ちません。

4

1 に答える 1

1

いくつかの調査の後、私は解決策を見つけました。それはリターンクラスにあります。パラメータは public ではなく webservice にする必要があります。

global class returngetEnquiries {
    webservice String status {get;set;}
    webservice String error {get;set;}
    webservice List<Enquiry__c> results {get;set;}
}
于 2012-12-04T08:37:17.670 に答える