バージョン 6.3.3
 —  プラグインによる Natural スタジオの拡張  —

Natural スタジオインターフェイス

このドキュメントでは、次のトピックについて説明します。


ルートインターフェイス

プラグインはオートメーションインターフェイスを使用して Natural スタジオ機能にアクセスします。 Natural スタジオオートメーションインターフェイスを構成する各インターフェイスはすべて、ルートインターフェイス INatAutoStudio から到達できます。 このインターフェイスのハンドルは、有効化および無効化時に各プラグインに渡されます。

Top of page

インターフェイスの構造

以下のツリー図は、オートメーションインターフェイスの階層構造を示します。

INatAutoStudio
 INatAutoObjects
         INatAutoDataAreas
                 INatAutoDataArea
         INatAutoDialogs
                 INatAutoDialog
         INatAutoPrograms
                 INatAutoProgram
         INatAutoGenericDocuments
                 INatAutoGenericDocument
         INatAutoGenericTexts
                 INatAutoGenericText
         INatAutoObjectLists
                 INatAutoObjectList
         INatAutoObjectTrees
                 INatAutoObjectTree
                         INatAutoObjectTreeNode
         INatAutoSelectedObjects
                 INatAutoSelectedObject
         INatAutoRefreshObject
 INatAutoControlBars
         INatAutoImages
         INatAutoCommands
                 INatAutoCommand
         INatAutoToolBars
                 INatAutoToolBar
         INatAutoFrameMenus
                 INatAutoFrameMenu
                         INatAutoPopupMenu
         INatAutoContextMenus
                 INatAutoContextMenu
                         INatAutoPopupMenu
 INatAutoTypes
         INatAutoNodeTypes
                 INatAutoNodeType
         INatAutoNodeImages
 INatAutoPlugIns
         INatAutoPlugIn
 INatAutoResultViews
         INatAutoResultView
 INatAutoSystem
         INatAutoEnvironments
                 INatAutoEnvironment
                         INatAutoNatparm
                         INatAutoNatsvar
         INatAutoApplications
                 INatAutoApplication
                         INatAutoLinkedApplications
                         INatAutoEnvironment
         INatAutoSysmain
 INatAutoProgressIndicator

Top of page

コントロールバーの操作

Natural スタジオユーザーはコマンドを使用してプラグイン機能にアクセスします。 プラグインは各コマンドを番号によって識別します。 番号は自由に選べますが、プラグインごとに一意にする必要があります。 コマンドにはキャプションとイメージを割り当てられます。 キャプションとイメージはメニューとツールバーのコマンドを表します。

コマンドをユーザーに提供するために、プラグインは最初に INatAutoCommands コレクションに INatAutoCommand インターフェイスを作成します。

send "Add" to #commands
with 4711 "MyCommand" #myImage
return #myCommand

コマンドを作成するときに、上記の例では、プラグインはイメージ #myImage を参照します。 このイメージはメニューとツールバーに表示するコマンドを表すために使用されます。 プラグインが以前にメソッド INatAutoImages::LoadImage を使用してイメージをロードしている場合もあります。

send "LoadImage" to #images
with "e:\images\myimage.bmp"
return #myImage

これはメソッド INatAutoCommands::Add に渡すことができる IPictureDisp インターフェイスになります。 IPictureDisp インターフェイスは Windowsで事前定義されているインターフェイスです。 Natural でメソッド INatAutoImages::LoadImage を使用して IPictureDisp インターフェイスを作成できます。

または、プラグインはイメージファイル名をメソッド INatAutoCommands::Add に直接渡すことができます。

send "Add" to #commands
with 4711 "MyCommand" "e:\images\myimage.bmp" 
return #myCommand

後でユーザーがメニューやツールバーのコマンドを選択すると、メソッド INaturalStudioPlugIn::OnCommand によってプラグインに通知されます。

まずコマンドをユーザーがアクセスできるようにするために、プラグインはコマンドをメニューまたはツールバーに挿入する必要があります。 以下にツールバーの例を示します。 ここでプラグインは最初に[Tools]ツールバーを見つけます。 次に以前に作成されたコマンドをツールバーに挿入します。

send "Item" to #toolbars
with "Tools"
return #toolsToolbar
send "InsertCommand" to #toolsToolbar
with #myCommand

プラグインがコマンドを作成する必要があるのは 1 回だけで、それを異なるツールバーやメニューに割り当てることができます。

プラグインは独自のツールバーを作成してコマンドをこのツールバーに追加することもあります。

send "Add" to #toolbars
with "MyToolbar"
return #myToolbar
send "InsertCommand" to #myToolbar
with #myCommand

