プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebCenter Contentサービス・リファレンス
11gリリース1 (11.1.1)
B72418-04
  ドキュメント・ライブラリ
ライブラリ
目次へ移動
目次

前
 
次
 

2 サービスの使用

この章では、Oracle WebCenter Contentのサービスの使用方法について説明し、カスタム・サービスの例を示します。

この章の内容は次のとおりです。

2.1 サービスの概要

サービスとは、Oracle WebCenter Contentシステムで実行される関数またはプロシージャです。クライアントがOracle WebCenter Contentのシステムと通信したりOracle WebCenter Content Serverのデータベースにアクセスするには、Oracle WebCenter Contentのサービスをコールする(サービス・リクエストを行う)ことが唯一の方法です。

この項の内容は次のとおりです。

2.1.1 サービス・リクエストおよびサービス・レスポンス

どのようなサービスでも、外部的に(Oracle WebCenter Contentシステムの外から)でも内部的に(Oracle WebCenter Contentシステム自体の中で)でもコールできます。通常の場合、クライアント・サービスは外部的にコールされ、管理サービスは内部的にコールされます。サービスが要求されたら、該当する任意のパラメータがサービスに渡されます。サービスでは、指定されたパラメータに基づいて、サービスの属性、およびリクエストを実行するアクションを使用します。サービスはこれを受けて、外部的と内部的いずれか適した方法でレスポンスを返します。この項の内容は次のとおりです。

2.1.1.1 内部サービス・リクエスト

どのようなサービスも内部的にコールできますが、通常の場合、内部的にコールされるのは管理サービスのみです。内部サービス・リクエストは、Oracle WebCenter Content自体の中で行われ、結果はOracle WebCenter Contentのみに返されます。たとえば、START_SEARCH_INDEXサービスを使用すると、バックグラウンド・スレッドで自動的に、検索索引が更新または再構築されます。

2.1.1.2 外部サービス・リクエスト

どのような外部プログラムでもHTMLページでも、Oracle WebCenter Contentの任意のサービスをコールして、Oracle WebCenter Contentシステムに情報を要求したり、全文検索やメタデータ検索、ライブラリ・サービス、ワークフロー・サービス、サブスクリプション通知、コンテンツ変換機能など、指定した機能を実行できます。通常の場合、クライアント・サービスのみが外部的にコールされます(管理サービスは通常、内部的にコールされます)。たとえば、Content ServerのWebページで「検索」リンクをクリックすると、GET_DOC_PAGEサービスによってWebブラウザに標準的な検索ページが表示されます。このとき、次のURLセグメントが使用されます。

IdcService=GET_DOC_PAGE&Action=GetTemplatePage&Page=STANDARD_QUERY_PAGE

外部リクエストは、数多くのプロトコルのいずれかを使用して、クライアント(たとえばWebブラウザ)からWebサーバーに送信されます。サービス・コールには、サービスで必要とされる任意のパラメータが含まれている必要があります。Webサーバーは、任意の必須パラメータおよびオプション・パラメータとともに、サービス・リクエストをOracle WebCenter Contentシステムにルーティングします。次にOracle WebCenter Contentシステムは、提供されたパラメータを使用してサービスを実行します。検索サービスの場合は、検索リクエストが検索エンジンに送信されます。次にOracle WebCenter Contentシステムは結果をWebサーバーに返し、Webサーバーは結果をWebブラウザ・クライアントに返します。

図2-1 コンテンツ管理システムの要素の間での外部リクエストおよび外部レスポンス

図2-1の説明が続きます
「図2-1 コンテンツ管理システムの要素の間での外部リクエストおよび外部レスポンス」の説明

2.1.1.3 リクエストのパラメータ

サービス・リクエストには、サービスで必要とされるあらゆるパラメータが含まれている必要があります。たとえば、コンテンツ・アイテムの情報を取得するためにDOC_INFOサービスをコールするとき、このサービス・コールは、dID (生成されたコンテンツ・アイテムのリビジョンのID)をサービスに提供する必要があります。次のセグメントは、これが永続URLでどのように行われるかを示しています。

http://cs.example.com/cs/idcplg?
IdcService=DOC_INFO&dID=194

2.1.1.4 日付および時刻の書式設定

Content Server用の日付および時刻のデフォルトの書式設定は、「システム・プロパティ」ユーティリティ・インタフェースで「ローカライゼーション」タブを使用して決定されます。日付および時刻の一般的な書式は次のとおりです。

MM/DD/{yy} {hh:mm[:ss] {aa} [zzz]} !mAM,PM!zTimezoneCity
  • 日付の書式はY(年)、D(日)、M(月)をグループにまとめたもの、時刻の書式は、h(時間)、m(分)、s(秒)をグループにまとめたものです。文字の繰返し回数によって、使用される最小桁数が指定されます(たとえば、YY/MM/DD hh:mmだと04/12/09 12:12と指定され、MM/DD/YYYY hh:mm:ssだと09/12/2004 04:12:33になります)。

  • aは、午前と午後を示す記号(たとえば、AMまたはPM)を表しています。

  • mは分を表しています。

  • 中カッコ({ })は、このアイテムが、データ入力時には省略可能だが出力には常に表示されることを示しています。

  • 感嘆符(!)は、日付書式の追加指定を区切るときに使用します。たとえば、!mXXX,YYYとすると、午前と午後を示す記号が指定されます(XXXは「午前中」を意味する記号であり、YYYは「午後」を意味する記号です)。感嘆符の後ろにあるものはすべて、午前と午後を示す記号およびタイムゾーンを示す記号を、日付書式とともに渡します。

