FSM Case View Configuration
This reference is intended for administrators and developers who configure case form controls and task elements.
This topic includes the following sections:
Automatic Case Naming
The views/case/autoname configuration prepares the case title for automatic naming when the case model has an automatic-name mapping. On an editable form, selecting a Field Service Case Type prevents manual name entry and supplies the temporary To Be Generated value. Clearing the type restores manual entry and the earlier name where available. Relevant noninteractive saves can also receive a temporary name.
The following table describes the hidden property for the Case naming component.
|
Property |
Accepted Value |
Standard Default |
Effect |
|---|---|---|---|
|
|
Boolean value. |
|
Turns off this configuration. |
The model controls the final naming template. Turning off this configuration doesn't turn off that model behavior. For automatic naming configuration, see FSM Record Model Configuration.
Complete Standard Object
This object shows the complete declared standard defaults.
{
"views/case/autoname": {
"hidden": false
}
}
Generate Invoice Button
The views/case/invoice configuration adds the Generate Invoice button in case view mode when the case has a Field Service Case Type and the invoice verification finds billable lines. The button confirms the operation, invokes the case invoice action, and opens the resulting invoice. The following table lists the button properties, accepted values, standard defaults, and effects.
|
Property |
Accepted Value |
Standard Default |
Effect |
|---|---|---|---|
|
|
Boolean. |
|
Prevents the button from appearing when |
|
|
Page-button ID string. |
|
Identifies the button. |
|
|
Text or translation identifier. |
Translated Generate Invoice label. |
Sets the button text. |
|
|
Text or translation identifier. |
Translated confirmation to generate the Invoice. |
Sets the confirmation message. |
|
|
Text or translation identifier. |
Translated Invoice successfully created message. |
Sets the successful-action message. |
|
|
Text or translation identifier. |
Translated generic operation error. |
Sets the failed-action message. |
These properties don't change which time, expenses, or sales order lines are billable. The case invoice action and billing rules determine that eligibility. For billing eligibility and Case invoice action configuration, see Configuring FSM Billing Rules and FSM Record Model Configuration. Hiding the button doesn't prevent invoicing through other paths.
Complete Standard Object
This object shows the complete declared standard defaults.
{
"views/case/invoice": {
"hidden": false,
"name": "custpage_nx_invoice",
"label": "custcollection_fsm.bill_case_generateinvoice_button_label",
"confirm": "custcollection_fsm.bill_case_generateinvoice_confirm_message",
"success": "custcollection_fsm.bill_case_generateinvoice_success_message",
"error": "custcollection_fsm.error_generic_error_message"
}
}
Project Selection on Case Forms
The views/case/projects configuration adds a Project selector on editable case forms. The standard view requires the asset field to be visible. It replaces the case company selector and preserves whether that field is required.
The following table lists the Project selector's properties, accepted values, standard defaults, and effects.
|
Property |
Accepted Value |
Standard Default |
Effect |
|---|---|---|---|
|
|
Boolean. |
|
Turns off the selector, synchronization, and handling of requests to create projects. |
|
|
Page-field ID string. |
|
Identifies the selector. |
|
|
Text or translation identifier. |
Translated Project label. |
Sets its label. |
|
|
Array of record field IDs. |
|
All listed fields must be visible to add the selector. |
|
|
Array of record field IDs. |
|
Changes to these fields refresh the choices. Choices are cleared until all listed fields have values. |
|
|
Resolvable option definition. |
Combined active projects and types for creating projects. The option definitions follow this table. |
Supplies the selector's options. |
The options property uses array: true to combine two searches. The following table describes their eligibility conditions and required option mappings.
|
Search |
Standard Eligibility |
Required Option Map |
|---|---|---|
|
|
Active |
|
|
|
Active |
The |
The template context is supportcase. Preserve the distinction between an existing numeric project ID and a type-... option for creating a project. A truthy selected map value can request automatic selection. For search filters, formulas, and result mapping, see FSM Searches and Field Mapping.
An existing Project is retained during initialization when it is absent from an otherwise populated option list. Selecting an existing project updates the Case company value. Selecting a type for creating a project requests creation after the case is saved, using the case's customer, asset, contact, time zone, and start information. Background processing creates the project and links it to the case. Saving the case alone doesn't confirm that creation succeeded. Preserve the Asset and date dependencies when replacing showFields, refreshFields, or search filters.
Complete Standard Object with Dynamic Values
This example shows the complete declared standard defaults and retains expressions for dynamic values.
{
"views/case/projects": {
hidden: false,
name: "custpage_nx_active_projects",
label: "custcollection_fsm.workorder_case_active_project_label",
company: "company",
showFields: ["custevent_nx_case_asset"],
refreshFields: ["custevent_nx_case_asset", "startdate", "starttime"],
options: {
array: true,
active: {
record: "job",
filters: [
["custentity_nx_asset", "anyof", "${ supportcase.asset }"],
"and",
[
["startdate", "isempty", ""],
"or",
[
"formulatext:case when from_tz(cast({startdate} as timestamp), case when {custentity_nx_time_zone.custrecord_nx_time_zone_olson} like '%/%' then {custentity_nx_time_zone.custrecord_nx_time_zone_olson} else SESSIONTIMEZONE end) <= timestamp '${ supportcase.starttimestamp }' then 'T' else 'F' end",
"is",
"T",
],
],
"and",
[
["enddate", "isempty", ""],
"or",
[
"formulatext:case when from_tz(cast(({enddate} + 1) as timestamp), case when {custentity_nx_time_zone.custrecord_nx_time_zone_olson} like '%/%' then {custentity_nx_time_zone.custrecord_nx_time_zone_olson} else SESSIONTIMEZONE end) > timestamp '${ supportcase.starttimestamp }' then 'T' else 'F' end",
"is",
"T",
],
],
"and",
["isinactive", "is", "F"],
],
map: {
id: "internalid",
label: "formulatext:{custentity_nx_project_type}||nvl2({startdate},' : '||{startdate},'')||nvl2({enddate},' - '||{enddate},'')||nvl2({custentity_nx_time_zone}, ' ' || {custentity_nx_time_zone.custrecord_nx_time_zone_abbreviation},'')",
selected: "formulatext:''",
},
},
types: {
record: "customrecord_nx_project_type",
filters: [["isinactive", "is", "F"], "and", ["internalid", "noneof", [0, ...getProgramProjectTypes(state)]]],
map: {
id: "formulatext:'type-'||{Internalid}",
label: "formulatext: '- custcollection_fsm.label_new_affix_name : '||{Name}||' -' ",
selected: "formulatext:''",
},
},
},
optgroup: [],
schedule: {
title: "Case ${ supportcase.id } New Project",
deployment: "case_${ supportcase.id }_np",
callback: "views/case/projects/scheduled",
arguments: { case: "${ supportcase.id }", type: "${ type }" },
priority: 1,
},
}
}
The Project-type exclusion uses the configured Program Project types. The company, optgroup, and schedule properties are shown to complete the standard object and are not additional supported settings.
Case Service Report Button
The views/case/servicereport view adds the Case Service Report button in view mode when the Case has a Field Service Case Type and its stage is Closed. The standard button selects servicereport from notification.caseEmail, opens the report preview, and asks for confirmation before requesting email.
For this view's hidden, name, label, notification, send, success, error, and delay properties, see Configuring FSM Service Report Buttons. That section also explains preview-only configuration and the relationship between the button, report attachment, and notification. Hiding this button doesn't turn off automatic notification rules.
Complete Standard Object
This object shows the complete set of declared standard defaults.
{
"views/case/servicereport": {
"hidden": false,
"name": "custpage_nx_servicereport",
"label": "custcollection_fsm.report_case_servicereport_button_label",
"notification": "servicereport",
"send": "custcollection_fsm.report_case_servicereport_confirm_message",
"success": "custcollection_fsm.report_case_servicereport_successs_message",
"error": "custcollection_fsm.error_generic_error_message",
"delay": 1000
}
}
Add Tasks Tab and Staging List
The views/case/tasks configuration adds the Add Tasks tab and staging list to editable case forms when the configured CRM tab is available. Select task details, add rows to the list, and save the case to request task creation.
The following table lists the configuration properties, accepted values, standard defaults, and effects.
|
Property |
Accepted Value |
Standard Default |
Effect |
|---|---|---|---|
|
|
Boolean value. |
|
Turns off the tab, staging controls, validation, and submitted task creation request. |
|
|
NetSuite form-element definitions with the keys listed in the following element table. |
Add Tasks controls and Tasks list. |
Controls the form presentation and staged values. |
|
|
Resolvable option definition. |
Skill search that excludes inactive records, plus a None choice. |
Supplies the Skills selector. |
|
|
Resolvable option definition. |
Field Service Task Type search that excludes inactive records, plus an empty choice. |
Supplies both Type selectors. |
|
|
Resolvable option definition. |
Active employees with an FSM region, restricted by the user's subsidiary view when subsidiaries are enabled, plus an empty choice. |
Supplies Assigned choices. |
|
|
Text template or translation identifier. |
Translated |
Shows the count of assignee choices after skill filtering. |
Case Task Elements
The root tab's standard ID is custpage_nx_tasks, and the CRM tab setting supplies its parent. Child IDs and field mappings are generated from the element keys and parent relationships. Standard labels are translated. The following table lists the case task elements and standard settings.
|
|
Standard Type and Parent |
Standard Label or Role |
Other Standard Settings |
|---|---|---|---|
|
|
|
Add Tasks. |
|
|
|
|
Tasks. |
Holds staged task rows. |
|
|
|
Internal assignee cache. |
|
|
|
|
Type. |
Task model default type. |
|
|
|
Assigned. |
Task model default assignee. |
|
|
|
Field Service start-date label. |
|
|
|
|
Field Service end-date label. |
|
|
|
|
Start. |
Task model default start time. |
|
|
|
End. |
Task model default end time. |
|
|
|
Confirmed Booking. |
Task model default booking flag. |
|
|
|
Skills. |
|
|
|
|
Message. |
|
|
|
|
Add. |
Adds staging rows. |
|
|
|
Remove All. |
Clears staging rows. |
|
|
|
Type. |
|
|
|
|
Assigned. |
|
|
|
|
Date. |
|
|
|
|
Start. |
|
|
|
|
End. |
|
|
|
|
Confirmed Booking. |
Stores the staged flag. |
|
|
|
Message. |
Stores staged text. |
|
|
|
Skill. |
|
The standard Task model supplies 09:00 and 17:00 for start and end times, formatted for the form. It doesn't supply a standard type, assignee, or booking value. Model overrides can supply those defaults. For Task model defaults, see FSM Record Model Configuration.
Case Task Option Definitions and Processing
Each definition uses array: true and retains an initial empty or None choice. The skills.task definition searches active customrecord_nx_skill records. The types.task definition searches active customrecord_nx_task_type records. Both maps return id: "internalid" and label: "name". The assignees.employee definition returns id: "internalid", a sorted employee-name formula for label, and skill: "custentity_nx_skill[]". Its template context includes user, including user.view for the subsidiary restriction.
The client retains the Employee list and filters it to employees who have every selected Skill. Preserve the skill array map and empty choices when customizing these searches. The displayed count is not an availability or overlap check.
Add creates one staged task for each day in the selected date range, including the start and end dates. If no end date is specified, Add uses the start date. Required values and time order are checked before staging. Saving the case submits the rows with the Case link and time zone for background creation. Confirm that the resulting Tasks exist after processing. This list doesn't automatically resolve resource overlaps or guarantee that a selected employee is free.
For example, this fragment changes the tab label and retains its structure and processing:
{
"views/case/tasks": {
"el": {
"tab": {
"label": "Additional Visits"
}
}
}
}
Complete Standard Object with Dynamic Values
This object shows the complete declared standard defaults and retains expressions for dynamic values.
{
"views/case/tasks": {
hidden: false,
el: {
tab: {
type: "subtab",
label: "custcollection_fsm.workorder_case_addtasks_subtab_label",
parent: getFormCrmTab(state),
name: "custpage_nx_tasks",
},
list: { type: "inlineeditor", label: "custcollection_fsm.workorder_case_addtasks_taskslist_label", parent: "tab" },
assignees: { type: "longtext", display: "hidden", parent: "tab" },
addtype: {
type: "select",
label: "custcollection_fsm.workorder_case_addtasks_type_label",
parent: "tab",
value: Task.prototype.defaults.type,
layout: "midrow",
width: 180,
},
addassigned: {
type: "select",
label: "custcollection_fsm.workorder_case_addtasks_assigned_label",
parent: "tab",
value: Task.prototype.defaults.assigned,
layout: "midrow",
width: 180,
},
adddate: {
type: "date",
label: "custcollection_fsm.custevent_nx_start_date_shortname",
parent: "tab",
layout: "midrow",
},
adddue: {
type: "date",
label: "custcollection_fsm.custevent_nx_end_date_shortname",
parent: "tab",
layout: "midrow",
},
addstart: {
type: "timeofday",
label: "custcollection_fsm.workorder_case_addtasks_start_label",
parent: "tab",
value: Task.prototype.defaults.starttimetz,
layout: "midrow",
width: 7,
},
addend: {
type: "timeofday",
label: "custcollection_fsm.workorder_case_addtasks_end_label",
parent: "tab",
value: Task.prototype.defaults.endtimetz,
layout: "midrow",
width: 7,
},
addbooking: {
type: "checkbox",
label: "custcollection_fsm.custevent_nx_task_booking_confirmed_shortname",
parent: "tab",
value: Task.prototype.defaults.booking,
layout: "midrow",
},
addskill: {
type: "multiselect",
label: "custcollection_fsm.workorder_case_addtasks_skills_label",
parent: "tab",
map: "[]",
layout: "startrow",
break: "startrow",
width: 370,
height: 3,
},
addmessage: {
type: "textarea",
label: "custcollection_fsm.workorder_case_addtasks_message_label",
parent: "tab",
layout: "midrow",
width: 50,
height: 6,
},
add: { type: "button", label: "custcollection_fsm.workorder_case_addtasks_addbutton_label", parent: "list" },
reset: { type: "button", label: "custcollection_fsm.workorder_case_addtasks_removeallbutton_label", parent: "list" },
type: {
type: "select",
label: "custcollection_fsm.workorder_case_addtasks_type_label",
parent: "list",
required: true,
},
assigned: {
type: "select",
label: "custcollection_fsm.workorder_case_addtasks_assigned_label",
parent: "list",
required: false,
},
date: {
type: "date",
label: "custcollection_fsm.workorder_case_addtasks_date_label",
parent: "list",
required: true,
},
start: {
type: "timeofday",
label: "custcollection_fsm.workorder_case_addtasks_start_label",
parent: "list",
required: true,
},
end: {
type: "timeofday",
label: "custcollection_fsm.workorder_case_addtasks_end_label",
parent: "list",
required: true,
},
booking: {
type: "checkbox",
label: "custcollection_fsm.custevent_nx_task_booking_confirmed_shortname",
parent: "list",
},
message: { type: "text", label: "custcollection_fsm.workorder_case_addtasks_message_label", parent: "list" },
skill: {
type: "text",
label: "custcollection_fsm.workorder_case_addtasks_skill_label",
parent: "list",
map: "[]",
display: "hidden",
},
},
skills: {
array: true,
default: { label: "custcollection_fsm.workorder_case_addtasks_noneskill_option" },
task: {
record: "customrecord_nx_skill",
filters: ["isinactive", "is", "F"],
map: { id: "internalid", label: "name" },
},
},
types: {
array: true,
default: {},
task: {
record: "customrecord_nx_task_type",
filters: ["isinactive", "is", "F"],
map: { id: "internalid", label: "name" },
},
},
assignees: {
array: true,
default: {},
employee: {
record: "employee",
filters: [
["isinactive", "is", "F"],
"and",
["custentity_nx_region", "noneof", "@NONE@"],
].concat(
isSubsidiariesFeatureEnabled()
? [
"and",
[
"formulatext:case when '${ user.view }' = '0' or {subsidiary.id} in (${ user.view }) then 'T' else 'F' end",
"is",
"T",
],
]
: []
),
map: {
id: "internalid",
label: "<formulatext:nvl(trim(trim(trim({firstname})||' '||{middlename})||' '||{lastname}), {entityid})",
skill: "custentity_nx_skill[]",
},
},
},
available: "custcollection_fsm.workorder_case_addtasks_availableassignee_placeholder",
schedule: {
title: "Case ${ supportcase.id } Add Tasks",
deployment: "case_${ supportcase.id }_at",
callback: "views/case/tasks/scheduled",
yieldpriority: true,
priority: 2,
},
}
}
The parent tab is defined by form.tab.crm. The effective Task model defaults provide initial values, including account-formatted times. The Employee filter adds its subsidiary condition only when Subsidiaries is enabled. The schedule property records the background callback. Changing it is not a supported setup procedure.