今回は暗記モノです。
この内容に限らず、制約事項が多いものはテストで出題されやすいので、チェックしておきましょう。
webserviceメソッドとは?
カスタムの SOAP Web サービスコールとして公開するメソッドです。
自分で作成したApexクラスをSOAP から呼び出すことができます。
webserviceメソッドを使えるようにするには
webserviceメソッドはただ作ればいいだけではありません。
SOAPとして使用できるようにしないといけないので、クライアント側にWSDL定義を取り込まないといけません。
具体的な手順として、まずwebserviceメソッド付きのApexクラスを作成します。
Apex開発者ガイドのソースコードを拝借して、以下Apexクラスを作ります。
MyWebService.cls
global class MyWebService { webservice static Id makeContact(String contactLastName, Account a) { Contact c = new Contact(lastName = contactLastName, AccountId = a.Id); insert c; return c.id; } }
設定→Apexクラスで作成したApexクラスを見ると、「WSDL」というリンクがあるので、ここをクリックします。
XMLでひたすら書かれていますが、これをダウンロードしてクライアント側に取り込めば使えるようになります。
注意点がいろいろあります
webserviceメソッドを扱う上での注意点がいくつかあります。
作り方うんぬんは前フリで、これから挙げる考慮点がテストで出題されがちです。
今回はまとめはありませんので、注意点を押さえておきましょう。
◆クラスはglobalにしないといけない
◆最上位メソッドと外部クラスメソッドの定義には、webserviceキーワードを使用する
◆webserviceはstaticメソッドにする必要がある
◆トリガ内で使用できない
◆システム定義の列挙型は webserviceメソッドで使用できない
→カスタムクラスを引数とすることは可能。
その場合、クラスはglobalとなり、クラス内のメンバ変数はwebserviceにする必要がある。
WSDLに定義されていれば、オブジェクトも引数にすることも可能。
カスタムクラスを使用する場合は、このようにメンバ変数に対してwebserviceをつける。
global class MyWebService { global class ContactInfo { webservice String contactLastName; webservice Account a; } webservice static Id makeContact(ContactInfo cinfo) { Contact c = new Contact(lastName = cinfo.contactLastName, AccountId = cinfo.a.Id); insert c; return c.id; } }
◆メソッドのオーバーロードはサポートされない
→同じメソッド名で引数が異なるオーバーロードはコンパイルエラーが発生。以下のようなコードはNG。
global class MyWebService { webservice static Id makeContact(String contactLastName, Account a) { Contact c = new Contact(lastName = contactLastName, AccountId = a.Id); insert c; return c.id; } webservice static Id makeContact(String contactLastName, String contactFirstName, Account a) { Contact c = new Contact(lastName = contactLastName, firstName = contactFirstName, AccountId = a.Id); insert c; return c.id; } }
ちなみに、コンパイルエラーはこういう内容。
◆SOAPでログインしたユーザに関係なくシステムコンテキストが使用される
→権限、項目レベルのセキュリティ、共有ルールに関係なく、全機能を使用できてしまうため、権限には留意する
コメント