2.1.1.5 大/小文字の区別の検討事項

大/小文字の区別は、Oracle WebCenter Contentの標準サービスをコールするときに重要です。

  • パラメータ: パラメータでは、大文字と小文字が区別されます。たとえば、IdcServiceパラメータを指定するときには、IDCSERVICEでなくIdcServiceを使用する必要があります。

  • パラメータの値: パラメータの値では通常、大文字と小文字が区別されます。IdcServiceパラメータの値では常に、大文字と小文字が区別されます。また、Oracle WebCenter Contentの標準サービスで使用される表記規則はすべて大文字です。たとえば、IdcServiceパラメータの値を指定するときには、Doc_InfoでなくDOC_INFOを使用する必要があります。

  • データベース: Oracle WebCenter Contentとともに使用しているデータベースが、パラメータおよびパラメータの値の大/小文字の区別に影響を与える場合があります。たとえば、一部のデータベースには大文字と小文字が区別される列があり、他のデータベースではデフォルトで大文字と小文字が区別されません。したがって、あるデータベースで「DDOCNAME」が格納されていたとしても、Oracle WebCenter Contentシステムで予想される値は引き続き「dDocName」です。また、一部のデータベースでは、値が大文字で格納されますが、大文字と小文字が区別された問合せが実行されます。たとえば、「BouncyCaps」というdDocNameを格納した場合、「bouncycaps」を問い合せるとその行が見つかります。

2.1.2 ページ取得

Oracle WebCenter ContentシステムからWebページが要求されると、次のページ・タイプのいずれかが返されます。

  • 静的ページ: 静的なWebページのコンテンツが事前に書式設定され、あるリクエストから次のリクエストの間に変わることはありません。Oracle WebCenter Contentの通常のWebサイトでは、静的ページはゲスト・ホーム・ページ(たとえば、DomainHome/ucm/cs/weblayout/portal.htm)のみです。

  • 動的ページ: 動的なWebページは、Webサーバー・リクエストの時点で構成されます。このとき、コンテンツと書式設定は、Oracle WebCenter Contentのサービスとテンプレートを使用して決定されます。たとえば、各ユーザーのポータル・デザイン・ページは、Oracle WebCenter ContentのGET_PORTAL_PAGEというサービス、およびPNE_PORTAL_DESIGN_PAGEをいうテンプレートを使用して生成されます。

2.1.3 検索サービス

検索リクエストは、Oracle WebCenter Contentの特殊な種類のサービスです。Oracle WebCenter Contentシステムは、検索リクエストを受信すると、検索エンジンのAPIを使用して、そのリクエストを検索エンジンに送信します。これによって、Oracle WebCenter Contentシステムとともに各種の検索エンジンを使用できます。

2.1.4 統合方法

サービス・リクエストは、多様なプロトコルを使用して、外部プログラムまたはHTMLページで行うことができます。Oracle WebCenter Contentシステムは、多様な統合方法を使用して、他のエンタープライズ・アプリケーションと統合できます。1つの一般的な統合方法は、Oracle WebCenter Contentシステム内で永続URLによって管理されるコンテンツを参照することです。詳細は、第2.1.5項「永続URLを使用したサービスのコール」を参照してください。

他に考えられる統合方法は次のとおりです。

  • WebLogic JAXPとWebLogic SAMLの統合サポートを使用した、Oracle WebLogic ServerのWebサービス(WS)

  • Content Server向けのOracle WebCenter ContentのWebサービス・コンポーネント、およびクライアント向けのRemote Intradoc Client (RIDC)コンポーネント

  • IdcCommand Javaコマンド・ユーティリティを使用したJava API (IdcCommand)統合

  • Oracle WebCenter Contentで稼働しているJSP、Oracle WebCenter Content JavaBeanを通じたJSP、またはJ2EEアプリケーション・サーバーにデプロイされているOracle WebCenter Content Enterprise JavaBean (EJB)を通じたJSPからのJava Server Page (JSP)統合

  • J2EE準拠のアプリケーション・サーバーにOracle WebCenter Content Enterprise JavaBeanをデプロイすることによるJava 2 Enterprise Edition API (J2EE)統合

  • SOAPプロトコルを使用したSimple Object Access Protocol (SOAP)統合

  • Folders_gコンポーネントを使用した仮想フォルダ統合

  • Web Distributed Authoring and Versioning (WebDAV)コンポーネントを使用したWebDAV統合

  • ActiveXユーティリティまたはIntradocClient OCXコンポーネントを使用したComponent Object Model (COM)統合


注意:

使用可能な統合方法の詳細は、Oracle WebCenter Content Content Server開発者ガイドを参照してください。

2.1.5 永続URLを使用したサービスのコール

