Welcome to Jim's Blog

欢迎欢迎


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索

Fiori-step5-Controllers

发表于 2017-07-19 | 分类于 Fiori walkthrough | | 阅读次数

这一节使用了一个按钮控件,用Controller来处理按钮的press事件。首先修改App.view.xml

  • 我们需要来指定连接这个view并且处理onShowHello事件的conroller的名字controllerName 这个view的属性这里同样使用了namespace。
  • 通过对按钮对象属性的赋值来实现按钮
  • press="onShowHello"按钮点击时会触发onShowHello事件

    如果一个view只是用来display信息的话,是不需要创建Controller的,一旦显性的指定了Controller,在view被加载后就会实例这个Controller

新建一个App.controller.js

这里有点绕,咨询了一位会js的同学大致知道这它的意思是发布了这个代码,用户访问的时候会先把基础包加载,就相当于在客户端建立了一个执行环境,用于执行编写的这些代码,定义了就相当于执行,执行页面浏览器就会执行,这个就是基础包做的事情。

  • use strict声明函数使用严格模式,加上后会自动检测代码问题,详解可以自行百度JavaScript use strict
  • Controller和对应的view使用同样的名字(如果他们关系是1:1的话)
  • event handler用前缀on
  • Controller的名字始终以 *.controller.js 结尾

JavaScript 模块定义

这里很有必要解释一下JavaScript module的定义规范了,要不然这语法看的糊里糊涂的,虽然大概能知道是什么意思,但自己写起来也只能做简单的copy

AMD

全称是Asynchronous Module Definition,即异步模块加载机制,简单说AMD是JavaScript的一个规范标准,它完整的描述了模块的定义,依赖关系,引用关系及加载机制。
作为一个规范,只需定义其语法API,而不关心其实现,AMD规范简单到只有一个API,就是define函数:

define([module-name?],[array-of-dependecy?],[module-factory-or-object]);

  • module-name: 模块标识,可以省略
  • array-of-dependecy: 所依赖的模块,可以省略
  • module-factory-or-object: 模块的具体实现或是一个JavaScript对象

从中可以看出前两个参数是可以省略的,第三个参数是模块的具体实现本身。(这时再回到上面图中看一下sap.ui.define是不是不晕了)

从AMD中的A Asynchronous 可以看出这个define具体的另一个性质:异步性。当define函数执行时,它首先会异步的去调第二个参数中的所依赖的模块,当所有模块完成加载以后,如果第三个参数是一个回调函数则执行,然后告诉系统模块可用,也就通知了自己所依赖的模块自己已经可用

WEBIDE实例:

下面是一个实例:

使用WEBIDE开发很方便的一点就是Layout Editor,如果用Layout Editor怎么做这个按钮功能呢,我们一起来做一遍:

  1. 新建一个index.html,基本架构出来
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>

在head标签内加入meta``title

1
2
3
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<title>MVC-VC demo</title>

加入bootstrap。注意这里是写在script括号内的,这很容易出错,别问我怎么知道的

1
2
3
4
5
6
7
8
9
10
11
<script
id = "sap-ui-bootstrap"
src = "https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-theme="sap_belize"
data-sap-ui-libs="sap.m"
data-sap-ui-compatVersion="edge"
data-sap-ui-preload="async"
data-sap-ui-resourceroots='{
"sap.ui.demo.wt":"./"}'
>
</script>

加入要初始化并放在<body>中xmlview实例,声明对应的viewName,这里是写在标签内的

1
2
3
4
5
6
7
<script>
sap.ui.getCore().attachInit(function(){
sap.ui.xmlview({
viewName: "sap.ui.demo.wt.view.App"
}).placeAt('content');
})
</script>

