移动端 JavaScript

简介

在 Odoo 10.0 中,我们发布了一款移动应用,让您可以访问所有 Odoo 应用 (甚至包括您自定义的模块)。

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

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

Warning

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

它是如何工作的?

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

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

当然,它是加载在移动原生 Web 容器中的网页。但其集成方式使您可以在网页 JavaScript 中访问原生资源。

网页(Odoo Web)位于每一层的最顶端,第二层则是 Odoo Web(JS)与原生移动组件之间的桥接层(Bridge)。

当 JavaScript 触发任何调用时,它会经过桥接层,由桥接层传递给原生调用器以执行该操作。

原生组件完成工作后,结果再次经由桥接层传回,您便可在 JavaScript 中得到输出。

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

如何使用?

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

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

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

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

方法

Note

每个方法都返回一个 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 中显示的 Message,以及 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()) – 在标准通知中,即通知的 title (第一行)和 message (第二行)。

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

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