Cisco RESTful SOAP ベース API の概要

概要

Cisco Prime Service Catalog は、サービス オーダーまたは要求を送信してサービス カタログ内で定義されたエンティティにアクセスするための、一連の RESTful API を介したノースバウンド統合をサポートしています。Service Catalog には、要求を送信して管理するための、一連の古い SOAP ベースの API もあります。

シスコでは、サービス カタログ(Service Catalog)で定義されたエンティティにアクセスするために、一連の標準的な REST(Representational State Transfer)API および Java スタブを提供しています。これらは、nsAPI と総称されています。nsAPI の発信者はセッションを確立するために、有効な Service Catalog アカウントを使って最初に自身を認証する必要があります。

Service Catalog のエンティティに対するアクセス権限は、サービス カタログ(Service Catalog)アプリケーションでユーザに対して定義されたロールベース アクセス コントロール(RBAC)のオブジェクト レベル権限によって制御されます。SSO を使用してサービス カタログ(Service Catalog)アプリケーションにサインインした場合、SSO トークンは API に自動的に渡されます。

外部アプリケーションからの呼び出しをサポートしている以外に、nsAPI は Service Portal モジュール内から呼び出すこともできます。ポータル機能は、Java、JavaScript、または HTML を使用して作成されたポートレットの設計や表示をサポートします。このようなポートレット内で、nsAPI を呼び出して必要なエンティティの情報を取得し、特定のタイプのエンティティのデータを更新可能にすることができます。Portal モジュールに関する詳細については、『 Cisco Prime サービス カタログ(Service Catalog)Service Catalog Designer Guide 』を参照してください。

新規、変更、および非推奨 API

次の表は、このリリースの新規および変更 API の情報を説明します。

表 2-1 新規および変更 API 情報テーブル

API の説明
REST の URL
ステータス
参照先

サービスをコピー。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/service

新規

サービス API テーブル

要求の情報を取得。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/ordermgmt/reqinfo/reqid/{reqId}

新規

オーダー管理 API テーブル

要求のためのサービスの情報を取得。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/ordermgmt/servicenfo/reqid/{reqId}

新規

オーダー管理 API テーブル

要求に関するすべてのシステム コメントおよびユーザ コメントを取得。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/ordermgmt/comments/reqid/{reqId}

新規

オーダー管理 API テーブル

要求のすべての添付ファイルの詳細を取得。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/ordermgmt/attachmentslist/reqid/{reqId}

新規

オーダー管理 API テーブル

要求のドキュメント ID を使用して添付ファイルをダウンロード。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/ordermgmt/attachment/viewdocid/{document Id}

新規

オーダー管理 API テーブル

ログイン中のユーザがオーダーできるすべてのサービス ID を取得。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/orderableserviceids

新規

オーダー管理 API テーブル

ログイン中のユーザがログイン ID がわかっている顧客に代わってオーダーできるすべてのサービスを取得。

http://<ServerURL>/RequestCenter/nsapi/definition/v1/orderableserviceids/customerlogin/person

新規

オーダー管理 API テーブル

サービス フォームの詳細を取得。

http://<ServerURL>/RequestCenter/nsapi/transaction/v1/orderform?serviceids=<サービス ID のリスト、カンマ区切り>

新規

要求 API テーブル

すべてのサービス項目を取得する API。

http://<Server URL>/
RequestCenter/nsapi/serviceitem/v1/mdrdatatable/serviceitemlist?

新規

すべてのサービス項目 API テーブル

すべてのサービス項目の CSV をダウンロード。

http://<ServerURL>/RequestCenter/nsapi/serviceitem/v1/mdrdatatable/serviceitem

新規

すべてのサービス項目 API テーブル

履歴情報の取得

http://<Server URL>
/RequestCenter/nsapi/serviceitem/v1/myservices/assetlist/history?

新規

すべてのサービス項目 API テーブル

分類ツリーの取得

http://<ServerURL>/RequestCenter/nsapi/serviceitem/v1/sim/serviceitemtypestree/classificationdatatypetree?

新規

すべてのサービス項目 API テーブル

ユーザ ロールを取得する API

http://<ServerURL>/RequestCenter/nsapi/directory/tenant/v2/userroles

新規

テナント管理 API テーブル

テナント管理設定を取得する API

http://<ServerURL>/RequestCenter/nsapi/directory/tenant/v2/tenantconfigurationRelational Operators

新規

テナント管理 API テーブル

管理者メンバー情報を含むカードおよびリストを表示するため、階層的チームとチーム詳細を取得する API

http://<ServerURL>/RequestCenter/nsapi/directory/tenant/v2/id/{teamId}

新規

テナント管理 API テーブル

管理者メンバー情報を含むリストを表示するため、チーム リストを取得する API

http://<ServerURL>/RequestCenter/nsapi/directory/tenant/v2/teamlist?startRow={startRow}&recordSize={recordSize}&sortBy={sortBy}&sortDir={sortDir}&name={searchName}

新規

テナント管理 API テーブル

親チーム ID でサブチームを取得する API

http://<ServerURL>/RequestCenter/nsapi/directory/tenant/v2/id/{teamid}/teamlist?startRow={startRow}&recordSize={recordSize}&sortBy={sortBy}& sortDir={sortDir}&name={searchName}

新規

テナント管理 API テーブル

チーム メンバー リストを取得する API

http://<ServerURL>/RequestCenter/nsapi/directory/tenant/v2/id/{teamId}/memberlist?startRow={startRow}&recordSize={recordSize}&sortBy={sortBy}& sortDir={sortDir}&name={searchName}

新規

テナント管理 API テーブル

メンバーを AS チーム管理者に昇格させる API

http://<ServerURL>/RequestCenter/nsapi/directory/tenant/v2/id/{teamId}/people/id/{personId}/promoteTeamAdmin

新規

テナント管理 API テーブル

Cloud Center ユーザの API キーの更新

http://<ServerURL>/RequestCenter/nsapi/directory/people/id/{personId}/updateapikey

新規

テナント管理 API テーブル

すべての IDP 設定の取得

http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs

新規

SAML REST API テーブル

IDP 設定の削除

http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs/<idp configuration name>

新規

SAML REST API テーブル

IDP 設定の取得

http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs/<idp configuration name>

新規

SAML REST API テーブル

ノードのメタデータの更新

http://<ServerURL>/RequestCenter/nsapi/v1/idp/refreshThis

新規

SAML REST API テーブル

IDP 設定の保存

http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs

新規

SAML REST API テーブル

IDP 設定の更新

http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs

新規

SAML REST API テーブル

SAML 設定の取得

http://<ServerURL>/RequestCenter/nsapi/v1/saml/configs

新規

SAML REST API テーブル

SAML 設定の更新

http://<ServerURL>/RequestCenter/nsapi/v1/saml/configs

新規

SAML REST API テーブル

AMQP サーバ詳細の作成

http://<ServerURL>/RequestCenter/nsapi/ucsd/discovery/saveConnection

更新しました

サポートされているフィルタ テーブル

接続の削除

http://<Server URL>/RequestCenter/nsapi/ucsd/discovery/deleteConnection

新規

サポートされているフィルタ テーブル

認証キー生成 API

http://<ServerURL> /RequestCenter/nsapi/messagebroker/overview?connectionIdentifier=<particular amqp connection identifier>

新規

認証キー生成 API

HTTP クライアントでの REST ベース API の使用

Cisco Prime Service Catalog がサポートしている REST API(別名 nsAPI)を使用する一般的な方法は、HTTP ベースのクライアントを使用する方法です。クライアントがこれらの API を呼び出すには、最初に呼び出し元を認証する必要があります。nsAPI では、ヘッダー ベース認証とトークン ベース認証の 2 つの認証方法がサポートされています。

ヘッダー ベース認証による nsAPI の呼び出し

RESTful nsAPI 呼び出しは、発信者が自身を認証できる場合にだけ処理されます。これは、ブラウザを介して以下のページでユーザが Prime Service Catalog に最初にログインするときに似ています。

http://<serverURL>/RequestCenter

次に、Service Catalog に正常にログインすると、ブラウザのアドレス バーに有効な nsAPI REST の URL を入力します。例を以下に示します。

http://<serverURL>/RequestCenter/nsapi/definition/categories/id/3
 

次のような応答 XML がブラウザに表示されます。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<category>
<categoryId>3</categoryId>
<categoryName>Workplace Services</categoryName>
<description>Services for voice and data communications, desktop, mobile devices, and application access.</description>
<topDescriptionEnabled>false</topDescriptionEnabled>
<topDescription />
<middleDescriptionEnabled>false</middleDescriptionEnabled>
<middleDescription />
<bottomDescriptionEnabled>false</bottomDescriptionEnabled>
<bottomDescription />
<catalogTypeId>1</catalogTypeId>
<catalogType>Consumer Services Catalog</catalogType>
<isRoot>false</isRoot>
<associatedServices>
<associatedService>
<description>Order a new or refurbished laptop. Manager approval required.</description>
<id>20</id>
<name>New Laptop</name>
<status>Active</status>
</associatedService>
<associatedService>
<description>Order a new iPhone or Blackberry, configured and maintained under corporate policy.</description>
<id>22</id>
<name>New Mobile Device</name>
<status>Active</status>
</associatedService>
</associatedServices>
<includedCategories>
<includedCategory>
<id>8</id>
<name>Email</name>
</includedCategory>
<includedCategory>
<id>9</id>
<name>Laptops</name>
</includedCategory>
</includedCategories>
<categoryURLSc>
<a href='/RequestCenter/myservices/navigate.do?categoryid=3&amp;query=catalog&amp;layout=popup_p' onclick="return GB_showFullScreen('Category', this.href)">Workplace Services</a>
</categoryURLSc>
<categoryURLOnlySc>/RequestCenter/myservices/navigate.do?categoryid =3&amp;query=catalog</categoryURLOnlySc>
</category>
 