ここまで、プラグインがインターフェイス INatAutoCommandsINatAutoImages、およびその他のインターフェイスを使用することを見てきました。 さて、プラグインはどのようにしてこれらのインターフェイスへのアクセスを取得するのでしょうか。 プラグインはルートインターフェイス INatAutoStudio のプロパティをクエリすることによってそれらにアクセスします。 このインターフェイスのハンドルは、有効化および無効化時に各プラグインに渡されます。 プラグインは、このインターフェイスから Natural スタジオオートメーションインターフェイスの他のどのセクションにも移動できます。

コントロールバーを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoControlBars
INatAutoImages
INatAutoCommands
INatAutoCommand
INatAutoToolBars
INatAutoToolBar
INatAutoContextMenus
INatAutoContextMenu
INatAutoFrameMenus
INatAutoFrameMenu
INatAutoPopupMenu

Top of page

ノードタイプの操作

Natural スタジオは、頻繁にツリービューとリストビューを使用して、開発オブジェクトを表示し、それらの間を移動します。 ツリービューやリストビューの各ノードはノードタイプによって特徴づけられます。 ノードタイプは、特定タイプのノードがユーザーインターフェイスでどのように表されるかを定義します。

各ノードタイプは整数によって識別されます。 特定ノードタイプに属している開発オブジェクトは、そのノードタイプ番号と英数字キーによって識別されます。 キーのフォーマットはノードタイプによって異なります。

プラグインで Natural スタジオで独自のツリービューとリストビューを作成する場合は、プラグインから定義済みノードタイプを参照できます。 さらに、プラグインで独自のノードタイプを定義して、これらのユーザー定義のノードタイプを後で参照できます。

以下では次のトピックについて説明します。

定義済みノードタイプ

プログラム、ダイアログ、クラス、ライブラリ、アプリケーションなどの組み込み Natural スタジオ開発オブジェクトには、定義済みのノードタイプとキーフォーマットがあります。 Natural スタジオオートメーションインターフェイスの多くのインターフェイスとメソッドは、定義済みノードタイプを参照します。 次の表に、使用可能な定義済みノードタイプの完全なリストとそれらのキーフォーマットの定義を示します。

定義済みノードタイプ

ノードタイプ番号 ノードタイプ名 キーフォーマット
1001 パラメータデータエリア NATID
1002 コピーコード NATID
1003 DDM NATID
1004 グローバルデータエリア NATID
1005 ヘルプルーチン NATID
1006 ローカルデータエリア NATID
1007 マップ NATID
1008 サブプログラム NATID
1009 プログラム NATID
1010 サブルーチン NATID
1011 テキスト NATID
1012 ビュー NATID
1013 ダイアログ NATID
1014 クラス NATID
1015 コマンドプロセッサ NATID
1016 ビュー調整 NATID
1017 メインフレーム DDM DDMID
1018 ファンクション NATID
1019 共有リソース RESID
1020 エラーメッセージファイル NATID
1021 アダプタ NATID
1051 パラメータデータエリア(アプリケーション内) NATID
1052 コピーコード(アプリケーション内) NATID
1053 DDM(アプリケーション内) NATID
1054 グローバルデータエリア(アプリケーション内) NATID
1055 ヘルプルーチン(アプリケーション内) NATID
1056 ローカルデータエリア(アプリケーション内) NATID
1057 マップ(アプリケーション内) NATID
1058 サブプログラム(アプリケーション内) NATID
1059 プログラム(アプリケーション内) NATID
1060 サブルーチン(アプリケーション内) NATID
1061 テキスト(アプリケーション内) NATID
1062 ビュー(アプリケーション内) NATID
1063 ダイアログ(アプリケーション内) NATID
1064 クラス(アプリケーション内) NATID
1065 コマンドプロセッサ(アプリケーション内) NATID
1066 ビュー調整(アプリケーション内) NATID
1067 メインフレーム DDM(アプリケーション内) DDMID
1068 ファンクション(アプリケーション内) NATID
1069 共有リソース(アプリケーション内) RESID
1070 エラーメッセージファイル(アプリケーション内) NATID
1071 アダプタ(アプリケーション内) NATID
1101 システムファイル FILEID
1102 Natural システムファイル FILEID
1103 ユーザーシステムファイル FILEID
1104 DDM システムファイル FILEID
1111 ライブラリ LIBID
1112 ライブラリ(アプリケーション内) LIBID
1121 環境 BSTR
1131 基本アプリケーション BSTR
1132 複合アプリケーション BSTR
1141 アプリケーションサーバー BSTR

フォーマット NATID

構文 説明
name library fnr dbnr 指定システムファイルの指定ライブラリの指定名で Natural 開発オブジェクトを識別します。 ID の各部分はスペースで区切られています。
name library 指定ライブラリの指定名で Natural オブジェクトを識別します。 システムファイルは、通常の Natural 論理に従ってライブラリ名に応じてライブラリから特定されます。 ID の各部分はスペースで区切られています。
name 現在のログオンライブラリの指定名で Natural オブジェクトを識別します。

