Cordova Windows项目中的脱机数据检索

时间:2015-11-04 10:32:59

标签: visual-studio cordova odata offline

我在使用Kapsel OData插件在设备离线时从商店检索数据时遇到困难。

情况如下:

  • 适用于Windows平台的Cordova应用程序
  • 当应用程序打开时,我首先打开我的OData服务商店(类似于Northwind服务)
  • 创建并打开商店。然后我尝试使用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
  • Cordova版本5.3.3

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

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

非常感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

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

Visual Studio项目确实使商店从一个版本或启动到下一个版本。