REST API 要求がアプリケーションにログインする前に実行された場合、URL は次のエラーを返します。

HTTP Error 401 Unauthorized

 

RESTful nsAPI 呼び出しの認証

HTTP ヘッダーには、次のパラメータを含める必要があります。

username=<username>

password=<password>

すべての nsAPI および RAPI 要求で、HTTP Header- acceptEncryptedPassword=true が設定されていれば、パスワードは暗号化されていると見なされます。

パスワードは、次の場合に暗号化されます。

  • Accept Encrypted Password の値が、[管理(Administration)] > [設定(Settings)] ページで有効(オンに設定)になっており、HTTP ヘッダーで false に設定されている場合。
  • Accept Encrypted Password の値が、[管理(Administration)] > [設定(Settings)] ページで無効(オフに設定)になっており、HTTP ヘッダーで true に設定されている場合。

) password 属性の暗号化された値と cloudpassword 属性のクリアテキスト値を非表示にするには、newscale.properties ファイルのパラメータ nsapi.directory.person.hide.secure.information を true に設定します。


認証が成功すると、HTTP 応答で JSessionID cookie が返されます。後続の nsAPI の呼び出しで認証を再度行わずにセッションを維持するには、この呼び出しの要求に同じ JSessionID cookie を含める必要があります。

認証時の応答コードは、ユーザ アカウントのパスワードの期限切れや失敗したパスワード試行により、ロックされているかどうかが示されます。ユーザ アカウントのロックを解除するには、システム管理者に問い合わせてください。


) また、ユーザ認証の応答コードは、ユーザ アカウントが猶予期間であるかどうかと、ユーザ パスワードの更新期限の日付も示します。


パスワード ポリシーの詳細情報については、『Cisco Prime Service Catalog Administration and Operations Guide』の「Enforcing Password Policies」を参照してください。

API セッションは、セッション タイムアウトが発生するか、または任意のユーザに nsapi ログアウトが呼び出された場合に、非アクティブになります。nsapi を使用したログアウトの URL は次のとおりです。

RequestCenter/nsapi/authentication/logout
 

次の API は、セッションがまだ有効であるかどうかを確認するために使用されます。クライアント インターフェイスは、セッションが有効な場合は HTTP コード 200 を、それ以外の場合は HTTP 401 コードを返します。

http://<ServerURL>:8088/RequestCenter/nsapi/authentication/session

次のような応答 XML がブラウザに表示されます。

<nsapi-response utid="235c3faa2bbade2ebc85afc2b7f29bd3">User is authenticated.</nsapi-response>

Service Catalog アプリケーションのセッションのタイム アウト設定に関する詳細情報については、『 Cisco Prime Service Catalog Administration and Operations Guide 』の「Site Administration」の章を参照してください。


) いずれかの nsAPIs が(nsAPI ログインを呼び出すことなく)クレデンシャルにより直接呼び出された場合、セッションは応答の送信後に自動的に終了する必要があります。nsAPI ログインが明示的に呼び出された場合、nsAPI ログアウトが手動で呼び出されるか、API タイムアウトの新しい管理設定([管理設定(Administration Settings)] > [APIタイムアウト(API Timeout)])に基づいてセッションがタイムアウトしない限り、nsAPI セッションは自動的に終了しません。



) nsAPI をクロスサイト リクエスト フォージェリ(CSRF)によるセキュリティ脆弱性から保護するには、newscale.properties ファイルの session.token.validation の値を 1 に設定します。さらに、セッションに認証トークンを提供する場合、後続の nsAPI 呼び出しにユーザ ID とパスワードを入力する必要はありません。


トークン ベース認証の使用

Prime Service Catalog はトークン ベースの認証メカニズムをサポートしています。要求(呼び出し)ごとにユーザ名とパスワードで認証を行うのではなく、1 回認証して、期間限定のトークンを代わりに取得できます。トークンを(GET 要求を使用して)入手したら、ユーザ名とパスワードを入力しなくても、後続の RESTful 呼び出しにそのトークンを使用できます。

トークン ID の取得

次の nsAPI GET 呼び出しでトークンを要求します。HTTP ヘッダーに有効なユーザ名とパスワードが指定されていることを確認してください。

http://<ServerURL/RequestCenter/nsapi/authentication/token?persistent=true

サンプル応答:

<sessiontoken utid="P_D887A7375EC640D725A1D042FBFBEAFE"/>

トークン検証パラメータ値の設定

次のように、newscale.properties ファイルで session.token.validation パラメータの値を設定します。

session.token.validation=1

さらに、[管理(Administration)] > [設定(Settings)] タブの [API セッションタイムアウト(API Session Timeout)] フィールドで、トークン有効性のタイムアウト時間を設定します。

nsAPI の呼び出しに対するトークン検証の設定

Service Catalog からの nsAPI の呼び出しに対し、トークン ベースの検証を有効にできます。この設定は任意です。検証を制御するには、newscale.propertiesファイルでパラメータ session.token.nsapisc.validation を 1 に設定します。

アップグレードを行う予定で、外部システムからの既存の nsAPI 呼び出しがこのトークン ベース検証の影響を受ける場合は、このプロパティの値を 0 に設定することを検討してください。


) newscale.properties ファイルを変更したら、その都度、Service Catalog サーバを再起動する必要があります。


トークンの有効期限の指定

nsAPI で使用されるトークンが期限切れの場合、nsAPI の発信者に次のエラーが返されます。

<nsapi-error-response errorcode="AUTH_0014"> Token Invalid</nsapi-error-response>

トークンの使用

後続の REST ベースの nsApi 呼び出しには、REST 呼び出しから取得されたトークン ID を HTTP ヘッダーとして追加する必要があります(ユーザ名とパスワードは不要です)。

utid=<token_id>

サポートされているエンティティ

nsAPI でサポートされるエンティティは、次のカテゴリに分けられます。

表 2-2 サポートされているエンティティ

エンティティ グループ
エンティティ タイプ

定義データ

カテゴリ(Categories)

サービス

エージェント(Agents)

課金レート

ポリシー

ディレクトリ データ

組織

人物

グループ(Groups)

アカウント

トランザクション データ

契約

要求

要求エントリ

承認

タスク

サービス項目および標準

サービス項目の詳細

すべてのサービス項目

標準(Standards)

課金履歴

ポリシー アラート

Portal Designer データ

コンテンツのカスタマイズ テーブル

サポートされる操作

次のタイプの操作が、nsAPI でサポートされています。

  • すべてのエンティティのデータ取得に対する HTTP GET 操作
  • 個人、アカウント、契約、課金レート、ポリシー、およびサービス項目のインスタンスを作成または更新するための HTTP POST 操作と PUT 操作。
  • タスク処理を実行するため、およびサービス項目権限を付与/取り消すための HTTP POST 操作。
  • アカウント、契約、課金レート、ポリシー、およびサービス項目インスタンスを削除するための HTTP DELETE 操作。

要求と応答の形式

すべての nsAPI は要求のコンテンツ タイプに「application/xml」の使用をサポートしています。次のエンティティは、application/json コンテンツ タイプもサポートしています。

  • サービス項目(Service Items)
  • アカウント、契約
  • 課金レート、課金履歴
  • ポリシーおよびポリシー アラート

デフォルトの応答のコンテンツ タイプは要求のコンテンツ タイプと同じですが、クエリ パラメータ「responseType」(xml または json)で上書きできます。

例:

サービスを追加して、新しい要求/カートを送信します。

Method: POST

REST URL:

/RequestCenter/nsapi/transaction/requisitions

ペイロード:

{
"requisition": {
"customerLoginName": "admin",
"billToOU": "H_OU",
"services":[{
"name": "TestServiceRest"
"quantity": "1",
"version": "0",
"dictionaries": [{
"name": "TestNonGrid",
"data": {
"FullName": "AAB",
"HireDate": "02/20/1978",
"MultiSelect":["MS3","MS4"],
}
},{
"name": "TestG",
"data":
[
{"city":"Bangalore", "country": "India"},
{"city":"Mysore", "country":"India"}
]
}]
}]
}
}

成功コード:201

応答エラー コード:REST/Web サービスのエラー メッセージの表を参照してください。

サービス オーダーまたはサービス要求の送信と管理

ここでは、RESTful クライアントが Prime Service Catalog にオーダーを出す方法、確認のためのステータスの読み取り、そしてオーダーのキャンセルについて説明します。サービス オーダーやサービス要求、および要求エントリでサポートされる API は他にもあり、そうした API はこのマニュアルの参照の項に記載されています。

サービス オーダーでの RESTful API の使用

サービス オーダーまたはサービス要求の送信

Cisco Prime Service Catalog でサービス オーダーまたはサービス要求を送信するよう、RESTful クライアントを書き込むときには、次の手順を実行する必要があります。

1. サービスを発注するための RBAC 権限がある有効なユーザ アカウントを使用して、クライアントを認証します。

コマンドの発行

http://<ServerURL>/RequestCenter/nsapi/authentication/token?persistent=true

HTTP ヘッダーでユーザ名とパスワードを指定する

呼び出しが成功した場合、認証トークンを受信します。
<sessiontoken utid="P_D887A7375EC640D725A1D042FBFBEAFE"/>

2. JSON 形式で API ペイロードを作成します。オーダーが UI で送信された場合、これらのデータは通常、ユーザがオーダー フォームに入力したデータです。

