ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．ＳＤＫ
開発ガイド（イベント VB）

２０２２年２月２２日
第３．０．１版

修正履歴
日付
2011/3/1
2017/6/6
2021/5/13
2022/2/22

版
1.00
2.00
3.00
3.01

項番
－－－
1.1.2

種類
新規
修正
修正
修正

内容
初版作成
VisualStudio2015 へのバージョン更新
VisualStudio2019 へのバージョン更新「プロジェクトの作成」手順の誤りを修正ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

目次
はじめに

１．１

ＪＶ－Ｌｉｎｋを使ったプログラミング（イベント取得）

１．１．１ プログラミングのゴール
１．１．２ プロジェクトの作成
１．１．３ ＪＶ－Ｌｉｎｋコントロールの追加
１．１．４ フォームの作成
１．１．５ 設定ボタンのコーディング（JVSetUIProperties）
１．１．６ 初期化／終了処理のコーディング
１．１．７ イベント受信処理のコーディング
１．１．８ ビルド＆実行

3

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

はじめに平素よりＪＲＡ－ＶＡＮをご利用いただき誠にありがとうございます。
弊社では JRA 公式データをより一層活用できる仕組みとして、「ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．」サービスを提供しております。本サービスは、データリンクモジュールのＪＶ－Ｌｉｎｋ（※）を通じて、様々な競馬データの利用が可能になるサービスです。
エンドユーザー様、およびソフトウェア作者の皆様には、この「ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．」サービスの仕組みをご理解いただき、ＪＲＡ－ＶＡＮのデータ提供サービスを活用していただきたいと願っております。
※ＪＶ－Ｌｉｎｋの詳細については JRA-VAN Data Lab.開発ガイドの本編を参照して下さい。

4ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
１．１ ＪＶ－Ｌｉｎｋを使ったプログラミング（イベント取得）
具体的な例を示すことによって、ＪＶ－Ｌｉｎｋを使ってイベントを取得する方法について解説していきたいと思います。ここでは Visual Basic 2019 を例に順を追ってプログラミング方法を説明していきます。ＪＶ－Ｌｉｎｋのインターフェースの詳細については触れませんので、インターフェースの詳細については「ＪＶ－Ｌｉｎｋインターフェース仕様書」を参照して下さい。
１．１．１ プログラミングのゴール
ここではＪＶ－Ｌｉｎｋを使ってイベントを取得して表示する簡単なプログラム（Ｓａｍｐｌｅ2）を作成します。

このプログラムはボタンが１つとテキストボックスが１つのシンプルな画面を持っています。「設定」ボタンを押すとＪＶ－ＬｉｎｋのＪＶＳｅｔＵＩＰｒｏｐｅｒｔｉｅｓインターフェースを使ってＪＶ－Ｌｉｎｋの各種設定を行なうことができます。イベントが発生すると、その内容がテキストボックスに表示されます。

5ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

イベント取得で、ＪＶ－Ｌｉｎｋ、サーバー間で行なわれる処理は以下のようになります。

サンプル
プログラム

ＪＶＩｎｉｔＪＶ－Ｌｉｎｋ

サーバー

JVWatchEvent

イベント発生

イベント発生ＪＶRTＯｐｅｎ
ダウンロードＪＶＲｅａｄ…
…

ＪＶＣｌｏｓｅ

JVWatchEventClose

6ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
１．１．２ プロジェクトの作成
Ｖｉｓｕａｌ Ｓｔｕｄｉｏ2019 を起動し、「コードなしで続行（W）」リンクをクリックする。
メニューバーのファイル(T)→新規作成(N)→プロジェクト(P) …を選択します。

次 に 、 プ ロ ジ ェ ク ト の テ ン プ レ ー ト か ら 「 Windows フ ォ ー ム ア プ リ ケ ー シ ョ ン (.NETFramework)」を選択して「次へ」ボタンをクリックします。

7

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

新しいプロジェクトが作成され下の画面になります。

8

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

１．１．３ ＪＶＬｉｎｋコントロールの追加
最初に、この開発環境(Visual Studio 2019)でＪＶ－Ｌｉｎｋを使用できるように設定を行なう必要があります。
メニューバーのツール(T)→ツールボックス アイテムの選択(X)…を選択します。