最后修改<body>标签,加入id和class
index.html全部代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<title>MVC-VC demo</title>
<script
id = "sap-ui-bootstrap"
src = "https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-theme="sap_belize"
data-sap-ui-libs="sap.m"
data-sap-ui-compatVersion="edge"
data-sap-ui-preload="async"
data-sap-ui-resourceroots='{
"sap.ui.demo.wt":"./"}'
>
</script>
<script>
sap.ui.getCore().attachInit(function(){
sap.ui.xmlview({
viewName: "sap.ui.demo.wt.view.App"
}).placeAt('content');
})
</script>
</head>
<body class="sapUiBody" id = "content">
</body>
</html>

  1. 创建View
    有了viewName就应该创建对应的View了,新建文件夹view,新建xmlview文件App .view.xml

    敲入必要的namespace和指定对应的controller文件名

    1
    2
    3
    4
    5
    6
    7
    <mvc:View
    xmlns="sap.m"
    xmlns:mvc="sap.ui.core.mvc"
    controllerName="sap.ui.demo.wt.controller.App"
    >
    </mvc:View>
  2. 创建controller
    相对应的新建文件夹controller,新建controller js文件App .controller.js

    理一下思路,我们目的是要建一个有button的view,view上有按钮控件,controller就是为了控制view上的控件和数据,这里不涉及数据,我们就考虑控件,所以就需要在controller中写一个控制这个按钮的模块,就是按钮在被点击时的逻辑,也就是影响button的press事件。
    我们使用sap.ui.define()来定义一个module,前面我们知道了定义module需要三部分,模块名,依赖模块,具体实现,OK,我们依次加入,下面应该很直观了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sap.ui.define(
    "modulename",
    ["sap/ui/core/mvc/Controller"],
    function(Controller){
    "use strict";
    return Controller.extend(
    "sap.ui.demo.wt.controller.App",
    {
    }
    );
    }
    );

然后加入我们最终要实现的function的内容,我们想定义一个onPress事件,用户点击时执行功能alert:

1
2
3
onPress: function(){
alert("you clicked me");
}

App.controller.js全部代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sap.ui.define(
"modulename",
["sap/ui/core/mvc/Controller"],
function(Controller){
"use strict";
return Controller.extend(
"sap.ui.demo.wt.controller.App",
{
onPress: function(){
alert("you clicked me");
}
}
);
}
);

  1. 回头编辑View
    这里我们用Layout Editor

    拖一个按钮进来:

    这里就可以通过修改控件的属性来达到想到的效果,比如这里分别改的按钮的宽度,文本,文本前加了图标,加了激活后的图标,就是点击后的图标

    然后最关键的一眇就是关联事件,点击Events,在press那里找到我们刚在controller写的onPress


    如果你点击后面的go to code按钮,会自动导航到controller文件中对应的代码位置,非常方便有木有

    你想新建事件一个也没问题,press那里选new function:

    确定后点go to code:很爽是吧

    只需要关注要实现的功能就好,这里我加一个新的alert消息

    代码有点乱,点这个,自动美颜

    这里回头看一下view的代码,Layout Editor根据我们的设置自动生成了对应的代码
    1
    2
    3
    <mvc:View xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" controllerName="sap.ui.demo.wt.controller.App">
    <Button text="Click Me!" width="120px" id="__button1" activeIcon="sap-icon://accept" icon="sap-icon://activate" press="onPress1"/>
    </mvc:View>

保存执行:

HTML xmlns 属性

xmlns 属性可以在文档中定义一个或多个可供选择的命名空间。该属性可以放置在文档内任何元素的开始标签中。该属性的值类似于 URL,它定义了一个命名空间,浏览器会将此命名空间用于该属性所在元素内的所有内容。

如果需要在一个 div 元素中显示一串数学公式,则可以为该 div 元素定义一个数学命名空间。比如这样:

1
<div html xmlns="http://www.w3.org/1999/Math/MathMl">x3/x</div>

如果您不希望在每次显示除法公式时都在 div 元素中定义 xmlns 属性,那么更好的办法是在文档的开头处定义具有前缀的命名空间:

1
2
<html xmlns="http://www.w3.org/1999/xhtml">
xmlns:math="http://www.w3.org/1999/Math/MathMl">

然后,您就可以在 div 中使用该前缀了,就像这样:

1
<math:div>x3/X<div>

Fiori-step4-XML_views

发表于 2017-07-19 | 分类于 Fiori walkthrough | | 阅读次数
  • 所有的view都要放在view文件夹中
  • XML views的命名规则 *.view.xml
  • XML 默认的namespace是 sap.m
  • 注意大小写
  1. 这里sap.ui.demo.wt是定义了一个namespace,后面./意思是和index.html相同目录下
  2. sap.ui.demo.wt.view.App中的sap.ui.demo.wt.view就是唯一确定view的路径,App是view的名字
  3. sap.ui.getCore()在当前窗口返回SAPUI5 Core实例sap.ui.core.Core
  4. sap.ui.getCore().attchInit()注册一个函数,并在Framework完成初始化后执行。
  5. sap.ui.xmlView 根据sID(省略了)实例化一个XMLView,这里的viewName要么是定义好的View(viewName + suffix “.view.xml”),要么是一个View可配置对象(configuration object for a view)。
  6. planAt()实例了一个xmlView放在content

