WebService キーワードの使用に関する考慮事項
webService キーワードを使用する場合、次の考慮事項に留意してください。
- クラスの定義には webService キーワードを使用できません。ただし、最上位の外部クラスメソッドと内部クラスメソッドの定義に使用できます。
- webService キーワードを使用して、インターフェースや、インターフェースのメソッドと変数を定義することはできません。
- システム定義の列挙型は Web サービスメソッドで使用できません。
- webService キーワードはトリガで使用できません。
- webService キーワードで定義されているメソッドを含むすべてのクラスは global として宣言する必要があります。メソッド、または内部クラスを global として宣言した場合、最上位 (外部) クラスも global として宣言する必要があります。
- webService キーワードで定義されるメソッドは本質的にグローバルです。これらのメソッドを、クラスにアクセスできる Apex コードで使用できます。webService キーワードは、global よりも多くのアクセスを可能にするアクセス修飾子の一種と考えることができます。
- webService キーワードを使用するメソッドを static として定義する必要があります。
- 管理パッケージコードの webService メソッドまたは変数を廃止することはできません。
- 特定の Apex 要素に SOAP アナログがないため、webService キーワードで定義されたメソッドは、次の要素をパラメータとして使用できません。これらの要素はメソッド内で使用できますが、戻り値としてマークすることはできません。
- Map
- Set
- 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」を参照してください。