■
JMOSDrawerのメソッド,GetNumberOfReportsInDrawer(), GetTitle()を実装.文字列を扱う場合,Unicode(Java側)<->UTF-8(Native側)の変換を自分で行う必要がある.このための各種変換関数がJNIEnvに用意されている.Stringを返す GetTitle()の場合,
JNIEXPORT jstring JNICALL Java_JMOSDrawer_GetTitle (JNIEnv *env, jobject jmosDrawer) { CMOSDrawer *d; jint hashCode = getHashCode(env, jmosDrawer); Registry::lookup((void*)hashCode, (void*&) d); return((jstring)(env->NewStringUTF(d->GetTitle()))); }
CMOSDrawer->GetTitle()で得られた文字列をenv->NewStringUTF()に渡している.ただしこのコードでは日本語はうまく渡せていない.恐らくNewStringUTF()が入力としてUTF-8を期待しているからである.
JMOSPReportを実装,現在のメソッドはGetNumberOfLines(), GetMimeType(),GetReportId(), GetTitle() など.さらにJMOSPReport->GetLines()によりJMOSLines,さらに任意のJMOSLineの取得に成功. CMOSLinesはCMOSPReportsと同様,CMOSLineのListから成るコレクション・クラスであり,一つのレポートは,
CMOSPReport - CMOSLines - CMOSLine - CMOSFields - CMOSField
という構成になっている.フィールドの値が得られるまであとわずか...レポート・ヘッダの扱いが不明. GetNumberOfLines()とLZを比較するとヘッダ行を引いたデータ行のみの行数を返しているものと思われる.すなわち,ヘッダにアクセスするためのコレクション・クラスがあるはずだが...