どの Prime Service Catalog サービスに要求を送信する必要があるか、どのフォーム フィールド値を入力する必要があるかが把握されているものとして、サービス要求または要求のペイロードを作成します。

ペイロード:

{
"requisition": {
"services": [
{
"version": "0",
"dictionaries": [
{
"data": {
"Name": "DockerTr9"
},
"name": "Application_Information"
}
],
"name": "Docker1",
"quantity": "1"
}
],
"customerLoginName": "combo1user1",
"billToOU": "UCSD::uc1::Fenced_Group1"
}
}

サービスが他のユーザに対してオーダーされたことを示すには、「customerLoginName」フィールドを使用します。


) RBAC の設定で定義された権限に基づいて、別のユーザの代わりにオーダーできます。


前の手順で受信した認証トークン(sessiontoken utid=<token_id>)を、HTTP ヘッダーで指定します。

オーダーが正常に送信されると、Prime Service Catalog は成功コード:201 を返します。

応答のペイロードは次のとおりです。

{
"RequisitionSubmit": {
"id": 96,
"customer": "combo1user1 combo1user1",
"initiator": "combo1user1 combo1user1",
"startedDateRaw": 1444267887000,
"startedDate": "10/07/2015 6:31 PM",
"status": "Ordered"
}
}

応答エラー コード:REST/Web サービスのエラー メッセージの表を参照してください。

3. オーダーが入ったため、RESTful API クライアントは、要求 ID を使用します。この要求 ID は、オーダーのステータスを監視するために前の手順で受信したものです。
オーダーはサービス オーケストレーションと配信プロセスに応じて、完了までに数分から数日かかる場合があります。nsAPI クライアントは以前に受信した同じ utid=<token_id> トークンを利用する場合も、新しいトークンを取得するために認証を行う場合もあります。

オーダーのステータスを取得するために RESTful 呼び出しを実行する

HTTP Method: GET

http://<ServerURL>/RequestCenter/nsapi/transaction/requisitions/id/<requisitionId>

または、ユーザがオーダーを行ったときに受け取った応答のペイロードには、要求のステータスを確認するために使用できる URL も含まれています。

カスタム ポータルに対して行ったオーダー/要求をキャンセルする場合は、カスタム ポータルのキャンセルを呼び出すことができます。

この場合、ポータルの基礎となる RESTful API クライアントが、Prime Service Catalog に対して対応する要求を発行します。

HTTP メソッド:DELETE

http://<ServerURL>/RequestCenter/nsapi/transaction/requisitionentries/<reqEntryId>?

ペイロードは不要です。

成功コード:200

応答エラー コード:REST/Web サービスのエラー メッセージの表を参照してください。

サービス オーダーのレガシー SOAP ベースの RAPI

ここでは、Service Catalog の Web サービスの使用方法について説明します。これには SOAP ベース版の API 要求(外部システムが Service Catalog 内のサービス要求を作成および管理できるようにする API である RAPI 2)を実装する Web サービスが含まれます。Web サービスには、サービス要求内の提供タスクや承認タスクの管理を許可し、Service Catalog の内容の確認を行う要求なども含まれます。

WSDL

作成した要求を検証するには、SOAP ベースの Web サービスの WSDL が使用できる必要があります。WSDL は次の場所にあります。

http://<ServerName>/RequestCenter/webservices/wsdl/

使用可能な WSDL について、次の表にまとめます。

WSDL
内容

AuthenticationService.wsdl

指定したユーザをサービス カタログ(Service Catalog)に対して認証する要求。

RequisitionService.wsdl

要求の送信、要求のキャンセル、またはそのステータスの確認を求める要求。

ServiceCatalog.wsdl

内部使用専用。

ServiceManagerTaskService.wsdl

承認の許可または拒否の要求、あるいは確認が実行済みであるとの通知を求める要求。

ロールと機能の設定

Web サービスを利用できるのは、Web サービス モジュールに対する適切な権限が含まれるロールを持つユーザです。事前に設定されたロールにはこのような権限は含まれていないため、管理者は Organization Designer を使用して、1 つ以上のカスタム ロールを作成する必要があります。ロールを作成したら、Web サービスの権限を追加できます。

Web サービスの権限を次に示します。

  • Service Catalog アクセス(Service Catalog Access):この権限を持つユーザは、Service Catalog の Web サービスにアクセスできます。
  • デマンド管理アクセス(Demand Management Access): この権限を持つユーザは、自分のデマンド管理 Web サービスにアクセスできます。
  • NSAPI アクセス(NSAPI Access):この権限を持つユーザは、NSAPI Web サービスにアクセスできます。
  • 要求アクセス(Requisition Access):この権限を持つユーザのみが、自分の RequisitionService Web サービス要求にアクセスできます。認証されたユーザとイニシエータは同一人である必要があります。同一人でない場合、対応するエラー応答がスローされます。
  • 要求システムアカウント(Requisition System Account):この権限を持つユーザは、自分だけでなく他のユーザの RequisitionService Web サービス要求にもアクセスできます。認証されたユーザとイニシエータは同一人である必要はありません。
  • REX APIアクセス(REX API Access):この権限を持つユーザは、Catalog Deployer の機能にアクセスできます。
  • タスクアクセス(Task Access):この権限を持つユーザのみが、自分の ServiceManager TaskService Web サービス要求にアクセスできます。この権限は必須です。
  • タスクシステムアカウント(Task System Account):この権限を持つユーザは、自分だけでなく他のユーザの ServiceManager TaskService Web サービス要求にもアクセスできます。認証されたユーザとイニシエータは同一人である必要はありません。

Web サービスのクライアント コードの作成

Web サービスのクライアントは、Apache の CXF や Axis などのツールを使用してコーディングできます。

Axis 2 によるクライアント コードの作成

Axis 2 を使用して Web サービスのクライアントを生成するための詳細な説明とユーザ ガイドについては、Apache の Web サイトを参照してください。

soapUI を使用して axis2 クライアントを作成する手順の概要は次のとおりです。


手順 1 Axis 2 のライブラリをダウンロードします。

手順 2 Axis 2 ライブラリの場所を soapUI の [Preferences] メニューで設定します。

手順 3 [Tools] > [Axis 2 Artifacts] を使用して、クライアント コードを作成します。


 

クライアント コードを作成するときには、データバインディング方式として adb (Axis のデフォルト バインディング)を選択する必要があります。テスト ケース オプションも作成する必要があります。

クライアント コードが生成されます。テスト ケース内にメソッドのスタブが作成されます。このオブジェクトに正確に入力する必要があります。

Apache CXF によるクライアント コードの生成

CXF を使用して Web サービス クライアントを生成するための手順については、Apache の Web サイトを参照してください。

soapUI を使用して CXF クライアントを作成するために必要な手順は、次のとおりです。


手順 1 Apache CXF のライブラリをダウンロードします。

手順 2 CXF ライブラリの場所を soapUI の [Preferences] メニューで設定します。

手順 3 [ツール(Tools)] > [Apache CXF] を使用して、クライアント コードを作成します。


 

クライアント コードが生成されます。対象のクラスは次のとおりです。

RequisitionServicePortType_RequisitionServiceHttpPort_Client.java
 

このクラスには main メソッドがあり、WSDL で定義されているすべての処理をここから起動できます。これらの処理を起動するコードは、すでに用意されています。必要な各種変数を入力する必要があります。メソッドのスタブが作成されます。必要な操作は、オブジェクトを正しく入力することだけです。

要求管理のための Web サービス

RAPI 2 要求管理によって実行できる処理を、以下の表に要約します。

要求
説明

addComment

オープン状態の要求にコメントを追加します。

要求へのコメントの追加を参照してください。

cancelRequisition

要求内のすべてのサービス要求を含め、オープン状態の要求をキャンセルします。

要求のキャンセルを参照してください。

cancelRequisitionEntry

サービス要求をキャンセルします。要求内の最後のサービス要求の場合は、要求がキャンセルされます。

要求のキャンセルを参照してください。

getOpenRequisitions

オープン状態のすべての要求のリストを入手します。

要求のリストの入手を参照してください。

getRequisitions

オープン状態のすべての要求のリストを入手します。オプションでリストの内容を制限できます。

要求のリストの入手を参照してください。

getRequisitionStatus

指定した要求のステータスを入手します。

要求のステータスの入手を参照してください。

getServiceDefinition

要求を行う対象のサービスの定義を入手します。

getServiceDefinition 応答を参照してください。

submitRequisition

新しい要求を送信します。

submitRequisition の応答の例を参照してください。


RAPI 2 では、要求の送信にグローバル OOB 設定ではなく、OOB 権限が必要です。OOB 権限の詳細については、『Cisco Prime Service Catalog Designer Guide』の「Organization Design」の章を参照してください。


Web サービスの認証

Service Catalog で公開される Web サービスは、すべて認証される必要があります。認証されていない Web サービス コールは、遮断および停止する必要があります。

Service Catalog の Web サービスによる認証は、以下の方法で実行できます。

  • セッションごとの認証
  • 要求ごとの認証

認証されてないユーザは、Web サービス呼び出しを正しく実行することができません。グローバル設定の [Web サービスの有効化(Enable Web Service)] をオフにすると、Service Catalog の Web サービスにアクセスできなくなります。デフォルトでは、この設定はオフになっています。

セッションごとの認証

この方法では、ユーザは最初に Authentication Web サービス コールを実行して、ユーザを認証します。その後、サーバがそのユーザに対してセッションを確立します。このセッションが有効な間、ユーザはその他の Web サービス コールを実行できます。セッションごとの認証要求は、AuthenticationService WSDL に含まれています。