この統合方法では、サービス・コールに必要な情報がすべて、URLを通じてContent Serverに送信されます。次の例は典型的なURLを示しており、この場合はホーム・ページのURLです。

http://cs.example.com/cs/idcplg?
IdcService=GET_DOC_PAGE&Action=GetTemplatePage&Page=HOME_PAGE
  • http://cs.example.com/は、Content ServerインスタンスのWebアドレスです。

  • cs/idcplgは、Webサーバーのフィルタへのパスです。

  • IdcService=GET_DOC_PAGEは、Content Serverに対して、GET_DOC_PAGEサービスを実行するように指示します。

  • Action=GetTemplatePageは、Content Serverに対して、指定したテンプレート・ページを使用して結果を返すように指示します。このパラメータは、GET_DOC_PAGEサービスの例に固有です。

  • Page=HOME_PAGEは、Content Serverに対して、どのテンプレート・ページを使用するか指示します。このパラメータは、GET_DOC_PAGEサービスの例に固有です。

  • 疑問符(?)は、Webサーバーのパスの終了とContent Serverのパラメータの開始を示しています。

  • アンパサンド(&)は、Content Serverのパラメータ間の区切り文字として使用されます。

  • Idocスクリプトの特定の変数をURLに含めて、ページ・リクエストの時点でのページ表示に影響を与えることができます。これは、トラブルシューティングに、またはContent Serverのページのカスタマイズに役立ちます。

トラブルシューティングの例

  • IsJava=1

  • IsPageDebug=1

カスタマイズの例

  • StdPageWidth=1000

  • dDocType=HRForm

次の例では、Content Serverに対する動的ページの要求に永続URLが使用される場合に発生するステップについて説明します。

  1. ナビゲーション領域でユーザーが「管理」リンクをクリックすると、GET_ADMIN_PAGEサービスに対するリクエストがWebサーバーに送信されます。「管理」リンクのURLには、次のコマンドが含まれます。

    IdcService=GET_ADMIN_PAGE&Action=GetTemplatePage&Page=ADMIN_LINKS
    
  2. Webサーバーは、このリクエストをContent Serverの関数と認識し、具体的なリクエストをContent Serverに送信します。

  3. Content Serverは、リクエストを処理したら、その結果を元のWebサーバーに渡します。「管理」リンクの場合は、GET_ADMIN_PAGEサービスの内容は次のようになります。

    • ユーザーが現在ログインしていない場合はログイン・プロンプトを表示します。

    • ユーザーにadmin権限が付与されていることを検証します。

    • ADMIN_LINKSテンプレートを使用して「管理」ページを構成します。

    • 構成されたWebページをWebサーバーに返します。

  4. Webサーバーは、Content Serverサービスの結果を、元のWebブラウザ・クライアントに配信します。

次の例では、検索リクエストの実行に永続URLが使用される場合に発生するステップについて説明します。

  1. 標準的な「検索」ページでユーザーが「検索」ボタンをクリックすると、GET_SEARCH_RESULTSサービスに対するリクエストがWebサーバーに送信されます。検索リクエストのURLでは、次のように、実行するサービス、検索条件、および結果パラメータを指定します。

    IdcService=GET_SEARCH_RESULTS&QueryText=oracle&ftx=1
    &AdvSearch=True&ResultCount=25&SortField=dInDate&SortOrder=Desc
    
  2. Webサーバーは、このリクエストをContent Serverの関数と認識し、具体的なリクエストをContent Serverに送信します。

  3. Content Serverは、リクエストを検索エンジンに渡します。

  4. 検索エンジンは、検索結果をContent Serverに返します。

  5. Content Serverは、ユーザーのログイン権限およびセキュリティ権限に基づき、検索結果ページを構成してWebサーバーに返します。

  6. Webサーバーは、結果を元のWebブラウザ・クライアントに配信します。

2.1.6 ロケール・パラメータのカスタマイズ

Content Serverをクライアント・サーバー操作モードで使用している場合は、いくつかのパラメータを使用してロケール依存型のデータの処理を向上させ、日付とエンコーディングに不整合の障害が発生しないようにすることができます。

次の説明では、Content Serverに対して、HDA書式設定されたリクエストが、IdcClient、IdcCommandUX、IdcServerBean、カスタム・サーバー通信などの操作を使用して行われていると想定しています。

