はじめに
CData ServiceNow ドライバーを使用してテーブルやビューにアクセスする際、通常はメタデータの取得が必要です。そのため、sys_db_objectやsys_dictionaryオブジェクトへのアクセス許可を事前に設定する必要があります。しかし、一般ユーザーなどアクセス許可の付与ができない場合でも、メタデータの取得をスキップしてオブジェクトのデータに直接アクセスする方法があります。本記事では、ストアドプロシージャを使用したこの代替手法について解説します。
メタデータ取得をスキップしたデータ操作
ServiceNowドライバーでは、専用のストアドプロシージャを使用することで、メタデータへのアクセス権限がなくてもデータの操作が可能です。
レコードの取得
特定のレコードを取得するには、GetRecordストアドプロシージャを使用します。
exec GetRecord @TableName='incident', @SysId='f2f701a493a47a10db26758efaba1024';
パラメータ:
@TableName: 対象テーブル名
@SysId: 取得するレコードのシステムID
レコードの作成
新しいレコードを作成するには、CreateRecordストアドプロシージャを使用します。
exec CreateRecord @TableName = 'incident', @Payload = '{"comments":"Hello."}';
パラメータ:
@TableName: 対象テーブル名
@Payload: JSON形式のレコードデータ
レコードの更新
既存のレコードを更新するには、UpdateRecordストアドプロシージャを使用します。
exec UpdateRecord @TableName = 'incident', @Payload = '{"comments":"Hello."}', @SysId='f2f701a493a47a10db26758efaba1024';
パラメータ:
@TableName: 対象テーブル名
@Payload: JSON形式の更新データ
@SysId: 更新対象レコードのシステムID
レコードの削除
レコードを削除するには、DeleteRecordストアドプロシージャを使用します。
exec DeleteRecord @TableName='incident', @SysId='fcaab27647a342502c902f74236d4382';
パラメータ:
@TableName: 対象テーブル名
@SysId: 削除対象レコードのシステムID
スキーマ情報の取得
レコードの作成や更新では、JSON形式でデータを指定するため、テーブルのメタデータ(カラム名やデータ型など)を理解している必要があります。この問題を解決するため、GetTableSchemaストアドプロシージャを使用してスキーマ情報を取得できます。
exec GetTableSchema @TableName = 'incident';
注意: このストアドプロシージャを実行するには管理者権限が必要です。
まとめ
ServiceNowドライバーのストアドプロシージャを活用することで、メタデータへのアクセス許可がない環境でもデータ操作が可能になります。これにより、一般ユーザーでもServiceNowのデータに対してCRUD操作を実行できるようになります。ただし、レコードの作成や更新時にはテーブルの構造を把握している必要があるため、事前にGetTableSchemaなどで必要な情報を確認しておくことをお勧めします。