認証要求のフォーマットは以下のとおりです。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://authentication.api.newscale.com">
<soapenv:Header/>
<soapenv:Body>
<aut:authenticate>
<aut:userName>?</aut:userName>
<aut:password>?</aut:password>
</aut:authenticate>
</soapenv:Body>
</soapenv:Envelope>

認証時のエラー コードは、ユーザ アカウントのパスワードの期限切れや失敗したパスワード試行により、ロックされているかどうかが示されます。ユーザ アカウントのロックを解除するには、システム管理者に問い合わせてください。


) また、ユーザ認証のエラー コードは、ユーザ アカウントが猶予期間であるかどうかと、ユーザ パスワードの更新期限の日付も示します。エラー コードの詳細については、REST/Web サービスのエラー メッセージを参照してください。


要求ごとの認証

この方法では、Web サービスを認証するための個別のコールはありません。ユーザは各 Web サービス コールの一部として SOAP ヘッダーに認証情報を入れて送信します。Service Catalog の Web サービスに対する認証ハンドラが、そのユーザを認証するかどうかを確認します。このユーザに対してセッションがまだ確立されていない場合は、ハンドラが認証情報を SOAP ヘッダーから読み取ります。認証情報が存在すれば、ハンドラがユーザの認証を試みます。認証情報がない場合や、有効でない場合、ハンドラはクライアントに対して該当するエラー コードおよびエラー メッセージと共に例外をスローします。

暗号化

SOAP ヘッダーに指定されるパスワードは、暗号化された形式だけを受け入れるように設定されている場合があります。暗号化パスワードを強制するには、Administration モジュールの [暗号化されたパスワードを受け入れる(Accept Encrypted Password)] 設定を有効にします。暗号化ユーティリティは、パスワードの暗号化された値を取得するサイト管理者ロールを持つユーザが使用できます。このユーティリティにアクセスするには、次のブラウザ ページを開きます。

http://<server>:<port>/RequestCenter/EncryptedPassword.jsp

Web サービスの認証メカニズム

Service Catalog で公開されている各 Web サービスには、関連付けられたシステム権限があります。認証ハンドラでも、指定したユーザが Web サービスにアクセス(または実行)できるかどうかを確認します。ユーザに適切なシステム権限があれば、ユーザは処理を続行できます。適切なシステム権限がない場合は、クライアントに対してエラー コードとエラー メッセージと共に例外をスローします。

SOAP 認証と Directory Integration との相互関係

Directory Integration がイネーブルでない場合は、SOAP 要求が発行される前に、指定したユーザが個人ディレクトリに存在している必要があります。

Directory Integration がイネーブルで、[ログイン(Login)] イベントに [個人のインポート(Import Person)] の処理が含まれている場合は、ユーザのプロファイルを入手する際に外部ディレクトリが確認の対象となり、その情報が個人ディレクトリに挿入されます。この方法を取るには、ディレクトリ情報に適切な Web サービス権限を付与するロールが含まれているか、ユーザが属する事業部(またはサービス チーム)にそのようなロールが事前に割り当てられている必要があります。したがって、使用する SOAP アカウントはデータベースに事前に入力し、これらのアカウントが要求を送信する前に、アカウントに対して適切な権限を割り当てておくことを推奨します。

Directory Integration が有効で、シングル サインオン(SSO)だけを行うように [ログイン(Login)] イベントが設定されている場合は、ディレクトリ イベントを完全にバイパスし、個人ディレクトリに対する単純認証にフォールバックするオプションがあります。デフォルトでは Web サーバへの SOAP 要求があり、SSO が成功した場合、SSO のユーザは、Web サービスのセッション ユーザになります。そのためには、SOAP ヘッダーにユーザ クレデンシャルを含めない必要があります。ただし、優先クレデンシャルが SOAP 要求ヘッダーに指定されている場合は、そのクレデンシャルを使用して、外部ディレクトリではなく、個人ディレクトリに対して認証を行います。つまり、SOAP ヘッダーのユーザ クレデンシャルの存在は、認証をローカルで行うか、または外部で行うかを制御します。

[ログイン(Login)] イベントの Directory Integration に外部認証の手順(SSO との組み合わせの有無にかかわらず)が含まれる場合、認証は必ずディレクトリ データソースに対して実行されます。

サービス定義の入手

getServiceDefinition 要求は、指定したサービスが記述されたメタデータを返します。要求を送信するには、このメタデータが必要です。グリッド ディクショナリを含むサービスにこの操作を使用することは、このリリースではサポートされていません。そのようなサービスに対して操作を呼び出すと、エラーが返されます。

getServiceDefinition 要求

この要求では、その定義を必要とするサービスの名前を指定します。

soapUI で、[getServiceDefinition] ノードの下にある要求の例(Request1)を右クリックして、[要求エディタの表示(Show Request Editor)] をクリックします。生成された要求が表示されます。疑問符(?)は、値を必要とするすべての XML 要素を示します。

図 2-1 要求

SOAP 要求にはエンドポイントを指定する必要があります。この要求のプロパティ(および上図のメニューバー)をよく見ると、エンドポイントがまだ定義されていないことがわかります。これを以下の RAPI 2 サービスのエンドポイントで置き換えます。

http://<ServerName>/RequestCenter/services/ RequisitionService

ここで、 RequisitionService は wsdl 名です。

次に、Request Editor のメニューバーにある [Creates a copy of this request] アイコン( )を使用して、この要求をコピーします。このプロトタイプの要求は参照用に残しておきます。コピーを使用して、疑問符の部分を置き換え、認証条件のほか、イニシエータやカスタマーのログイン名、対象とするサービスの名前などを入力します。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://requisition.api.newscale.com">
<soapenv:Header>
<req:AuthenticationToken>
<req:Username>admin</req:Username>
<req:Password>admin</req:Password>
</req:AuthenticationToken>
</soapenv:Header>
<soapenv:Body>
<req:getServiceDefinition>
<req:initiatorLoginName>admin</req:initiatorLoginName>
<req:customerLoginName>mthurston</req:customerLoginName>
<req:serviceName>New Standard Laptop Computer</req:serviceName>
</req:getServiceDefinition>
</soapenv:Body>
</soapenv:Envelope>

getServiceDefinition 応答

getServiceDefinition 要求を送信するには、Request Editor ウィンドウの左上にある [Submit request to specified URL] ボタン( )をクリックします。応答が [要求エディタ(Request Editor)] 内の要求の右側に表示されます。

getServiceDefinition に対する応答では、サービスについてのメタデータが返されます。以下の表に要約を示します。

表 2-3 getServiceDefinition に対する応答

XML 要素(およびドキュメントの階層)
説明

Service

 

name

サービスの名前

pricingmodel

 

quantity

オーダーするサービスの数量

version

サービスのバージョン番号

Dictionaries

 

Dictionary

各サービスには 1 つ以上のディクショナリが含まれます。

name

ディクショナリの名前

readable

オーダー時点で、Service Designer のアクティブ フォーム コンポーネントにあるアクセス コントロールに従って、ディクショナリが読み取り可能であれば true、そうでない場合は false。

writable

オーダー時点で、Service Designer のアクティブ フォーム コンポーネントにあるアクセス コントロールに従って、ディクショナリが書き込み可能であれば true、そうでない場合は false。

Fields >

 

DictionaryField

各ディクショナリには 1 つ以上のフィールドが含まれます。

canSelectMultiple

このフィールドに対して複数の値を選択できるかどうかを示します。

defaultValue

フィールドのデフォルト値

fieldDataType

フィールドのデータ型(数値、日付など)

fieldName

フィールドの名前

inputType

フィールドの html の入力タイプ

label

フィールドのラベル

mandatory

このフィールドが必須の場合は true、必須でない場合は false。

maxLength

フィールドの最大長

selectableValues

フィールドに対して選択可能な値

各ディクショナリと、ディクショナリ内の各フィールドが記述されています。オーダー時点でディクショナリに対して指定されているアクセス コントロールは、正確な形式の submitRequisition 要求を記述するのに不可欠です。オーダー時点でカスタマーから読み込みおよび書き込み可能なディクショナリだけが応答に取り込まれます。これは、submitRequisition 要求に取り込む必要があります。

<name>Customer_Information</name>
<readable>true</readable>
<writable>true</writable>
</Dictionary>

「New Standard Laptop Computer」に対する完全な getServiceDefinitionResponse は、「要求と応答の例」に記載してあります。

要求の送信

submitRequisition 要求を送信する前に getServiceDefinition 要求を実行する必要はありません。ただし、getServiceDefinition では、現在のサービスのバージョンに関する有効な submitRequisition メッセージの記述に必要な情報が返されます。

  • サービスの現在のバージョンは必須です。バージョン番号は、サービス定義自体、または含まれているアクティブ フォーム コンポーネント、またはディクショナリが更新されたときに、必ず増分されます。
  • getServiceDefinition 要求は、どのフィールドが必須であるか指定します。送信要求にはすべての必須フィールドのデータが含まれる必要があります。
  • 送信する要求には、すべての必須ディクショナリとフィールドがリストされている必要があります。ディクショナリ、またはそれぞれのディクショナリ内のフィールドの表示順序は任意です。
  • ブラウザ側でトリガされるように設定されたフォーム ルールは、Web サービスに影響しません。フォーム ルールによって入力される必要がある選択リストやデフォルト値がある場合、それらのルールが検証およびワークフローの開始前に実行されるように、After Submission イベントと関連付ける必要があります。
  • getServiceDefinition 要求では、各フィールドに指定されているデフォルト値も返されます。これには、カスタマーまたはイニシエータ情報のための解決済みの Lightweight 名前空間などが含まれます。これらの値は通常は必須であり、submitRequisition 要求で指定する必要があります。
  • サービスの定義にオプション(単一選択、複数選択、およびオプション ボタン)を伴うフィールドがあり、それらのオプションがアクティブ フォーム コンポーネントの [Display Options](HTML Representation)ページを使用して定義されている場合、getServiceDefinition 要求を使用して、そのサービスに対する要求を送信できます。オプションがデータ取得ルールによって指定されているときも、サービス要求は送信できますが、そのフィールドの値が有効なオプションであるかどうかの確認は、送信側のプログラムの責任になります。

