LogoLogo
What's NewDeveloper CommunitySupportStatus
  • 🚀Get Started
    • What is JourneyApps Platform?
    • Tutorial: Build your First App
      • 1. Introduction
      • 2. Create a new App
      • 3. OXIDE IDE Overview
      • 4. Hello World app
      • 5. The Data Model
      • 6. View Components
      • 7. Queries and Data Sync
      • 8. Simple Navigation
      • 9. View Stack
      • 10. Input Validation
      • 11. View Parameters
      • 12. Data Manipulation
      • 13. Responsive Apps
      • 14. Styling
      • 15. Lists
      • 16. GPS Capturing
      • 17. Relationships
      • 18. Multiple User Roles
      • 19. Deployment and Users
      • 20. Version Control
      • 21. CSV and APIs
      • 22. Conclusion
    • JourneyApps Platform Fundamentals
      • Creating a New App
        • Git-enabled Apps
      • What are Views?
      • What is the Data Model?
      • JourneyApps Syntax Basics
      • Access the Database (DB)
        • Manipulate DB Objects
        • Query DB Objects
      • View Navigation
        • Deep Linking
      • CloudCode Overview
      • OXIDE (Online IDE)
  • 💻Build your App
    • JourneyApps Syntax
      • Syntax Basics
      • Access the DB
      • View Navigation
      • Async & Await
      • TypeScript Apps (Beta)
        • runtime-build package
        • TypeScript App Troubleshooting
      • What's New in V4
        • Updating to the V4 API
    • Configure your Data Model
      • What is the data model?
      • Reference: model
        • field
        • belongs-to
        • has-many
        • index
      • Data Rules
        • Data Buckets
        • Sync Rules - Limit data synced to devices
        • Data ACLs - Limit access to data
        • Real-world example for Data Rules
        • ❔FAQs
        • Migrate to Data Rules
      • App Indexes
      • Webhooks
    • UI Components
      • All UI Components
        • actionSheet
        • Attachments
        • button
        • button-group
        • capture-coordinates
          • marker
          • marker-query
        • capture-file
        • capture-photo
        • capture-signature
        • card
          • accent
          • action
        • columns
          • column
        • component
        • context-menu
          • divider
          • item
        • CSV
        • date-input
        • datetime-input
        • dialog
          • body
        • display-3d-model
          • 📖display-3d-model Guides
            • Guide 1: Initialize and layout a 3D model in a view
            • Guide 2: Control playback position
            • Guide 3: Troubleshooting controls
        • display-coordinates
        • display-file
        • display-image
        • display-photo
        • display-signature
        • heading
        • html
          • HTML Advanced Topics
          • ❔HTML FAQs
          • 📖Guide: HTML & JourneyApps iFrame Client
        • icons
        • info
        • info-table
          • row
        • journey.photos (capture multiple photos)
        • JourneyPrinter (print PDFs)
        • grid
          • cell
          • 📖grid Examples
        • list
          • list-item
            • accent
            • asset
            • pills
              • pill
            • action
        • multiple-choice-checklist
        • navigation (Navigation drawer)
          • general-section
            • item
          • section
            • item
              • item
          • ❔navigation FAQs
        • notification
        • object-dropdown
        • object-list
          • action
        • object-repeat
        • object-table
          • action
          • column
            • action
            • edit-boolean
            • edit-date
            • edit-datetime
            • edit-integer
            • edit-number
            • edit-select
            • edit-text
            • edit-time
            • edit-typeahead
              • action
            • header-action
          • column-group
          • empty-action
          • 📖object-table Guides
            • Actions
            • Cell callouts
            • Column groups
            • Columns
            • Controlled object-table
            • Controls
            • Copy & paste data
            • Edit cells
            • Filters
            • Frozen columns
            • Fullscreen object-table
            • Mode
            • State
            • Styles
        • optionList
        • PhotonSync (transfer data offline)
        • power-bi
          • 📖Guide: PowerBI Embedding
        • scan-barcode
        • shortcut
        • sidebar
        • single-choice-dropdown
        • single-choice-radio
        • template
        • text-input
        • time-input
        • toggle
        • view
      • JS/TS Events
      • Show / Hide UI Components
      • View Templates
      • XML Fields (Attributes)
        • align-content
        • align-controls
        • align-label
        • bind
        • clear-button-visibility
        • control-order
        • disabled
        • error-message
        • icon-position
        • id
        • hide-if
        • modifier-text
        • label
        • label-case
        • label-color
        • on-change
        • on-press
        • placeholder
        • required
        • show-if
    • JS / TS APIs
      • Attachment
      • Bluetooth (Beta)
      • Broadcast
      • component
      • CSV
      • DB
      • HardwareBarcode
      • journey
        • journey.config
        • journey.container
        • journey.device
        • journey.diagnostics
        • journey.dialog
        • journey.files
        • journey.hardware
        • journey.photos
        • journey.runtime
        • journey.sensors
        • journey.viewStack
      • JourneyPrinter
      • KeyboardBarcode
      • LocalDB
      • NFC
      • OnlineDB
      • PhotonSync
      • SerialPort
      • ShortcutManager
      • TCPSocket
      • user
    • Extend your App with Custom Code
      • App packages
        • App packages overview
        • PDF report package
        • TypeScript library & unit tests
        • Manage External Dependencies
      • Custom HTML
    • Style & Customize your App
      • Style & configure UI components
        • Overview
        • Understand extendable themes
        • Use themes on a view
        • Theme specific components on a view
        • Examples
        • Debugging
        • ❔FAQs
      • Change your App Font
      • Custom Branding
        • Custom Container Features
        • Special Requirements for iOS Containers
    • Integrate your App
      • Backend integrations with CloudCode
      • Barcode Scanning
        • Barcode Scanning using Keyboard Emulation
        • Hardware Barcode Scanning
        • scan-barcode
      • Bluetooth Low Energy (BLE)
      • Broadcast API
      • HTTP requests (Fetch API)
      • JourneyApps Print (Android)
      • Maps and navigation
      • NFC
      • Opening external links/apps
      • Serial Port
      • TCP Sockets
    • Design Intuitive Apps
      • UX Guidelines
      • Write Effective Copy
  • 📱App Features
    • RealWear® Voice Control
      • Automatic Voice Commands
        • Automatic Voice Commands - Advanced
      • Manual Voice Commands
    • App, Runtime and Container Updates
    • Batch Operations (App)
    • Call JS/TS Functions from XML
    • Capture GPS Locations
    • Push Notifications
    • Translations
    • XML Format Strings
    • Webhooks (External)
  • 🌐CloudCode
    • CloudCode Overview
    • Trigger a CloudCode Task
      • Trigger CC with a Schedule
      • Trigger CC via a Webhook
      • Trigger CC from an App
      • Trigger CC from Another Task
      • Trigger CC via HTTP
    • Attachments in CloudCode
    • Timezones
    • Advanced CloudCode Topics
      • Access Multiple DBs in CloudCode Tasks
      • Batch API (CloudCode)
      • CloudCode Dependencies
      • Configure HTTPS in CloudCode
      • Deployment environment variables
      • Local CloudCode Development
      • PDF Reports using CloudCode
      • Shared CloudCode Tasks
      • Translations in CloudCode
  • 📥Backend API
    • Introduction
    • API Reference
      • Retrieve All Objects
      • Query Objects
      • Sort Results
      • Limit and Skip
      • Count Objects
      • Create a New Object
      • Retrieve a Single Object
      • Update a Single Object
      • Delete a Single Object
      • Batch Operations (v4 API)
      • Oplog API
      • Retrieve the App Data Model
      • Manage App Users and Sessions
      • Field Representation
      • Error Responses
    • API Limits
    • Update to the V4 API
  • ⚙️Technical
    • Data Synchronization Priority
    • Device Diagnostics
    • JSON1 Query Engine
    • Improve App Performance
    • Security Measures
    • Supported Platforms
      • Web Container
      • Windows Installer
    • Domain Whitelist
  • 🖥️OXIDE
    • Get started with OXIDE
      • OXIDE Overview
      • Components of OXIDE
    • Configure Testing Deployments
    • Edit and Manage Files
      • How to Navigate to a Function
      • Manage External Dependencies
    • Create and Manage App Containers
    • Debugging & Troubleshooting
      • Common Troubleshooting Pointers
      • App Diagnostics Reports
      • Build Logs
    • OXIDE Workspaces
      • OXIDE Trees
  • ❕Deprecated Features
    • Deprecated Features and Components