フォーマット RESID

構文 説明
name/library/fnr/dbnr 指定システムファイルの指定ライブラリの指定名で共有リソースを識別します。 ID の各部分はスラッシュで区切られています。
name/library 指定ライブラリの指定名で共有リソースを識別します。 システムファイルは、通常の Natural 論理に従ってライブラリ名に応じてライブラリから特定されます。 ID の各部分はスラッシュで区切られています。
name 現在のログオンライブラリの指定名で共有リソースを識別します。

フォーマット DDMID

構文 説明
name fnr dbnr 指定された FDIC システムファイルの指定名でメインフレーム DDM を識別します。 ID の各部分はスペースで区切られています。
name 現在の FDIC システムファイルの指定名でメインフレーム DDM を識別します。

フォーマット LIBID

構文 説明
name fnr dbnr 指定システムファイルの指定名で Natural ライブラリを識別します。 ID の各部分はスペースで区切られています。
name 指定名で Natural ライブラリを識別します。 システムファイルは、通常の Natural 論理に従ってライブラリ名に応じてライブラリから特定されます。

フォーマット FILEID

構文 説明
fnr dbnr 指定番号で Natural システムファイルを識別します。 ID の各部分はスペースで区切られています。

ある開発環境に、データベース番号 "101" とファイル番号 "99" のシステムファイル(プログラム MYPROG を持つライブラリ MYLIB を含む)があると仮定します。

所定の環境は以下のとおりです。

ユーザー定義ノードタイプ

プラグインで独自のノードタイプを定義できます。 これは、Natural スタジオオブジェクトの定義済みセットに属していない開発オブジェクトのツリービューまたはリストビューをプラグインで表示する場合に役立ちます。 例えば、オブジェクト記述プラグインなどです。 また、組み込み Natural スタジオ機能でカバーされていない Natural スタジオオブジェクトの特定部分を表示するプラグインにも役立ちます。 例えば、XRef Evaluation プラグインなどです。

独自のノードタイプを定義するとき、プラグインは "20000" で始まる正の整数値を自由に選択できます。 "20000" 未満の値は定義済みノードタイプ用に予約されています。 異なるプラグインがノードタイプに同じ整数値を選択したかどうかは重要でありません。 内部的に、Natural スタジオは、ノードタイプの番号と、ノードタイプを定義したプラグインによって、ノードタイプを区別します。

プラグインは各ユーザー定義ノードタイプに対してキーフォーマットを自由に定義することができます。 Natural スタジオは、ユーザー定義ノードタイプのキーを解釈しませんが、それらを隠された文字列として処理します。

新しいノードタイプとその視覚表示を定義するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoTypes
INatAutoNodeImages
INatAutoNodeTypes
INatAutoNodeType

Top of page

選択の操作

プラグインは、このセクションで説明するインターフェイスを使用して、ユーザーが Natural スタジオで現在選択しているオブジェクトセットにアクセスできます。 プラグインがこの情報を必要とするのは、特定のメニューまたはツールバーコマンドが現在の選択に適用可能でありユーザーインターフェイスで有効にする必要があるかどうかを決定する場合です。 また、その後ユーザーがコマンドを実行する場合に、プラグインは選択されたオブジェクトセットを認識してそれらにコマンドを適用できるようにする必要があります。 プラグインは、このセクションで説明されるインターフェイスを使用して現在の選択にアクセスします。

現在の選択で処理を実行するために、プラグインはルートインターフェイス INatAutoStudio で開始し、INatAutoObjects インターフェイス、次に INatAutoSelectedObjects インターフェイスを取得します。 ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。

#objs := #studio.Objects
#selobjs := #objs.SelectedObjects

返された INatAutoSelectedObjects インターフェイスは、ユーザーが現在選択しているオブジェクトセットへのアクセスを可能にします。 プラグインはこのインターフェイスを使用して、例えば、選択されたオブジェクト全体で反復し、それらを調べることができます。 メソッド Item は、選択された特定オブジェクトに INatAutoSelectedObject インターフェイスを返します。

#iCount := #selobjs.Count
for #i := 1 to #iCount
  send "Item" to #selobjs
  with #i return #selobj
  #iType := #selobj.Type
  #aKey := #selobj.Key
end-for

プロパティ FocusObject は、現在フォーカスがある選択された特定オブジェクトのインデックスを返します。 このインデックスは、フォーカスオブジェクトの INatAutoSelectedObject インターフェイスを取得するために使用できます。

#iFocus := #selobjs.FocusObject
send "Item" to #selobjs
with #iFocus return #focus

