InterSystems IRIS NLP를 VB.NET에서 사용하는 방법 요약 (2)

(1)에서 작업하여 만든 NLP의 도메인을 사용하여 이를 호출하는 코드를 ObjectScript로 기술하는 부분과 이 함수(스토어드 프로시저라고 함)를 VB.NET에서 호출하는 방법에 대해 설명합니다.

ObjectScript의 기본 호출 방법은 다음과 같습니다.

StoredProc()
Class User.MercForNLP Extends (%Persistent, %Library.Populate)
{

Property diseaseName As %String;

Property medicalDivision As %String;

Property dataType As %String;

Property contentFull As %String(MAXLEN = 100000);

ClassMethod StoredProcTest3() [ ReturnResultsets, SqlName = StoProcTest3, SqlProc ]
{

    Set rs=##class(%Library.ResultSet).%New("%iKnow.Queries.EntityQAPI:GetSimilar")

    Set domId = $system.iKnow.GetDomainId("AnalyzeMerc")

    Set sc=rs.Execute(domId,"糖尿病",1,50)

    Do %sqlcontext.AddResultSet(rs)
}
}

이 테이블(클래스)은 [MercForNLP]입니다. 이 필드는 [diseaseName], [medicalDivision], [dataType], [contentFull] (및 기본값 [Id])입니다.
여기에 [ClassMethod]라고 선언하여 함수 (메소드) [StoredProc3()]를 작성하고 있습니다.

이 뒤에있는 []의 내용은 각각
ReturnResultSets : VB.NET 측에서 IRISDataReader로 읽을 수있는 형식으로 데이터 반환 값을 생성합니다.
SqlName=StoProcTest3 : 호출 형식이 "SQL 형식"이라는 것(User 도메인 공간에서 고유한 이름이 되도록 이름을 결정해야 함)
SqlProc : SQL 형식의 반환 값을 제공하는 프로 시저임을 선언합니다.
라는 것을 의미합니다.

NLP에 액세스하는 방법으로,
%iKnow.Queries.EntityQAPI:GetSimilar
라는 함수를 만드는 것을 알 수 있습니다. 이것은 Class Reference에서 다음과 같이 설명됩니다.


ResultSet (로 사용) rs에 GetSimilar의 결과를 반환하는 resultSet을 New로 생성합니다.
rs=##class(%Library.ResultSet).%New("%iKnow.Queries.EntityQAPI:GetSimilar")

(1)에서 작성한 도메인 [AnalyzeMerc]의 ID 번호를 얻는 방법으로서,
$system.iKnow.GetDomainId("AnalyzeMerc")
라는 함수로 부르는 것을 알 수 있습니다.

이 중에서, [당뇨병]이라는 엔티티와 유사한 엔티티를 50개까지 꺼내는 작업으로서,
Set sc=rs.Execute(domId,"당뇨병",1,50)
라는 함수가 할당되었습니다.

ObjectScript의 끝에서 반환해야 할 ResultSet으로 [rs]를 전달하고 있음을 알 수 있습니다.
Do %sqlcontext.AddResultSet(rs)

VB측에서의 기술은 다음과 같이 합니다. 이전에 설명한 IRIS 서버에 연결 한 후 IRISCommand, IRISDataReader를 사용합니다. 포인트는

Command = New IRISCommand("SQLUser.StoProcTest3", connection)
에서 지정하는 함수 이름이 [StoredProcTest3()]가 아니라 [SQLUser.StoProcTest3]라는 점에 유의해야 합니다. 출력은, [reader.Read()]로서 출력 리스트를 하나씩 읽어내, 그 항목명(필드명)을 reader.Item("entUniId")와 같은 형식으로 기술합니다.

ResultSet의 필드 이름을 아는 방법
dim i as Integer
i = reader.FieldCount 'フィールド数の上限がわかる
dim s as String
s = Reader.GetName(1) '1からi-1までの数字を入れると、フィールド名が取得できる

VB.NET 측의 설명은 다음과 같습니다.

Button3_Click

 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        Dim connection As IRISConnection

        connection = New IRISConnection

        connection.ConnectionString = "Server=localhost; Port=51773; " + "Namespace = TESTSAMPLES; " + "Password = trki1979; " + "User ID = torikai;"

        connection.Open()

        Dim Command As IRISCommand

        Dim reader As IRISDataReader

        Command = New IRISCommand("SQLUser.StoProcTest3", connection)

        Command.CommandType = CommandType.StoredProcedure

        reader = Command.ExecuteReader()

        While (reader.Read())

            MsgBox(reader.Item("entUniId") & "," & reader.Item("entity") & "," & reader.Item("frequency") & "," & reader.Item("spread"))

        End While

    End Sub

좋은 웹페이지 즐겨찾기