来自Jerry的同事,Yang Joey。

相信大部分C4C的UI developer包括我刚开始的时候都会比较好奇我们平时写的javascript代码是如何运行在移动设备上的,同样的,我也对这个问题十分感兴趣。于是,以安卓为例子,我把我们发布到安卓应用市场的app解压出来研究了一下。

上图是一个cordova的总体框架的描述,可以看到cordova主要由两部分构成。
第一部分:Cordova Application是Cordova框架独立于不同手机操作系统的一个封装层。具体包括
1)Web app(包括具体的app的HTML/JS/CSS代码等);
2)Cordova框架已经封装好的核心插件(如相机、存储等系统调用),这块是Cordova的核心部分。当然,开发者也可以基于它的插件体系,扩展出新的插件;
第二部分:Mobile OS就是具体的手机操作系统层了,Cordova目前支持大部分的手机OS:ios、android、wp、blackberry等等

第二部分我们在这里就不赘述,都是mobile OS的各种原生功能。

那么我们先来看第一部分的webapp这一部分,我们将下载下来的apk文件解压缩,如下所示是一个很经典的安卓app的apk包的结构:

上文中讲过, 用Cordova工具将C4C Aurora的项目文件打包成Android或者iOS原生应用后,以Android平台为例,客户安装apk在安卓设备上后,运行在安卓手机上的C4C应用实际运行在WebView中。
WebView里加载的JavaScript和HTML文件实际上已经保存在了Cordova构建出来的项目包(即apk文件)里。在运行时,这些资源文件通过Embedded server加载到WebView里。
当然,手机C4C应用上所有需要显示的Transaction数据,比如在手机C4C应用上打开Account工作中心,看到的所有Account数据都来自对应的C4C tenant,这些数据的读取请求通过embedded Server发送到C4C tenant的后台 ABAP系统上去。