Powered by GitBook
On this page
  • Changes in Naming
  • No More Explicit Links
  • New ‘resume’ Callback
  • New Choice Types
  • ‘Day’ Objects
  • New Label Behavior
  • New V4 JourneyApps API
  • Naming Details
  1. Build your App
  2. JourneyApps Syntax

What's New in V4

PreviousTypeScript App TroubleshootingNextUpdating to the V4 API

Last updated 2 years ago

Changes in Naming

The naming used in the Data Model XML, Views XML and some JavaScript functions are changed to be more consistent and intuitive.

For the complete list, see the section.

The data model and view XML changes are handled automatically by the migration process. However, the JavaScript changes have to be performed manually.

No More Explicit Links

It is now longer required to define link elements explicitly. Instead, call the links by path with link.link_path(). The same function can now also be called directly from the on-press attribute in the view XML, optionally passing view variables as arguments. This replaces the need for the link attribute on buttons.

<view title="Main Menu">
    <button label="New User" on-press="link.new_user()" />
</view>
<view title="Select Task">
    <var type="query:task" name="tasks" />
    <object-list label="View Task" query="tasks">
        <action on-press="link.view_task($selection)" />
    </object-list>
</view>

It is no longer required to use return link.some_view() - instead just use link.some_view(). The link function now throws an exception, that is used for navigation.

