对OData进行筛选和过滤操作
是model库下的FilterOperator节点进行操作
sap.ui.model.FilterOperator.BT FilterOperator between.
new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.BT, "A","G"); // 比如这个,先起一个名字,引入方法,指定区间
sap.ui.model.FilterOperator.Contains FilterOperator contains
new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, "Paz");
sap.ui.model.FilterOperator.EndsWith FilterOperator ends with
sap.ui.model.FilterOperator.EQ FilterOperator equals
sap.ui.model.FilterOperator.GE FilterOperator greater or equals
sap.ui.model.FilterOperator.GT FilterOperator greater than
sap.ui.model.FilterOperator.LE FilterOperator less or equals
sap.ui.model.FilterOperator.LT FilterOperator less than
sap.ui.model.FilterOperator.NE FilterOperator not equals
sap.ui.model.FilterOperator.StartsWith FilterOperator starts with
new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.StartsWith, "M");
这里我们引用官方提供学习的ODataModel,但是笔者运行后发现已经被弃用了…坑爹玩应…
官方具体解释在这里
Synchronous XMLHttpRequest outside of workers is in the process of being removed from the web platform as it has detrimental effects to the end user’s experience. (This is a long process that takes many years.) Developers must not pass false for the async argument when current global object is a Window object. User agents are strongly encouraged to warn about such usage in developer tools and may experiment with throwing an InvalidAccessError exception when it occurs.
你可以想象运行成功后,这里会有几条label数据就可以了…
var odataModel = new sap.ui.model.odata.v2.ODataModel('/DemoService/V2/(S(xogxg1ckcor00ikzn42t0sbk))/OData/OData.svc/', false);
this.getView().setModel(odataModel);
然后我们一次查看增删改查这几个方法
read方法
我们查找Suppliers节点的所有数据
odataModel.read("/Suppliers", {
urlParameters: '&$format=json',
success: function(oData) {
console.log(oData);
},
error: function(oData) {
}
});
同时我们也可以增添一些筛选条件
var aFilter = [];
//2 filters,因为加了两条筛选条件,所以我们定义一个数组
aFilter.push(new sap.ui.model.Filter("ID", sap.ui.model.FilterOperator.EQ, "1"));
//注意这里用到了push方法push到aFilter
aFilter.push(new sap.ui.model.Filter("Name", sap.ui.model.FilterOperator.EQ, "Tokyo Traders"));
odataModel.read("/Suppliers", {
urlParameters: '&$format=json',
filters: aFilter,
success: function(oData) {
console.log(oData);
},
error: function(oData) {
}
});
create方法
var oNewSupplier = {
"ID": 1113,
"Name": "测试",
"Address": {
"Street": "sonhualu",
"City": "wuhan",
"State": "CH",
"ZipCode": "150000",
"Country": "中国"
}
};
var oCreateModel = new sap.ui.model.odata.v2.ODataModel('/DemoService/V2/(S(tigt4zfne0egj3u25bhqq32a))/OData/OData.svc/', true);
oCreateModel.setUseBatch(false);
//这里要把setUseBatch禁掉,因为我们有很多默认的setUseBatch请求我们不需要,禁掉就可以
oCreateModel.setHeaders({
"Content-type":"application/json"
});
oCreateModel.create("/Suppliers", oNewSupplier, {
//创建一个节点,然后把我们的数据模型放在这里
success: function(oData){
alert('create success');
},
error: function(){
}
});
updata方法
var oModifiyData = {
"Name": "测试",
"Address": {
"Street": "sonhualu",
"City": "wuhan",
"State": "CH",
"ZipCode": "150000",
"Country": "中国"
}
};
var oUpdateModel = new sap.ui.model.odata.v2.ODataModel('/DemoService/V2/(S(tigt4zfne0egj3u25bhqq32a))/OData/OData.svc/', true);
oUpdateModel.setHeaders({
"If-Match":"*"
});
oUpdateModel.update("/Suppliers(1)", oModifiyData, {
success: function(oData, oResponse){
alert('update success');
},
error: function(oError){
}
});
删除操作
var oDeleteModel = new sap.ui.model.odata.v2.ODataModel('/DemoService/V2/(S(tigt4zfne0egj3u25bhqq32a))/OData/OData.svc/');
oDeleteModel.setHeaders({
"If-Match":"*"
});
oDeleteModel.remove("/Suppliers(1)", {
success: function(oData, oResponse){
alert('delete success');
},
error: function(oError){
}
});
我们对gateway的操作经常会遇见一个csrf token的验证
如果报一个token未验证的BUG的时候你就可以用一下代码
var oReadTokenModel = new sap.ui.model.odata.v2.ODataModel('/DemoService/V2/(S(tigt4zfne0egj3u25bhqq32a))/OData/OData.svc/');
//实例化这么一个Model
oReadTokenModel.setHeaders({
"X-CSRF-TOKEN": "Fetch"
//当前我们需要get到这个token
});
oReadTokenModel.refreshSecurityToken(function(data, response) {
//然后我们就通过refreshSecurityToken就能读到token的一个详细信息
alert(response.headers['x-csrf-token']);
}, function(data) {}, true);
oReadTokenModel.read("?$format=json", {
'success': function(data, response) {
},
'error': function(data, response) {
}
});