メソッド ContainsObjectType は、現在選択されているセットに特定タイプのオブジェクトが含まれるかどうかを簡単にチェックするために使用できます。 場合によっては、特定のコマンドが有効かどうかを判断するにはこれで十分です。

send "ContainsObjectType" to #selobjs
with 1009 return #bContainsPrograms

特定のチェックのために、プラグインは現在の選択を XML ドキュメントとして取得し処理することもできます。

#aSelectedObjectsXML := #selobjs.SelectedObjects

選択を操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoObjects
INatAutoSelectedObjects
INatAutoSelectedObject

Top of page

Natural 開発オブジェクトの操作

プラグインは、このセクションで説明するインターフェイスを使用して、Natural 開発オブジェクトを作成および編集できます。 新規開発オブジェクトを作成し、既存オブジェクトをエディタにロードし、それらの内容を操作し、それらを保存および格納できることにより、プラグインは生成機能を提供することが可能なので、開発プロセスの自動化に役立ちます。 例えば、プログラム生成プラグインなどです。

例えば、プログラムエディタでプログラムを開くには、プラグインはルートインターフェイス INatAutoStudio で開始し、INatAutoObjects インターフェイス、次に INatAutoPrograms インターフェイスを取得します。 そして、メソッド INatAutoPrograms::Open を使用してプログラムをエディタにロードします。

ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。

#objects := #studio.Objects
#programs := #objects.Programs
send "Open" to #programs
with 1009 "MYPGM" "MYLIB" return #program

結果の INatAutoProgram インターフェイスを使用してプログラムを操作できます。例えば、プログラムを格納しエディタを閉じることができます。

send "Stow" to #program
send "Close" to #program

メソッド Add を使用して新規プログラムソースが作成されます。

send "Add" to #programs
with 1009 return #program

プロパティ Source を使用してソースコード全体がプログラムに追加されます。

#program.Source := "WRITE ""HELLO, WORLD!"" END

または、メソッド InsertLines を使用してソースコードが段階的に追加されます。

send "InsertLines" to #program
with "WRITE ""HELLO, WORLD!" #return #next
send "InsertLines" to #program
with "END" #next return #next

インターフェイス INatAutoProgram には、ソースコードを修正するための検索メソッドや置換メソッドなども含まれています。

send "Search" to #program
with "HELLO" return #found
send "ReplaceLines" to #program
with "WRITE ""Good morning" #found

ダイアログとデータエリアには、インターフェイス INatAutoDialog および INatAutoDataArea を使用して同様の方法でアクセスします。 ただし、これらのオブジェクトには 1 つの特徴があります。これらのオブジェクトのユーザーインターフェイスにグラフィカルまたはストラクチャードエディタがある場合でも、オブジェクトはオートメーションインターフェイスでテキスト編集されます。 データエリアでは、これは、プラグインがデータエリアを生成する場合に実際には DEFINE DATA ステートメントの生成が必要なことを意味します。

#objects := #studio.Objects
#dataareas := #objects.DataAreas
send "Add" to #dataareas
with 1006 return #lda
*
send "StartEdit" to #lda
send "InsertLines" to #lda
with "DEFINE DATA LOCAL" return #next 
send "InsertLines" to #lda
with "1 MYSTRING(A10)" #next return #next
send "InsertLines" to #lda
with "1 MYNUMBER(I4)" #next return #next
send "InsertLines" to #lda
with "END-DEFINE" #next return #next
send "EndEdit" to #lda
*
send "Stow" to #lda
send "Close" to #lda

メソッド INatAutoDataArea::StartEdit および INatAutoDataArea::EndEdit への呼び出しは、一連の編集操作の開始と終了をマークするために使用されます。

Natural 開発オブジェクトを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoObjects
INatAutoPrograms
INatAutoProgram
INatAutoDialogs
INatAutoDialog
INatAutoDataAreas
INatAutoDataArea

Top of page

汎用テキストドキュメントの操作

プラグインは、このセクションで説明されるインターフェイスを使用して、Natural スタジオプログラムエディタを任意のテキストオブジェクト用エディタとして使用できます。 プラグインは、プログラムエディタセッションを開き、それにバッファをテキストデータで渡し、ユーザーがデータを編集した後、修正されたデータを再取得できます。 プラグイン自体が、編集されるデータの提供と保存を行います。 プログラムエディタは、通常の編集機能が汎用テキストオブジェクトに適切な場合はそれを提供します。

ユーザーがプログラムエディタで所定のテキストを編集できるように、プラグインはルートインターフェイス INatAutoStudio で開始し、INatAutoObjects インターフェイス、次に INatAutoGenericTexts インターフェイスを取得します。 そして、メソッド INatAutoGenericTexts::Open を使用してテキストバッファをエディタにロードします。

ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。 また、編集されるテキストが英数字変数 #buffer に含まれていると仮定します。