submitRequisition 要求では、My Services から要求が送信されるときに発生するオーダーの時間が、基本的に省略されます。条件付きルール、データ取得ルール、または ISF は、送信された要求と一緒には実行されません。したがって、このような仕組みがディクショナリ フィールドの値の指定や評価の実行に使用されている場合は、これらの値を指定するための別の手段を探す必要があります。グリッド ディクショナリを含むサービスにこの操作を使用することは、このリリースではサポートされていません。そのようなサービスに対して操作を呼び出すと、エラーが返されます。

submitRequisition 要求

オーダー時点で表示または編集が可能なディクショナリは、submitRequisition 要求の <section> ノードとして組み込む必要があります。すべての必須フィールドとその値を指定する必要があります。オプションのフィールドには値を指定する必要はありません(しかし、soapUI によって挿入された疑問符は削除する必要があります)。ディクショナリの順序とフィールドの順序は、サービス定義での順序と一致する必要はありませんが、フィールドは対応するディクショナリノードの下にある必要があります。

表 2-4 submitRequisition 要求

XML 要素(およびドキュメントの階層)
説明

initiatorLoginName

イニシエータのログイン名

customerLoginName

カスタマーのログイン名

serviceRequests > ServiceRequest

複数のサービス要求を指定できます。

name

サービスの名前

quantity

オーダーされるサービスの数量

version

サービスのバージョン

Sections > Section

各サービスには複数のディクショナリ(セクション)を指定できます。

name

ディクショナリの名前

Fields > Field

各ディクショナリには複数のフィールドを指定できます。

name

フィールドの名前

value > string

このフィールドに設定する値

たとえば、ディクショナリ RC_ServiceLocation 内の ZipCode フィールドの値を「07201」に設定する XML は、以下のようになります。

<req:Section>
...
<req:fields>
...
<req:Field>
<req:name>ZipCode</req:name>
<req:value>
<req:string 07201/>
</req:value>
</req:Field>
</req:fields>
<req:name>RC_ServiceLocation</req:name>
</req:Section>

submitrequisition の応答

要求を送信する要求が成功すると、応答には作成された要求の要求 ID と、その要求の他の属性が含まれます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:submitRequisitionResponse xmlns:ns1="http://requisition.api.newscale.com">
<ns1:submitRequisitionResult ns1:customer="admin admin"
ns1:dueDate="2009-05-08T16:14:26.267-07:00"
ns1:requisitionId="186"
ns1:initiator="admin admin"
ns1:startedDate="2009-04-30T18:14:26.110-07:00"
ns1:status="Ongoing"/>
</ns1:submitRequisitionResponse>
</soap:Body>
</soap:Envelope>

submitRequisitionResult 応答の属性を、次の表に要約します。

表 2-5 submitrequisition の応答

XML 要素
説明

submitRequisitionResponse > submitRequisitionResult

この応答には、サービス要求内にあるサービスと同じ数のエントリが含まれます。

customer

要求のカスタマー名

dueDate

要求の期限

requisitionId

要求の要求 ID

initiator

要求のイニシエータ

startedDate

要求が開始された日付

status

要求のステータス

要求が失敗すると、エラー メッセージが返されます。発生する可能性のあるエラーは、「付録 B:RAPI のエラー メッセージ」に記載されています。エラー メッセージは、次の例に示すように、必ず「SOAP fault」という書式で表されます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>The version specified in the request does not match the version in the database for service 'New Standard Laptop Computer'. Please get the latest service definition.</faultstring>
<detail>
<RequisitionFault xmlns="http://requisition.api.newscale.com">
<errorCode>REQ_0018</errorCode>
<errorMessage>The version specified in the request does not match the version in the database for service 'New Standard Laptop Computer'. Please get the latest service definition.</errorMessage>
</RequisitionFault>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
 

要求のリストの入手

getRequisitions と getOpenRequisitions の処理では、オープン状態の要求についての情報を返します。これらは要求に含めることのできる引数が異なります。

これらの処理は、要求の管理に役立つ場合があります。たとえば、オープンな状態の要求のリストが返されたら、その中から、ユーザ定義の期限を超えた特定のタイプ(特定のサービスについて)を調べることができます。

getOpenRequisitions 要求

getOpenRequisitions は、指定した最大数まで、オープン状態の要求をすべて返します。要求は、要求 ID の降順で返されます。この要求は、一部の古い Service Catalog 統合ポイントとの下位互換性のためだけにサポートされているため、Web サービスで使用しないでください。

getRequisitions 要求

getRequisitions は、指定した最大数まで、要求をすべて返します。返される要求の表示タイプやステータスを指定することもできます。この要求は、一部の古い Service Catalog 統合ポイントとの下位互換性のためだけにサポートされているため、Web サービスで使用しないでください。

要求のステータスの入手

getRequisitionStatus の処理では、指定した要求の承認やタスク プランのステータスに関する情報を返します。詳細度は、My Services ユーザが提供計画を表示した場合の内容と同程度です。

図 2-2 getRequisitionStatus

getRequisitionStatus 要求

この要求は、要求の現在のステータスに関する情報を返します。

表 2-6 getRequisitionStatus

XML 要素(およびドキュメントの階層)
説明

loginUserName

情報を要求するユーザの名前。このユーザは要求を表示する権限を持っている必要があります。

requisitionid

紹介される要求の ID。

GetRequisitionStatus 応答

要求を取得する要求が成功すると、その応答には要求に関する情報が含まれます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
</soap:Body>
</soap:Envelope>

get*RequisitionsResult 応答の属性を、以下の表に要約します。

表 2-7 GetRequisitionStatus 応答

XML 要素
説明

getRequisitionStatusResponse > get*RequisitionsResult

 

RequisitionEntryStatuses > RequisitionEntryStatus

要求内の各サービスに対する 1 つのステータス ブロック

itemNumber

要求内でサービスに割り当てられた連続番号

quantity

サービス オーダーの数

requisitionEntryId

サービスの要求エントリ ID

serviceName

サービスの名前

status

要求エントリの現在のステータス

requisitionStepStatuses > RequisitionStepStatus

サービスの提供計画に設定されている各時点についての StepStatus

dueDate

現在の承認、確認、またはタスクの期限の日付

name

提供計画での時点。(「Service Group Authorization」または「Delivery project for <service name>」など)

stepStatus

タスクのステータス。(「In Progress」、「Pending」、「Completed」など)

要求へのコメントの追加

addComments によって、指定した要求にユーザのコメントを追加します。

addComments 要求

この要求では、指定したコメントを指定した要求に追加します。指定されたユーザは、要求にアクセスする権限を持っている必要があります。

表 2-8 addComments 要求

XML 要素(およびドキュメントの階層)
説明

loginUserName

コメントを追加するユーザの名前

requisitionid

対象となる要求の ID

commentText

ユーザ コメントのテキスト

要求のキャンセル

cancelRequisition は、指定したサービス要求をキャンセルするために使用します。要求に含まれるすべてのサービスがキャンセルされます。

cancelrequisitionentry は、サービス要求内にある指定したサービス(要求エントリ)をキャンセルします。要求内の唯一(または最後)のサービスの場合は、要求がキャンセルされます。そうでない場合は、ステータスは変更されないままになります。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req=>
<soapenv:Header>
<req:AuthenticationToken>
<req:Username>admin</req:Username>
<req:Password>admin</req:Password>
</req:AuthenticationToken>
</soapenv:Header>
<soapenv:Body>
<req:cancelRequisition>
<req:loginUserName>ltierstein</req:loginUserName>
<req:requisitionId>99</req:requisitionId>
</req:cancelRequisition>
</soapenv:Body>
</soapenv:Envelope>
The response is shown below (with formatting added for clarity):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:cancelRequisitionResponse xmlns:ns1="http://requisition.api.newscale.com">
<ns1:cancelRequisitionResult
ns1:closedDate="2009-06-02T12:04:32.837-07:00"
ns1:customer="Leslie Tierstein"
ns1:dueDate="2009-04-03T15:00:00-07:00"
ns1:id="99"
ns1:initiator="Leslie Tierstein"
ns1:startedDate="2009-04-03T09:55:54.843-07:00"
ns1:status="Cancelled"/>
</ns1:cancelRequisitionResponse>
</soap:Body>
</soap:Envelope>

タスク管理用の Web サービス

概要

タスク管理用の Web サービスから実行できる処理を、以下の表に要約します。

表 2-9 タスク管理用の Web サービス

要求
説明

approveTask

承認/許可の許可

getAuthorizations

承認の入手

getAuthorizationsForUser

指定したユーザの承認の入手

getMyAuthorizations

指定した人に割り当てられている承認の入手

rejectSelectedReqEntry

指定したサービス(要求エントリ)の拒否

rejectTask

承認/許可の拒否

reviewTask

「確認」タスクを確認済みとしてマーク

承認のリストの入手

getAuthorizations および getMyAuthorizations 操作は、「In Progress」である承認についての情報を返します。これらは要求に含めることのできる引数が異なります。

