天天看點

SAP OData offline plugin的工作原理

The plugin is supported for use with applications on the Android and iOS platforms.

The plugin provides the client with the ability to define offline stores for an OData producer. 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.

Offline plugin是保證我們offline application能運作的最核心的元件了。幫助文檔上說:The Offline OData plugin provides a OData httpclient based on datajs, a cross-browser JavaScript library. Thehttpclient resolves requests with the Offline OData plugin if the service root of the request matches one of the open stores. The httpclient defaults to using the original OData.defaultHttpClient if the requests service root does not match any of the currently open stores.

根據幫助文檔描述:Offline app運作在裝置上時,每次發起odata request時,首先會檢查該request是否能夠通過裝置的local DB取值,如果能,直接從裝置的local DB取。

我看了這個文檔就有兩個問題:

SAP OData offline plugin的工作原理

對于第一個問題:

我們project的config.xml裡聲明了這個offline plugin的引用:

SAP OData offline plugin的工作原理

進入這個plugin的folder,會看到一個配置檔案:

SAP OData offline plugin的工作原理

裡面指定了這個plugin可直接供UI5 架構調用的OData.js和OfflineStore.js,以及JS直接通路Android device DB的Java檔案:

SAP OData offline plugin的工作原理

回到之前的問題,plugin咋知道哪些url可以從local DB取,哪些url需要發到背景?

代碼寫得很清楚:在OData.js裡,我們應用define的url會存在openStores裡。在Js的request方法裡,會逐一比較目前request url是否在offline store裡定義過,

SAP OData offline plugin的工作原理

如果是,handle = true.

就進這個分支,通過odata.request call裝置原生API通路local DB

SAP OData offline plugin的工作原理

否則call 預設的httprequest把請求發給背景:

SAP OData offline plugin的工作原理

那麼js 又是如何call原生的Java API?通過exec

SAP OData offline plugin的工作原理

在Android folder下有exec的實作代碼:

SAP OData offline plugin的工作原理

這裡寫了,技術上來說:兩種方式實作js call Java:

SAP OData offline plugin的工作原理