#objects := #studio.Objects
#texts := #objects.GenericTexts
send "Open" to #texts
with "Curriculum Vitae" "Dana Scully" #buffer
return #text

エディタが開かれ、ユーザーは対話形式でテキストを編集できます。

プラグインは結果の INatAutoGenericText インターフェイスを使用してテキストを操作できます。例えば、行を挿入できます。

send "InsertLines" to #text
with "Taught for two years at Quantico Medical School"

ユーザーがエディタで[Save]ボタンをクリックすると、プラグインは通知 PLUGIN-NOTIFY-SAVE を受け取ります。 プラグインは通常、この通知に応答してエディタから編集されたテキストを取得し保存します。

#buffer := #text.Source
* Now save the text in a plug-in specific way.

汎用テキストドキュメントを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoGenericTexts
INatAutoGenericText
INatAutoObjects

Top of page

汎用ドキュメントの操作

独自の開発オブジェクトを管理するプラグインでは、開発オブジェクトタイプごとに独自のエディタの提供が必要な場合があります。 Natural スタジオのエディタは、一般に MDI(マルチドキュメントインターフェイス)ウィンドウで開発オブジェクトを管理します。 以降では、これをドキュメントウィンドウと呼びます。 Natural スタジオには、多数の組み込みエディタ(プログラムエディタやダイアログエディタなど)があります。 プラグインはいわゆる汎用ドキュメントウィンドウを使用して独自のエディタを実装できます。

このようなエディタを汎用ドキュメントウィンドウとして実装すると、Natural スタジオの組み込みエディタのように動作します。 つまり、異なるオブジェクトに各種エディタウィンドウを並行して開くことができるので、ユーザーはそれらを切り替えることができます。

汎用ドキュメントウィンドウを実装するために、最初に "プラグイン MDI ウィンドウ" タイプの Natural ダイアログを作成します。 プラグインコードで OPEN DIALOG ステートメントを使用してこのダイアログを開き、Natural スタジオにダイアログをドキュメントウィンドウとして表示できます。 通常は、プラグインのコマンドハンドラでこれを行います。コマンドハンドラは、メソッド INaturalStudioPlugIn::OnCommand にあります。

open dialog "mydlg" null-handle giving #dialogid
#objects := #studio.Objects
#genericdocs := #objects.GenericDocuments
send "Add" to #genericdocs with #dialogid return #doc

結果の INatAutoGenericDocument インターフェイスを使用してドキュメントウィンドウを操作できます。

プラグインには、汎用ドキュメントウィンドウに含まれる Natural ダイアログと通信するためのその他の手段がいくつか用意されています。

ユーザーがドキュメントウィンドウをアクティブにすると、Natural スタジオは自動的にフレームメニューを、アクティブなドキュメントに適用できるコマンドを含むメニューに切り替えます。 組み込みドキュメントウィンドウの場合は、これらのフレームメニューは事前定義されます。 汎用ドキュメントウィンドウの場合は、プラグイン自体が適切なフレームメニューを提供できます。

プラグインは、メソッド INatAutoFrameMenus::Clone を使用して既存のフレームメニューのクローンを作成し、メソッド INatAutoFrameMenu::InsertCommand を使用して必要に応じてクローンに新しいコマンドを追加することで、独自のフレームメニューを作成できます。

その後、メソッド INatAutoGenericDocuments::Add の呼び出し時に、プラグインは結果の INatAutoFrameMenu インターフェイスを Natural スタジオに渡します。

汎用ドキュメントを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoGenericDocuments
INatAutoGenericDocument
INatAutoObjects

Top of page

ツリービューおよびリストビューの操作

プラグインは、このセクションで説明するインターフェイスを使用して、Natural スタジオに独自のツリービューとリストビューを表示できます。 ツリービューとリストビューは、開発オブジェクトの表示とそれらの間の移動のために Natural スタジオで頻繁に使用されます。

ツリービューとリストビューにオブジェクトを表示するために、まずプラグインは表示するツリーまたはリストビューノードのタイプを登録する必要があります。 この手順については、「ノードタイプの操作」を参照してください。

ツリービューとリストビューにオブジェクトを表示するプラグインは、インターフェイス INaturalStudioPlugInTree のメソッドも適切に実装する必要があります。 Natural スタジオは、ツリーを展開またはリフレッシュするときにこのインターフェイスのメソッドを呼び出します。

ツリービューを開くために、プラグインはルートインターフェイス INatAutoStudio で開始し、INatAutoObjects インターフェイス、次に INatAutoObjectTrees インターフェイスを取得します。 ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。

#objs := #studio.Objects
#trees := #objs.ObjectTrees

結果の INatAutoObjectTrees インターフェイスは、現在開かれているツリービュードキュメントウィンドウへのアクセスを可能にします。 プラグインはこのインターフェイスを使用して、指定のルートオブジェクトの新しいツリービューを開くことができます。

