Fiori-Traps

这里来记录在学习Fiori开发中的一个又一个坑

###coding

日期字段显示

如果不做转换,日期的显示是这样的:

为了看起来‘正常’一点,需要格式化转一下:

1
text="{path: 'model_att>uploadDate', type: 'sap.ui.model.type.Date', formatOptions: { pattern: 'YYYY.MM.dd' }}" active="true"/>

再试试把formatOptions: { pattern: 'YYYY.MM.dd' }省略了看一下
有一个blog可以参考:http://www.furkansonmez.com/sapui5-fiori-how-to-format-odata-time/

View 之间传递数据

View 之间进行数据的传递除了用route之外还可以用model,下面是一个示例:

在Component.js或是Manifest.json文件中定义一个全局JSONModel:

1
2
// create JSON model instance
var jsonModel_share = new sap.ui.model.json.JSONModel();

在发送页面的Controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Crate Json Data
var jsonData = {key1:"value1",
key2:"value2",
key3: {key4:"value4",key5:"value5"}
};
// create JSON model instance
var json_send = new sap.ui.model.json.JSONModel();
// set the data for the model
json_send.setData(jsonData);
// set the model to the core
sap.ui.getCore().setModel(json_send, "jsonModel_share");
// nav to another page
this.router.navTo("2ndView");

接收页面的Controller:

1
2
// get data from Global JSON model
var oData = sap.ui.getCore().getModel("jsonModel_share").getData();

splitApp直接打开detail的URI(未解决)

如下图,开发完这个spliApp页面后直接执行没有问题,detail view也打开了第一条数据

但是,如果直接在浏览器中用“http://localhost:53342/webapp/index.html#/detail/300000097”来打开页面,或是这里刷新页面的话,就会是下面的界面

这是哪里出的问题呢?我能想到的是输入地址或是刷新地址”http://localhost:53342/webapp/index.html#/detail/300000097",我们并没有直接处理这个URI patten的逻辑

传输至FLP后,loadData用到的json数据为空

今天做一个demo演示,很简单的效果,就是一个panel下放了一个list,list是自己mock的一些数据,所以直接声明JSONModel,然后loadData,一切正常。几分钟搞定。

数据:

代码1:

传输到FLP后问题出现了,界面只显示label,后面的数据列是空的!很显然是json文件中的数据没有load到model中,怎么办,最笨的办法就是把数据写在contoller里,于是有了下面的代码2:

这样写死了肯定不会有问题,但我的json数据文件就没用了啊,这不行,要找到原因,于是简单google了一下,找到了这个APIjQuery.sap.getModulePath,这个会根据服务的相对路径找到要load的文件路径。正式的生产环境都是要这么用的。于是有了代码3:

setVisible传输至FLP后不好用

这也是个坑!

连接配置

Service can not be reached


WEBIDE在需要和前端Server进行通信时报Service can not be reached,这是因为前端server有一个服务没有激活,下面这个adt服务激活就好了。

发布部署

部署后没有dist文件夹生成

在WEBIDE开发完成以后部署到前端服务器时碰到了这样一个问题。



虽然提示部署成功The application has been deploied in XXX,但目录下却没有dist文件夹出现,解决办法如下:

  1. 新建一个webapp目录,将除neo-app.json之外的文件和文件夹全部剪切到webapp目录下。
  2. 修改neo-app.jsonwelcomeFile属性值,这里是由’index.html’改为了’webapp/index.html’。
  3. 右键打开project setting,把SAPUI5 Client Build选中。保存后会多了一个Build Configuration的tab配置页。(可以在Build时额外再调整想要增加或是排除的文件。这里不需要做任何操作)

然后重新部署,发现应该出现的dist文件夹出来了:)

dist文件夹下还会自动生成Component-preload.js,这里其实也是一个坑,如果没有这个文件,你的APP一样会报错…

COSR 跨域

这是一个大坑,尤其对于以前没有做过Web开发的我们来说更是灾难。先说一下现有开发环境是怎么解决的。

  1. 如果开发环境是用的eclipse,这个问题很好解决,就是在odata的URI地址前加/proxy/http/ ,eclipse内置的反向代理会自动代理链接服务。
  2. 如果开发环境用的是WEBIDE,这个问题也好解决,就是配Destination,配这个的目的也是配置WEBIDE的反向代理。
  3. 如果,这个如果也是我目前碰到的问题,项目只使用Gateway的Odata服务,简单的BS结构,没有引用SAPUI5的任何库,可以说和SAP没什么问题,只是用它提供的一个REST服务。这时候坑就来了,如果用JSONP,SAP这个声称自己是符合国际标准的Odata服务没有callback参数!不支持callback回调!!坑啊!目前我们用了一个临时的替代方案,使用普通的ajax调用,并且在服务中(sicf)写死用户名和密码。
    1
    2
    3
    4
    5
    6
    7
    $.ajax({
    url: "http://10.212.139.247:8000/sap/opu/odata/sap/ZGJZ_TEST_SRV/ZGJZ_USERSet?$format=json",
    type:'GET',
    success:function(json, textStatus) {
    console.log(json);
    },
    });
Jim Guo wechat
ex. subscribe to my blog by scanning my public wechat account