使用できるパラメータは、次のとおりです。

  • UserDateFormat: 受信リクエスト内の日付、およびリクエストに対するレスポンスで生成された日付に対して、日付/時刻の書式を指定します。これを指定しないと、レスポンスの書式は常に、ログイン・ユーザーの日付ロケールを使用します。それが使用できない場合は、Content Serverのロケール日付を使用します。アーカイバのバッチ・ロード・ファイルに対しては、Content Serverで内部的に使用されるODBC日付/時刻書式を使用しないでください。タイムゾーンの多義性エラーが発生する恐れがあります。

    UserDateFormat=M/D/YYYY hh:mm[:ss]{aa}!mAM,PM!zUTC
    
  • blDateFormat: 受信リクエストの本文における日付の書式を指定します。レスポンスの書式には影響しません。これを設定すると、UserDateFormatで設定される値をオーバーライドします。これを指定しないと、受信リクエストの書式は、ログイン・ユーザーのロケール日付書式を使用します。それが使用できない場合は、Content Serverのロケール日付書式を使用します。このパラメータは使用できません。ただし、リクエストの前にあるヘッダーのいずれかが、POSTの値が付いているREQUEST_METHODヘッダーである場合は例外です。GETスタイルのリクエストでは、このパラメータはサポートされません。

  • ClientEncoding: レスポンスで使用される文字エンコーディングを指定します。charsetjcharsetいずれの指定にもHDAヘッダー行がない場合は、リクエストの本文のデコードに使用されるエンコーディングもこのパラメータで指示されます。

    ClientEncoding=cp1252
    
  • HEADER_ENCODING: HDAリクエストの本文の前にあるヘッダーで使用されます。要求する側のエージェントはこれによって、ヘッダーのエンコーディングを指定できます。この機能は、ヘッダーのエンティティであるHTTP_INTERNETUSERおよびREMOTE_USERのエンコーディングを指示する際に役立ちます。

  • blFieldTypes: レスポンスを翻訳する際のフィールド・タイプ(日付またはメッセージ)を指定します。「メッセージ」は、書式設定された文字列(通常はエラー・メッセージ)で、ローカライズされていません。このパラメータを使用すると、ODBC書式設定されたフィールドが解析され、blDateFormatまたはUserDateFormatで指定された書式で返されて、そのフィールドがリクエストにはなくレスポンスにのみある場合でも適用されます。フィールド・タイプがbiFieldTypesで指定されていない場合、フィールドは未加工の文字列として扱われ、フィールドに対してローカライズは実行されません。

    そのような翻訳を通常必要とするフィールドは、Content Serverの動作をカスタマイズした拡張で作成されたフィールド(たとえば、Idocスクリプトを使用して作成されたフィールド)のみです。これは、POSTスタイルのリクエスト(POSTの値が付いているREQUEST_METHODヘッダー)にのみ使用可能です。これは通常、追加の日付フィールドを指定する場合に使用されます。また、フィールドが日付として特殊な扱いを必要とすることを示すには、UserDateFormatまたはblDateFormatと組み合せて使用することが最適です。

    blFieldTypes=xNewDate date, xComment message
    
  • extraFieldTypes: レスポンスをHDA書式設定されたリクエストに翻訳する際のフィールド・タイプを指定するもので、blFieldTypesのかわりに使用されます。Content Serverのリクエストに応える際に実行されるIdocスクリプトの式の内側で使用するのが最適です。レスポンスの書式を生成する際にIdocスクリプトで使用することはできません。レスポンスが(HDAなどの)データ形式になっているからです。ただし、HCSPフォームを処理したり、ドキュメント・プロファイルの効果を判別するなど、リクエストのロジックを実行する際に、Idocスクリプトが評価される他の場所で使用することはできます。

    extraFieldTypes=xNewDate date, xComment message
    
  • convertDatabaseDate: blFieldTypesまたはextraFieldTypesが使用され、ODBC日付書式をレスポンスの目的の日付書式に変換していることを確認します。この変数は、blFieldTypes変数またはextraFieldTypes変数を使用する際に必要です。

    この変数が設定されていない場合は、ODBC日付書式がレスポンスの目的の日付書式に変換されていないことがあります。この変数が設定されていない場合でも、ODBC日付は引き続き変換できます。これは、ある日付書式から別の日付書式への全面強制がレスポンスに必要であるとContent Serverが判定した場合に発生します。これは通常、受信した日付書式と送信する日付書式が異なる場合にのみ発生します。

    convertDatabaseDate=1
    
  • SuppressResultLocalization: レスポンスの返信前に実行されるローカライゼーション変換を抑止します。受信データに対する変換は、引き続き実行できます。

    このパラメータは、メッセージがローカライズされないようにしたり、日付が全面変換されないようにする際に役立ちます。使用例としては、レスポンスを別のContent Serverインスタンスに転送して処理する場合や、データを永続的に格納し、必要に応じて元のContent Serverインスタンスに対して再実行する場合があります。

    SuppressResultLocalization=1
    

    日付とメッセージの処理に影響を与えるパラメータのすべては、このパラメータとともに使用できますが、それ以外のパラメータを使用できるのは、別のContent Serverインスタンスまたは現在のContent Serverインスタンスに対してデータを再実行するときのみです。


注意:

HDAリクエストを行う操作によって、これらのパラメータの値が設定される場合があります。したがって、値を設定したのに予想どおりに動作が変わらないとユーザーが気づく場合があります。

2.1.7 認証チャレンジの強制

Content Serverサービスなどのアクティビティのためにユーザーを再認証することが必要になる場合があります。たとえば、ワークフロー中に、ワークフロー・プロセスの具体的なステップで、ユーザーのデジタル署名を取得することが必要になる場合が考えられます。これは、isRepromptLogin構成変数を使用して行うことができます。この変数の詳細は、Oracle Fusion Middleware Oracle WebCenter Content構成リファレンスを参照してください。