要求サービスの操作では、操作の対象となる Web Services Administrative ユーザ(SOAP ヘッダーで指定)や Service Catalog ユーザごとに個別のプロビジョニングを行いますが、それとは異なり、これらのタスク サービスの操作では、ユーザを 1 名のみ SOAP ヘッダーに指定できます。したがって、承認を入手または処理されるユーザは、Web サービス モジュールの Task Access 権限を持っている必要があります。手順は次のとおりです。

  • この権限が含まれるロールを作成します。承認を実行する権限は My Services Professional ロールに含まれているので、このロールの子を作成します。

 

  • Web サービスを使用して、自身の承認を確認または処理する必要のあるユーザに、このロールを割り当てます(追加するか、または My Services Professional の代わりとします)。

getMyAuthorizations 要求

getMyAuthorizations は、すべてのオープン状態の要求を、Service Catalog のクレデンシャルが SOAP ヘッダーに指定されているユーザに対して、指定されている最大数まで返します。要求は、要求 ID の降順で返されます。この要求は、JSR168 準拠の承認ポートレットでの使用だけがサポートされており、Web サービスでは使用できません。

getAuthorizations 要求

getAuthorizations は、リストで指定した承認から開始して、特定の承認の最大数まで、すべての承認を返します。返される要求の表示タイプやステータスを指定することもできます。この要求は、JSR168 準拠の承認ポートレットでの使用だけがサポートされており、Web サービスでは使用できません。

getAuthorizationsForUser 要求(内部用途のみ、非サポート)

これは上記の getAuthorizations とよく似ていますが、承認を入手する対象のユーザを指定できる userLoginName パラメータが追加されています。

getAuthorizationsForUser SOAP 要求の例

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:smt="http://smtask.api.newscale.com">   <soapenv:Header>
      <smt:AuthenticationToken>
         <smt:Username>admin</smt:Username>
         <smt:Password>admin</smt:Password>
      </smt:AuthenticationToken>
   </soapenv:Header>
   <soapenv:Body>
      <smt:getAuthorizationsForUser>
         <smt:userLoginName>qreviewer</smt:userLoginName>
         <smt:startRow>0</smt:startRow>
         <smt:numberOfRows>5</smt:numberOfRows>
         <smt:status>1</smt:status>
         <smt:viewType>2</smt:viewType>
      </smt:getAuthorizationsForUser>
   </soapenv:Body>
</soapenv:Envelope>

getAuthorizations 要求および getAuthorizationsForUser 要求に役立つパラメータ

表 2-10 getAuthorizations および getAuthorizationsForUser 要求のパラメータと値

パラメータ

Status

処理中:1

キャンセル済み:2

承認済み:3

拒否済み:4

確認済み:5

すべて:6

ViewType

自身の承認:1

自身の割り当ておよび非割り当て:2

承認の許可または拒否

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:smt="http://smtask.api.newscale.com">
<soapenv:Header>
<smt:AuthenticationToken>
<!--Optional:-->
<smt:Username>admin</smt:Username>
<!--Optional:-->
<smt:Password>admin</smt:Password>
</smt:AuthenticationToken>
</soapenv:Header>
<soapenv:Body>
<smt:approveTask>
<smt:approverLoginName>maria</smt:approverLoginName>
<smt:taskID>281</smt:taskID>
</smt:approveTask>
</soapenv:Body>
</soapenv:Envelope>
 

応答は以下に示すとおりです(読みやすくするために書式化してあります)。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:approveTaskResponse xmlns:ns1="http://smtask.api.newscale.com">
<ns1:approveTaskResult
ns1:actionID="5"
ns1:requisitionId="103"
ns1:status="approved"
ns1:taskName="Computer Memory - Upgrade - APPROVAL NEEDED"/>
</ns1:approveTaskResponse>
</soap:Body>
</soap:Envelope>

 

要求と応答の

getServiceDefinition 応答

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:getServiceDefinitionResponse xmlns:ns1=>
<ns1:getServiceDefinitionResult>
<dictionaries>
<Dictionary>
<fields>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>ModelNumber</fieldName>
<inputType>text</inputType>
<label>Model Number</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>AssetTag</fieldName>
<inputType>text</inputType>
<label>Asset Tag</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
</fields>
<name>NewLaptop</name>
<readable>true</readable>
<writable>true</writable>
</Dictionary>
<Dictionary>
<fields>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>admin</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>First_Name</fieldName>
<inputType>text</inputType>
<label>First Name</label>
<mandatory>false</mandatory>
<maxLength>100</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>admin</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Last_Name</fieldName>
<inputType>text</inputType>
<label>Last Name</label>
<mandatory>false</mandatory>
<maxLength>100</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>admin</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Login_ID</fieldName>
<inputType>hidden</inputType>
<label>Login ID</label>
<mandatory>false</mandatory>
<maxLength>200</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Personal_Identification</fieldName>
<inputType>text</inputType>
<label>Personal_Identification</label>
<mandatory>false</mandatory>
<maxLength>510</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>ed @cisco.com</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Email_Address</fieldName>
<inputType>text</inputType>
<label>Email Address</label>
<mandatory>false</mandatory>
<maxLength>1024</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>Site Administration</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Home_Organizational_Unit</fieldName>
<inputType>text</inputType>
<label>Department</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Company_State</fieldName>
<inputType>text</inputType>
<label>State</label>
<mandatory>false</mandatory>
<maxLength>100</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Supervisor</fieldName>
<inputType>hidden</inputType>
<label>Supervisor</label>
<mandatory>false</mandatory>
<maxLength>100</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Supervisor_Email</fieldName>
<inputType>hidden</inputType>
<label>Supervisor Email</label>
<mandatory>false</mandatory>
<maxLength>1024</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Custom_1</fieldName>
<inputType>text</inputType>
<label>Custom_1</label>
<mandatory>false</mandatory>
<maxLength>200</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Custom_2</fieldName>
<inputType>text</inputType>
<label>Custom_2</label>
<mandatory>false</mandatory>
<maxLength>200</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
</fields>
<name>Customer_Information</name>
<readable>true</readable>
<writable>true</writable>
</Dictionary>
<Dictionary>
<fields>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>admin</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>First_Name</fieldName>
<inputType>text</inputType>
<label>First Name</label>
<mandatory>false</mandatory>
<maxLength>100</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>admin</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Last_Name</fieldName>
<inputType>text</inputType>
<label>Last Name</label>
<mandatory>false</mandatory>
<maxLength>100</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>admin</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Login_ID</fieldName>
<inputType>text</inputType>
<label>Login ID</label>
<mandatory>false</mandatory>
<maxLength>200</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Personal_Identification</fieldName>
<inputType>hidden</inputType>
<label>Personal Identification</label>
<mandatory>false</mandatory>
<maxLength>510</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>ed @cisco.com</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Email_Address</fieldName>
<inputType>text</inputType>
<label>Email Address</label>
<mandatory>false</mandatory>
<maxLength>1024</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>Site Administration</string>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Home_Organizational_Unit</fieldName>
<inputType>text</inputType>
<label>Department</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
</fields>
<name>Initiator_Information</name>
<readable>false</readable>
<writable>false</writable>
</Dictionary>
<Dictionary>
<fields>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string>Yes</string>
</defaultValue>
<fieldDataType>Boolean</fieldDataType>
<fieldName>PerformWork</fieldName>
<inputType>radio</inputType>
<label>Will work be performed at the customer location?</label>
<mandatory>false</mandatory>
<maxLength>0</maxLength>
<selectableValues>
<string>Yes</string>
<string>No</string>
</selectableValues>
</DictionaryField>
</fields>
<name>RC_PerformWork</name>
<readable>true</readable>
<writable>true</writable>
</Dictionary>
<Dictionary>
<fields>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Street1</fieldName>
<inputType>text</inputType>
<label>Street</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Street2</fieldName>
<inputType>hidden</inputType>
<label>Street2</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Floor</fieldName>
<inputType>hidden</inputType>
<label>Floor</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>OfficeCubeRoom</fieldName>
<inputType>text</inputType>
<label>OfficeCubeRoom</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Building</fieldName>
<inputType>hidden</inputType>
<label>Building</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>City</fieldName>
<inputType>text</inputType>
<label>City</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>State</fieldName>
<inputType>text</inputType>
<label>State</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>PostalCode</fieldName>
<inputType>text</inputType>
<label>Zip Code</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Country</fieldName>
<inputType>hidden</inputType>
<label>Country</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>MailStop</fieldName>
<inputType>hidden</inputType>
<label>MailStop</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Region</fieldName>
<inputType>hidden</inputType>
<label>Region</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>District</fieldName>
<inputType>hidden</inputType>
<label>District</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>LocationName</fieldName>
<inputType>hidden</inputType>
<label>LocationName</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>LocationCode</fieldName>
<inputType>hidden</inputType>
<label>LocationCode</label>
<mandatory>false</mandatory>
<maxLength>50</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
</fields>
<name>RC_RequestorLocation</name>
<readable>true</readable>
<writable>true</writable>
</Dictionary>
<Dictionary>
<fields>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Street</fieldName>
<inputType>text</inputType>
<label>Street</label>
<mandatory>false</mandatory>
<maxLength>40</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>OfficeCubeRoom</fieldName>
<inputType>text</inputType>
<label>OfficeCubeRoom</label>
<mandatory>false</mandatory>
<maxLength>40</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>State</fieldName>
<inputType>text</inputType>
<label>State</label>
<mandatory>false</mandatory>
<maxLength>40</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>City</fieldName>
<inputType>text</inputType>
<label>City</label>
<mandatory>false</mandatory>
<maxLength>40</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>BuildingName</fieldName>
<inputType>hidden</inputType>
<label>BuildingName</label>
<mandatory>false</mandatory>
<maxLength>40</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>Floor</fieldName>
<inputType>hidden</inputType>
<label>Floor</label>
<mandatory>false</mandatory>
<maxLength>40</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
<DictionaryField>
<canSelectMultiple>false</canSelectMultiple>
<defaultValue>
<string/>
</defaultValue>
<fieldDataType>Text</fieldDataType>
<fieldName>ZipCode</fieldName>
<inputType>text</inputType>
<label>Zip Code</label>
<mandatory>false</mandatory>
<maxLength>15</maxLength>
<selectableValues>
<string/>
</selectableValues>
</DictionaryField>
</fields>
<name>RC_ServiceLocation</name>
<readable>true</readable>
<writable>true</writable>
</Dictionary>
</dictionaries>
<estimatedpriceperunit>1500.0</estimatedpriceperunit>
<name>New Standard Laptop Computer</name>
<pricingmodel>0</pricingmodel>
<quantity>0</quantity>
<serviceId>5</serviceId>
<version>32</version>
</ns1:getServiceDefinitionResult>
</ns1:getServiceDefinitionResponse>
</soap:Body>
</soap:Envelope>