ツールボックス アイテムの選択ダイアログの COM コンポーネントタブの中からＪＶＬｉｎｋ Ｃｌａｓｓにチェックを付け、ＯＫボタンをクリックします。

9ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

これによりツールボックスにＪＶＬｉｎｋコントロールが追加されます。

10ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

１．１．４ フォームの作成
下図のようにフォームにボタンとテキストボックス、およびＪＶＬｉｎｋコントロールを貼り付け
各プロパティを設定します。

コントロール
Button1
txtOutAxJVLink1

プロパティー
Text
Text
ScrollBars
Multiline
Wordwrap
Font
なし

11

選択／設定
“設定“
空白
Both
True
False
固定幅フォントの方が見やすいでしょうなしＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

１．１．５ 設定ボタンのコーディング（JVSetUIProperties）
設定ボタンのコーディングに関しては従来と変わりませんので、省略します。

12

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

１．１．６ 初期化／終了処理のコーディング
初期化処理として以下の処理を、フォーム読込イベントで行います。
処理

内容①ＪＶＬｉｎｋの初期化（ＪＶＩｎｉｔ）

ＪＶＬｉｎｋの初期化を行います。JVWatchEventを呼び出す前に最低１回呼び出す必要があります。
確定・変更情報が発生した際、イベントを通知するスレッドを開始します。

②イベント通知開始（JVWatchEvent）

終了処理として以下の処理を、フォームクローズイベントで行います。
処理内容①イベント通知終了（JVWatchEventClose）

イベント通知スレッドを終了します。

デザイン画面を表示し、Form1 の「プロパティ」から「イベント」ボタンを押し、「Load」の関数名入力部分をダブルクリックすると「Form1.vb」にイベント関数が作成されますので、それに対して初期化処理のコードを記述していきます。
同様に「FormClosed」の関数名入力部分をダブルクリックしてイベント関数を作成し、終了処理のコードを記述していきます。

Form1 の Load／Closed イベント関数に以下のコードを記述します。
13

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
サンプルソース１'-----------------------------------------------------------------------------'
初期化'-----------------------------------------------------------------------------Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load'***************'JVLink初期化'***************'※※※JVInitはJVLinkメソッド使用前(但し、JVSetUIProPertiesを除く)に呼出す
Dim ReturnCode As Integer = AxJVLink1.JVInit("UNKNOWN")①'エラー判定
If ReturnCode <> 0 Then''エラー
txtOut.AppendText("JVInitエラー:" & ReturnCode & ControlChars.CrLf)
Else''正常' イベント監視オブジェクト初期化
ReturnCode = AxJVLink1.JVWatchEvent()②

If ReturnCode <> 0 Then''エラー
txtOut.AppendText("JVWatchEventエラー:" & ReturnCode & ControlChars.CrLf)
End IfEnd IfEnd Sub'-----------------------------------------------------------------------------'
フォーム閉じる'-----------------------------------------------------------------------------Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed' イベント監視オブジェクト終了③
Dim ReturnCode As Integer = AxJVLink1.JVWatchEventClose()
End Sub
サンプルソース１解説①ＪＶＩｎｉｔにはアプリケーションＩＤを渡します。このアプリケーションＩＤはサーバーとの通信の際にＨＴＴＰヘッダーのＵｓｅｒ－Ａｇｅｎｔとして使用されます。ソフトの名前とバージョン番号を組み合わせてユニークなＩＤを指定して下さい。開発途中でアプリケーションＩＤを決められない場合には“ＵＮＫＮＯＷＮ”を指定して下さい。

②イベント通知開始をおこなうことで、それ以降に払戻確定、騎手変更、天候馬場状態変更、コース変更、出走取消・競走除外、発走時刻変更、馬体重が発表された際、イベントを受理することが可能になります。

③イベント受信処理を終了する場合に JVWatchEventClose を呼び出します。
今回のサンプルではフォームを閉じる時（プログラムが終了する時）に呼び出しています。

14

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
１．１．７ イベント受信処理のコーディング
各イベントに対してのイベント関数を作成することにより、対象イベントが発生した際の処理をコーディングすることが可能となります。
ここではサンプルとして、払戻確定イベントが発生した際のコードを載せますが、それ以外のイベントも作り方は同じです。
デザイン画面を表示し、AxJVLink1 の「プロパティ」から「イベント」ボタンを押し、「JVEvtPay」の関数名入力部分をダブルクリックすると「Form1.vb」にイベント関数が作成されますので、それに対してコードを記述していきます。

