Tivoli Service Desk 6.0 Developer's Toolkit Script 言語解説書
Tivoli Service Desk (TSD) は、Intelligent Miner for Text (IM4T) と呼ばれる IBM テキスト検索製品を使用して、ユーザー・データベース中のテーブルの索引を作成します。ユーザーの Service Desk 分析者は、作成された索引を使用して、特定の語または語の組み合わせが入ったデータベースで項目 (事前に既存するデータ・ファイルまたは文書) を迅速に見つけることができます。 索引は、データが保管された元の形式に影響を与えません。
このセクションには、次のことを実行する方法が書かれています。
IM4T はユーザーの TSD ソフトウェアに含まれていて、その使用にあたって追加のライセンス料金は不要です。
IM4T は、データベース・テーブルの索引付けにクライアント / サーバー・アーキテクチャーを使用します。索引はすべて、単一のサーバー上で作成され、保守されます。 TPM を実行する各クライアント・ワークステーションは、そのサーバーへのクライアントとして自身を構成します。
TSD のテキスト検索機能を使用する前に、ユーザーの索引用にサーバーを作成し構成しておく必要があります。このプロセスの最初のステップは、ユーザーの IM4T サーバーとするよう指定されたマシン上に TSD をインストールすることです。 「 IM4T サーバーのインストール」というタイトルのついたパッケージをインストールする必要があります。IM4T サーバーを構成するには、次のとおり実行します。
結果: Tivoli Service Desk IMT 保守ウィンドウがオープンされます。 次のとおりフィールドに入力します。
セクション / フィールド | 必須情報 |
名前 | サーバーの名前 |
接続情報セクション | |
ホスト | コンピューターの IP 名 |
ポート | ポート番号。このサーバー中の etc/services ファイル中に項目を作成する必要があります。注: この番号は、ユーザーの LAN の他のプログラムが使用していないポートの番号でなければなりません。 |
タスク情報セクション | |
最大 | 検索サービスが同時に処理できるタスクの最大数 (1 - 100) |
タイムアウト | クライアントからの情報を受信するために、検索サービスに必要な時間。 |
使用可能 | サーバー始動時に開始するタスクの数 |
索引の管理は、IM4T サーバーとして構成した マシン上でだけ必要になります。
注: UNIX オペレーティング・システムのもとでは、TSD のインストール時に作成された imoadm 管理アカウントでもログインする必要があります。
TSD テキスト検索管理ユーティリティー (tsd_text.kbc) を実行することによって索引を作成することができます。これは、サーバーの構成に使用したのと同じユーティリティーです。
このユーティリティーは、最初に、索引を作成する TSD データ・ソースにログインするよう要求します。IM4T サーバーが構成されていないデータ・ソースにログインすると、ユーティリティーは最初に構成するようプロンプトを出します。
ログインして、サーバーが構成されると、「Tivoli Service Desk IM4T の保守」というタイトルのユーティリティー・メイン画面が表示されます。
tsd_text ユーティリティーは、特定の種類の Tivoli Problem Management (TPM) 診断エイド・レコード中の「説明」または「ソリューション」列の索引をビルドします。データベース中に多数のレコードがある場合には、「照会」ダイアログ・ボックス中の「説明」 または 「ソリューション」ボックスを使用するよりも、IM4T を使用して特定の診断エイド・レコードを見つける方が速くなります。
テキスト検索は、以下のダイアログ・ボックスで使用することができます。
注:
この tsd_text ユーティリティーは、Tivoli Change Management の影響分析で使用する問題、変更、および説明の索引の作成にも使用することができます。 詳細については、影響分析の実行を参照してください。IM4T では、新しい索引を作成し、既存の索引を更新することができます。場合によっては、索引の削除が必要になる場合があります。索引の作成、更新、および削除は、データベースのサイズによってかなりの時間がかかる可能性があります。ヘルプ・デスクが夜間稼働していない場合には、IM4T 索引に対する保守作業を終業時に開始するよう検討してください。
ユーザーのヘルプ・デスク分析者が、「照会」ダイアログ・ボックス (共通問題照会、エラー・メッセージ照会、ホット・ニュース照会、およびソリューション照会) で使用可能なテキスト照会機能を使用する前に、索引を作成しなければなりません。
ユーザーのヘルプ・デスク分析者が最新のソリューションおよび問題記述を検索できるように、索引は定期的に更新する必要があります。この更新処理には、かなりの時間がかかることがあるので、終業時にこれを開始するよう考慮してください。 処理が開始されると、不在のままにすることができます。
IM4T 索引の削除が必要になる場合があります。索引が壊れているように見える場合には、索引を削除して再作成します。索引を削除しても、データベースのデータは削除されません。
データベース・テキスト索引の照会の目的は、データベース中のフィールドを迅速に見つけることです。これを援助するために、SQLSelect コマンドは特別なエスケープ・シーケンスである $TextSearch の存在を探し、処置を実行します。このシーケンスによって、データベースへの照会と同様にテキスト索引を照会することができます。 ($TextSearch シーケンス中の有効な項目は、テキスト検索データ・ソースの有効な WHERE 文節です。) 次の例を検討してください。ハードウェア保守と関連したソリューションをすべて選択します。
Select * from solutions where $TextSearch (contains 'hardware' & 'maintenance')
ハードウェア保守と関連したアクティブ・ソリューションをすべて選択します。
Select * from solutions where $TextSearch (contains 'hardware' & 'maintenance') AND Active = 1
複数のテキスト検索索引がデータベースの 1 つのテーブルに関連付けられている場合には、 $TextSearch 文節中の索引名を指定しなければなりません。 索引名は、照会の前になければならず、セミコロン (;) が後になければなりません。
Select * from solutions where $TextSearch (solNDX; description contains 'hardware') AND Active = 1 OR solution_id > 3000
IM4T サーバーを構成するには、次のとおり実行します。
セクション / フィールド | 必須情報 |
検索サービス | サービス・インスタンスの名前 (サーバー情報と同じ) |
ホスト | IM4T サーバーの IP 名。 |
ポート | ポート番号。注: この番号は、ユーザーの LAN の他のどのプログラムも使用していないポートの番号でなければなりません。この番号は、サーバーのポート番号と同じです。 |
「拡張」ボタン | 拡張オプションを設定することができます |
このセクションは、IM4T で使用される共通文書検索機能の参照です。
FUNCTION FTRSQLTextIndexCreate(IndexName : STRING, Fields : LIST OF IndexFieldRec) : INTEGER;
IndexName は、8 文字またはそれ以下でなければなりません。 IndexFieldRec タイプは、次のとおり宣言されます。
IndexFieldRec IS RECORD TableName : STRING; --Name of the table to be indexed FieldName : STRING; --Name of the field to be indexed Flags : INTEGER; --Combination of KEY, VALUE,LITERAL, and LONGCHAR END;
このレコードは、ftr.kb 中で定義されます。
IndexFieldRec のフラグの定義は、次の表にリストされています。
フラグ |
説明 |
SAI_DBTRNDX_KEY | データベース・テーブル中のキー・フィールド。 FTRSQLTextIndexCreate に渡される少なくとも 1 つの IndexFieldRec に、このフラグが設定されていなければなりません。 SAI_DBTRNDX_VALUE は、列に数値が入っていることを示します。 |
SAI_DBTRNDX_LITERAL | 列にリテラル値 (通常はストリング) が入っていることを示します。 |
AI_DBTRNDX_LONGCHAR | 列に文字ストリング (通常は長いテキスト・フィールド) が入っていることを示します。 FTRSQLTextIndexCreate に渡される少なくとも 1 つの IndexFieldRec に、このフラグが設定されていなければなりません。 |
注: データベース・テキストの索引には、タイプ LONGCHAR の少なくとも 1 つのフィールドとともに、索引付けするテーブル中にすべての基本キー・フィールドがなければなりません。
受け取ったデータに基づいて FTRSQLTextIndexCreate は、次の特性をもつ索引を作成します。 すべてのフィールドが索引付けされ、索引テーブルのテキスト列の一部として参照することができます。 すべてのキー・フィールドは、索引テーブル中の自身の列に保管されます。 例:
VARIABLES NewIndex : LIST OF IndexFieldRec; Entry : IndexFieldRec; ACTIONS Entry.TableName = `EQ_Defects'; Entry.FieldName = `Defect_Title'; Entry.Flags = SAI_DBTRNDX_LITERAL; ListInsert(NewIndex,Entry); Entry.TableName = `EQ_Defects'; Entry.FieldName = `Defect_Desc_Text'; Entry.Flags = SAI_DBTRNDX_LONGCHAR; ListInsert(NewIndex, Entry); Entry.TableName = `EQ_Defects'; Entry.FieldName = `Defect_Steps_Text'; Entry.Flags = SAI_DBTRNDX_LONGCHAR; ListInsert(NewIndex, Entry); Entry.TableName = `EQ_Defects'; Entry.FieldName =`Defect_Title'; Entry.Flags = BitOr(SAI_DBTRNDX_KEY, SAI_DBTRNDX_VALUE); ListInsert(NewIndex, Entry); FTRSQLTextIndexCreate(`DefNDX', NewIndex); END;
戻りコード |
説明 |
1 | 成功 |
2001 | DBTR エラー、無効なテーブル名 |
2002 | DBTR エラー、無効な索引名 |
2003 | DBTR エラー、無効な索引フィールド |
(その他) | エラー・コード (IM4T正常 / エラー・メッセージ を参照してください) |
FUNCTION FTRSQLTextIndexDelete(IndexName : STRING) : INTEGER;
関数 | 説明 |
IndexName | 削除するデータベース・テキスト索引名を指定します。 |
FTRSQLTextIndexDelete は、指定された索引を見つけてその索引を削除します。 例:
FTRSQLTextIndexDelete(`DEFNDX');
戻りコード |
説明 |
1 | 成功 |
2002 | DBTR_ERR_INVALID_INDEX_NAME |
(その他) | エラー・コード (IM4T正常 / エラー・メッセージ を参照してください) |
FUNCTION FTRSQLTextIndexUpdate(IndexName : STRING, Method : INTEGER) : INTEGER;
関数 | 説明 |
IndexName | 更新する索引名を指定します |
Method | 索引が更新されるか、あるいは検索から再作成されるかを指定します。
この変数は、次の 2 つの値のうち 1 つをもつことができます。
|
FTRSQLTextIndexUpdate は指定した索引を検索し、Method で指定したアクションを実行します。例:
FTRSQLTextIndexUpdate (`DEFNDX', SAI_NDX_REBUILD);
戻りコード |
説明 |
1 | 成功 |
2002 | DBTR エラー、無効な索引名 |
(その他) | エラー・コード (IM4T正常 / エラー・メッセージ を参照してください) |
FUNCTION FTRSQLTextIndexUpdateAll(Method : INTEGER):INTEGER;
Method は、索引が更新されるか、あるいはスクラッチから再ビルドされるかを指定します。 この変数は、次の 2 つの値のうち 1 つをもつことができます。
SAI_NDX_UPDATE は、デフォルトです。索引がすでに存在する場合には、データ中の変更を反映するように更新されます。索引がまだ存在していない (すなわち単に定義されているだけの) 場合には、この時点で作成されます。
SAI_NDX_REBUILD は、索引が存在しているかどうかにかかわらず、これを作成します。
FTRSQLTextIndexUpdateAll は、Method により定義されたメソッドを使用して現在のデータ・ソース上に存在するデータベース・テキスト索引をすべて更新します。例:
FTRSQLTextIndexUpdateAll(SAI_NDX_REBUILD);
戻りコード |
説明 |
1 | 成功 |
(その他) | エラー・コード (IM4T 正常 / エラー・メッセージ のセクションを参照してください) |
FTRSQLSetFilterWhere (IndexName : STRING , WhereStmt : STRING) : INTEGER;
この関数は、索引が存在する場合にその索引の Where フィルターを設定します。
ret:=FTRSQLSetFilterWhere('MYINDEX', 'USER_ID>10000');
戻りコード |
説明 |
1 | 成功 |
2002 | DBTR エラー、無効な索引名 |
2005 | DBTR エラー、無効な WHERE ステートメント |
(その他) | エラー・コード (IM4T正常 / エラー・メッセージ のセクションを参照してください) |
FTRSQLGetFilterWhere (IndexName : STRING, WhereStmt : STRING) : INTEGER;
この関数は、Where フィルターが存在する場合にその索引の Where フィルターを取得します。
WhereStmt : STRING;
戻りコード |
説明 |
1 | 成功 |
2002 | DBTR エラー、無効な索引名 |
(その他) | エラー・コード (IM4T正常 / エラー・メッセージ のセクションを参照してください) |
構文
FTRSQLDeleteFileterWhere (WhereStmt : STRING) : INTEGER;
この関数は、索引が存在する場合にその索引の Where フィルターを削除します。
ret:=FTRSQLDeleteFilterWhere('MYINDEX');
戻りコード |
説明 |
1 | 成功 |
2002 | DBTR エラー、無効な索引名 |
(その他) | エラー・コード (IM4T正常 / エラー・メッセージ のセクションを参照してください) |
構文
FTRListIndexes (Servername : STRING , ResultList : LIST OF STRINGS ) : INTEGER;
この関数は、サーバーの使用可能なすべての索引をリストします。
IdxList:LIST OF STRING; ret:=FTRListIndexes('MYSRVR',IdxList);
戻りコード |
説明 |
1 | 成功 |
2002 | DBTR エラー、無効な索引名 |
(その他) | エラー・コード (IM4T正常 / エラー・メッセージ のセクションを参照してください) |
FTRSQLTextIndexCreate
次の例は、Tivoli Problem Management (TPM) ソリューション・テーブルの索引で、
呼び出しからの結果の成功 / エラー・メッセージが表示されます。
KNOWLEDGEBASE MakeNDX;
USES TEXTRET;
ROUTINES
PROCEDURE TestMain;
PRIVATE
ROUTINES
PROCEDURE TestMain IS
VARIABLES
Col : IndexFieldRec;
ColList : LIST OF IndexFieldRec;
Lines : List of String;
nRC : Integer;
whdl : Window;
ACTIONS
SQLCommand(`connect TOOLKIT');
Col.TableName := 'solutions';
Col.FieldName := 'solution_id';
Col.Flags := BitOr (SAI_DBTRNDX_VALUE,
SAI_DBTRNDX_KEY);
ListPush(ColList, Col);
Col.TableName := 'dbo.solutions';
Col.FieldName := 'description';
Col.Flags := SAI_DBTRNDX_LONGCHAR;
ListPush(ColList, Col);
nRC := FTRSQLTextIndexCreate('solndx', ColList);
ListInsert(Lines, nRC, $BEFORE);
WinCreateScrollWindow($Desktop, whdl,
$NullHandler,
5,5,50,15,
'Create Index',
$SystemMonospaced,
10,
$WinDefaultStyle);
WinWriteLN(whdl, Lines);
WinWait(whdl);
END;
次は、索引照会のコード例です。
KNOWLEDGEBASE querysol; ROUTINES PROCEDURE TestMain; PRIVATE ROUTINES PROCEDURE TestMain IS VARIABLES Lines : List of String; nRC : Integer; whdl : Window; cursor : SQLCURSOR; System : String; ACTIONS nRC := SQLCommand('CONNECT ADVISOR'); IF (nRC <> 1) THEN EXIT; END; ListInsert(Lines, nRC, $BEFORE); nRC := SQLSelect(cursor, 'SELECT SYSTEM FROM SOLUTIONS WHERE $TextSearch(SOLNDX;DESCRIPTION CONTAINS ''PROBLEM'')'); ListInsert(Lines, nRC, $BEFORE); nRC := SQLFetch(cursor, System); WHILE (nRC = 1) DO ListInsert(Lines, System, $BEFORE); nRC := SQLFetch(cursor, System); END; ListInsert(Lines, nRC, $BEFORE); SQLCloseCursor(cursor); WinCreateScrollWindow($Desktop, whdl, $NullHandler, 5,5,50,15, 'Query Index', $SystemMonospaced, 10, BitOr($WinDefaultStyle, $WinVScroll)); WinWriteLN(whdl, Lines); WinWait(whdl); END;
エラー・コード | エラー・メッセージ |
-17407 | SQLERR_NO_KEY |
-17408 | SQLERR_NO_LONGCHAR |
-17409 | SQLERR_COL_TYPE_CONFLICT |
-17410 | SQLERR_INDEX_NAME_NOT_FOUND |
-17411 | SQLERR_BAD_KEY_TYPE |
-17415 | SQLERR_TR_NOT_INITIALIZED |
-17417 | SQLERR_INVALID_TEXTSEARCH |
-17420 | SQLERR_INVALID_INDEX_NAME |
-17424 | SQLERR_TEXTMINER_DATA_BUILD |
-17425 | SQLERR_CANT_DETERMINE_SERVER_LOCATION |
-17426 | SQLERR_SECTION_FILE_SYNTAX_ERROR |
-17427 | SQLERR_DEFINITION_FILE_SYNTAX_ERROR |
-17428 | SQLERR_CANT_OPEN_FILE |
-17429 | SQLERR_CANT_WRITE_FILE |
-17430 | SQLERR_CANT_READ_FILE |
-17431 | SQLERR_TABLE_NAME_NOT_SET |
-17432 | SQLERR_ENVIRONMENT_VARIABLE_NOT_SET |
-17433 | SQLERR_INVALID_REMOTE_PROCEDURE |
-17434 | SQLERR_MISSING_LANGUAGE |
-17435 | SQLERR_CANT_GET_CODEPAGE |
-17700 | SQLERR_NOT_ENOUGH_MEMORY |
-17701 | SQLERR_DICTIONARY_NOT_FOUND |
-17702 | SQLERR_STOPWORD_IGNORED |
-17703 | SQLERR_CCS_NOT_SUPPORTED |
-17704 | SQLERR_LANGUAGE_NOT_SUPPORTED |
-17705 | SQLERR_CONFLICT_WITH_INDEX_TYPE |
-17706 | SQLERR_INVALID_MASKING_SYMBOL |
-17707 | SQLERR_INDEX_GROUP_SEARCH_ERROR |
-17708 | SQLERR_INDEX_SPECIFIC_ERROR |
-17709 | SQLERR_UNEXPECTED_ERROR |
-17710 | SQLERR_DATASTREAM_SYNTAX_ERROR |
-17711 | SQLERR_UNKNOWN_SESSION_POINTER |
-17712 | SQLERR_PROCESSING_LIMIT_EXCEEDED |
-17713 | SQLERR_REQUEST_IN_PROGRESS |
-17714 | SQLERR_MAX_NUMBER_OF_RESULTS |
-17715 | SQLERR_SERVER_NOT_AVAILABLE |
-17716 | SQLERR_SERVER_BUSY |
-17717 | SQLERR_SERVER_CONNECTION_LOST |
-17718 | SQLERR_INDEX_DELETED |
-17719 | SQLERR_INDEX_SUSPENDED |
-17720 | SQLERR_INDEX_NOT_ACCESSIBLE |
-17721 | SQLERR_EMPTY_QUERY |
-17722 | SQLERR_EMPTY_INDEX |
-17723 | SQLERR_FUNCTION_DISABLED |
-17724 | SQLERR_FUNCTION_IN_ERROR |
-17725 | SQLERR_INSTALLATION_PROBLEM |
-17726 | SQLERR_COMMUNICATION_PROBLEM |
-17727 | SQLERR_IO_PROBLEM |
-17728 | SQLERR_WRITE_TO_DISK_ERROR |
-17729 | SQLERR_MAX_NUMBER_OF_BUSY_INDEXES |
-17730 | SQLERR_UNKOWN_SECTION_NAME |
-17731 | SQLERR_DOCMOD_READ_PROBLEM |
-17732 | SQLERR_INCORRECT_AUTHENTICATION |
-17733 | SQLERR_CONFLICTING_TASK_RUNNING |
-17734 | SQLERR_NO_ACTION_TAKEN |
-17735 | SQLERR_LS_NOT_EXECUTABLE |
-17736 | SQLERR_LS_FUNCTION_FAILED |
-17737 | SQLERR_MAX_NUMBER_OF_TASKS |
-17738 | SQLERR_MISSING_DEFAULT_MODEL |
-17739 | SQLERR_UNKNOWN_DOCUMENT_MODEL-NAME |
-17740 | SQLERR_MEMBER_OF_INDEX_GROUP |
-17741 | SQLERR_UNKNOWN_INDEX_NAME |
-17742 | SQLERR_INDEX_ALREADY_OPENED |
-17743 | SQLERR_MAX_NUMBER_OF_OPEN_INDEXES |
-17744 | SQLERR_CONTINUATION_MODE_ENTERED |
-17745 | SQLERR_EMPTY_LIST |
-17746 | SQLERR_SERVER_IN_ERROR |
-17747 | SQLERR_FUNCTION_NOT_SUPPORTED |
-17748 | SQLERR_UNKNOWN_INDEX_TYPE |
-17749 | SQLERR_INCORRECT_INDEX_NAME |
-17750 | SQLERR_INCORRECT_LS_EXECUTABLES |
-17751 | SQLERR_INCORRECT_LIBRARY_ID |
-17752 | SQLERR_INCORRECT_LOCATION |
-17753 | SQLERR_INDEX_ALREADY_EXISTS |
-17754 | SQLERR_MAX_NUMBER_OF_INDEXES |
-17755 | SQLERR_LOCATION_IN_USE |
-17756 | SQLERR_UNKNOWN_SERVER_NAME |
-17757 | SQLERR_UNKNOWN_COMMUNICATION_TYPE |
-17758 | SQLERR_UNKNOWN_SERVER_INFORMATION |
-17759 | SQLERR_INCORRECT_HANDLE |
-17760 | SQLERR_QUERY_TOO_COMPLEX |
警告コード | 警告メッセージ |
-17510 | SQLWARN_CFG_NULL_ITEM |
-17511 | SQLWARN_TEXTMINER_CLEANUP_ERROR |
-17512 | SQLWARN_PARTIAL_FAILURE |
詳細については、次の Intelligent Miner for Text (IM4T) の資料を参照してください。
http://www.software.ibm.com/data/iminer/fortext
Tivoli Service Desk 6.0 Developer's Toolkit Script 言語解説書