任意のサービスの再認証を強制するには、次の手順を実行します。

  1. サービス定義関数としてcheckForRevalidateLoginを追加します。

  2. 行われているサービス・コールに対し、ランダムに生成された値とともに、パラメータとしてrevalidateLoginIDを追加します。

これらの2つのアクションを実行すると、revalidateLoginIDに対するパラメータと同じ値でAllowedLoginID Cookieが設定されるまで、Content Serverは現在指定されている資格証明を受け入れることを拒否します。このCookieは、現在の資格証明に対する冗長なチャレンジ中に設定されます。

これによって現在の資格証明がクリアされ、ユーザーがContent Serverのいずれの機能にアクセスする場合でも、ログインが再び必要になることに注意してください。

2.2 カスタム・アプリケーションの例

この例では、アプリケーションは5つのサービスをコールし、6つのプライベート関数を定義しています。

2.2.1 コールされるサービス

これらのサービスがコールされ、シリアライズされたHDA文字列がそれぞれに構築されます。

  • CHECKOUT_BY_NAME

  • CHECKIN_UNIVERSAL

  • DOC_INFO

  • GET_FILE

CHECKIN_UNIVERSALに対して定義されるパラメータは次のとおりです。

  • doFileCopy

  • dDocName

  • dDocTitle

  • dDocType

  • dSecurityGroup

  • dDocAuthor

  • dDocAccount

  • primaryFile

GET_TABLEサービスがコールされ、次のパラメータが定義されます。

  • tableName

2.2.2 プライベート関数

定義されるプライベート関数は次のとおりです。

  • getNativeFilePath

  • checkOutByName

  • checkinUniversal

  • getDocInfo

  • getFile

  • parseResultSet

2.2.3 サンプル・コード

このサンプルはVisual Basicで記述されています。

' Defines a private function.
Private Function getNativeFilePath() As String
Dim idccmd As IdcCommandX
Dim str As String
Dim res
Dim dID As String, dExtension As String, dDocType As String, dDocAccount As String

dID = "2"
dExtension = "pdf"
dDocType = "acc"
dDocAccount = ""

' Builds a serialized HDA string.
str = "@Properties LocalData" + vbCrLf
str = str + "dID=" + dID + vbCrLf
str = str + "dExtension=" + dExtension + vbCrLf
str = str + "dDocType=" + dDocType + vbCrLf
str = str + "dDocAccount=" + dDocAccount + vbCrLf
str = str + "@end" + vbCrLf

Set idccmd = New IdcCommandX
res = idccmd.init("sysadmin", "c:\oracle\bin")
res = idccmd.computeNativeFilePath(str)

Open "c:\newdoc.txt" For Binary Access Write As #1
Put #1, , str
Put #1, , res
Close #1
MsgBox (res)
End Function

' Defines a private function.
Private Function checkOutByName(ByVal dDocName As String) As String
Dim idccmd As IdcCommandX
Dim idcService As String, str As String
Dim res

' Calls a service and builds a serialized HDA string.
idcService = "CHECKOUT_BY_NAME"
str = "@Properties LocalData" + vbCrLf
str = str + "IdcService=" + idcService + vbCrLf
str = str + "dDocName=" + dDocName + vbCrLf
str = str + "@end" + vbCrLf

' In an actual application the return codes need to be handled. For this example,
' the service is called while there is no content with that specific dDocName.
Set idccmd = New IdcCommandX
res = idccmd.init("sysadmin", "c:\oracle\bin")
res = idccmd.executeCommand(str)
End Function

' Defines a private function.
Private Function checkinUniversal(ByVal doFileCopy As String, ByVal dDocName As
String, ByVal dDocTitle As String, ByVal dDocType As String, ByVal dSecurityGroup
As String, ByVal dDocAuthor As String, ByVal dDocAccount As String, ByVal
primaryFile As String) As String

' Builds a serialized HDA string.
Dim idccmd As IdcCommandX
Dim idcService, res, str As String

' Calls a service and builds a serialized HDA string.
idcService = "CHECKIN_UNIVERSAL"
str = "@Properties LocalData" + vbCrLf
str = str + "IdcService=" + idcService + vbCrLf
str = str + "doFileCopy=" + doFileCopy + vbCrLf
str = str + "dDocName=" + dDocName + vbCrLf
str = str + "dDocTitle=" + dDocTitle + vbCrLf
str = str + "dDocType=" + dDocType + vbCrLf
str = str + "dSecurityGroup=" + dSecurityGroup + vbCrLf
str = str + "dDocAuthor=" + dDocAuthor + vbCrLf
str = str + "dDocAccount=" + dDocAccount + vbCrLf
str = str + "primaryFile=" + primaryFile + vbCrLf
str = str + "@end" + vbCrLf

' exec hda...
Set idccmd = New IdcCommandX
res = idccmd.init("sysadmin", "c:\oracle\bin")
res = idccmd.executeCommand(str)
MsgBox (CStr(res))
End Function

' Defines a private function.
Private Function getDocInfo(ByVal dID As String) As String
Dim idccmd As IdcCommandX
Dim idcService As String, str As String
Dim res