submitRequisition の応答の例

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req=>
<soapenv:Header>
<req:AuthenticationToken>
<req:Username>admin</req:Username>
<req:Password>admin</req:Password>
</req:AuthenticationToken>
</soapenv:Header>
<soapenv:Body>
<req:submitRequisition>
<req:initiatorLoginName>admin</req:initiatorLoginName>
<req:customerLoginName>admin</req:customerLoginName>
<req:serviceRequests>
<req:ServiceRequest>
<req:name>New Standard Laptop Computer</req:name>
<req:quantity>1</req:quantity>
<req:sections>
<req:Section>
<req:fields>
<req:Field>
<req:name>ModelNumber</req:name>
<req:value>
<req:string>T60</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>AssetTag</req:name>
<req:value>
<req:string>ABC123</req:string>
</req:value>
</req:Field>
</req:fields>
<req:name>NewLaptop</req:name>
</req:Section>
<req:Section>
<req:fields>
<req:Field>
<req:name>First_Name</req:name>
<req:value>
<req:string>admin</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Last_Name</req:name>
<req:value>
<req:string>admin</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Login_ID</req:name>
<req:value>
<req:string>admin</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Personal_Identification</req:name>
<req:value>
<req:string />
</req:value>
</req:Field>
<req:Field>
<req:name>Email_Address</req:name>
<req:value>
<req:string>training3@cisco.com</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Home_Organizational_Unit</req:name>
<req:value>
<req:string>Site Administration</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Company_State</req:name>
<req:value>
<req:string />
</req:value>
</req:Field>
<req:Field>
<req:name>Supervisor</req:name>
<req:value>
<req:string />
</req:value>
</req:Field>
<req:Field>
<req:name>Supervisor_Email</req:name>
<req:value>
<req:string />
</req:value>
</req:Field>
<req:Field>
<req:name>Custom_1</req:name>
<req:value>
<req:string />
</req:value>
</req:Field>
<req:Field>
<req:name>Custom_2</req:name>
<req:value>
<req:string />
</req:value>
</req:Field>
</req:fields>
<req:name>Customer_Information</req:name>
</req:Section>
<req:Section>
<req:fields>
<req:Field>
<req:name>First_Name</req:name>
<req:value>
<req:string>admin</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Last_Name</req:name>
<req:value>
<req:string>admin</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Login_ID</req:name>
<req:value>
<req:string>admin</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Personal_Identification</req:name>
<req:value>
<req:string />
</req:value>
</req:Field>
<req:Field>
<req:name>Email_Address</req:name>
<req:value>
<req:string>training3@cisco.com</req:string>
</req:value>
</req:Field>
<req:Field>
<req:name>Home_Organizational_Unit</req:name>
<req:value>
<req:string>Site Administration</req:string>
</req:value>
</req:Field>
</req:fields>
<req:name>Initiator_Information</req:name>
</req:Section>
</req:sections>
<req:version>32</req:version>
</req:ServiceRequest>
</req:serviceRequests>
</req:submitRequisition>
</soapenv:Body>
</soapenv:Envelope>

getMyAuthorizations の応答の例

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:getMyAuthorizationsResponse xmlns:ns1="http://smtask.api.newscale.com">
<ns1:getMyAuthorizationsResult>
<ns1:Activity>
<activityFormId xmlns="http://smtask.api.newscale.com">2</activityFormId>
<activityTypeId xmlns="http://smtask.api.newscale.com">2</activityTypeId>
<actualDuration xmlns="http://smtask.api.newscale.com">0.0</actualDuration>
<agentId xmlns="http://smtask.api.newscale.com">0</agentId>
<clientOrganizationalUnit xmlns="http://smtask.api.newscale.com">
<authorizationStructure>0</authorizationStructure>
<billable>true</billable>
<costCenterCode xsi:nil="true"/>
<description xsi:nil="true"/>
<GUID>3C921968-6474-45B2-8D65-A1822E52782F</GUID>
<id>6</id>
<localeId>1</localeId>
<managerId>0</managerId>
<managerName xsi:nil="true"/>
<name>Field Sales</name>
<organizationalUnitTypeId>2</organizationalUnitTypeId>
<parentId>0</parentId>
<parentName xsi:nil="true"/>
<parentOrganizationalUnitGuid xsi:nil="true"/>
<placeId>0</placeId>
<placeName xsi:nil="true"/>
<recordStateId>1</recordStateId>
<tenantId>1</tenantId>
</clientOrganizationalUnit>
<clientOuId xmlns="http://smtask.api.newscale.com">6</clientOuId>
<creatorObjectId xmlns="http://smtask.api.newscale.com">57</creatorObjectId>
<creatorObjectInstId xmlns="http://smtask.api.newscale.com">9</creatorObjectInstId>
<customer xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<customerId xmlns="http://smtask.api.newscale.com">12</customerId>
<customerName xmlns="http://smtask.api.newscale.com">Terry Training</customerName>
<customerRoleId xmlns="http://smtask.api.newscale.com">0</customerRoleId>
<customerRoleName xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<defActivityId xmlns="http://smtask.api.newscale.com">0</defActivityId>
<depth xmlns="http://smtask.api.newscale.com">0</depth>
<displayOrder xmlns="http://smtask.api.newscale.com">0</displayOrder>
<dueOn xmlns="http://smtask.api.newscale.com">2009-06-03T23:00:00-07:00</dueOn>
<dueOnTz xmlns="http://smtask.api.newscale.com">149</dueOnTz>
<effort xmlns="http://smtask.api.newscale.com">0.5</effort>
<escalationLevel xmlns="http://smtask.api.newscale.com">0</escalationLevel>
<expectedDuration xmlns="http://smtask.api.newscale.com">8.0</expectedDuration>
<flagId xmlns="http://smtask.api.newscale.com">0</flagId>
<formURL xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<group xmlns="http://smtask.api.newscale.com">0</group>
<hasChildren xmlns="http://smtask.api.newscale.com">false</hasChildren>
<icon xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<id xmlns="http://smtask.api.newscale.com">422</id>
<instructions xmlns="http://smtask.api.newscale.com"/>
<isBusy xmlns="http://smtask.api.newscale.com">0</isBusy>
<isLast xmlns="http://smtask.api.newscale.com">false</isLast>
<lastChannelId xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<listCount xmlns="http://smtask.api.newscale.com">-1</listCount>
<nextActionId xmlns="http://smtask.api.newscale.com">5</nextActionId>
<overbookTime xmlns="http://smtask.api.newscale.com">0</overbookTime>
<parentId xmlns="http://smtask.api.newscale.com">0</parentId>
<performerActualDuration xmlns="http://smtask.api.newscale.com">0.0</performerActualDuration>
<performerId xmlns="http://smtask.api.newscale.com">11</performerId>
<performerName xmlns="http://smtask.api.newscale.com">Jared Roberts</performerName>
<performerOfficeId xmlns="http://smtask.api.newscale.com">0</performerOfficeId>
<performerRoleId xmlns="http://smtask.api.newscale.com">331</performerRoleId>
<performerRoleName xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<performerSharable xmlns="http://smtask.api.newscale.com">false</performerSharable>
<performerShared xmlns="http://smtask.api.newscale.com">false</performerShared>
<priority xmlns="http://smtask.api.newscale.com">0</priority>
<priorityName xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<processId xmlns="http://smtask.api.newscale.com">0</processId>
<projectActivityId xmlns="http://smtask.api.newscale.com">0</projectActivityId>
<reqId xmlns="http://smtask.api.newscale.com">170</reqId>
<retryCount xmlns="http://smtask.api.newscale.com">0</retryCount>
<scheduledStart xmlns="http://smtask.api.newscale.com">2009-06-03T15:00:00-07:00</scheduledStart>
<startedOn xmlns="http://smtask.api.newscale.com">2009-06-03T12:09:41.443-07:00</startedOn>
<startedOnTz xmlns="http://smtask.api.newscale.com">149</startedOnTz>
<stateId xmlns="http://smtask.api.newscale.com">6</stateId>
<stateName xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<stepId xmlns="http://smtask.api.newscale.com">4</stepId>
<stepLogicName xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<subject xmlns="http://smtask.api.newscale.com">Computer Memory - Upgrade - APPROVAL NEEDED</subject>
<taskUrl xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
<ticketId xmlns="http://smtask.api.newscale.com">175</ticketId>
<ticketObjectId xmlns="http://smtask.api.newscale.com">37</ticketObjectId>
<totalCost xmlns="http://smtask.api.newscale.com">0.0</totalCost>
<waiting xmlns="http://smtask.api.newscale.com">0</waiting>
<WDDXCheckList xsi:nil="true" xmlns="http://smtask.api.newscale.com"/>
</ns1:Activity>
</ns1:getMyAuthorizationsResult>
</ns1:getMyAuthorizationsResponse>
</soap:Body>
</soap:Envelope>

