Skip to content

Processes (Cases)

Verified against source (7)

  • process/Process.cs
  • process/Process.Fields.cs
  • process/ProcessTemplate.cs
  • process/ProcessTemplate.Fields.cs
  • Config/Process.config
  • Config/ProcessTemplate.config
  • Properties/Settings.settings

Processes (cases) are Process records. Operations follow the standard route pattern:

  • /api/process/{operation} runs synchronously on the web server.
  • /api/process/queue/{operation} queues the operation for an app server. Use it for bulk work such as ensurechildren across many processes.
Type Purpose
ProcessObject A process. Extends GenericObject, so it binds to a parent through Object / ObjectID.
ProcessTemplateObject Implements ITemplate. AppliesTo maps to ParentObject; Repeatable is always Many; ExtranetEnabled is always Family.
ContractObject / ContractProductObject A client–vendor agreement (ClientID, VendorID, Effective, Expires) and the process templates it covers (ProcessTemplateID).
Field Notes
Process Label. Defaults to the template name.
ProcessTemplateID The process template.
Object, ObjectID Parent record. Object defaults to the template’s ParentObject.
Status, ProcessType, Priority Standard status, type, and priority.
DateOpened, OpenedReason, DateClosed, ClosedReason, DateDue Lifecycle.
AssignedPersonID, AssignedOrganizationID Responsibility.
VendorID, VendorPersonID, ClientID, ClientPersonID Parties. Each grants row-level access to the process.
CurrentDecisionID The workflow launched on insert.
CostLedgerID The cost ledger created on insert.
Sibling, SiblingID Set when a process is stored through an extended (sibling) table that adds type-specific columns.
POST /api/process/save
?Template=Vendor Onboarding
&Object=Organization
&ObjectID=42
&AssignedPersonID=7
&Output=Xml

Template (or ProcessTemplateID) is resolved by name, scoped to templates whose ParentObject matches Object. Because process templates are always Many, every save without an ID inserts a new process. You can create the parent in the same call using {Object}_ prefixed parameters; see Templates.

On insert, QBO runs EnsureChildren:

  1. Workflow. If the template has a DecisionMatrixID whose matrix has a DecisionTemplate output, the matrix is evaluated against the process and the returned name is resolved to a workflow template. Otherwise DecisionTemplateID is used. The new workflow gets ActualStart = DateOpened, the process’s AssignedPersonID, and the process as its parent; it’s saved as CurrentDecisionID.
  2. Ledger. The same pattern, using LedgerMatrixID (output LedgerTemplate, returning a ledger template ID) or CostTemplateID. Saved as CostLedgerID.

Pass AttachmentIDs (a comma-separated list) on insert to re-bind existing documents to the new process.

Setting Default Effect
AutoSelectOrganization true If AssignedOrganizationID is empty and the template’s OrganizationCollectionID yields exactly one organization the user can access, assign it.
AutoSelectTemplate true For a sibling table with exactly one process template, set ProcessTemplateID automatically.
AutoLabelSyncWithSibling true Keeps Process.Process in sync with the sibling table’s label column.
POST /api/process/ensurechildren?ID=101,102,103

Creates a workflow and ledger for each process that doesn’t have them yet. Use /api/process/queue/ensurechildren for large ID lists.

POST /api/process/restart?ID=101&ActualStart=2026-10-05&BodyText=Client resubmitted the application

ID, ActualStart, and BodyText are required. QBO cancels the current workflow, starts a new one from the template (or matrix) with ActualStart as its start date, and records a message with BodyText. The call fails with a rule error if the current workflow has an open hold. To restart a workflow from a specific step instead, use the workflow’s own restart; see Workflow.

Closing is a save:

POST /api/process/save?ID=101&DateClosed=2026-10-05&ClosedReason=Completed&Status=Complete

On update, the template’s closing rules run:

Template field Effect
OnCloseRequireFinalStatus Throws a rule error before the update if DateClosed is set and Status isn’t a final status.
OnFinalStatusAutoClose Sets DateClosed when Status is final.
OnCloseCancelDecisions 0 none; 1 cancel the current workflow; 2 also cancel every other open workflow on the process.
OnCloseChildrenClose / OnFinalStatusChildrenClose Runs the CancelWorklistMembers statement: cancels open worklist items for tasks on the process.
GET /api/process/search?ProcessTemplateID=5&Output=Json

Results honor row-level security: partner users see processes they created or that grant them access through the six assignment fields.