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
  • I have implemented data rules, and no longer have access to the user object. What could have caused this?
  • Is it possible to have more than one condition for the has-many/model references within my data rules?
  • I have just deployed updated data rules. How long will sync rule reprocessing take for my app?
  • Is it safe to use the Backend API while sync rules are reprocessing?
  • Are attachments also synced and can I configure data rules for them?
  • How can I debug data rules?
  1. Build your App
  2. Configure your Data Model
  3. Data Rules

FAQs

PreviousReal-world example for Data RulesNextMigrate to Data Rules

Last updated 2 years ago

I have implemented data rules, and no longer have access to the object. What could have caused this?

The user object is likely not being synced to your device. It is important to remember to explicitly sync the user object. This can be accomplished by defining a bucket that has the root of "self", since root objects are included in buckets.

data_rules.xml
<bucket via="self">
</bucket>

Alternatively, if you require access to user objects globally, you can sync them via a global bucket:

data_rules.xml
<global-bucket>
    <model name="user" />
</global-bucket>

Is it possible to have more than one for the has-many/model references within my data rules?

No, this is not currently possible.

As a workaround, you could create a new field that is set based on a combination of fields that make up the condition, and then set the condition attribute to this new field.

I have just deployed updated data rules. How long will take for my app?

The exact processing time varies based on the app and the server load, but it usually takes around 1-2 seconds per 1000 entries in the , or half an hour per million entries.

Is it safe to use the while sync rules are reprocessing?

Yes, sync rule reprocessing has no impact on the Backend API.

Are attachments also synced and can I configure data rules for them?

By default, attachments are synced on demand and cached locally on a user's device. The demand is triggered whenever the app tries to access the attachment programmatically, either using a view component (e.g. display-photo) or by trying to access it from JS/TS (for example using journey.files.viewFile(someAttachment)). At that point the device will try to access the attachment from local storage and, if not available, download the attachment from the AttachmentStore and cache it locally to use in subsequent requests. If no internet connection is available, the attachment will not be downloaded and there will be no attachment to interact with.

Attachments that are created on the device will automatically be cached on the device. Finally, all cached attachments eventually get uncached / desynced on a first-in-first-out basis.

Data rules

You cannot set up data rules for attachments, only for the objects that hold the references to the attachments. So if you have a model called photo that has a field for a photo attachment and a text field for a name, then you can setup data rules for your photo objects but not for the actual photo attachments.

For example, your data model:

schema.xml
<model name="photo" label="Photo">
    <field name="name" label="Name" type="text:name" />
    <field name="photo" label="Photo" type="photo" />

    <belongs-to model="user" name="user" />
    <display>{name}</display>
</model>

And your data rules:

data_rules.xml
<bucket via="self">
    <has-many name="photos" />
</bucket>

This would sync all photo objects with photo file references, but not the actual photo files. Those would only get “synced” once you try to use them in the app.

How can I debug data rules?

await DB.user.all().count(); ​–> This should return only users where archived != true

await OnlineDB.user.where(archived != ?, true).count(); ​–> this will return the count that you are expecting

If those counts don’t look correct, we suggest diving into the sync rules definitions to ensure that the user object (using the above example) is not synced in an additional bucket without the archiving condition rule in place. We also suggest checking that your current user role and/or permissions are set up correctly with the data rules you are testing.

For read/write access ACLs we suggest testing OnlineDB calls specifically. For example, if your user model has a read="offline" data rule, you should not be able to query the user model using OnlineDB:

await DB.user.all().count(); –> This should return all users, since all users are being synced

await OnlineDB.user.all().count(); –> This should return no results, since OnlineDB access is disabled.

Attachments (, and ) are stored separately to the "standard" DB (where your app's data objects are stored), namely in an AttachmentStore. What is stored in the DB is a reference (an Attachment ID) to the entry in the AttachmentStore. A byproduct of the separate storage is that attachments are not synced automatically with the rest of the data. The reason is to limit unnecessary network traffic / data usage.

A good way to debug data rules is to open up the and run some tests on the object counts. For example, if you are archiving the user model and syncing all users except for the archived ones, you can compare the backend data browser count to what is returned in-app for:

Also see on what responses to expect when access is denied.

💻
❔
user
Oplog
Backend API
photos
signatures
files
sync rule reprocessing
this section
condition
debug console