2015-11-04 48 views
0

我在使用Kapsel OData插件在设备脱机时从商店检索数据时遇到困难。Cordova Windows项目中的离线数据检索

这里的情况是:

  • 科尔多瓦应用Windows平台
  • 当应用程序打开时,我通过对我的OData服务开店(类似于罗斯文服务)启动
  • 商店被创建并打开。然后,我尝试使用OData.read或通过设置模型,然后在其上调用read()从商店检索数据。
  • 该商店将成功打开。但是,当设备处于联机状态时,我读取数据的呼叫会成功,并且在脱机时会失败,无论以前使用的两种方法中的哪一种。

这里是我的代码:

function openStore() { 
    var properties = { 
     "name": "Emergency", 
     "host": applicationContext.registrationContext.serverHost, 
     "port": applicationContext.registrationContext.serverPort, 
     "https": applicationContext.registrationContext.https, 
     "serviceRoot": appId,  
     "definingRequests": { 
      "Products": "/Products" 
     } 
    }; 
    store = sap.OData.createOfflineStore(properties); 
    store.open(openStoreSuccessCallback, errorCallback); 
} 

function openStoreSuccessCallback() { 
    sap.OData.applyHttpClient(); 
    retrieveWithModel();//retrieveWithOData(); 
} 

function retrieveWithModel() { 
    var uri = applicationContext.applicationEndpointURL; 
    var user = applicationContext.registrationContext.user; 
    var password = applicationContext.registrationContext.password; 
    var headers = { "X-SMP-APPCID": applicationContext.applicationConnectionId }; 
    var oModel = new sap.ui.model.odata.ODataModel(uri, { 
     json: "true", 
     user: user, 
     password: password, 
     headers: headers 
    }); 

    sap.ui.getCore().setModel(oModel); 
    oModel.read("/Products", { 
     success: function (oEvent) { 
      var msg = new Windows.UI.Popups.MessageDialog("Success"); 
      msg.showAsync(); 
     }, 
     error: function (err) { 
      console.log("you have failed"); 
      var msg = new Windows.UI.Popups.MessageDialog("Fail"); 
      msg.showAsync(); 
     } 
    }); 
} 

function retrieveWithOData() { 
    var sURL = applicationContext.applicationEndpointURL + "/Products"; 
    var oHeaders = {}; 
    oHeaders['Authorization'] = authStr; 
    oHeaders['X-SMP-APPCID'] = applicationContext.applicationConnectionId; 
    //oHeaders['Content-Type'] = "application/json"; 
    //oHeaders['X-CSRF-Token'] = "FETCH"; 
    var request = { 
     headers: oHeaders, 
     requestUri: sURL, 
     method: "GET" 
    }; 
    OData.read(request, 
     function (data, response) { 
      console.log('Success'); 
     }, 
     function (err) { 
      console.log('Fail'); 
     } 
    ); 
} 
  • Kapsel SDK版本是3.8.0
  • SMP SDK是SP08
  • 科尔多瓦版本5.3.3

我想知道这是否是应用程序启动方式的问题。我需要一种方法来每次打开应用程序的相同实例,因此脱机存储将保留其所有数据。由于Cordova生成的Visual Studio项目不生成.exe文件(只有.appx文件需要进行签名和侧载才能使用),我继续的方式是:我从Visual Studio在联机模式下运行应用程序,然后将其固定到任务栏或开始菜单,关闭它并将设备切换到离线模式,然后从任务栏重新打开它。 但是,越来越多的似乎这种方法不能按预期工作。

任何人都可以确认从任务栏打开的Visual Studio项目应该以与从VS运行时相同的方式运行,具有相同的依赖项,库等?如果是这种情况(我真的不能想象为什么它不会),有没有人有这些技术的经验,看看有什么潜在的问题?

任何帮助将不胜感激。 谢谢!

回答

0

好的,我找到了解决我的问题。如果有人遇到同样的问题,问题是我的离线商店没有被使用(您可以看到Fiddler即使在离线模式下也有后端系统的出站请求)。

Visual Studio项目确实让商店免受一个构建或启动到下一个。