Fiori-Step2-Bootstrap

发表于 2017-07-18 | 分类于 Fiori walkthrough | | 阅读次数

有了hello world做铺垫,这一步太简单了,当然也是非常重要的一步,它成功了才意味着真正使用了SAP UI5的Bootstrap

在hello world代码中加入script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<title>Walkthrough</title>
<script
id="sap-ui-bootstrap"
src="/resources/sap-ui-core.js"
data-sap-ui-theme="sap_belize"
data-sap-ui-libs="sap.m"
data-sap-ui-compatVersion="edge"
data-sap-ui-preload="async" >
</script>
<script>
sap.ui.getCore().attachInit(function () {
alert("UI5 is ready");
});
</script>
</head>
<body>
<p>Hello World</p>
</body>
</html>

执行发现并没有弹出对话框,原因是js路径需要根据你文件夹的路径进行调整,也可以直接用外网的
https://sapui5.hana.ondemand.com/resources/sap-ui-core.js
替换代码中的src属性

1
src="/resources/sap-ui-core.js"

1
src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"

再次执行,对话框出现了

Fiori-hello world

发表于 2017-07-18 | 分类于 Fiori walkthrough | | 阅读次数

今天正式开始学习Firor了,我是SAP UI5的小白,也是Javascript的小白,所以学习过程中一些很简单很基础的问题都能浪费我大量时间找资料,如果身边有一Javascript高手,会节约非常多的时间。我基本是按官方的资料一步步看下去的,遇到不明白的就百度,然后再继续,进度比较慢,但很享受。
https://sapui5.hana.ondemand.com/sdk/#docs/guide/

声明:下面内容有一些是我从其它公众号或网站中摘的,如有侵权,请告知


问题

开始之前有几个问题需要搞清楚:

1. Fiori和SAPUI5是什么关系?

简单说,Fiori是基于HTML5和SAPUI5的,可以理解成Fiori是用SAPUI5开发的一个应用。

Fiori 是使用SAPUI5 的JS UI库并且遵照 SAP Fiori的设计指导开发的,使用SAP 云平台,WEBID可以快速实现新的应用场景。

2. Launchpad是个什么鬼?

个人理解这就是个平台组件,可以方便组织SAP Fiori APP和用户自己用SAPUI5开发的APP。

3. Firoi架构是什么样的?开发的APP发布到哪里?怎么跨平台 ?

Launchpad是一些组件,UI5是一些JS库,这些都是装在frontend server上的(Frontend server有三种安装方式,其中一种就是和装在backend server上,没有深入了解),有这些Launchpad组件Fiori就可以和SAP交互了么?不,这里还有一个非常重要的组件,Gateway ,Launchpad包括我们开发的UI5 APP都是通过Gateway使用ODATA来与SAP商业套件进行连接交互的,可以理解成SAP Netweaver Gateway就是SAP基于ODATA协议(OData协议支持一系列流行的数据格式,包括JSON,XML。)开放出来的一个接口,这样就可以开发基于Web和Mobile的程序而不用考虑Web程序和Mobile应用是用什么技术开发的了,实现了SAP Fiori的跨平台特性。

放一个图在这里

4. WEBIDE 是干嘛的?

SAP Web IDE 是基于 Eclipse 内核的在线开发 IDE,用来开发和扩展SAP Fiori APP,SAPUI5 APP,有专门针对物联网和HANA应用开发的控件,并且它非常容易扩展。可以使用在线的试用版本,但服务器在德国,访问的网速特别慢,也可以使用 Personal Edition,在本机启动和编写代码。

与 Eclipse 相比,SAP Web IDE 有几个优点:

  • 支持基于 XML View 的可视化操作,支持控件的拖放;
  • 支持 Application Descriptor (manifest.json) 文件编辑的 Application Descriptor Editor:
  • 根据 Template 生成项目文件的结构,减少开发的工作量。而且 SAP 已经停止对 Eclipse 开发插件的支持,所以后续 IDE 功能的更新将主要在 Web IDE。
  • 提供内置 Proxy,解决开发页面运行的 cross-origin 问题,方便开发测试
  • SAP 对Eclipse开发所需要的SAP Developer Tools for Eclipse不再更新,所以一些代码框架比较陈旧,比如 Controller 的代码框架等等。

