このドキュメントでは、次のトピックについて説明します。
プラグインはオートメーションインターフェイスを使用して Natural スタジオ機能にアクセスします。 Natural スタジオオートメーションインターフェイスを構成する各インターフェイスはすべて、ルートインターフェイス INatAutoStudio
から到達できます。 このインターフェイスのハンドルは、有効化および無効化時に各プラグインに渡されます。
以下のツリー図は、オートメーションインターフェイスの階層構造を示します。
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
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
ここまで、プラグインがインターフェイス INatAutoCommands
、INatAutoImages
、およびその他のインターフェイスを使用することを見てきました。 さて、プラグインはどのようにしてこれらのインターフェイスへのアクセスを取得するのでしょうか。 プラグインはルートインターフェイス INatAutoStudio
のプロパティをクエリすることによってそれらにアクセスします。 このインターフェイスのハンドルは、有効化および無効化時に各プラグインに渡されます。 プラグインは、このインターフェイスから Natural スタジオオートメーションインターフェイスの他のどのセクションにも移動できます。
コントロールバーを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。
INatAutoControlBars
INatAutoImages
INatAutoCommands
INatAutoCommand
INatAutoToolBars
INatAutoToolBar
INatAutoContextMenus
INatAutoContextMenu
INatAutoFrameMenus
INatAutoFrameMenu
INatAutoPopupMenu
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 |
構文 | 説明 |
---|---|
name library fnr dbnr | 指定システムファイルの指定ライブラリの指定名で Natural 開発オブジェクトを識別します。 ID の各部分はスペースで区切られています。 |
name library | 指定ライブラリの指定名で Natural オブジェクトを識別します。 システムファイルは、通常の Natural 論理に従ってライブラリ名に応じてライブラリから特定されます。 ID の各部分はスペースで区切られています。 |
name | 現在のログオンライブラリの指定名で Natural オブジェクトを識別します。 |
構文 | 説明 |
---|---|
name/library/fnr/dbnr | 指定システムファイルの指定ライブラリの指定名で共有リソースを識別します。 ID の各部分はスラッシュで区切られています。 |
name/library | 指定ライブラリの指定名で共有リソースを識別します。 システムファイルは、通常の Natural 論理に従ってライブラリ名に応じてライブラリから特定されます。 ID の各部分はスラッシュで区切られています。 |
name | 現在のログオンライブラリの指定名で共有リソースを識別します。 |
構文 | 説明 |
---|---|
name fnr dbnr | 指定された FDIC システムファイルの指定名でメインフレーム DDM を識別します。 ID の各部分はスペースで区切られています。
|
name | 現在の FDIC システムファイルの指定名でメインフレーム DDM を識別します。
|
構文 | 説明 |
---|---|
name fnr dbnr | 指定システムファイルの指定名で Natural ライブラリを識別します。 ID の各部分はスペースで区切られています。 |
name | 指定名で Natural ライブラリを識別します。 システムファイルは、通常の Natural 論理に従ってライブラリ名に応じてライブラリから特定されます。 |
構文 | 説明 |
---|---|
fnr dbnr | 指定番号で Natural システムファイルを識別します。 ID の各部分はスペースで区切られています。 |
ある開発環境に、データベース番号 "101" とファイル番号 "99" のシステムファイル(プログラム MYPROG
を持つライブラリ MYLIB
を含む)があると仮定します。
所定の環境は以下のとおりです。
プログラムはノードタイプ 1009 とキー "MYPROG MYLIB 99 101" で識別されます。
ライブラリはノードタイプ 1111 とキー "MYLIB 99 101" で識別されます。
システムファイルはノードタイプ 1103 とキー "99 101" で識別されます。
プラグインで独自のノードタイプを定義できます。 これは、Natural スタジオオブジェクトの定義済みセットに属していない開発オブジェクトのツリービューまたはリストビューをプラグインで表示する場合に役立ちます。 例えば、オブジェクト記述プラグインなどです。 また、組み込み Natural スタジオ機能でカバーされていない Natural スタジオオブジェクトの特定部分を表示するプラグインにも役立ちます。 例えば、XRef Evaluation プラグインなどです。
独自のノードタイプを定義するとき、プラグインは "20000" で始まる正の整数値を自由に選択できます。 "20000" 未満の値は定義済みノードタイプ用に予約されています。 異なるプラグインがノードタイプに同じ整数値を選択したかどうかは重要でありません。 内部的に、Natural スタジオは、ノードタイプの番号と、ノードタイプを定義したプラグインによって、ノードタイプを区別します。
プラグインは各ユーザー定義ノードタイプに対してキーフォーマットを自由に定義することができます。 Natural スタジオは、ユーザー定義ノードタイプのキーを解釈しませんが、それらを隠された文字列として処理します。
新しいノードタイプとその視覚表示を定義するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。
INatAutoTypes
INatAutoNodeImages
INatAutoNodeTypes
INatAutoNodeType
プラグインは、このセクションで説明するインターフェイスを使用して、ユーザーが 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
プラグインは、このセクションで説明するインターフェイスを使用して、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
プラグインは、このセクションで説明されるインターフェイスを使用して、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"
ユーザーがエディタでPLUGIN-NOTIFY-SAVE
を受け取ります。 プラグインは通常、この通知に応答してエディタから編集されたテキストを取得し保存します。
#buffer := #text.Source * Now save the text in a plug-in specific way.
汎用テキストドキュメントを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。
INatAutoGenericTexts
INatAutoGenericText
INatAutoObjects
独自の開発オブジェクトを管理するプラグインでは、開発オブジェクトタイプごとに独自のエディタの提供が必要な場合があります。 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 ダイアログと通信するためのその他の手段がいくつか用意されています。
プラグインは、SEND EVENT
ステートメントでダイアログ ID を使用してダイアログにイベントを送信できます。
ダイアログは、プラグインにメソッド呼び出しを送信できます。 これを実行するために、プラグインは OPEN DIALOG
ステートメントで独自の *THIS-OBJECT
ハンドルをダイアログに渡す必要があります。
ダイアログは、Natural スタジオオートメーションインターフェイスを呼び出すことができます。 これを実行するために、プラグインは OPEN DIALOG
ステートメントで INatAutoStudio
インターフェイスポインタをダイアログに渡す必要があります。
ユーザーがドキュメントウィンドウをアクティブにすると、Natural スタジオは自動的にフレームメニューを、アクティブなドキュメントに適用できるコマンドを含むメニューに切り替えます。 組み込みドキュメントウィンドウの場合は、これらのフレームメニューは事前定義されます。 汎用ドキュメントウィンドウの場合は、プラグイン自体が適切なフレームメニューを提供できます。
プラグインは、メソッド INatAutoFrameMenus::Clone
を使用して既存のフレームメニューのクローンを作成し、メソッド INatAutoFrameMenu::InsertCommand
を使用して必要に応じてクローンに新しいコマンドを追加することで、独自のフレームメニューを作成できます。
その後、メソッド INatAutoGenericDocuments::Add
の呼び出し時に、プラグインは結果の INatAutoFrameMenu
インターフェイスを Natural スタジオに渡します。
汎用ドキュメントを操作するために、プラグインは以下のセクションで説明されるインターフェイスを使用します。
INatAutoGenericDocuments
INatAutoGenericDocument
INatAutoObjects
プラグインは、このセクションで説明するインターフェイスを使用して、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
プラグインは、このセクションで説明するインターフェイスを使用して、操作結果を Natural スタジオの結果ビューに表示できます。 結果ビューに表示されたオブジェクトは、コマンドのターゲットにすることが可能であり、ナビゲーションの出発点として使用できます。 結果ビューを使用する組み込み機能の例として、
コマンドと コマンドが挙げられます。結果ビューにオブジェクトを表示するために、まずプラグインは表示するノードのタイプを登録する必要があります。 この手順については、「ノードタイプの操作」を参照してください。
結果ビューを操作するために、プラグインはルートインターフェイス 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
プラグインは、このセクションで説明するインターフェイスを使用して、使用可能なリモートおよびローカル開発環境の検査、環境のマップ、リモート環境との接続と切断、および環境のアクティブ化を実行できます。
環境を操作するために、プラグインはルートインターフェイス 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
プラグインは、このセクションで説明するインターフェイスを使用して、アプリケーションサーバーで使用可能なアプリケーションの検査、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
プラグインは、このセクションで説明するインターフェイスを使用して、現在インストールされているプラグインを検査し、それらのプロパティを読み取り、プラグインを有効化または無効化できます。 プラグイン自体の無効化も可能です。 このセクションのインターフェイスを使用するプラグインの例として、プラグインマネージャが挙げられます。
プラグインを操作するために、プラグインはルートインターフェイス 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
プラグインが Natural スタジオのダイアログボックスを開くには、特別な考慮事項がいくつかあります。 プラグインがインプロセス ActiveX コンポーネントとして実行されているか別個のプロセスで実行されている場合は、プラグインでのダイアログボックスのサポートは主に条件に依存します。
以下では次のトピックについて説明します。
一般に、別個のプロセスで実行されている ActiveX コンポーネントはクライアントプロセスのダイアログボックスを開くことができません。 Windows システム自体のこの制限は、プラグインが Natural で記述される特殊なケースでは回避できます。
プラグインが Natural で記述されている場合は、Natural スタジオでモーダルダイアログボックスを開くことができます。 正確には、ダイアログエディタで[Type]属性が "Standard window" に設定され[Style]属性が "Dialog box" に設定された Natural ダイアログを意味します。 ダイアログタイプが "Standard window" の他のスタイルをプラグインで使用することはできません。
ダイアログボックスを開くために、プラグインは通常の OPEN DIALOG
ステートメントを使用します。
プラグインがインプロセス ActiveX コンポーネントとして(つまり DLL として)実装される場合は、Natural スタジオでモーダルおよび非モーダルダイアログを開くことができます。 ダイアログを開くために、プラグインはそれが記述されているプログラミング言語の通常のステートメントを使用します。 Natural で記述されたプラグインは常に別個のプロセスで実行されるので、これはインプロセス ActiveX コンポーネントの実装をサポートするプログラミング言語で記述されたプラグインのみに適用されます。
Natural 以外のプログラミング言語のプラグインを実装する方法については、「他のプログラミング言語でのプラグインの開発」を参照してください。