send "Open" to #trees
with #type #key #caption
return #tree

メソッド Open で指定されたノードタイプは、事前に登録されている必要があります(「ノードタイプの操作」を参照)。 メソッド Open から返された INatAutoObjectTree インターフェイスは、開かれたばかりのツリービュードキュメントウィンドウへのアクセスを可能にします。 プラグインはこのインターフェイスを使用して、例えば、後でドキュメントウィンドウを閉じることができます。

send "Close" to #tree

プラグインは、ツリービューを開くときに、ルートオブジェクトのタイプとキー、およびツリービュードキュメントウィンドウに表示するキャプションを指定します。 Natural スタジオは、プラグインによって実装されているインターフェイス INaturalStudioPlugInTree を使用して、ツリービューの展開に必要な追加情報を取得します。

ツリービューのノードには、インターフェイス INatAutoObjectTreeNode を使用してアクセスできます。 ツリービューのルートノードは、メソッド INatAutoObjectTree::GetRootNode で取得できます。このメソッドは、インターフェイス INatAutoObjectTreeNode を返します。 このインターフェイスを使用して、例えば、ノードを展開して子コードにアクセスできます。 同様に、ツリービューで現在選択されているノードを取得できます。

send "GetRootNode" to #tree
return #rootnode
send "Expand" to #rootnode
send "GetChild" to #rootnode
return #firstchildnode
send "GetNext" to #firstchildnode
return #nextchildnode
send "Expand" to #nextchildnode
send "GetSelectedNode" to #tree
return #selectednode
send "Expand" to #selectednode

インターフェイス INatAutoObjectTreeNode は各ツリービューの視覚表示のみを制御し、基礎となるオブジェクト構造を制御しないため、複数のビューで同時に異なる表示になることがあります。 オブジェクト構造自体は、INaturalStudioPlugInTree インターフェイスにより、オブジェクト構造を定義し提供するプラグインの制御下にあります。

リストビュードキュメントウィンドウは、ツリービュードキュメントウィンドウとほぼ同様の方法で作成されますが、インターフェイス INatAutoObjectTrees ではなく INatAutoObjectLists を使用する点が異なります。

ツリービューとリストビューを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoObjects
INatAutoObjectTrees
INatAutoObjectTree
INatAutoObjectTreeNode
INatAutoObjectLists
INatAutoObjectList
INatAutoRefreshObject

Top of page

結果ビューの操作

プラグインは、このセクションで説明するインターフェイスを使用して、操作結果を Natural スタジオの結果ビューに表示できます。 結果ビューに表示されたオブジェクトは、コマンドのターゲットにすることが可能であり、ナビゲーションの出発点として使用できます。 結果ビューを使用する組み込み機能の例として、[Cat All]コマンドと[Find]コマンドが挙げられます。

結果ビューにオブジェクトを表示するために、まずプラグインは表示するノードのタイプを登録する必要があります。 この手順については、「ノードタイプの操作」を参照してください。

結果ビューを操作するために、プラグインはルートインターフェイス INatAutoStudio で開始し、INatAutoResultViews インターフェイスを取得します。 ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。

#resultviews := #studio.ResultViews

結果の INatAutoResultViews インターフェイスは、結果ビューコントロールバーと現在開いている結果ビューへのアクセスを可能にします。 プラグインはこのインターフェイスを使用して、例えば、結果ビューコントロールバーを表示したり非表示にしたりすることができます。

send "Show" to #resultviews

プラグインはインターフェイス INatAutoResultViews を使用して、新しい結果ビューを開くことができます。

send "Open" to #resultviews
with #caption #image #headers
return #resultview

プラグインは、結果ビューを開くときに、結果ビュータブに表示するキャプションとイメージ、および必要に応じて結果ビューの列ヘッダーを指定します。

メソッド Open から返された INatAutoResultView インターフェイスは、開かれたばかりの結果ビューへのアクセスを可能にします。 プラグインはこのインターフェイスを使用して、結果ビューをアクティブにし、そこに行を挿入し、表示を更新することができます。 メソッド SetVisible は、特定の行を、ビューに表示される位置にスクロールします。

#resultview.Active := true
send "InsertRows" to #resultview
with #rows return #last
send "Update" to #resultview
send "SetVisible" to #resultview
with #last

最後に、プラグインはその結果ビューを閉じることができます。

send "Close" to #resultview

結果ビューを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoResultViews
INatAutoResultView

Top of page

環境の操作

プラグインは、このセクションで説明するインターフェイスを使用して、使用可能なリモートおよびローカル開発環境の検査、環境のマップ、リモート環境との接続と切断、および環境のアクティブ化を実行できます。

