ネイティブのAndroidアプリケーションからデプロイされたMBO用に生成されたAndroidコードを使用しようとしています。
実行する手順は次のとおりです。
SAP BAPIを使用して作成されたMBO(BAPI_FLIGHT_GETLIST)
有線サーバーにデプロイしました
コードを生成しました
コードをAndroidプロジェクトにコピーしました
生成されたコードを使用して、次の手順を使用してMBOからデータにアクセスしました
i)アプリケーションの詳細を設定する
Application app = Application.getInstance(); app.setApplicationIdentifier("FlightSearch"); app.setApplicationContext(<android context>); FlightSearchDB.setApplication(app);
ii)認証資格情報を設定する
ConnectionProperties connProps = app.getConnectionProperties(); LoginCredentials loginCredentials = new LoginCredentials(USERNAME, PASSWORD); connProps.setLoginCredentials(loginCredentials); connProps.setServerName(HOST); connProps.setPortNumber(PORT);
iii)レジスタ接続
if (app.getRegistrationStatus() != RegistrationStatus.REGISTERED) { app.registerApplication(TIMEOUT); } else { app.startConnection(TIMEOUT); }
iv)同期パラメータを設定する
ConnectionProfile profile = FlightSearchDB.getSynchronizationProfile(); profile.setServerName(HOST); profile.setPortNumber(2480); profile.setNetworkProtocol("http,https"); profile.setDomainName("default"); profile.setAsyncReplay(true); profile.save();
v)同期を開始する
FlightSearchDB.synchronize(new MySyncStatusListener());
MySyncStatusListenerのobjectSyncStatus()メソッドでステータスを確認できます。
最初にデータをアップロードしようとしましたが、最初の実行ではローカルデータがないため、いくつかのnull値を送信し、サーバーからのackを待ちます。APPLICATION_SYNC_RECEIVING_UPLOAD_ACKステータスを長時間取得し、サーバーからACKを取得しないため、データ同期がデッドロックになります。
その間に、サーバーログを確認しようとしましたが、次のように表示されます。
2012-06-21 02:03:26.135CONSOLEMMSプール-1-スレッド-18-/registration/ RegistrationServlet [com.sybase.sup.server.Console] 6146
2012-06-21 02:03:25.491CONSOLEMMSプール-1-スレッド-16-/registration/ RegistrationServlet [com.sybase.sup.server.Console] 6038
コードの同期部分を無効にすると、次のコードを実行できますが、同期なしではローカルデータが利用できないため、結果は常に0になります。
vi) Access Database
if(!FlightSearchDB.databaseExists()){
FlightSearchDB.createDatabase();
}
FlightSearchDB.openConnection();
GenericList<Flight> flights = Flight.findAll();
データにアクセスするために解決する必要のあるコード/構成の問題に問題がある場合は、誰かに知らせてもらえますか?