ApexクラスWSDL

私はカスタムオブジェクトの特定のセットを別のサードパーティーのアプリケーションに公開したいという要件があります。しかし、エンタープライズwsdlを生成すると、すべてのオブジェクトが含まれます。しかし、私は他のオブジェクトへのアクセスを与えたくありません。これを解決するために、私は以下のように頂点クラスを書いた

global class PegaToSFDCWebService {

webservice static void updateSFDC(Id opportunityId, PegaEmailResponse__c emails, String pegaOfferResp) {
  Opportunity opp = new Opportunity(Id = opportunityId);
    opp.StageName = 'Closed Won';
    opp.Pega_Offer_Response__c = pegaOfferResp;
    upsert opp;

    insert emails;
  }
}

今、私はこのクラスのwsdlを生成するときだけ、このクラスで使われていないいくつかのオブジェクトも含んでいます。私はちょうど基本的なwsdlを与えたいと思う。これに従うための良い習慣を教えてください。私は初めてこれをやっています。

ベストアンサー

おそらくうまくいくように、DebuggingHeaderのような型は、クライアントが利用できるAPIインフラストラクチャの一部であるため、WSDLに生成されます。通常はオプションであるので(手動で)削除することはできますが、なぜそれが問題になるのかわかりません。

公開するSObjectのうち、明らかにどのオブジェクトをWebサービスメソッドのシグネチャで参照するかによって決まります。個人的には、少数のSObjectしかなければ、単純なBeanクラス(パブリックフィールドだけのクラス)を作成し、Webサービスメソッドのシグネチャのクラスを使用したいと思うでしょう。これにより、クライアントインタフェースは内部SObjectsから分離されたままになるので、アダプタとの間にある。

しかし、本当にクリーンなインターフェースを作成したい場合は、 @RestResource メカニズムを使用して、URLパターンを制御し、 RESTful
アプローチを使用することができます。これは、データがJSONであり、操作がURLパターンに基づいて相対的に自明であるため、クライアントがJavaScriptに基づいて構築されたモバイルアプリケーションを含む場合は、クライアントにとってはより魅力的です。ここでもインタフェースのBeanクラスを使用してデカップリングを実現できます。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です