ORCA APIを利用する(Post)


仕事が少し落ち着いたので前回に引き継き日医オープンソースORCAの話題である。
前回はGetの場合であるが、殆どのAPIがPostでのリクエストに対応しているのでその場合のサンプルです。
例によって厳密なエラー処理などしていないので流用する場合は注意してください。

以下は特定の患者の診療歴を取得する場合の例です。
bodyを変更する事ですべてのAPIが利用できます。

Dim body As String
body = “<data>” & vbCrLf & _
“<medicalgetreq type=””record””>” & vbCrLf & _
“<InOut type=””string””>O</InOut>” & vbCrLf & _
“<Patient_ID type=””string””>000001</Patient_ID>” & vbCrLf & _
“<Perform_Date type=””string””></Perform_Date>” & vbCrLf & _
“<For_Months type=””string””>99</For_Months>” & vbCrLf & _
“</medicalgetreq>” & vbCrLf & _
“</data>”

Dim oruser As String = “ormaster”
Dim orpasswd As String = “ormaster”
Dim URL As String = “http://192.168.0.2:8000/api01rv2/medicalgetv2?class=01”

Dim CONTENT_TYPE As String = “application/xml”
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“UTF-8”)
Dim Result As String

Dim record_in_byte As Byte() = Encoding.UTF8.GetBytes(body)
Dim req As HttpWebRequest = CType(HttpWebRequest.Create(URL), HttpWebRequest)
req.ServicePoint.Expect100Continue = False

req.Method = “POST”
req.ContentType = CONTENT_TYPE
req.ContentLength = record_in_byte.Length
req.Credentials = New NetworkCredential(oruser, orpasswd)
req.PreAuthenticate = True
req.KeepAlive = False


Try
Dim reqstream As System.IO.Stream = req.GetRequestStream()
reqstream.Write(record_in_byte, 0, record_in_byte.Length)
reqstream.Close()

Dim res As WebResponse = req.GetResponse()
Dim str As System.IO.Stream = res.GetResponseStream()

Dim strread As New System.IO.StreamReader(str, enc)

Dim FOO As String = strread.ReadToEnd()
Result = FOO

strread.Close()
str.Close()
res.Close()

Catch exc As WebException
Result = “ERROR”
If exc.Status = WebExceptionStatus.ProtocolError Then
Dim err As HttpWebResponse = DirectCast(exc.Response, HttpWebResponse)

Dim errcode As Integer = CInt(err.StatusCode)

‘Console.WriteLine(err.ResponseUri)
‘Console.WriteLine(“{0}:{1}”, errcode, err.StatusDescription)

err.Close()
Else
‘Console.WriteLine(exc.Message)
End If
End Try

‘以降Resultをparseする()