' Calls a service and builds a serialized HDA string.
idcService = "DOC_INFO"
str = "@Properties LocalData" + vbCrLf
str = str + "IdcService=" + idcService + vbCrLf
str = str + "dID=" + dID + vbCrLf
str = str + "@end" + vbCrLf

' exec hda....
Set idccmd = New IdcCommandX
res = idccmd.init("sysadmin", "c:\oracle\bin")
res = idccmd.executeCommand(str)
MsgBox (res)
End Function

' Defines a private function.
Private Function getFile(ByVal dID As String, ByVal dDocName As String, ByVal
RevisionSelectionMethod As String, ByVal Rendition As String)
Dim idccmd As IdcCommandX
Dim idcService, str As String

Dim res As Variant
Dim fileName As String
Dim fileSize As Long
Dim indexStop As Integer

' Calls a service and builds a serialized HDA string.
idcService = "GET_FILE"
str = "@Properties LocalData" + vbCrLf
str = str + "IdcService=" + idcService + vbCrLf
str = str + "dDocName=" + dDocName + vbCrLf
str = str + "dID=" + dID + vbCrLf
If (RevisionSelectionMethod = "Specific" Or RevisionSelectionMethod = "Latest" 
Or RevisionSelectionMethod = "LatestReleased") Then

' Ignore dDocName and use dID instead.
str = str + "RevisionSelectionMethod=" + RevisionSelectionMethod + vbCrLf
End If
If (Revision = "Primary" Or Revision = "Web" Or Revision = "Alternate") Then
str = str + "Revision=" + Revision + vbCrLf
End If
str = str + "@end" + vbCrLf

' exec hda...
Set idccmd = New IdcCommandX
res = idccmd.init("sysadmin", "c:\oracle\bin")
res = idccmd.executeCommand(str)

Open "c:\newdoc.txt" For Binary Access Write As #1
Put #1, , res
Close #1
MsgBox (Len(res))

' chop at filename= and store fileName
indexStop = InStr(res, "filename=")
tmpStr = (Mid(res, indexStop))
indexStop = InStr(tmpStr, Chr(13))
fileName = Mid(tmpStr, 10, indexStop - 10)
MsgBox (fileName)
' MsgBox (CStr(Asc(Mid(tmpStr, 2, 1))))

' chop at Content-length: and store fileSize
tmpStr = Mid(tmpStr, indexStop)
indexStop = InStr(tmpStr, "Content-Length: ")
tmpStr = (Mid(tmpStr, indexStop))
indexStop = InStr(tmpStr, Chr(10))
fileSize = CLng(Mid(tmpStr, 17, indexStop - 17))
MsgBox (CStr(fileSize))
MsgBox (Len(res))
End Function

Private Sub cmdAddUser_Click()
frmAddUser.Show
End Sub

Private Sub cmdCheckin_Click()
Dim idcService As String, doFileCopy As String, dDocName As String
Dim dDocTitle As String, dDocType As String, dSecurityGroup As String
Dim dDocAuthor As String, dDocAccount As String, primayFile As String

' Calls a service and defined parameters.
idcService = "CHECKIN_UNIVERSAL"
doFileCopy = "1"
dDocName = "myDocNameNewh"
dDocTitle = "myDocTitleb"
dDocType = "ADACCT"
dSecurityGroup = "Public"
dDocAuthor = "Jennifer"
dDocAccount = ""
primaryFile = "c:/junk_b.doc"

' In an actual application check for errors.
' Lock the file in order to upload a new revision.
Call checkOutByName(CStr(dDocName))
' If the dDocName is not in the system, it gets added as first revision
' by the CHECKIN_UNIVERSAL call.
Call checkinUniversal(doFileCopy, dDocName, dDocTitle, dDocType, dSecurityGroup, 
dDocAuthor, dDocAccount, primaryFile)
End Sub

Private Sub cmdDocInfo_Click()
Call getDocInfo("269")
End Sub

Private Sub cmdDownload_Click()
Call ba
End Sub

Private Sub cmdGetFile_Click()
Call getFile("14", "", "", "")
End Sub

Private Sub cmdGetNativeFile_Click()
Call getNativeFilePath
End Sub

Private Sub Command1_Click()
Dim idccmd As IdcCommandX
Dim res, str
Open "c:\adduser.txt" For Append As #1
Set idccmd = New IdcCommandX
res = idccmd.init("sysadmin", "c:\oracle\bin")
str = "@Properties LocalData" + vbCrLf + "IdcService=ADD_USER" + vbCrLf +
"dName=Jennifer" + vbCrLf + "dFullName=Jennifer Smith" + vbCrLf +
"dPassword=password" + vbCrLf + "dEmail=email@example.com" + vbCrLf +
"dUserAuthType=LOCAL" + vbCrLf + "@end" + vbCrLf + "@ResultSet UserAttribInfo" +
vbCrLf + "2" + vbCrLf + "dUserName" + vbCrLf + "AttributeInfo" + vbCrLf +
"Jennifer" + vbCrLf + "role,admin,15" + vbCrLf + "@end" + vbCrLf
res = idccmd.executeCommand(str)
Print #1, res
Close #1
End Sub

Private Sub Command2_Click()
Dim idccmd As IdcCommandX
Dim res, str