缺点呢?感觉 IDE 中对中文输入的支持不好,支持中文显示,但输入比较困难。另外,操作友好性也还不够,比如代码剪贴不是很方便。

WEBIDE 有版本:

  • SAP Cloud Platform, Web IDE
  • SAP Web IDE for SAP HANA

4.1 下载

链接:http://pan.baidu.com/s/1boT3cnH 密码:jgxm
这个是1.45.3 官方最新的现在是1.53.1,地址奉上:
https://tools.hana.ondemand.com/#sapui5

根据自己系统下载即可。

4.2 安装

本地试用版几乎是傻版,不需要任何安装

  1. 安装JDK,这个大家应该都装过N次就不说了。版本要求
    1.7以上的都可以
  2. 打开Orion
    下载后解压到任何路径,以防万一,最好不要有中文,Orion提供了WEBIDE需要的后端的服务,它可以理解为一个文件管理器,可以给每个用户分配不同的空间管理不同的project,它可以关联本地的git库以实现版本控件。
    我们要做的就是双击打开这个Orion服务

    出现下面这个窗口(不要关闭)就可以开始打开浏览器开发hello world喽
  3. 打开Chrome
    http://localhost:8080/webide/index.html出现登录界面,虽然是本地IDE,也要注册一个用户的,然后点击色子‘3点’进行登录。



    至此,你已经可以开始开发工作了!
    8080 端口是 Tomcat 的默认端口,如果需要变更 Web IDE 的端口,打开安装目录下面的 orion.ini 文件,将端口改了即可

    5. WEBIDE 的架构是什么样的?


    官网的一个图,意思就是使用WEBIDE开发的应该可以部署在不同的平台上(右边黑色部分),可以使用不同类型的数据源(下面),可扩展(左边)。

    下面还有一个图,这个更容易看出来SAP WEBIDE在整个架构中的位置

SAP HANA Cloud Connector通过简单的配置使SAP WEBIDE和SAP HANA cloud Platform连接到一个预置的系统。SAP Gateway 为SAP WEBIDE连接外部SAP系统提供了一个简单的连接。


step 1 Hello world

https://sapui5.hana.ondemand.com/sdk/#docs/guide/2680aa9b16c14a00b01261d04babbb39.html

  1. 新建文件夹‘step1_hello_world’(这里不能有空格)
  2. 新建文件 ‘index.html’

    简单点就直接copy代码吧
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!DOCTYPE html >
    <html>
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="utf-8">
    <title>Walkthrough</title>
    </head>
    <body>
    <p>Hello World</p>
    </body>
    </html>

貌似是写完了,但根本不能执行 T_T

原因就是缺少了项目的配置文件,如果参考模版或是其它应用创建会自动生成配置文件,但这里直接创建html是需要手工创建的

  1. 新建文件 ‘neo-app.json’
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    {
    "welcomeFile": "index.html",
    "routes": [
    {
    "path": "/resources",
    "target": {
    "type": "service",
    "name": "sapui5",
    "version": "snapshot",
    "entryPath": "/resources"
    },
    "description": "SAPUI5 Resources"
    },
    {
    "path": "/test-resources",
    "target": {
    "type": "service",
    "name": "sapui5",
    "entryPath": "/test-resources"
    },
    "description": "SAPUI5 Test Resources"
    }
    ]
    }

copy ,保存,绿色三角执行

传说中的hello world 出现了,从此又会了一门手艺:clap::clap:

  • 在进行UI开发前要注意查看服务器中Gateway的库的版本,以服务器的库版本为基准进行开发,否则有可能会导致EDI里开发所用到的控件传到服务器后报错,TCODE:SICF


    顺便也说一个如何查看WEBIDE的库版本
    Ctrl+Shift+Alt+'S'
  • 前段开发部署到服务器上是以BSP Application的形式存在的

