FSM Case View Configuration

Note:

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

hidden

Boolean value.

false

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

hidden

Boolean.

false

Prevents the button from appearing when hidden is true.

name

Page-button ID string.

"custpage_nx_invoice"

Identifies the button.

label

Text or translation identifier.

Translated Generate Invoice label.

Sets the button text.

confirm

Text or translation identifier.

Translated confirmation to generate the Invoice.

Sets the confirmation message.

success

Text or translation identifier.

Translated Invoice successfully created message.

Sets the successful-action message.

error

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

hidden

Boolean.

false

Turns off the selector, synchronization, and handling of requests to create projects.

name

Page-field ID string.

"custpage_nx_active_projects"

Identifies the selector.

label

Text or translation identifier.

Translated Project label.

Sets its label.

showFields

Array of record field IDs.

["custevent_nx_case_asset"]

All listed fields must be visible to add the selector.

refreshFields

Array of record field IDs.

["custevent_nx_case_asset", "startdate", "starttime"]

Changes to these fields refresh the choices. Choices are cleared until all listed fields have values.

options

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 job records linked to the Case Asset. The start is empty or no later than the case start timestamp. The end is empty or includes the case start date. Comparisons account for the Project time zone.

id: "internalid". The label combines project type, dates, and time zone abbreviation. Use selected: "formulatext:''".

types

Active customrecord_nx_project_type records, excluding configured Program Project types.

The id uses formulatext:'type-'||{Internalid}. The label identifies a project to be created and its type. Use selected: "formulatext:''".

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

hidden

Boolean value.

false

Turns off the tab, staging controls, validation, and submitted task creation request.

el

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.

skills

Resolvable option definition.

Skill search that excludes inactive records, plus a None choice.

Supplies the Skills selector.

types

Resolvable option definition.

Field Service Task Type search that excludes inactive records, plus an empty choice.

Supplies both Type selectors.

assignees

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.

available

Text template or translation identifier.

Translated ${total} available… placeholder.

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.

el Key

Standard Type and Parent

Standard Label or Role

Other Standard Settings

tab

subtab; configured CRM tab.

Add Tasks.

name: "custpage_nx_tasks".

list

inlineeditor; tab.

Tasks.

Holds staged task rows.

assignees

longtext; tab.

Internal assignee cache.

display: "hidden". Preserve the assignee cache.

addtype

select; tab.

Type.

Task model default type. layout: "midrow", width: 180.

addassigned

select; tab.

Assigned.

Task model default assignee. layout: "midrow", width: 180.

adddate

date; tab.

Field Service start-date label.

layout: "midrow". Initially follows the Case start date.

adddue

date; tab.

Field Service end-date label.

layout: "midrow". End of the inclusive date range.

addstart

timeofday; tab.

Start.

Task model default start time. layout: "midrow", width: 7.

addend

timeofday; tab.

End.

Task model default end time. layout: "midrow", width: 7.

addbooking

checkbox; tab.

Confirmed Booking.

Task model default booking flag. layout: "midrow".

addskill

multiselect; tab.

Skills.

map: "[]", layout: "startrow", break: "startrow", width: 370, height: 3.

addmessage

textarea; tab.

Message.

layout: "midrow", width: 50, height: 6.

add

button; list.

Add.

Adds staging rows.

reset

button; list.

Remove All.

Clears staging rows.

type

select; list.

Type.

required: true.

assigned

select; list.

Assigned.

required: false.

date

date; list.

Date.

required: true.

start

timeofday; list.

Start.

required: true.

end

timeofday; list.

End.

required: true.

booking

checkbox; list.

Confirmed Booking.

Stores the staged flag.

message

text; list.

Message.

Stores staged text.

skill

text; list.

Skill.

map: "[]", display: "hidden". Stores selected Skill IDs.

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.

Additional Information

Related Topics

General Notices