Dim myRS As String
Dim idcService, tableName As String

idcService = "GET_TABLE"
tableName = "Accounts"

Open "c:\a_getsec.txt" For Append As #1
Set idccmd = New IdcCommandX
res = idccmd.init("sysadmin", "c:\oracle\bin")
str = "@Properties LocalData" + vbCrLf + "IdcService=" + idcService + vbCrLf +
"tableName=" + tableName + vbCrLf + "@end" + vbCrLf
myRS = idccmd.executeCommand(str)

' Parse out the results set.
Call parseResultSet(myRS, tableName)
Print #1, res
Close #1
End Sub

' Calls a private function.
Private Function parseResultSet(strResultsSet As String, strSearchString As
String) As String
Dim indexStop As Integer
Dim tmpStr As String

Dim numberOfRows As Integer
Dim numberOfElementsInSet As Integer
Dim resultElement()
MsgBox (strResultsSet)

' Start of results set.
indexStop = InStr(strResultsSet, "@ResultSet " & strSearchString)

' Check for error (0 index) before moving on.
tmpStr = (Mid(strResultsSet, indexStop))
MsgBox (tmpStr)

' Determine how many data lines are in the HTA file.
indexStop = InStr(tmpStr, "@end")
For i = 1 To indexStop
If (Mid(tmpStr, i, 1) = Chr(10)) Then
numberOfRows = numberOfRows + 1
End If
Next i
numberOfRows = numberOfRows - 2 ' Remove the first line of data.

' Find first line that identifies the ResultsSet
indexStop = InStr(tmpStr, Chr(10))
tmpStr = (Mid(tmpStr, indexStop + 1))

' Get number of elements in record set, chop the line off the record set...
indexStop = InStr(tmpStr, Chr(10))
numberOfElementsInSet = CInt((Mid(tmpStr, 1, indexStop)))
tmpStr = (Mid(tmpStr, indexStop + 1))

' Set storage array.
ReDim resultElement((numberOfRows / numberOfElementsInSet), numberOfElementsInSet)
Dim junk As String
' Populate array from HTA dataset
For i = 1 To (numberOfRows / numberOfElementsInSet)
For j = 1 To numberOfElementsInSet
indexStop = InStr(tmpStr, Chr(10))
resultElement(i, j) = Mid(tmpStr, 1, indexStop - 1)
tmpStr = (Mid(tmpStr, indexStop + 1))
junk = junk + resultElement(i, j)
Next j
Next i
MsgBox (junk)
parseResultSet = "je"
End Function

' Set storage array.
Sub ba()
Dim b() As Byte 'This byte array will capture the file
Dim strURL As String ' URL string
Dim strDest As String ' Destination File

' Set the strURL to a valid address.
'strURL = "http://localhost/cs/idcplg?IdcService=GET_FILE&dID=14"
'strDest = "C:\myjunk.html"
strURL = "localhost"
b() = Inet1.OpenURL(strURL, icByteArray)
'Open strDest For Binary Access Write As #1
'Put #1, , b()
'Close #1
End Sub

2.3 レスポンス出力のテンプレート・ページのリダイレクト

場合によっては、CGIリクエスト(GETとPOSTのいずれか)を実行した後で、デフォルト以外のページを表示(レスポンス・テンプレートの配信メカニズムを変更)したほうが好ましいこともあります。たとえば、ログイン後、または検索の実行後に、ページをリダイレクトすることができます。これを行う1つの方法としては、コンポーネント・アーキテクチャを通じてサービス・コールを変更し、別のテンプレート・ページを指定します。必要に応じてこれを行う別の、より柔軟な方法としては、urlTemplateパラメータを指定し、レスポンス・ページをHCSPまたはHCSTにリダイレクトして、結果の書式を好きなように再設定します。

この項の内容は次のとおりです。

2.3.1 基本的な概念

この演習に取りかかる前に、Idocスクリプトと動的サーバー・ページ(HCST、HCSP、HCSF)にある程度慣れておいてください。また、Content Serverの機能とコンポーネント・アーキテクチャにも、ある程度慣れておいてください。HTML FORMオブジェクトに慣れておくことも役立ちます。詳細は、Oracle WebCenter Content Content Server開発者ガイドおよびOracle Fusion Middleware Oracle WebCenter Content構成リファレンスを参照してください。

2.3.2 HCSTページの作成

例として、URLテンプレートとして使用できるHCSTページを作成して、検索結果の書式を再設定します。HCSPを使用することもできますが、簡略にするためにHCSTを使用します。ファイルにtest_result.hcstという名前を付け、次のテキストを含めます。

<html>
<table width=300>
<tr bgcolor="#000000" style="color: #ffffff;">
<td><b>Name</b></td>
<td><b>Title (Author)</b></td>
</tr>
<$loop SearchResults$>
<tr <$if doShade$>bgcolor="#E5E7D4"<$endif$>>
<td><a href="<$URL$>"><$dDocName$></a></td>
<td><$dDocTitle$> (<$dDocAuthor$>)</td>
</tr>
<$if doShade$><$doShade=""$><$else$><$doShade="1"$><$endif$>
<$endloop$>
</table>
</html>

