webservice キーワードの使用に関する考慮事項
webservice キーワードを使用する場合、次の考慮事項に留意してください。
- 最上位メソッドと外部クラスメソッドの定義には、webservice キーワードを使用します。webservice キーワードを使用して、クラスまたは内部クラスメソッドを定義することはできません。
- webservice キーワードを使用して、インターフェースや、インターフェースのメソッドと変数を定義することはできません。
- システム定義の列挙型は Web サービスメソッドで使用できません。
- webservice キーワードはトリガで使用できません。
- webservice キーワードで定義されているメソッドを含むすべてのクラスは global として宣言する必要があります。メソッド、または内部クラスを global として宣言した場合、最上位 (外部) クラスも global として宣言する必要があります。
- webservice キーワードで定義されるメソッドは本質的にグローバルです。クラスへのアクセス権を持つ Apex コードはこれらのメソッドを使用できます。webservice キーワードは、global よりも多くのアクセスを可能にするアクセス修飾子の一種と考えることができます。
- webservice キーワードを使用するメソッドは static として定義します。
- 管理パッケージコードの webservice メソッドまたは変数を廃止することはできません。
- 特定の Apex 要素に SOAP アナログがないため、webservice キーワードで定義されたメソッドは、次の要素をパラメータとして使用できません。これらの要素はメソッド内で使用できますが、戻り値としてマークすることはできません。
- 対応付け
- セット
- Pattern のオブジェクト
- Matcher のオブジェクト
- Exception のオブジェクト
- webservice キーワードは、Web サービスの一部として公開するメンバー変数と共に使用します。これらのメンバー変数を static としてマークしないでください。
Apex SOAP Web サービスメソッドをコールする場合、次の考慮事項があります。
- Salesforce は、アクセスが [制限あり] になっている AppExchange パッケージからの Web サービスへのアクセスと executeanonymous 要求を拒否します。
- 項目に割り当てた文字列値が長すぎる場合、API バージョン 15.0 以降を使用して保存 (コンパイル) した Apex クラスとトリガにはランタイムエラーが発生します。
- 期限切れか一時的なパスワードを使用するユーザのログインコールを API で行う場合、後続のカスタム Apex SOAP Web サービスメソッドへの API コールはサポートされていないため、INVALID_OPERATION_WITH_EXPIRED_PASSWORD エラーが発生します。Apex Web サービスメソッドをコールするには、ユーザのパスワードをリセットして、期限が切れていないパスワードでコールを行います。
次の例は、Web サービスメンバー変数と Web サービスメソッドを持つクラスを示します。
1global class SpecialAccounts {
2
3 global class AccountInfo {
4 webservice String AcctName;
5 webservice Integer AcctNumber;
6 }
7
8 webservice static Account createAccount(AccountInfo info) {
9 Account acct = new Account();
10 acct.Name = info.AcctName;
11 acct.AccountNumber = String.valueOf(info.AcctNumber);
12 insert acct;
13 return acct;
14 }
15
16 webservice static Id [] createAccounts(Account parent,
17 Account child, Account grandChild) {
18
19 insert parent;
20 child.parentId = parent.Id;
21 insert child;
22 grandChild.parentId = child.Id;
23 insert grandChild;
24
25 Id [] results = new Id[3];
26 results[0] = parent.Id;
27 results[1] = child.Id;
28 results[2] = grandChild.Id;
29 return results;
30 }
31}1// Test class for the previous class.
2@isTest
3private class SpecialAccountsTest {
4 testMethod static void testAccountCreate() {
5 SpecialAccounts.AccountInfo info = new SpecialAccounts.AccountInfo();
6 info.AcctName = 'Manoj Cheenath';
7 info.AcctNumber = 12345;
8 Account acct = SpecialAccounts.createAccount(info);
9 System.assert(acct != null);
10 }
11}この Web サービスは AJAX を使用して呼び出すことができます。詳細は、「Apex in AJAX」を参照してください。