For details, see the Linking Views section.

New ‘resume’ Callback

Instead of defining ondismiss actions on links, you can now define a single resume function per view. If defined, this is called whenever the user returns to the view, both via a dismiss call and via the back button.

function resume(from) {
    if(from.dismissed && from.path == 'user/new') {
        dialog("New User", "A new user has been created");
    }
}

For details, see the Linking Views section.

New Choice Types

enum has been renamed to single-choice-integer, and enum_set has been renamed to multiple-choice-integer. Additionally, these types now take explicit keys for each option.

<field name="color" type="single-choice-integer">
    <option key="2">Red</option>
    <option key="6">Green</option>
    <option key="4">Blue</option>
    <option key="5">Yellow</option>
</field>

There are also three new choice types:

single-choice

Like single-choice-integer, but takes string keys. This is recommended over single-choice-integer.

<field name="color" type="single-choice">
    <option key="red">Red</option>
    <option key="green">Green</option>
    <option key="blue">Blue</option>
    <option key="yellow">Yellow</option>
</field>

boolean

Like single-choice-integer, but has exactly two boolean options.

<field name="confirmed" type="boolean" />
<!-- If not specified, default options are:
    <option key="false">No</option>
    <option key="true">Yes</option>
-->

<field name="acceptance" type="boolean">
    <option key="true">Accepted</option>
    <option key="false">Not Accepted</option>
</field>

multiple-choice

Like multiple-choice-integer, but takes string keys. This is recommended over multiple-choice-integer.

<field name="colors" type="multiple-choice">
    <option key="red">Red</option>
    <option key="green">Green</option>
    <option key="blue">Blue</option>
    <option key="yellow">Yellow</option>
</field>

‘Day’ Objects

date fields now use a Day object instead of Date object to represent the value. The Day object represents only the Gregorian day, with no time or timezone.