環境を操作するために、プラグインはルートインターフェイス INatAutoStudioで開始し、INatAutoSystem インターフェイス、次に INatAutoEnvironments インターフェイスを取得します。 ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。

#system := #studio.System
#envs := #system.Environments

返された INatAutoEnvironments インターフェイスは、ローカル環境へのアクセスと、現在の Natural スタジオセッション中に一度接続されたすべてのリモート環境へのアクセスを可能にします。

プラグインはこのインターフェイスを使用して、例えば、ホスト名、ポート番号、ユーザー ID、パスワードなどの引数を指定することで新規リモート環境をマップできます。

send "Add" to #envs
with "IBM2" "4712" "SCULLY" "secret" "STACK=(LOGON XFILES)"
return #env

返されたインターフェイス INatAutoEnvironment は、環境の属性へのアクセスを可能にします。

#bIsActive := #env.Active
#bIsConnected := #env.Connected

プロパティ Parameters は、インターフェイス INatAutoNatparm へのアクセスを可能にします。 このインターフェイスには、実行している環境の Natural パラメータを表すプロパティが含まれます。 このインターフェイスでは、Natural パラメータのサブセットのみ使用可能です。

#natparm := #env.Parameters
#fuserDBnr := #natparm.FuserDBnr 
#fuserFnr := #natparm.FuserFnr

プロパティ SystemVariables は、インターフェイス INatAutoNatsvar へのアクセスを可能にします。 このインターフェイスには、環境に現在設定されているシステム変数を表すプロパティが含まれます。 このインターフェイスでは、システム変数のサブセットのみ使用可能です。

#natsvar := #env.SystemVariables
#language := #natsvar.Language

プラグインは、メソッド Disconnect を使用してリモート環境から切断します。

send "Disconnect" to #env

環境を操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoEnvironments
INatAutoEnvironment
INatAutoSystem
INatAutoNatparm
INatAutoNatsvar

Top of page

アプリケーションの操作

プラグインは、このセクションで説明するインターフェイスを使用して、アプリケーションサーバーで使用可能なアプリケーションの検査、Natural スタジオへのアプリケーションのマップ、アプリケーションとの接続と切断、アプリケーションの有効化、およびアプリケーションの作成と修正を実行できます。 このセクションのインターフェイスを使用するプラグインの例として、アプリケーションウィザードが挙げられます。

アプリケーションを操作するために、プラグインはルートインターフェイス INatAutoStudioで開始し、INatAutoSystem インターフェイス、次に INatAutoApplications インターフェイスを取得します。 ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。

#system := #studio.System
#apps := #system.Applications

結果の INatAutoApplications インターフェイスは、現在アクティブなアプリケーションサーバーとそこに含まれるアプリケーションへのアクセスを可能にします。 プラグインはこのインターフェイスを使用して、例えば、現在アクティブなアプリケーションを要求できます。

#app := #apps.ActiveApplication

プラグインは、新規アプリケーションを作成して Natural スタジオセッションにマップすることもできます。

send "Add" to #apps
with "MYAPPLICATION" return #app

結果の INatAutoApplication インターフェイスは、アプリケーションの属性へのアクセスを可能にします。

#bIsActive := #app.Active
#bIsConnected := #app.Connected

複合アプリケーションの場合は、プロパティ LinkedApplications はインターフェイス INatAutoLinkedApplications を返します。 このインターフェイスは、複合アプリケーションにリンクされた基本アプリケーションへのアクセスを可能にします。

#linkedapps:= #app.LinkedApplications
#iCount := #linkedapps.Count

基本アプリケーションの場合は、プロパティ LinkedObjects はアプリケーションにリンクされたオブジェクトのリストを含む XML ドキュメントを返します。

#aObjects:= #app.LinkedObjects

プラグインは、アプリケーションとオブジェクトをリンクまたはリンク解除することもできます。

send "UnlinkObject" to #app
with 1009 "OLDPROG" "MYLIB"
send "LinkObject" to #app
with 1009 "NEWPROG" "MYLIB"

最後に、プラグインはアプリケーションを切断しマップ解除することができます。

send "Disconnect" to #app
send "Unmap" to #app

アプリケーションを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoApplications
INatAutoApplication
INatAutoLinkedApplications

Top of page

プラグインの操作

プラグインは、このセクションで説明するインターフェイスを使用して、現在インストールされているプラグインを検査し、それらのプロパティを読み取り、プラグインを有効化または無効化できます。 プラグイン自体の無効化も可能です。 このセクションのインターフェイスを使用するプラグインの例として、プラグインマネージャが挙げられます。

プラグインを操作するために、プラグインはルートインターフェイス INatAutoStudio で開始し、INatAutoPlugIns インターフェイスを取得します。 ここでは、#studio という名前の変数のインターフェイス INatAutoStudio に、プラグインがハンドルを保持していることを前提にしています。 このハンドルは、有効化時にメソッド INaturalStudioPlugIn::OnActivate でプラグインに渡されました。

