移动端 JavaScript

介绍

在 Odoo 10.0 中,我们发布了一个移动应用,它允许你访问所有 Odoo 应用 (甚至是你自定义的模块)。

该应用是 Odoo Web 与 原生移动组件 的组合。换言之,它是一个加载在原生移动 WebView 容器中的 Odoo Web 实例。

本页介绍如何通过 Odoo Web(使用 JavaScript)访问相机、振动、通知和 Toast 等移动原生组件。为此,你无需成为一名移动开发者;只要了解 Odoo JavaScript API,就能访问所有可用的移动功能。

警告

这些功能仅适用于 Odoo 企业版 10.0+

工作原理是什么?

移动应用的内部工作原理:

../../../_images/mobile_working.jpg

当然,它是一个加载在移动原生 Web 容器中的网页。但它的集成方式使你能够从 Web JavaScript 中访问原生资源。

WebPages (Odoo Web) 位于各层的最上层,其中第二层是 Odoo Web (JS) 与原生移动组件之间的桥接层 Bridge。

当 JavaScript 触发任何调用时,该调用会经过 Bridge,由 Bridge 将其传递给原生调用器以执行相应操作。

当原生组件完成其工作后,结果会再次传回 Bridge,你便能以 JavaScript 获得输出。

原生组件处理所耗的时间取决于你向原生资源请求的内容,例如相机或 GPS 定位。

如何使用?

与 Odoo Web 框架一样,移动 API 可在任何地方使用,只需从 web_mobile.rpc 获取该对象

../../../_images/odoo_mobile_api.png

移动 RPC 对象提供了一系列可用的方法(仅在移动应用中有效)。

检查该方法是否可用,然后执行它。

方法

注解

每个方法都返回一个 JQuery Deferred 对象,该对象返回一个数据 JSON 字典

在设备中显示 Toast

showToast()
参数
  • args (object()) – message 要显示的文本

Toast 通过一个小弹窗对操作提供简单反馈。它只占用消息所需的空间,当前活动仍保持可见且可交互。

mobile.methods.showToast({'message': 'Message sent'});
../../../_images/toast.png

振动设备

vibrate()
参数
  • args (object()) – 在指定时间段内持续振动(单位为毫秒)。

按给定时长振动移动设备。

mobile.methods.vibrate({'duration': 100});

显示带动作的 Snackbar

showSnackBar()
参数
  • args (object()) – (必填) 要在 Snackbar 中显示的 消息,以及 Snackbar 中动作的 按钮标签 (可选)

退货

如果用户点击动作按钮则为 True,如果 SnackBar 在一段时间后自动消失则为 False。

Snackbar 提供关于操作的轻量级反馈。它们在移动设备上显示在屏幕底部,在较大设备上显示在左下角。Snackbar 出现在屏幕上所有其他元素之上,且一次只能显示一个。

mobile.methods.showSnackBar({'message': 'Message is deleted', 'btn_text': 'Undo'}).then(function(result){
    if(result){
        // Do undo operation
    }else{
        // Snack Bar dismissed
    }
});
../../../_images/snackbar.png

显示通知

showNotification()
参数
  • args (object()) – 标准通知中的通知 标题 (第一行)和通知 消息 (第二行)。

通知是你可以向用户显示在其应用正常 UI 之外的消息。当你让系统发出通知时,它首先会以图标的形式出现在通知区域中。要查看通知的详细信息,用户需要打开通知抽屉。通知区域和通知抽屉都是由系统控制的区域,用户可随时查看。

mobile.showNotification({'title': 'Simple Notification', 'message': 'This is a test for a simple notification'})
../../../_images/mobile_notification.png

在设备中创建联系人

addContact()
参数
  • args (object()) – 包含联系人详细信息的字典。可能的键(name、mobile、phone、fax、email、website、street、street2、country_id、state_id、city、zip、parent_id、function 和 image)

使用给定的联系人详细信息在设备上创建新联系人。

var contact = {
    'name': 'Michel Fletcher',
    'mobile': '9999999999',
    'phone': '7954856587',
    'fax': '765898745',
    'email': 'michel.fletcher@agrolait.example.com',
    'website': 'http://www.agrolait.com',
    'street': '69 rue de Namur',
    'street2': false,
    'country_id': [21, 'Belgium'],
    'state_id': false,
    'city': 'Wavre',
    'zip': '1300',
    'parent_id': [8, 'Agrolait'],
    'function': 'Analyst',
    'image': '<<BASE 64 Image Data>>'
}

mobile.methods.addContact(contact);
../../../_images/mobile_contact_create.png

扫描条形码

scanBarcode()
退货

从任意条形码扫描得到的 code

条形码 API 可在设备上实时检测任意方向的条形码。

条形码 API 可以读取以下条形码格式:

  • 一维条形码:EAN-13、EAN-8、UPC-A、UPC-E、Code-39、Code-93、Code-128、ITF、Codabar

  • 二维条形码:QR Code、Data Matrix、PDF-417、AZTEC

mobile.methods.scanBarcode().then(function(code){
    if(code){
        // Perform operation with the scanned code
    }
});

在设备中切换账户

switchAccount()

使用 switchAccount 在设备上从一个账户切换到另一个账户。

mobile.methods.switchAccount();
../../../_images/mobile_switch_account.png