InterSystems IRIS ObjectScript의 ClassMethod와 VB.NET을 연결하는 API를 만드는 방법
케이스를 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의 기술이 서로의 어느 항목에 상당하는지를 화살표로 나타내 보았습니다. (인수가 있는 경우. 다음에 계속됩니다)
Reference
이 문제에 관하여(InterSystems IRIS ObjectScript의 ClassMethod와 VB.NET을 연결하는 API를 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torisan_/items/559604b8381ab80c4167텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)