InterSystems IRIS ObjectScript의 ClassMethod와 VB.NET을 연결하는 API를 만드는 방법

프로그램이라고 하는 것은 「연동해 움직이는」 것이 자동화의 열쇠이며, 이것이 다른 처리 언어인 경우에는 「적어도 한쪽의 언어로부터, 다른쪽의 언어의 함수를 호출해, 처리 결과를 돌려준다」 필요가 있습니다 . 여기에서는 InterSystems IRIS의 프로그래밍 언어인 ObjectScript로 작성한 스토어드 프로시저(Stored Procedure)의 [ClassMethod]로 작성된 함수를 VB.NET에서 인수를 건네주어 실행해, 반환값을 얻는 몇개의 바리에이션에 대해서 표시합니다. 이 기법을 한번 기억해 버리면, 나머지는 Class Reference를 보면서, 필요한 인수와 반환값의 형태를 착용해 나가는 단계로 이행할 수 있습니다.

케이스를 4개로 나눕니다.
1 · 인수가없고 반환 값이없는 저장 프로 시저를 호출하는 방법
2 · 인수가없고 ResultSet 형의 반환 값이있는 저장 프로 시저를 호출하는 방법
3 · 인수가 있고 ResultSet 형의 반환 값이있는 저장 프로 시저를 호출하는 방법
4 · 인수가 있고 참조 전달 유형의 반환 값이 있습니다 (SQL 유형이 아님) 저장 프로 시저를 호출하는 방법

우선 1, 2부터
1 · 인수가없고 반환 값이없는 저장 프로 시저를 호출하는 방법
2 · 인수가없고 ResultSet 형의 반환 값이있는 저장 프로 시저를 호출하는 방법

ObjectScript 측 작성 방법:

User.MercForNLP
//Userネームスペースに、新規クラス名としてMercForNLPを作成する。%Persistentは、ディスクにデータを永続化する、という意味
Class User.MercForNLP Extends (%Persistent)
{
Property contentField as %String; //フィールドを記述する方法は、Propertyをつけて宣言する。最後に;が入る(ここだけ)

//メソッドに相当する、ClassMethodの書き方。StoredProcTest1, StoProcTest1 以外はお約束と思って可
ClassMethod StoredProcTest1() [ ReturnResultsets, SqlName = StoProcTest1, SqlProc ]
{

    #dim rs // ResultSet。ここで%Integerや%Stringなどの型を宣言してもよいが、宣言しなくてもVariableとして機能する(最初は型宣言を入れるとわかりにくいものも多いので、まず動くことを優先する)

   //関数はSet宣言をして使う。クラス名は##class()の中に記述し、新規インスタンスは%New()で宣言する。
   //ここでは、%library.Resultset型の変数rsを宣言し、そのResultSetが%iKnow.Queries.EntityQAPI:GetBySource(...)の戻り値を受ける。という動きを表している
    Set rs=##class(%Library.ResultSet).%New("%iKnow.Queries.EntityQAPI:GetBySource") 

    //ドメインIDが引数で必要なので、これを取得する。すでにAnalyzeMercというドメイン名を作成している(前の記事を参照)
    Set domId = $system.iKnow.GetDomainId("AnalyzeMerc")

    //重要:GetBySourceの実行で、引数を指定している。引数はドメインID、エンティティID、(省略可能な引数)、バッファの4つ。
    Set sc=rs.Execute(domId,i,,1000)
    //実行結果がrsに格納されたので、これをSQL型で呼べる内容に変換してセットする。(実際上、この処理で戻り値を出したことになる)
    //戻り値がないときは、この最後の関数を記述しない
    Do %sqlcontext.AddResultSet(rs) 
}
}

VB 측 작성 방법:

Form1.Button1_Click
Imports InterSystems.Data.IRISClient
Public Class Form1
'例としてButton3が押されたときに処理するようなコードにしている
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        'IRISCommectionクラスを使って、IRIS DBサーバにアクセスする
        Dim connection As IRISConnection
        connection = New IRISConnection
        'IRIS DBサーバに接続する基本的な書式。NameSpaceは、格納されているデータが存在するところを指定すること。yourpassとyourIDは各自の環境に合わせて設定したものに置き換えること
        connection.ConnectionString = "Server=localhost; Port=51773; " + "Namespace = TESTSAMPLES; " + "Password = yourpass; " + "User ID = yourID;"
        '接続コマンドを送り、通信を開始する
        connection.Open()
        'ClassMethodを呼び出すためのIRISCommandCkassを宣言する
        Dim Command As IRISCommand
        'IRIS DBからSQL形式でデータを読み取るためのIRISDataReaderを宣言する
        Dim reader As IRISDataReader
        '重要:ObjectScript側で設定した[]内の”一意の呼び名”でコールする(ClassMethodの名前そのものではないことに注意!)
        Command = New IRISCommand("SQLUser.StoProcTest3", connection)
        'コマンドの方がストアドプロシージャであることを指定している
        Command.CommandType = CommandType.StoredProcedure

        '関数のAPIコール。これによって、readerにAPI実行結果が格納される。
        reader = Command.ExecuteReader()
        'Command.ExecuteNonQuery()とすると、戻り値のないAPI実行ができる。その場合は以下のReader処理は不要。

        '重要:Reader.Read()とすると、読み出した表の行フォーカスを1行送るようなイメージになる。
        While (reader.Read())
            '読み出す項目はreader.Item("フィールド名")で指定する。ここではObjectScript側でcontentFieldを作っているので、これを呼び出すことができる。
            MsgBox(reader.Item("contentField") )

        End While

    End Sub
End Class

ObjectScript, VB.NET의 기술이 서로의 어느 항목에 상당하는지를 화살표로 나타내 보았습니다. (인수가 있는 경우. 다음에 계속됩니다)

좋은 웹페이지 즐겨찾기