#plugins := #studio.PlugIns

結果の INatAutoPlugIns インターフェイスは、現在インストールされているプラグインへのアクセスを可能にします。 プラグインはこのインターフェイスを使用して、例えば、インストールされたすべてのプラグインで反復し、それらの属性を調べることができます。 メソッド Item は、特定のプラグインに INatAutoPlugIn インターフェイスを返します。

#iCount := #plugins.Count
for #i := 1 to #iCount
  send "Item" to #plugins
  with #i return #plugin
  #aName := #plugin.Name
  #aProgID := #plugin.ProgID
  #bIsActive := #plugin.Active
end-for

プラグインはインターフェイス INatAutoPlugIn を使用して、プロパティ Active を修正することで特定のプラグインを有効化したり無効化したりすることもできます。 以下のサンプルは、プラグインの有効/無効を切り替えます。

#bIsActive := #plugin.Active
if #bIsActive
  #plugin.Active := false
else
  #plugin.Active := true
end-if

インターフェイス INatAutoPlugIn は、プラグインにコマンドを送信するために使用できます。 以下のサンプルは、ID "200" のプラグインコマンドが現在有効かどうかをチェックし、有効であればプラグインでコマンドを実行します。 ここでは、プラグインに ID "200" のコマンドが実装されていることとこのコマンドの機能を知っている必要があります。

#bEnabled = false
#bChecked := false
send "OnCommandStatus" to #plugin
with 200 #bEnabled #bChecked
if #bEnabled
  send "OnCommand" to #plugin with 200
end-if

プラグインはインターフェイス INatAutoPlugIn を使用して、他のプラグインがいわゆるカスタムインターフェイスで提供する任意のサービスにアクセスできます。 以下のサンプルは、プラグインのカスタムインターフェイスを取得し、そのサービスの 1 つを呼び出します。 ここでは、プラグインがカスタムインターフェイスで提供するサービスがドキュメント化されている必要があります。

#icustom := null-handle
send "GetCustomInterface"
to #plugin return #icustom
if #icustom ne null-handle
  #result := 0
  send "GetMaritalStatus" to #icustom
  with "Anderson, Gillian" return #result
end-if

カスタムインターフェイスを指定するには、プラグインで 2 つの定義済みインターフェイス INaturalStudioPlugIn および INaturalStudioPlugInTree 以外に追加のインターフェイスを実装し、そのインターフェイスをデフォルトのディスパッチインターフェイスにする必要があります。 Natural に実装されているプラグインでは、DEFINE CLASS ステートメントの最初の位置にこのインターフェイスを配置します。

define class ...
  object using ...
  id "..."
  interface icustom
    id "..."
    method GetMaritalStatus id 1 is gstat-n
      parameter using gstat-a
    end-method
  end-interface
  interface using nstplg-i
  interface using nstplt-i
end-class
end

プラグインを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。

INatAutoPlugIns
INatAutoPlugIn

Top of page

ダイアログの操作

プラグインが Natural スタジオのダイアログボックスを開くには、特別な考慮事項がいくつかあります。 プラグインがインプロセス ActiveX コンポーネントとして実行されているか別個のプロセスで実行されている場合は、プラグインでのダイアログボックスのサポートは主に条件に依存します。

以下では次のトピックについて説明します。

別個のプロセスで実行されているプラグイン

一般に、別個のプロセスで実行されている ActiveX コンポーネントはクライアントプロセスのダイアログボックスを開くことができません。 Windows システム自体のこの制限は、プラグインが Natural で記述される特殊なケースでは回避できます。

プラグインが Natural で記述されている場合は、Natural スタジオでモーダルダイアログボックスを開くことができます。 正確には、ダイアログエディタで[Type]属性が "Standard window" に設定され[Style]属性が "Dialog box" に設定された Natural ダイアログを意味します。 ダイアログタイプが "Standard window" の他のスタイルをプラグインで使用することはできません。

ダイアログボックスを開くために、プラグインは通常の OPEN DIALOG ステートメントを使用します。

インプロセスで実行されているプラグイン

プラグインがインプロセス ActiveX コンポーネントとして(つまり DLL として)実装される場合は、Natural スタジオでモーダルおよび非モーダルダイアログを開くことができます。 ダイアログを開くために、プラグインはそれが記述されているプログラミング言語の通常のステートメントを使用します。 Natural で記述されたプラグインは常に別個のプロセスで実行されるので、これはインプロセス ActiveX コンポーネントの実装をサポートするプログラミング言語で記述されたプラグインのみに適用されます。

Natural 以外のプログラミング言語のプラグインを実装する方法については、「他のプログラミング言語でのプラグインの開発」を参照してください。

Top of page