A customer-reported issue or request tracked through an 11-state lifecycle (New, Assigned, In Progress, On Hold, Waiting on Customer, Waiting on Third Party, Escalated, Resolved, Closed, Reopened, Cancelled). Status-transition legality is NOT hardcoded: it is enforced by seeded, admin-editable Business Rules (OnPhaseTransition + BlockSave). The handler enforces field requirements (resolutionSummary to resolve, closeReason to close), stamps lifecycle dates, and writes status/assignment changes as system Activities so the timeline is the single chronological stream. On create it applies the matching SLAPolicy (child CaseMilestone timers, CaseSLAEvent audit rows) and records an acknowledgement email activity. Server actions cover close/reopen/escalate, Omni-Channel routing to a Queue, SLA pause/resume, merge/duplicate, and conversion to Lead or Opportunity.
Fields
| Field | Label | Type | Required | What it does |
|---|---|---|---|---|
AccountId | Account | Lookup → Account | ||
AccountName | Account Name | Text | ||
AssetId | Asset | Lookup → Asset | ||
AssignedToId | Assigned To | Lookup → UserAccount | The working owner of the case (the agent handling it) - distinct from the base OwnerId record owner. Assignment changes are recorded on the case timeline; Omni-Channel routing sets it via the routed ResourceWork. | |
BranchId | Branch | Lookup → Branch | ||
BusinessHoursId | Business Hour | Lookup → BusinessHours | ||
CaseNumber | Case Number | Text, unique | Human-facing case number, assigned on create from the platform document number (falls back to a deterministic id-based CASE-XXXXXXXX). Distinct from Name only in intent; the handler reuses Name when present. | |
CaseReason | Case Reason | PickList | Values: Installation, Equipment Complexity, Performance, Equipment Design, Feedback. | |
CaseSource | Case Source | PickList | Values: Voice / Call, Email. | |
Category | Category | PickList | Values: Service, Refund, Safety, Billing. | |
ClosedWhenCreated | Closed When Created | Boolean | Yes | Create-closed shortcut for one-touch resolutions logged after the fact: when true on insert, the handler sets Status to Closed and stamps DateTimeClosed immediately. |
CloseReason | Close Reason | PickList | Values: Resolved, Duplicate, No Response from Customer, Not Reproducible, Works as Designed, Cancelled. | |
ConfigurationItemId | Configuration Item | Lookup | ||
ContactEmail | Contact Email | Text | ||
ContactId | Contact | Lookup → Contact | ||
ContactName | Contact Name | Text | ||
ContactNumber | Contact Number | Text | ||
CreatedById | Created By | Lookup → UserAccount | Yes | |
CreatedDateTime | Created Date | DateAndTime | Yes | |
CsatScore | CSAT Score | Number | ||
CustomerTier | Customer Tier | PickList | Values: Platinum, Gold, Silver, Bronze. | |
DateTimeClosed | Date/Time Closed | DateAndTime | ||
DateTimeOpened | Date/Time Opened | DateAndTime | ||
Description | Description | LongMultiLineText | ||
DocumentDate | Document Date | DateAndTime | ||
EntitlementId | Leave Entitlement | Lookup → LeaveEntitlement | ||
Escalated | Escalated | Boolean | Yes | |
FirstResponseDate | First Response Date | DateAndTime | ||
FirstResponseDue | First Response Due | DateAndTime | ||
Id | Id | Guid | Yes | |
MasterCaseId | Master Case | Lookup → Case | Set by the Merge server action on the losing duplicate: points at the surviving master case. Cases with MasterCaseId set are merged-away records; the master lists them via the FindMerged action. | |
Mobile | Mobile | Text | ||
ModifiedById | Modified By | Lookup → UserAccount | Yes | |
Name | Name | Text | Yes | |
OriginCaseId | Origin Case | Lookup → Case | ||
OwnerId | Owner | Lookup → UserAccount | Yes | |
ParentCaseId | Parent Case | Lookup | ||
PartnerAccountId | Partner Account | Lookup → Account | ||
PerformCreateLead | Perform Create Lead | Boolean | Yes | |
PerformCreateOpportunity | Perform Create Opportunity | Boolean | Yes | |
Phone | Phone | Text | ||
Priority | Priority | PickList | Values: High, Medium, Low. | |
ProductId | Product | Lookup | ||
QueueId | Queue | Lookup → Queue | The Omni-Channel Queue the case routes through. The RouteCase action requires this (or an explicit queueId/resourceId argument) and hands the case to the routing service, which picks an agent per the queue's RoutingModel. | |
RecordTypeId | Record Type | Guid, hidden | ||
Remarks | Remarks | Text | ||
Reopened | Reopened | Boolean | Yes | |
ResolutionDate | Resolution Date | DateAndTime | ||
ResolutionDue | Resolution Due | DateAndTime | ||
ResolutionSummary | Resolution Summary | Text | ||
ResourceId | Resource | Lookup → Resource | ||
ServiceContractId | Service Contract | Lookup | ||
ServiceOrderId | Service Order | Lookup → ServiceOrder | ||
Severity | Severity | PickList | Values: Critical, High, Medium, Low. | |
SLAPolicyId | SLA Policy | Lookup → SLAPolicy | The SLAPolicy the engine matched and applied on create (highest-rank active policy whose MatchFormula is true). Drives FirstResponseDue/ResolutionDue and the CaseMilestone timers. | |
SlaStatus | SLA Status | PickList | Rollup of the SLA engine's view of the case (OnTrack / Warning / Breached / Met / Paused) for quick filtering and the console badge; the per-milestone truth lives in CaseMilestone rows. Values: OnTrack, Warning, Breached, Met, Paused. | |
Status | Status | PickList | 11-state lifecycle picklist: New, Assigned, In Progress, On Hold, Waiting on Customer, Waiting on Third Party, Escalated, Resolved, Closed, Reopened, Cancelled. Transition legality is enforced by seeded, admin-editable Business Rules (OnPhaseTransition + BlockSave), not hardcoded. Resolved requires ResolutionSummary; Closed requires CloseReason. Waiting-type statuses pause the SLA clock (configurable per SLAPolicy.PauseStatuses). Values: New, Assigned, In Progress, On Hold, Resolved, Closed, Reopened, Cancelled. | |
Stopped | Stopped | Boolean | Yes | True while the SLA clock is paused. Maintained by the handler from the status (pause statuses come from the matched SLAPolicy.PauseStatuses, defaulting to On Hold / Waiting on Customer / Waiting on Third Party) or explicitly via the PauseSla/ResumeSla actions. Read together with StoppedSince. |
StoppedSince | Stopped Since | DateAndTime | When the current SLA pause began; null while the clock runs. Paused time is added back to milestone targets on resume. | |
Subcategory | Subcategory | Text | ||
Subject | Subject | Text | ||
Type | Case Type | PickList | Values: Incident, Problem, Question, Task. | |
UIProps | UI Props | Text | ||
UpdatedDateTime | Modified Date | DateAndTime | Yes | |
WebCompany | Web Company | Text | ||
WebEmail | Web Email | Text | ||
WebName | Web Name | Text | ||
WebPhone | Web Phone | Text |
Actions
| Action | Label | Type | What it does |
|---|---|---|---|
AddTeamMember | Add Team Member | ServerAction (AddTeamMember) | Adds a collaborator to the case's working team via the shared CollaborationService - collaboration state, not ownership: AssignedToId/OwnerId are unchanged. |
BookAppointment | Book Appointment | ServerAction (ProductDemo) | Book Appointment |
BulkDelete | Delete | Delete | Delete the selected records. |
Clone | Clone | ServerAction (Clone) | Create a copy of this record |
CloseSideConversation | Close Side Conversation | ServerAction (CloseSideConversation) | Closes a side conversation on the case: requires args.sideConversationId and sets the conversation's status to Closed. Returns closed=false when the conversation does not exist. It does not touch the case itself or the conversation's messages. |
CloseWithReason | Close | ServerAction (CloseWithReason) | Closes the case: sets Status to Closed and stamps DateTimeClosed. Requires a close reason (closeReason argument or the field already set); an optional resolutionSummary argument is applied too. Returns the case id, status and close reason. |
ConvertToLead | Convert to Lead | ServerAction (ConvertToLead) | Creates a Lead from the case (carrying the case linkage via Lead.CaseId) and returns both ids. Used when a support interaction reveals new business. |
ConvertToOpportunity | Convert to Opportunity | ServerAction (ConvertToOpportunity) | Creates an Opportunity from the case, linked back via Opportunity.CaseId, and returns both ids. |
Delete | Delete | Delete | Delete |
DeleteInList | Delete | Delete | Delete in a list page |
Duplicate | Duplicate | ServerAction (Duplicate) | Creates a copy of this case via the generic record-merge engine; the copy records its source in OriginCaseId. Legacy alias: DuplicateCase. |
Edit | Edit | Edit | Edit |
EditEntity | Edit | Edit | EditEntity |
EditInLine | Edit | EditInline | Edit in page. |
EditInLineHeader | Edit | EditInline | EditInLineHeader |
EmailArticle | Email Article | ServerAction (EmailArticle), hidden | Emails a KnowledgeArticle to the case's customer contact via the shared IArticleEmailService (the same entity-agnostic handler works on any entity with the action registered). |
Escalate | Escalate | ServerAction (Escalate) | Sets Status to Escalated and the Escalated flag, optionally reassigning via an assignedToId argument. The escalation is recorded on the case timeline like any status change. |
FindDuplicates | Find Duplicates | ServerAction (FindDuplicates), hidden | Finds open records that may be duplicates of this case via the shared record-merge engine's duplicate detection - a read-only query action, typically run before Merge. |
FindMerged | Merged Records | ServerAction (FindMerged), hidden | Records that were merged into this record. |
Follow | Follow | ServerAction (Follow) | Subscribes the current user to change notifications for this case via the shared CollaborationService; Unfollow removes the subscription. |
Merge | Merge | ServerAction (Merge) | Merges duplicate cases into this surviving master via the generic record-merge engine (IRecordMergeService; case specifics in CaseMergeExtension). Losing duplicates get MasterCaseId pointed at the survivor. The legacy MergeCase name is an accepted alias. |
New | New | New | New |
PauseSla | Pause SLA | ServerAction (PauseSla) | Explicitly pauses the SLA clock: marks the case Stopped, stamps StoppedSince and logs a Paused CaseSLAEvent. Callable directly or from a macro step; pausing also happens automatically when Status enters a pause status. |
RemoveTeamMember | Remove Team Member | ServerAction (RemoveTeamMember) | Removes a collaborator from the case's working team (shared CollaborationService). |
Reopen | Reopen | ServerAction (Reopen) | Reopens a finished case: only Resolved, Closed or Cancelled cases qualify. Sets Status to Reopened, flags Reopened, and clears DateTimeClosed and ResolutionDate. |
ReplySideConversation | Reply Side Conversation | ServerAction (ReplySideConversation) | Adds a message to an existing side conversation on the case: requires args.sideConversationId (validation fails without it) and appends a SideConversationMessage with the given body, direction (default Outbound; outbound messages get sentOn stamped), toAddress and sentByUserId. Returns the new message id; a missing/deleted conversation returns a null messageId rather than failing. |
ResumeSla | Resume SLA | ServerAction (ResumeSla) | Resumes the SLA clock: clears Stopped/StoppedSince and logs a Resumed CaseSLAEvent. Milestone targets shift forward by the paused time. |
RouteCase | Route | ServerAction (RouteCase) | Routes the case through Omni-Channel: hands it to the routing service with the case's QueueId (or queueId/resourceId arguments - one of the three is required), the channel (argument or CaseSource) and an optional required skill. Creates a ResourceWork item and returns its id, status and the picked agent's resourceId; agent choice follows the queue's RoutingModel. |
RunMacro | Run Macro | ServerAction (RunMacro), hidden | Runs a Macro's steps against this case via the generic macro engine (IMacroRunner). Macro steps can include field updates and server-action calls such as PauseSla/ResumeSla. |
StartSideConversation | Start Side Conversation | ServerAction (StartSideConversation) | Opens a private side conversation on the case via the shared SideConversationService - a separate threaded exchange (e.g. with a third party) that does not sit in the customer-facing thread. |
Unfollow | Unfollow | ServerAction (Unfollow) | Stop following this case. |
Lookup filters
| Filter | Lookup field | Notes |
|---|---|---|
| AssetForAccount | AssetId | |
| Branch For Partner Account | BranchId | |
| Contact for Account | ContactId | |
| Partner Account Filter | PartnerAccountId | |
| Resource Filter | ResourceId |
Related entities
- Branch — looks up via
BranchId - BusinessHours — looks up via
BusinessHoursId - UserAccount — looks up via
OwnerId - Resource — looks up via
ResourceId - Account — looks up via
AccountId - Contact — looks up via
ContactId - Asset — looks up via
AssetId - ServiceOrder — looks up via
ServiceOrderId - LeaveEntitlement — looks up via
EntitlementId - UserAccount — looks up via
CreatedById - UserAccount — looks up via
ModifiedById - CaseMilestone — referenced by via
CaseId - Collaborator — referenced by via
CaseId - SideConversation — referenced by via
CaseId - Lead — referenced by via
CaseId - Opportunity — referenced by via
CaseId - Follower — referenced by via
CaseId