**注意:这里其实是有3个版本的:

  1. 一个是你开发的WEBIDE版本,这个在开发界面按Ctrl+Shift+Alt+'S'查看;

  2. 还有一个是执行程序时按Ctrl+Shift+Alt+'S'查看(前提是index.html的src标签用是src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js");
  3. 然后是部署在server上的Gateway中库的版本,查看地址:http ://:/sap/public/bc/ui5_ui5/index.html**

    这3者的作用相信你也能猜出来了,使用时需要注意,有奇怪的问题出现时考虑一下是不是版本差异造成的。

延伸这个话题,如果我就是想用某一个控件怎么办呢?比如CustomTreeItem,这个控件在要求1.48以上才可能用的,但我们的WEBIDE是1.44,怎么办呢?

github( https://github.com/SAP/openui5/tree/master/src/sap.m/src/sap/m )中找到这两个js文件(‘CustomListItem.js’和’CustomListItemRenderer.js’),down下来放到本地的sap.m库中即可。

我本地的地址是:E:\SAPWEBIDE\eclipse\plugins\com.sap.webide.orionplugin_1.53.1\ui5\1.44.12\resources\sap\m
供参考。

如果你用的是cloud的webide会更方便一些,可以直接用‘Library Manager’下载引用

Tips:

快捷键:

CTRL+ALT+B: 代码美化,相当于ABAP的pretty print

CTRL+/:行注释

CTRL+ALT+/: 块注释

Outline:这个功能特别适合快速定位代码块,很方便

升级SAP Web IDE Personal Edition

如果发现新版本的WEBIDE Edition想要升级的话,升级方法很简单:

1
2
3
4
5
1. 备份下面这三个文件(夹)
config_master<br>
serverworkspace<br>
orion.ini<br>
2. 下载新的WEBIDE,解压后用备份覆盖

参考

简书:

翱翔云天SAP: http://www.jianshu.com/nb/10985020

StoneWM:
http://www.jianshu.com/nb/8494430

再分享几个学习Fiori非常有用的网址:

SAP Fiori Cloud Demo:
https://www.sapfioritrial.com/sites?helpset=trial&sap-client=001

SCN:
https://wiki.scn.sap.com/wiki/display/Fiori/SAP+Fiori+Cloud

你可以在这个网址找到有哪些可用的 Fiori app:https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/

hexo 常用命令

发表于 2017-07-12 | 分类于 Blog | | 阅读次数
1
2
3
npm install hexo -g #安装
npm update hexo -g #升级
hexo init #初始化
简写
1
2
3
4
5
hexo n "我的博客" == hexo new "我的博客" #新建文章
hexo p == hexo publish
hexo g == hexo generate#生成
hexo s == hexo server #启动服务预览
hexo d == hexo deploy#部署

服务器

1
2
3
4
5
6
7
8
hexo server #Hexo 会监视文件变动并自动更新,您无须重启服务器。
hexo server -s #静态模式
hexo server -p 5000 #更改端口
hexo server -i 192.168.1.1 #自定义 IP
hexo clean #清除缓存 网页正常情况下可以忽略此条命令
hexo g #生成静态网页
hexo d #开始部署

监视文件变动

1
2
hexo generate #使用 Hexo 生成静态文件快速而且简单
hexo generate --watch #监视文件变动

完成后部署

1
2
3
4
5
6
7
8
9
>下面命令是相同的:
hexo generate --deploy
hexo deploy --generate
hexo deploy -g
hexo server -g
hexo d -g
hexo s -g

草稿

1
hexo publish [layout] <title>

模版

1
2
3
4
5
6
7
8
9
hexo new "postName" #新建文章
hexo new page "pageName" #新建页面
hexo generate #生成静态页面至public目录
hexo server #开启预览访问端口(默认端口4000,'ctrl + c'关闭server)
hexo deploy #将.deploy目录部署到GitHub
hexo new [layout] <title>
hexo new photo "My Gallery"
hexo new "Hello World" --lang tw
变量 描述
layout 布局
title 标题
date 文件建立日期
1
2
3
4
5
6
7
8
title: 使用Hexo搭建个人博客
layout: post
date: 2014-03-03 19:07:43
comments: true
categories: Blog
tags: [Hexo]
keywords: Hexo, Blog
description: 生命在于折腾,又把博客折腾到Hexo了。给Hexo点赞。

模版(Scaffold)

1
hexo new photo "My Gallery"
变量 描述
layout 布局
title 标题
date 文件建立日期

设置文章摘要

以上是文章摘要

阅读全文 »
1…678
Jim Guo

Jim Guo

Hi~

36 日志
5 分类
22 标签
© 2018 Jim Guo
由 Hexo 强力驱动
主题 - NexT.Mist