REST/Web サービスのエラー メッセージ

以下のエラー メッセージにおいて数値を波カッコで囲んだ記号の部分(「{0}」など)は、実際のエラー メッセージではエラーの発生元となったオブジェクトの名前や ID で置き換えられます。

AUTH_0001

このユーザはまだ認証されていないか、セッションがタイムアウトになっています。

AUTH_0002

ユーザ「{0}」の認証に失敗しました。

AUTH_0003

Service Catalog は SSO を使用するよう設定されていますが、設定の問題により SSO が正しく動作していません。

AUTH_0004

パスワードを正しく暗号化する必要があります。

AUTH_0005

ユーザ名のヘッダーが正しくありません。存在していないか、空白です。正確なヘッダーを送信してください。

AUTH_0006

Web サービスへのアクセスがオフになっています。

AUTH_0007

ユーザがこの Web サービスにアクセスできません。

AUTH_0008

SOAP ヘッダーの構造が無効であるか、セッションがタイムアウトしました。

AUTH_0009

リモート ユーザ名が無効です。有効な名前で再試行してください。

AUTH_0010

ユーザに、バージョン情報を表示する権限がありません。

AUTH_0011

アカウントがロックされています。システム管理者にお問い合わせください。

AUTH_0012

パスワードは <date> に期限切れになります。この日付より前にパスワードをリセットしないと、アカウントが停止されます。

つまり、パスワードが期限切れとなり、アカウントが停止します。

INFRA_0001

Service Catalog Business Engine キューが使用できず、非同期送信についての管理者設定がオンになっているため、要求を送信できません。後で再実行するか、管理者にお問い合わせください。

REQ_0001

イニシエータ「{0}」がシステム上で見つかりません。

REQ_0002

カスタマー「{0}」がシステム上で見つかりません。

REQ_0003

サービス「{0}」がシステム上で見つかりません。

REQ_0004

ユーザ「{0}」がシステム上で見つかりません。

REQ_0005

要求 ID「{0}」がシステム上で見つかりません。

REQ_0006

指定した要求 ID「{1}」が一致しないため、要求エントリ「{0}」をキャンセルできません。

REQ_0007

指定したサービス「{1}」が一致しないため、要求エントリ「{0}」をキャンセルできません。

REQ_0008

ユーザにこの要求をキャンセルするための権限がありません。要求をキャンセルできるのは要求のオーナーだけです。

REQ_0009

この要求はすでにキャンセルされています。

REQ_0010

カスタマー「{0}」にはサービス「{1}」をオーダーする権限がありません。

REQ_0011

サービス「{0}」はオーダーできません。

REQ_0012

この要求にコメントを追加するための権限がユーザにありません。

REQ_0013

サービス フォームの必須フィールド「{0}」に値が入力されていません。

REQ_0014

サービス フォーム フィールド「{0}」が、許可されている最大の長さを超えています。

REQ_0015

フィールド「{0}」に有効な数字を入力してください。

REQ_0016

サービス フォーム フィールド「{0}」には、値は 1 つしか指定できません。

REQ_0017

ユーザにこの要求にアクセスするための権限がありません。

REQ_0018

要求で指定されたバージョンが、サービス「{0}」のデータベースにあるバージョンと一致しません。最新のサービス定義を使用してください。

REQ_0019

イニシエータ「{0}」には、このカスタマー「{1}」に対する Order on Behalf 権限がありません。

REQ_0020

認証済みユーザ「{0}」に、Web サービスの RAPI システム アカウント権限がありません。

REQ_0021

このフィールド「{0}」に渡された値が、オプション リストにありません。

REQ_0022

このフィールド「{0}」の値に、設計されている値を超える量のデータが含まれています。

REQ_0023

このフィールド「{0}」に渡された値が、オプション リストにありません。

REQ_0024

サービス フォーム フィールド「{0}」に無効な日付形式が含まれています。

REQ_0025

サービス フォーム フィールド「{0}」に無効な日時形式が含まれています。

REQ_0026

サービス フォーム フィールド「{0}」で、指定されたログイン「{1}」がシステムに存在しません。ログイン名を入力してください。

REQ_0027

この要求 ID「{0}」はキャンセルできません。この要求は閉じられています。

REQ_0028

この要求 ID「{0}」は、変更可能な時点を過ぎています。この要求はキャンセルできません。

REQ_0029

この要求エントリ ID「{0}」はキャンセルできません。この要求エントリは閉じられています。

REQ_0030

サービス「{0}」のステータスが非アクティブです。

REQ_0031

この要求 ID「{0}」はキャンセルできません。この要求エントリはすでにキャンセルされています。

REQ_0032

このフィールド「{0}」に渡された値が、オプション リストにありません。

REQ_0033

このフィールド「{0}」に渡された値が、オプション リストにありません。

REQ_0034

このフィールド「{0}」の値に、設計されている値を超える量のデータが含まれています。

REQ_0035

ディクショナリ名「{0}」がこのサービス用に存在しません。フィールド名を修正してください。

REQ_0036

ディクショナリ フィールド「{0}」がこのディクショナリ「{0}」用に存在しません。フィールド名を修正してください。

REQ_0037

ユーザにこの要求エントリをキャンセルするための権限がありません。

REQ_0038

フィールドの数がこのディクショナリ「{0}」に一致しません。

REQ_0039

ディクショナリの数がこのサービス「{0}」に一致しません。

REQ_0040

ユーザ「{0}」は Service Catalog データベースに存在しません。LDAP からユーザのインポートを試みましたが、LDAP ルックアップが false に設定されています。

REQ_0041

OOB イベントが設定または有効にされていません。このユーザ「{0}」の LDAP 検索は実行されませんでした。

REQ_0042

LDAP からデータをインポート中にエラーが発生しました。

REQ_0043

ユーザ「{0}」が Service Catalog データベースと LDAP システムに存在しません。

REQ_0044

サービス フォームの個人検索イベントが設定されていないか、有効になっていません。このユーザ「{0}」の LDAP 検索が実行されませんでした。

REQ_0045

LDAP から個人をインポートするためのイベント処理が正しく設定されていません。

REQ_0046

このフィールド「{0}」には通貨記号なしの金額のみを入力してください。小数点として「.」を使用してください。

REQ_0047

このフィールド「{0}」には文字と数字だけを入力してください。

REQ_0048

このフィールド「{0}」には文字と数字だけを入力してください。

REQ_0049

ディクショナリ「{0}」が要求に複数回繰り返されています。特定のディクショナリは一度だけ要求に表示できます。

REQ_0050

ディクショナリ フィールド「{0}.{1}」が要求に複数回繰り返されています。特定のディクショナリ フィールドは一度だけ要求に表示できます。

REQ_0051

サービス「{0}」に 1 つ以上のグリッド ディクショナリが含まれています。この API はグリッド ディクショナリ値を持つ要求の送信を受け入れません。

REQ_0052

サービス フォームは次のエラーのために送信できませんでした:{0}

REQ_0053

サービス フォームは次のエラーのために送信できませんでした:必須フィールド {0} がありません

REQ_0054

オーダー モードに基づいた個々の送信だけが可能なサービスが 1 つ以上含まれているため、要求を送信できませんでした。

REQ_0055

プロセスが実行された最後の日付

REQ_0056

ディクショナリ「{0}」に対して許可される最大レコード数「{1}」に達しました。

REQ_0057

リクエスト ID「{0}」はすでに送信済みです。

REQ_0058

未送信の要求が見つかりません。

REQ_0059

オーダー モード オプションがサービス {0} に対して無効になっています。

REQ_0060

要求をキャンセルできません、または削除できません。

REQ_0061

複数の未送信要求が見つかりました。

REQ_0062

要求 {0} のエントリが見つかりません。

REQ_0063

要求 {0} のエントリをキャンセルできません、または削除できません。

REQ_0064

要求操作のためのアクセスが拒否されました。

REQ_0065

この要求の要求エントリが見つかりません。

REQ_0100

実行時の例外が発生しました。これは正規の Business Engine ワークフロー例外によって発生した可能性があります(Service Designer で定義されているためタスクのキャンセルが許可されていないなど)。タスク定義を確認してください。

REQ_0101

サービス フォーム データの読み取り中にランタイム エラーが発生しました。

REQ_0101

サービス フォーム データの読み取り中にランタイム エラーが発生しました。

TASK_0005

タスク「{0}」は拒否できません。

TASK_0008

タスク「{0}」がシステムにありません。

TASK_0001

ユーザ「{0}」には「{1}」を許可する権限がありません。

TASK_0002

ユーザ「{0}」には「{1}」を拒否する権限がありません。

TASK_0003

ユーザ「{0}」には「{1}」を確認する権限がありません。

TASK_0004

タスク「{0}」は許可タスクではありません。

TASK_0005

タスク「{0}」は拒否できません。

TASK_0006

タスク「{0}」は確認タスクではありません。

TASK_0008

タスク「{0}」がシステムにありません。

TASK_0009

指定したタスク ID「{1}」に対する要求エントリ ID「{0}」が一致しません。

TASK_0010

タスク「{0}」には複数の要求エントリを指定できません。

TASK_0011

タスク「{0}」には財務または OU の承認がありません。

TASK_0012

ユーザ「{0}」には、このタスク「{1}」に対する部分的な要求エントリを拒否する権限がありません。

TASK_0013

タスク「{0}」はすでに拒否されています。