Jerry在博客(https://blogs.sap.com/2017/08/17/step-by-step-to-package-a-fiori-application-into-your-android-device-using-cordova/)中有写到如何用cordova创建一个fiori 风格app, 文中有讲到我们在开发这样一个app的时候会有一个默认的index.js生成,我们基于这个文件为入口进行开发cordova的应用,我们在assets->www下面找到了这个index.js文件,同时我们看到了几个zip包,这几个zip分别来自我们C4C开发组所开发的oberon和lead cod,里面包含了我们开发的javascript代码和样式表文件,这些文件即是上文提到的保存在cordova构建出来的项目包里的代码和html文件。

我们打开一个oberon.zip看一看里面的内容,比如我现在打开的是我们开发的RUI client下面的所有javascript代码和样式表文件的目录,library-preload.js就是我们开发的javascript代码压缩之后的合集,其中也包括一些我们会用到的UI5的类库。

通过jerry的博客我们得知应用运行时会先加载这个js文件,那么打开这个文件看一下上文提到的oberon.zip等zip里面的代码是如何被加载和运行的。

可以看到这里加载了两个js文件,运行了一个app.initialize()方法. 这个方法被定义在加载的第二个js文件js/index.js里面,打开这个index.js文件之后发现的确是这里的initialize 方法加载了sap的UI标准库,主题库,语言等。

上文中讲了第一部分中的webapp,那么我们来看看开发者自己开发的插件这一部分,在Jerry的博客中有写到如何用java开发一个自定义的cordova插件:https://blogs.sap.com/2017/08/18/step-by-step-to-create-a-custom-cordova-plugin-for-android-and-consume-it-in-your-ui5-application/,文中有提到我们如何在UI5的application中去调用我们开发的cordova插件,我们在这个解压出来的包里面也可以看到这些去消费插件的这些js class:

打开一个调用名片扫描插件的文件夹,我们发现与开发的时候文件目录基本一致, /platforms/android/assets/

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

SAP Cloud for Customer的Container应用设计原理的更多相关文章

  1. SAP Cloud for Customer Extensibility的设计与实现

    今天的文章来自Jerry的同事,SAP成都研究院C4C开发团队的开发人员徐欢(Xu Boris).徐欢就坐我左手边的位置,因此我工作中但凡遇到C4C的技术问题,一扭头就可以请教他了,非常方便.下图是他 ...

  2. SAP Cloud for Customer里Sales Order和Sales Quote的建模方式

    SAP Cloud for Customer的Sales工作中心里有Sales Quote和Sales Order两个视图,一个用于销售报价单,另一个用于销售订单. 流程上是先有报价单 ,报价单是一份 ...

  3. SAP Cloud for Customer(C4C)的一些学习资料

    经常有顾问朋友们问我想自学C4C,有什么好的资料. SAP内部确实有一些C4C培训材料,但是不能散布到公司外部. 想学习C4C,还是得到SAP官网网站上查找资料. 1. 登录https://help. ...

  4. SAP Cloud for Customer Account和individual customer的区别

    在SAP Cloud for Customer的Customers工作中心里,有三个视图:Accounts,Contacts和Individual Customers. 这三种主数据的区别是什么?我们 ...

  5. SAP Cloud for Customer销售订单External Note的建模细节

    SAP Cloud for Customer的销售订单创建页面里,我们可以给一个订单维护External Note,当这个订单同步到S/4HANA生成对应的生产订单后,这个note可以作为备注提示生产 ...

  6. SAP Cloud for Customer Price-计价简介

    SAP Cloud for Customer(本文以下简称C4C)作为SAP新一代的CRM云产品,其Price功能实现虽不如以前的SAP ERP那么复杂,但是也能满足企业运作中各种Price需求. C ...

  7. 如何找到SAP Cloud for Customer标准培训和认证方面的信息

    有一些朋友询问我如何在SAP官网上找到和SAP Cloud for Customer相关的标准培训信息,我这里把步骤写出来: 登录SAP官网https://training.sap.com 输入和Cl ...

  8. 机器学习在SAP Cloud for Customer中的应用

    关于机器学习这个话题,我相信我这个公众号1500多位关注者里,一定有很多朋友的水平比Jerry高得多.如果您看过我以前两篇文章,您就会发现,我对机器学习仅仅停留在会使用API的层面上. 使用Java程 ...

  9. 如何把SAP Kyma和SAP Cloud for Customer连接起来

    首先进入SAP Cloud for Customer的Administration的工作中心,打开General Settings视图,进入Event Notification配置UI: 新建一个C4 ...

随机推荐

  1. Centos7 手动编译 RabbitMQ ,并安装php amqp

    RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统,底层基于Erlang语言. 一:centos7安装RabbitMQ 这玩意儿安装很扯淡,官方推荐rpm安装,rpm安装本身是最简单的 ...

  2. android webview带cookie访问url

    问题描述在原生和h5混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是app登录了账号,但是网页却没有,所有会禁止访问此url,webview就会显示白屏.所以要访问此url, ...

  3. 深入理解JVM+G1+GC.pdf (中文版带书签)

    目录 序 VII前言 IX 第1章 JVM & GC基础知识 11.1 引言 21.2 基本术语 31.2.1 Java相关术语 41.2.2 JVM/GC通用术语 241.2.3 G1涉及术 ...

  4. Python - Django - ORM QuerySet 方法补充

    models.py: from django.db import models class Employee2(models.Model): name = models.CharField(max_l ...

  5. javaFX 整合 maven

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  6. Appium移动自动化测试-----(七)Desired Capabilities

    Desired Capabilities Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilities 本质上是以 key valu ...

  7. go方法

    go中的方法(method),跟函数(function)不是一个概念,一定要区分,它的概念与python中的类方法类似. go中是没有类的概念的,所以,go要想实现类 多种属性集合的功能的话,必须要使 ...

  8. LeetCode 141. 环形链表(Linked List Cycle) 19

    141. 环形链表 141. Linked List Cycle 题目描述 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 ...

  9. spring security关闭http验证 和 springboot 使用h2数据库

    spring security关闭http验证 最近在跑demo的过程中,访问swagger页面的时候需要验证登录,记得在之前写的代码中是关闭了security验证,无需登录成功访问,直接在appli ...

  10. Win10 将本地连接设置为按流量计费网络

    在Win10中默认是不允许用户将本地连接设置为按流量计费网络的,不过我们可以通过修改注册表的方式来实现. 将本地连接设置为按流量计费网络后,Windows更新将不会自动下载.同样,Windows应用商 ...