AxJVLink1 の JVEvtPay イベント関数に以下のコードを記述しさらに読み込み＆表示処理の関数を作成します。
このサンプルでは、イベントが発生した元となるデータを取得し画面に表示しています。
処理

内容①リアルタイム系データの取得要求（JVRTOpen）②JV-Data の読み込み（JVRead）③JV-Data 読み込み処理の終了（JVClose）

リアルタイム系データの取得要求をします。
JV-Data の読み込みをします。
JV-Data 読み込み処理の終了をします。

15

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
サンプルソース２'-----------------------------------------------------------------------------'
払戻速報'-----------------------------------------------------------------------------Private Sub AxJVLink1_JVEvtPay(ByVal sender As System.Object, ByVal e As
AxJVDTLabLib._IJVLinkEvents_JVEvtPayEvent) Handles AxJVLink1.JVEvtPay
MsgBox("払戻速報：" & e.bstr, , Text)
Dim ReturnCode As Integer = AxJVLink1.JVRTOpen("0B12", e.bstr)①
If ReturnCode <> 0 Then
txtOut.AppendText("JVRTOpenエラー:" & ReturnCode & ControlChars.CrLf)
Else
txtOut.AppendText("【速報レース情報(払戻速報) dataspec = " & "0B12" & " key = " & e.bstr& "】" & ControlChars.CrLf)' 読み込み＆表示処理
ReadData()
End IfEnd Sub'-----------------------------------------------------------------------------'
読み込み＆表示処理'-----------------------------------------------------------------------------Private Sub ReadData()
Dim buffSize As Integer = 150000
Dim buff As String = New String(vbNullChar, buffSize)
Dim fName As String = ""Dim ReturnCode As Integer
Do
ReturnCode = AxJVLink1.JVRead(buff, buffSize, fName)
Select Case ReturnCode
Case Is > 0' 正常
txtOut.AppendText(buff)②

Case -1'何もしないCase 0
Exit Do' 読込終了Case Else' エラー
txtOut.AppendText("JVReadエラー:" & ReturnCode & ControlChars.CrLf)
Exit DoEnd SelectLoop' JVClose
ReturnCode = AxJVLink1.JVClose()
End Sub③16

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
サンプルソース２解説①イベント発生元となったリアルタイム系データの取得要求をします。
第１パラメータはイベント毎に決まっている「データ種別ＩＤ」です。
詳細については「ＪＶ－Ｌｉｎｋインターフェース仕様書」を参照して下さい。

②JVRTOpen で準備した JV-Data を現在のファイルポインタから１行分読み出します。
正の数が返された場合は、正常にレコードを読み込んでいるので（文末に改行コード付）データ格納バッファを画面にそのまま表示します。
－１が返された場合は、読込対象ファイルの変更を意味しているので、何もせず次のデータを読み込みにいきます。
全てのファイルを読み終わると０が返りますので、読み込みループを終了します。
エラーが発生した場合にはエラーの理由コードとして負の数が返されます。
JVRead ではなく JVGets を使って読み出すことも可能です。

③ＪＶ－Ｄａｔａ読み込み処理を終了します。

１．１．８ ビルド＆実行
メニューバーのビルド(B)→ソリューションのビルド(B)を選択します。

以上で Sample2 の開発は終了です。ビルドによって作成された.exe ファイルをダブルクリックするかデバッグコマンドにより実行が可能です。

17

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
実際にイベントを発生させて、その動作を検証するには DataLab 検証ツールを使います。
（DataLab 検証ツールはＪＲＡ－VAN のホームページの「プログラミングパーツ・開発支援ツール提供コーナー」にありますので、ダウンロードしてください。）
DataLab 検証ツールのインストール及び詳しい使用方法に関しては、DataLab 検証ツール説明書を参照してください。
今回サンプルソースで作成した、払戻確定イベントを発生させるには以下の様に操作します。
①

DataLab 検証ツールを起動します。

② 「速報系」ボタンをクリックします。

18

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書③ 年月日場レースを入力し、「イベントを通知する」をチェックし、「擬似通知（払戻）」をクリックします。

④ 払戻結果が Sample2 に表示されます。
DataLab 検証ツールと同じデータが表示されていることを確認してください。

19