var today = Day.today();
var today = new Day(); // Same as Date.today()
var day = new Day("2014-01-05") // Parse some day.
var day = new Day(new Date());  // Convert Date to Day, in local timezone.
day.startOfDay();	// Start of day in local timezone, as a Date
day.endOfDay();	// End of day in local timezone, as a Date
day.toString();		// “2014-01-05”
day.toISOString();	// “2014-01-05”
day.toJSON();		// “2014-01-05”
day.valueOf();		// 1388880000000
day.getYear() // 2014
day.getMonth() // 1 (0 - 11)
day.getDay() // 5

New Label Behavior

If no label is specified on an input component, it is now inferred from the Data Model. Will be blank for direct view variables, since they do not have any label. This that you can have more concise view components, for example:

<text-input bind="my_form.field1" />
<text-input bind="my_form.field2" />
<single-choice-dropdown bind="my_form.choice3" />

To explicitly create an input without any label, use label="". This will remove it completely (no whitespace). To still have some whitespace, use label=" " (a single space in the label).

The placeholder text of text inputs may now be customized by specifying placeholder="My placeholder". This may be used to create more compact forms, for example:

<text-input bind="address_street" label="" placeholder="Street" />
<text-input bind="address_city" label="" placeholder="City" />
<text-input bind="address_code" label="" placeholder="Postal Code" />

New V4 JourneyApps API

The JourneyApps API has been upgraded significantly, and is now available in V4.

Naming Details

Data Model

Old syntax
New syntax

<schema>

<data-model>

<object name="..." label="..." >

<model name="..." label="..." >

<attribute type="..." name="..." label="..." >

<field type="..." name="..." label="..." >

<display format="..." >

<display>...</display>

These changes are automatically applied by the migration process.

Field Types

Old syntax
New syntax

type="string"

type="text"

type="string" spec="text.address"

type="text:address" Text Subtypes

type="int"

type="integer"

type="decimal"

type="number"

type="date"

type="date"

type="datetime"

type="datetime"

type="location"

type="location"

type="attachment" media="image/jpeg"

type="photo"

type="attachment" media="image/svg+xml"

type="signature"

type="enum"

type="single-choice-integer"

type="enum_set"

type="multiple-choice-integer"

n/a

type="single-choice"

n/a

type="boolean"

n/a

type="multiple-choice"

type="myobject" array="true"

type="query:myobject"

These changes are automatically applied by the migration process.

Component Names

Old syntax
New syntax

<selectbox type="radio" />

<single-choice-radio />

<selectbox type="dropdown" />

<single-choice-dropdown />

<textinput />

<text-input />

<date />

<date-input />

<datetime />

<datetime-input />

<checklist />

<multiple-choice-checklist />

<barcode />

<scan-barcode />

<gps />

<capture-coordinates />

<signature />

<capture-signature />

n/a

<display-signature />

<picture />

<capture-photo />

<viewpicture />

<display-photo />

<list type="dropdown" />

<object-dropdown />

<list type="static" />

<object-list />

<object-table />

<object-table />

<table> <info label="...">...</info> <info label="...">...</info> </table>

<info-table> <row label="...">...</row> <row label="...">...</row> </info-table>

<button id="proceed" />

<button type="primary" />

<button link="some_link" />

<button on-press="link.some_view()" />

These changes are automatically applied by the migration process.

JavaScript Functions

These changes are not automatically applied by the migration process, and have to be applied manually.

Old syntax
New syntax

Query#fetch()

Query#toArray()

Query#get()

Query#first()

Query#destroy_all()

Query#destroyAll()

Query#order_by()

Query#orderBy()

Query#fetch().forEach(function(object) {...})

Query#forEach(function(object) {...})

DatabaseObject#set_all()

DatabaseObject#setAll()

return link.some_link();

link.some_view();

Please see the documentation for the or refer to the section about .

For details, see the syntax section under

💻
Backend API
Updating to the V4 API
What is the data model?
Naming Details