SAP OData offline store在Android平台的技术实现

I am studying Kapsel OData offline plugin recently. In SAP help the source code of OData.js is provided:

SAP OData offline store在Android平台的技术实现_第1张图片

The source code clearly conveys the idea documented in SAP help: “When an offline store is first opened, it synchronizes with the OData producer. OData requests made against this plugin use the available open offline stores.“.

And I am curious how this offline store is opened in the real application. So I use a CRM Fiori offline application to have a look.

(1) In offline project folder there is a config.xml, which defines the entry point for offline application access, the index.html file.

(2) Open this index.html, there is a script file “createStores.js”:

SAP OData offline store在Android平台的技术实现_第2张图片

This file has constructed an object sap.smp.registration:

SAP OData offline store在Android平台的技术实现_第3张图片

There is a public method setup exposed which accepts an array for offline store collection and call a private method _setupStore one by one. Once the asynchronous setup process is done successfully, callback success is called.

SAP OData offline store在Android平台的技术实现_第4张图片

In implementation of _setupStore, the sap.OData.createOfflineStore(properties) and sap.OData.applyHttpClient() mentioned in sap help could be found.

SAP OData offline store在Android平台的技术实现_第5张图片

(3) back to index.html, there is a file contentplace.js:

SAP OData offline store在Android平台的技术实现_第6张图片

In this file, offline store will be opened in line 14, and application specific initialization is called in callback function defined in line 5.

SAP OData offline store在Android平台的技术实现_第7张图片

(4) finally, the createContentPlaceFunction is called in index.html in line 196:

SAP OData offline store在Android平台的技术实现_第8张图片

(5) Now check how OfflineStore open is implemented in Android platform via Java:

SAP OData offline store在Android平台的技术实现_第9张图片

In line 215, offline store instance is created and a listener is registered, since open operation is done asynchronously:

SAP OData offline store在Android平台的技术实现_第10张图片

And open operation is started here:

SAP OData offline store在Android平台的技术实现_第11张图片

Check in ODataOfflineStore class, a new thread is created to perform open action:

SAP OData offline store在Android平台的技术实现_第12张图片

In run method, the call is delegated back to ODataOfflineStore.openStoreSync:

SAP OData offline store在Android平台的技术实现_第13张图片

The core open operation is done in this.store.open:

SAP OData offline store在Android平台的技术实现_第14张图片

If open is done successfully, the listener registered in ODataOfflineStore instance will be notified with ODataOfflineStoreOpen state:

SAP OData offline store在Android平台的技术实现_第15张图片

The core implementation of open method in Store class is implemented natively and could not be visible in Java stack:

SAP OData offline store在Android平台的技术实现_第16张图片

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

你可能感兴趣的:(sap,saprfc,crm,abap,android)