次に、このファイルをContent Serverインスタンスにチェックインします。簡略にするために、パブリック・セキュリティ・グループにチェックインし、コンテンツ・タイプをADACCT、コンテンツIDをtest_resultとします。そのURLは次のようになります。

http://myhost/oracle/groups/public/documents/document/test_result.hcst

2.3.3 検索結果ページの書式再設定

新規のテンプレートをテストするには、まず検索ページに進みます。いずれかの検索条件に入力して「検索」をクリックします。標準的な検索ページが表示され、そこには結果も含まれます。

ここで、検索結果ページに誘導したURLの最後に、次のテキストを追加します。

&urlTemplate=/oracle/groups/public/documents/adacct/test_result.hcst

同じ検索結果が、最小のHTMLページに書式設定された状態で表示されます。完全URLが使用されるのではなく、ホスト・コンピュータを基準としたURLのみが使用されることに注意してください。

デフォルトの検索ページを、ページの初期設定に際して常にこのテンプレートを使用するようにする場合は、検索ページ上のHTML FORMオブジェクトを変更して、次のフィールドも含むようにすることができます。

<input type=hidden name='urlTemplate'
value='/oracle/groups/public/documents/document/test_result.hcst'>

これを行うには、インクルードquery_results_optionsを変更したコンポーネントを作成して、サンプルのHTMLを含むようにします。あるいは、urlTemplateの値を、JavaScriptを使用して検索ページで動的に計算し、ユーザーによって入力されたメタデータに基づいて別のページにリダイレクトすることもできます。

2.3.4 追加のオプション

結果ページを変更するには、urlTemplate以外に、docTemplateName、docTemplateID、RedirectUrlの各パラメータも使用できます。これらの動作は、次のようにすべて異なります。

  • urlTemplate: 使用するhcstページの完全な相対URLに設定します。例:

    IdcService=DOC_INFO&urlTemplate=/idc1/groups/public/documents/adacct/test_result.hcst
    

    RedirectURLはすべてのサービス・コールと連携しているわけではなく、6.0より古いバージョンのContent Serverソフトウェアでは、docTemplateNameとdocTemplateIDに小規模なデータ汚染の不都合があるため、通常の場合、urlTemplateを使用するのが最も安全な方法です。ただし、テンプレートのコンテンツ・タイプまたはセキュリティ・グループを変更すると、そのURLは有効でなくなり、更新することが必要になります。また、このパラメータは、POSTサービスに使用されるテンプレートをオーバーライドする場合にはお薦めしません。

  • docTemplateName: テンプレートのdDocName(たとえば、test_result)に設定します。このパラメータはurlTemplateのように動作しますが、dDocNameがdocTemplateNameであるドキュメントの、最新リリースのWeb表示可能ファイルの場所を見つけます。

  • docTemplateID: 特定のリビジョンのテンプレートのdID(たとえば、100)に設定します。docTemplateNameのように動作しますが、特定のdIDリビジョンのWeb表示可能ファイルを見つけます。

  • RedirectUrl: Content Serverに戻す、CGI URLの最後の部分(たとえば、IdcService=DOC_INFO&dID=<$dID$>)に設定します。これは、アクションprepareRedirectを実行する数十個のPOSTサービス(CHECKIN_NEWやSUBMIT_HTML_FORMなど)のみを対象としています。

  • それぞれのHTML POST後にリダイレクトを使用すると、エンド・ユーザーはポストを再発行しなくても、レスポンス・ページを安全にリフレッシュできます。これらのサービスそれぞれの定義には、3:prepareRedirect:….:0:null行があります。RedirectUrlは、prepareRedirectメソッドの結果をオーバーライドします。また、リダイレクト先の場所として別のURLを使用できるようにします。RedirectUrlの中には、リダイレクトの発行直前に実行されるIdocスクリプトを組み込むことができます。これによって、Idocスクリプトでのネスティングが複雑なものになる可能性があります。それは、RediretUrlの割当ては通常、リソース・インクルードの中で行われるからです。例:

    … Standard Idoc form beginning …
    <input type=edit name=myparam value=''>
    <input type=hidden name=RedirectUrl
    value='<$HttpCgiPath$>?<$xml('IdcService=MY_RESPONSE_TEMPLATE&dID=<$dID$>&
    myparam=<$myparam$>')$>'>
    … Standard Idoc form closure …
    

Idocスクリプトの多くは、Idocのリテラル文字列の内側でネストされます。この場合、リダイレクトURLが計算されるまで、スクリプトの実行が遅れます。これにより、myparamの値をユーザーが選択することが引き続き必要でも、この値はRedirectUrlによって選択できます。

外側には一重引用符、内側には二重引用符を使用します。これで混乱がなくなります。また、HTMLとIdocスクリプトの両方が、引用の際に一重と二重両方の引用符をサポートしているため、コンストラクトをネストする際に、この2つを切り替えることが適切となることがあります。

xml関数の使用に注意してください。これにより、入力フィールドの値は間違いなく、適切に書式設定されたHTMLリテラル文字列コンストラクトになります。具体的に、この場合には不要です。ただし、より複雑なコンストラクトには役立つ場合があります。