First Class Modules

Work Orders

Tracks work requests through a secured lifecycle with number, customer, location, summary, priority, status, assignments, related records, and service evidence.

Runtime key
module.work-orders
Experience
Operational work
Security
Server-enforced

Use Work Orders when an app needs accountable operational work that can be created, prioritized, assigned, moved through approved states, and connected to customers or other records.

Note

The bundled renderer key is module.work-orders. First-class means BuildWithHQ supplies a native, typed, secured runtime experience inside normal app provisioning and the signed-in user's existing permissions.

What it does

Tracks work requests through a secured lifecycle with number, customer, location, summary, priority, status, assignments, related records, and service evidence.

Key capabilities

  • Search and filter work orders by text and status.
  • Create work with summary, description, priority, and optional customer context.
  • Move work through the supported status lifecycle with optimistic concurrency.
  • Assign team members, designate primary responsibility, and expose related-record counts.
  • Let the tenant choose whether Work Order payment collection is disabled, optional, required, manual, at creation, or required before completion.
  • Show secured payment history and queue idempotent charges against protected, consented payment methods without exposing card or provider secrets.

Common uses

  • Field service and maintenance dispatch.
  • Facilities, asset, repair, installation, or inspection follow-up.
  • Internal service requests and operational task queues that need a stronger lifecycle than a simple task.

How it connects

Work Orders compose naturally with Contacts, Calendar, Files, Conversations, Notifications, Record Relations, Record Activity, and the shared tenant payment ledger. Charges remain linked payment records rather than columns or raw processor data copied into Work Orders.

Where applicable, its records use the universal RecordId conventions so they can participate in secured relationships, activity history, favorites, dynamic fields, notifications, Inbox attention, and global search without copying the source record.

Security and data boundary

The service limits rows by SaaS app, tenant, DataRole, and location and separately checks create, transition, assignment, and payment authority. The account owner manages payment policy and external connector references. Collection requires the existing CanBillRecords capability plus edit and record scope; customer and assignee identifiers are query/action targets, not proof of access.

  • The authenticated service derives the SaaS app, tenant account, user, DataRole, and location scope; browser identifiers are never authorization proof.
  • The page editor composes React components with validated data bindings. Those bindings call typed runtime APIs, whose application services execute reviewed stored procedures.
  • List, search, detail, relation, activity, favorite, and write operations reapply their required server-side permissions.

Add it to an app

  1. Open the SaaS app in the Developer Console and identify the user journey and page where this module belongs.
  2. Add the validated module.work-orders module block through the supported page/template authoring flow.
  3. Configure the module with the page editor's React components and validated data bindings; the bindings call authenticated platform APIs backed by reviewed stored procedures.
  4. Place the page in the correct user-type menus and assign existing DataRole, record, field, and location permissions.
  5. Test list, detail, search, empty, denied, stale-update, and cross-location behavior before publishing an exact version.
Tip

Start with the smallest useful status model and explicit transition rules. Add industry-specific fields as secured dynamic fields instead of forking the native lifecycle.

Important

A renderer being bundled in the tenant application does not make its data visible in every app. The server returns only components and records authorized for the current app and signed-in user; unavailable or unauthorized blocks fail closed.