Field Guide · Tricks · Presentation XML
UI tricks you never had to code.
36 changes to a Maximo screen that need no Java and no automation script — just the presentation XML, used the way IBM's own stock screens use it. Each one cites the stock screen and the registry property it rests on, names what to confirm on your instance, and applies to the playground with one click.
Show a related object's field without a new table
What you get. The asset's description appears as a read-only field on the main tab, next to the asset number.
Why it works. A dataattribute can walk a relationship: RELATIONSHIP.ATTRIBUTE reads an attribute of the related object through a MAXRELATIONSHIP defined on the main object. No Java, no new table, no join — the framework resolves it.
<textbox id="main_assetdesc" dataattribute="ASSET.DESCRIPTION" label="Asset description" inputmode="readonly"/>Verify on your instance: The relationship name must exist on the main object (Database Configuration → Relationships). ASSET exists on WORKORDER in stock MAS 9.2 (7,166 relationships); check yours.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · main_grid3_10 · descdataattribute="asset.description"; MAS 9.2 stock presentation RECHOVERS (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/rechovers) · RECHOVERS · rel_asset_rh_2 · dataattribute="MANUFACTURER.name"; MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.DATAATTRIBUTE
Hide a field from everyone except a security group
What you get. The priority field is bound to a signature option; only groups granted that option see it, and a condition can narrow it further.
Why it works. Any control can carry a sigoption. Application Designer creates the option in SIGOPTION for the app; Security Groups grants it, optionally under a condition from the Conditional Expression Manager. Presentation, not data security — the attribute stays reachable elsewhere.
<textbox id="main_priority" dataattribute="WOPRIORITY" sigoption="ZZ_PRIORITY"/>Verify on your instance: After import, grant the new option to the intended groups in Security Groups; until then the field is hidden for everyone.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · 1,230 elements carry sigoption across the stock screens; MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.SIGOPTION; MAS 9.2 stock presentation DESIGNER (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/designer) · DESIGNER · addmodsig · Add/Modify Signature Options
A hover window on a key field
What you get. Hovering the asset number pops up the asset's details (status, location, serial number) without leaving the work order.
Why it works. rechover on a text box or table column names a recordhover window defined in the RECHOVERS system library; the framework fills it from the related record. The stock product ships asset_recordhover, wo_recordhover and friends, and WOTRACK uses them on the List tab and the main tab.
<textbox id="main_assetnum" dataattribute="ASSETNUM" lookup="asset" rechover="asset_recordhover"/>Verify on your instance: The hover id must exist in your instance's RECHOVERS library (export System XML to list them); add rechoverattribute when the field is not the related record's key.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · results_showlist_tablebody_5 · rechover="asset_recordhover"; MAS 9.2 stock presentation RECHOVERS (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/rechovers) · RECHOVERS · asset_recordhover; MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.RECHOVER
Default a field on every new record
What you get. New work orders start with work type CM already filled in.
Why it works. A defaultvalue control under the presentation's data source sets the attribute when a record is created through this app. It is application scope: the same object created from another app or the API is untouched.
<defaultvalue id="wo_default_worktype" dataattribute="WORKTYPE" value="CM"/>Verify on your instance: Default values apply to records created in this application only; a query-type default (defaulttype="query") filters the List tab instead.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · <defaultvalue> under the main data source; MAS 9.2 data dictionary — Application Designer registry object CTRL_DEFAULT (lab://maximo/9.2/db/object/ctrl_default) · CTRL_DEFAULT.DEFAULTTYPE
Add a sortable, filterable column to the List tab
What you get. The List tab gains a Reported By column users can sort and filter without leaving the list.
Why it works. A tablecol inside the list table's tablebody binds a column to an attribute; sortable and filterable turn on the header controls. The List tab is the same table control as any other.
<tablecol id="results_reportedby" dataattribute="REPORTEDBY" sortable="true" filterable="true"/>Verify on your instance: Wide list tables slow the list query; keep new columns to attributes users actually filter on.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · results_showlist_tablebody · sortable and filterable columns; MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLECOLUMN (lab://maximo/9.2/db/object/ctrl_tablecolumn) · CTRL_TABLECOLUMN.SORTABLE
Turn a key field into a Go To link
What you get. The asset number on the main tab opens the Assets application on that asset from its detail menu.
Why it works. menutype names a menu from menus.xml that becomes the field's detail menu; applink lists the applications offered as Go To targets. The framework carries the key value across.
<textbox id="main_assetnum" dataattribute="ASSETNUM" lookup="asset" menutype="NORMAL" applink="ASSET"/>Verify on your instance: The target app must be granted to the user; menus.xml on your release defines the menu ids you can name.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · main_grid3_10 · applink="asset,ipc" menutype="assetmain"; MAS 9.2 stock presentation MENUS (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/menus) · MENUS · menu ids a menutype can name; MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.APPLINK
Reuse a shared layout with include
What you get. A standard work log table appears on the tab, defined once in library.xml.
Why it works. include pulls a control by id from library.xml into this presentation. The header, footer and common dialogs already arrive this way; your own shared sections can too.
<include id="main_worklog" controltobeincluded="comlog"/>Verify on your instance: The id must exist in your release's library.xml (export System XML to see it); a missing id renders nothing.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · 462 includes across the stock screens; MAS 9.2 stock presentation LIBRARY (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/library) · LIBRARY · the shared controls an include names; MAS 9.2 data dictionary — Application Designer registry object CTRL_INCLUDE (lab://maximo/9.2/db/object/ctrl_include) · CTRL_INCLUDE.CONTROLTOBEINCLUDED
A button that opens a custom dialog
What you get. A "Quick note" button on the main tab opens a small dialog with a memo field and OK / Cancel.
Why it works. A pushbutton's mxevent names the dialog id to open; the dialog is a sibling of the page and is bound to the same object, so the memo edits the current record. dialogok and dialogcancel are the framework events that commit or discard.
<buttongroup id="main_quicknote_bg"><pushbutton id="main_quicknote_btn" label="Quick note" mxevent="zz_quicknote"/></buttongroup>
<dialog id="zz_quicknote" label="Quick note"> … </dialog>Verify on your instance: Bind the dialog to a relationship or the main object deliberately; a dialog with no mboname edits whatever the current data source is.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · 2,882 dialogs and 7,856 pushbuttons across the stock screens; MAS 9.2 data dictionary — Application Designer registry object CTRL_PUSHBUTTON (lab://maximo/9.2/db/object/ctrl_pushbutton) · CTRL_PUSHBUTTON.MXEVENT; MAS 9.2 data dictionary — Application Designer registry object CTRL_DIALOG (lab://maximo/9.2/db/object/ctrl_dialog) · CTRL_DIALOG.MBONAME
Widen a multipart text box's description
What you get. The description half of the key field stops truncating long descriptions.
Why it works. size sets the visible character width of the first part; the description part follows the section's widest field. IBM's support note and practitioners agree the description width is set on the control, not the attribute.
<multiparttextbox id="main_wonum" dataattribute="WONUM" descdataattribute="DESCRIPTION" size="20" descsize="60"/>Verify on your instance: Carbon-era screens size fields from the widest field in the section; check the result on your release, not only in the schematic.
Sources: IBM Support — MULTIPARTTEXTBOX in Application Designer; Bruno Portaluri — Adjust field size in application
Split a section into two columns
What you get. A tall single-column section becomes two side-by-side columns.
Why it works. sectionrow and sectioncol are the only layout controls: a row holds columns, each column holds a section of fields. Everything else is relative — the section sizes itself to its widest field.
<section id="s"><sectionrow id="s_row"><sectioncol id="s_c1"><section id="s_c1_s">…</section></sectioncol><sectioncol id="s_c2"><section id="s_c2_s">…</section></sectioncol></sectionrow></section>Verify on your instance: Tab order runs top to bottom then left to right; check data-entry flow after splitting.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · main_grid21 · sectionrow / sectioncol; MAS 9.2 data dictionary — Application Designer registry object CTRL_SECTION (lab://maximo/9.2/db/object/ctrl_section) · CTRL_SECTION.USEPROPORTIONALCOLS
Row details under a table
What you get. Each task row expands to show its long description without leaving the table.
Why it works. tabledetails inside a table holds controls bound to the selected row; the framework renders it under the row (9.1+) or below the table (earlier), with a toggle in the first column.
<tabledetails id="tasks_details"><section id="tasks_details_sec"><multilinetextbox id="tasks_details_ld" dataattribute="DESCRIPTION_LONGDESCRIPTION" rows="3"/></section></tabledetails>Verify on your instance: Where the details land (under the row or below the table) depends on release; the skin switch shows both.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · 1,236 tabledetails across the stock screens; MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLE (lab://maximo/9.2/db/object/ctrl_table) · CTRL_TABLE.ROWDETAILSEXPANDED; Maximo Secrets — Maximo User Interface 9.1
A New Row button on a child table
What you get. Users add a task line in place instead of leaving the tab.
Why it works. A buttongroup on the table with a pushbutton whose mxevent is addrow tells the table's bean to insert a row on the relationship. Where the button sits (below or above the table) is the release's choice, not the XML's.
<buttongroup id="tasks_bg"><pushbutton id="tasks_new" label="New Row" mxevent="addrow"/></buttongroup>Verify on your instance: The relationship must allow inserts and the user must hold the option; otherwise the row appears and the save fails.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · plans_task_table · buttongroup with mxevent="addrow"; MAS 9.2 data dictionary — Application Designer registry object CTRL_PUSHBUTTON (lab://maximo/9.2/db/object/ctrl_pushbutton) · CTRL_PUSHBUTTON.MXEVENT
Filter the List tab by default
What you get. The List tab opens showing only active records, without the user filtering.
Why it works. A defaultvalue with defaulttype="query" on the list table seeds the query instead of the record: it is a filter users can clear, not a data restriction.
<defaultvalue id="results_showlist_status" dataattribute="STATUS" value="!=CLOSE" defaulttype="query"/>Verify on your instance: Query defaults are visible in the filter row and can be removed by the user; use a data restriction for anything that must hold.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · defaultvalue with defaulttype="query"; MAS 9.2 data dictionary — Application Designer registry object CTRL_DEFAULT (lab://maximo/9.2/db/object/ctrl_default) · CTRL_DEFAULT.DEFAULTTYPE
Priority 1 and 2 shown in red on the List tab
What you get. On the List tab, the Priority column turns red for work orders whose priority is 1 or 2; everything else stays as it was.
Why it works. A column is a control with an id, and any control can carry conditional properties: a condition from the Conditional Expression Manager, a security group, and the property to override when the condition is true. IBM's own stock rows use the same mechanism to switch display, visible, disabled, label and inputmode. txtred is the class the stock MPMAN screen writes on a statictext. The XML only needs the column to exist and to have a stable id; the rule and the colour live in the CTRLCONDITION tables and are exported with the app by Migration Manager.
<tablecol id="results_wopriority" dataattribute="WOPRIORITY" sortable="true" filterable="true"/>
<!-- then: condition ZZ_HIPRI = :wopriority in (1,2); property cssclass = txtred when true -->Verify on your instance: txtred is a class in the stock skin CSS; on MAS it renders red text. IBM's stock rows don't override cssclass themselves, so test the override on your instance before rolling it out. A class of your own needs a skin CSS override, which IBM does not support on MAS. Column ids must not change once conditions are attached to them — the condition is keyed by id.
Sources: MAS 9.2 system table CTRLCONDPROP, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/ctrlcondprop) · stock overrides of display (40 rows), visible (16), disabled (6), label (6) and inputmode (2); MAS 9.2 stock presentation MPMAN (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/mpman) · MPMAN · cssclass="txtred" on a statictext (the class exists in the stock skin); MAS 9.2 data dictionary — WORKORDER.WOPRIORITY (INTEGER, "Priority") (lab://maximo/9.2/db/object/workorder) · WORKORDER.WOPRIORITY (INTEGER, "Priority"); MAS 9.2 system table CONDITION, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/condition) · :personid = :&PERSONID& — bind variables in stock conditions
Priority field and its label in red on the record
What you get. On the main tab, the Priority value and its label turn red when the priority is 1 or 2.
Why it works. Same mechanism as the List tab, applied to the textbox: two property overrides on one condition — cssclass for the value, labelcss for the label. A conditional property can override any property the control carries; IBM's stock rows override display, visible, disabled, label and inputmode the same way.
<textbox id="main_wopriority" dataattribute="WOPRIORITY" lookup="valuelist"/>
<!-- then: condition ZZ_HIPRI; cssclass = txtred and labelcss = txtred when true -->Verify on your instance: If the Priority field is a read-only calculated value on your screen (CALCPRIORITY), attach the condition to that control instead; the expression still reads :wopriority.
Sources: MAS 9.2 system table CTRLCONDPROP, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/ctrlcondprop) · stock overrides of display, visible, disabled, label and inputmode; MAS 9.2 stock presentation MPMAN (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/mpman) · MPMAN · cssclass="txtred" on a statictext; MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.DATAATTRIBUTE; MAS 9.2 data dictionary — WORKORDER.WOPRIORITY (lab://maximo/9.2/db/object/workorder) · WORKORDER.WOPRIORITY
A field goes read-only once the work order is approved
What you get. Work Type can be edited while a work order is waiting on approval; from APPR onwards it is read-only.
Why it works. IBM overrides inputmode conditionally in its own stock rows (CRONTASK and PROPMAINT switch it to password), and readonly is one of the values the CTRL_TEXTBOX INPUTMODE list allows. The condition compares the status's internal value with custom('psdi.common.parse.InternalValue', …), exactly as the stock conditions BMXINVUSEBTN and SRRESOLVED do, so a site that renamed APPR to APPROVED still matches.
<textbox id="main_worktype" dataattribute="WORKTYPE" lookup="worktype"/>
<!-- then: condition ZZ_APPROVED = status internal value not in (WAPPR); inputmode = readonly when true -->Verify on your instance: A conditional inputmode changes the screen only; a data restriction (Security Groups → Data Restrictions) is the way to stop the API and other apps editing the attribute.
Sources: MAS 9.2 system table CTRLCONDPROP, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/ctrlcondprop) · property=inputmode propertyvalue=password (CRONTASK, PROPMAINT); MAS 9.2 system table CONDITION, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/condition) · BMXINVUSEBTN: custom('psdi.common.parse.InternalValue','INVUSESTATUS', :status) = 'ENTERED'; MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.INPUTMODE (domain values default, readonly, required, query, password…); MAS 9.2 data dictionary — WORKORDER.WORKTYPE, STATUS (lab://maximo/9.2/db/object/workorder) · WORKORDER.WORKTYPE, STATUS
Failure Class becomes required on emergency work
What you get. When Work Type is EM, the Failure Class field is required; on other work it stays optional.
Why it works. required is one of the values the CTRL_TEXTBOX INPUTMODE list allows, and IBM's stock rows override inputmode conditionally (CRONTASK and PROPMAINT). A condition on :worktype makes the requirement follow the work type rather than the screen, and the framework enforces it on save like any required field.
<textbox id="main_failurecode" dataattribute="FAILURECODE" lookup="failurecode"/>
<!-- then: condition ZZ_EMWORK = :worktype = 'EM'; inputmode = required when true -->Verify on your instance: The condition is evaluated when the record loads and on the field's change event; set Reevaluate on the conditional property if Work Type is edited on the same screen.
Sources: MAS 9.2 system table CTRLCONDPROP, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/ctrlcondprop) · property=inputmode, set conditionally on CRONTASK and PROPMAINT; MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.INPUTMODE; MAS 9.2 data dictionary — WORKORDER.WORKTYPE, FAILURECODE (lab://maximo/9.2/db/object/workorder) · WORKORDER.WORKTYPE, FAILURECODE
Overdue target dates in red
What you get. The Target Finish date turns red once it is in the past on work that is still open.
Why it works. The condition compares the attribute with the :&DATE& bind variable and the status's internal value; both are the same devices IBM's stock conditions use (:&PERSONID& in MYAPP and ASSIGNFILTER, InternalValue in the status conditions). The colour is the txtred override again.
<textbox id="main_targcompdate" dataattribute="TARGCOMPDATE"/>
<!-- then: condition ZZ_OVERDUE = :targcompdate < :&DATE& and status not closed; cssclass = txtred when true -->Verify on your instance: Date comparison happens in the database; :&DATE& is bound as the server date. Confirm the expression parses on your database platform with the Conditional Expression Manager's Test button.
Sources: MAS 9.2 system table CONDITION, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/condition) · MYAPP: :personid = :&PERSONID&; ASSIGNFILTER: assigncode = :&PERSONID& …; MAS 9.2 stock presentation MPMAN (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/mpman) · MPMAN · cssclass="txtred" on a statictext; MAS 9.2 data dictionary — WORKORDER.TARGCOMPDATE, STATUS (lab://maximo/9.2/db/object/workorder) · WORKORDER.TARGCOMPDATE, STATUS
A whole tab visible to one security group only
What you get. The costs tab appears only for groups granted its signature option.
Why it works. A tab is a control, and a control with a sigoption renders only for users whose group holds the option. Application Designer creates the option in SIGOPTION when the app is saved; the grant is made in Security Groups. WOTRACK carries 632 sigoption bindings of exactly this kind.
<tab id="costs" label="Costs" sigoption="ZZ_COSTS">…</tab>Verify on your instance: Until the option is granted, the tab is hidden for everyone including administrators. Grant it before signing out.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · tabs and sections with sigoption; MAS 9.2 data dictionary — Application Designer registry object CTRL_TAB (lab://maximo/9.2/db/object/ctrl_tab) · CTRL_TAB.SIGOPTION; MAS 9.2 stock presentation DESIGNER (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/designer) · DESIGNER · addmodsig · Add/Modify Signature Options
Make a field required on this screen
What you get. The Supervisor field shows the required marker and blocks save when empty.
Why it works. required="true" on a control is a presentation-level requirement: it applies in this app only, unlike the attribute's Required flag in Database Configuration, which applies everywhere including the API.
<textbox id="main_supervisor" dataattribute="SUPERVISOR" lookup="person" required="true"/>Verify on your instance: A screen-level required does not stop records created elsewhere (other apps, integration, scripts); use Database Configuration for a data rule.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.REQUIRED; MAS 9.2 data dictionary — WORKORDER.SUPERVISOR (lab://maximo/9.2/db/object/workorder) · WORKORDER.SUPERVISOR
Show a field read-only
What you get. The Reported Date is displayed but cannot be edited.
Why it works. inputmode="readonly" is the same property the framework sets when the record is read-only; on a single control it freezes just that field. The value list behind inputmode comes from the CTRL_TEXTBOX registry object.
<textbox id="main_reportdate" dataattribute="REPORTDATE" inputmode="readonly"/>Verify on your instance: Presentation only: a read-only field on the screen is still writable through the API; use a data restriction for a rule.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.INPUTMODE (default, readonly, required, query, password, passwordreadonly); MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · inputmode="readonly" on calculated fields; MAS 9.2 data dictionary — WORKORDER.REPORTDATE (lab://maximo/9.2/db/object/workorder) · WORKORDER.REPORTDATE
Long description as a text area on the main tab
What you get. A four-row Details box under the description, editable in place instead of behind the long-description button.
Why it works. DESCRIPTION_LONGDESCRIPTION is a real attribute on every object with a long description (HASLD). A multilinetextbox bound to it edits the LONGDESCRIPTION row through the same path the pop-up uses.
<multilinetextbox id="main_longdesc" dataattribute="DESCRIPTION_LONGDESCRIPTION" label="Details" rows="4"/>Verify on your instance: Rich-text long descriptions render as HTML in a plain text area; use the rich text editor trick when the site formats them.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_MLNETEXTBOX (lab://maximo/9.2/db/object/ctrl_mlnetextbox) · CTRL_MLNETEXTBOX.ROWS; MAS 9.2 data dictionary — WORKORDER.DESCRIPTION_LONGDESCRIPTION (lab://maximo/9.2/db/object/workorder) · WORKORDER.DESCRIPTION_LONGDESCRIPTION; MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · multilinetextbox bound to *_LONGDESCRIPTION
Rich text editor for the long description
What you get. The long description is edited with formatting (bold, lists, links) in place.
Why it works. richtexteditor is a registered control (CTRL_RICHTEXTEDITOR) that binds to a long-description attribute like a text area does and stores the HTML the framework already accepts for long descriptions.
<richtexteditor id="main_longdesc_rte" dataattribute="DESCRIPTION_LONGDESCRIPTION" label="Details" height="180"/>Verify on your instance: Reports and integrations that read the long description receive HTML; check BIRT templates and outbound messages that print it.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_RICHTEXTEDITOR (lab://maximo/9.2/db/object/ctrl_richtexteditor) · CTRL_RICHTEXTEDITOR.DATAATTRIBUTE, HEIGHT, PLUGINS; MAS 9.2 data dictionary — WORKORDER.DESCRIPTION_LONGDESCRIPTION (lab://maximo/9.2/db/object/workorder) · WORKORDER.DESCRIPTION_LONGDESCRIPTION
Attachments on the main tab
What you get. The attachments control (count, open, add) sits in the header section, not only in the toolbar.
Why it works. attachments is a registered control that renders the DOCLINKS menu for the current record wherever it is placed; the stock screens put it in the main section as <attachments id="doclinks"/>.
<attachments id="main_doclinks"/>Verify on your instance: Attachments need the DOCLINKS relationship and the doclink properties (mxe.doclink.*) configured; the control renders empty otherwise.
Sources: MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · <attachments id="doclinks"/> in main_attachments; MAS 9.2 data dictionary — Application Designer registry object CTRL_ATTACHMENTS (lab://maximo/9.2/db/object/ctrl_attachments) · CTRL_ATTACHMENTS.ID, LABEL, MENUTYPE
Turn smart fill off on a key field
What you get. Typing a partial asset number no longer auto-completes to the first match; the lookup is the only way in.
Why it works. smartfilloff="true" is the registered property (CTRL_TEXTBOX.SMARTFILLOFF) that disables the framework's partial-value completion on one field. There is no smartfill="on" attribute: smart fill is the default and this is its switch.
<textbox id="main_assetnum" dataattribute="ASSETNUM" lookup="asset" smartfilloff="true"/>Verify on your instance: Smart fill also honours the mxe.webclient.* system properties; a field-level switch overrides them for that control only.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.SMARTFILLOFF; MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLECOLUMN (lab://maximo/9.2/db/object/ctrl_tablecolumn) · CTRL_TABLECOLUMN.SMARTFILLOFF; MAS 9.2 data dictionary — WORKORDER.ASSETNUM (lab://maximo/9.2/db/object/workorder) · WORKORDER.ASSETNUM
A Yes/No attribute as a checkbox
What you get. Is Task appears as a checkbox (a toggle on MAS 9.0) on the main tab.
Why it works. checkbox is the control for YORN attributes; the skin decides whether it renders as a box or a toggle — the XML is identical across releases, which the skin switch shows.
<checkbox id="main_istask" dataattribute="ISTASK"/>Verify on your instance: MAS 9.0 drew YORN checkboxes as toggles and 9.1 went back to checkboxes; the control is the same either way.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_CHECKBOX (lab://maximo/9.2/db/object/ctrl_checkbox) · CTRL_CHECKBOX.DATAATTRIBUTE, VALUE; MAS 9.2 data dictionary — WORKORDER.ISTASK (YORN) (lab://maximo/9.2/db/object/workorder) · WORKORDER.ISTASK (YORN); MAS 9.2 stock presentation ASSET (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/asset) · ASSET · checkbox dataattribute="iscalibration"
Rename a field's label on this screen only
What you get. The work order number reads "Job number" here; every other app keeps the dictionary title.
Why it works. label on a control overrides the attribute's title from MAXATTRIBUTE for that control only. Leaving label off is what makes the stock screens follow the dictionary — which is also why the playground shows dictionary titles when the XML has none.
<multiparttextbox id="main_wonum" dataattribute="WONUM" descdataattribute="DESCRIPTION" label="Job number"/>Verify on your instance: A label set in the XML is not translated; sites with more than one language should set labels in the Translation tables instead.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TEXTBOX (lab://maximo/9.2/db/object/ctrl_textbox) · CTRL_TEXTBOX.LABEL; MAS 9.2 data dictionary — WORKORDER.WONUM (title "Work Order") (lab://maximo/9.2/db/object/workorder) · WORKORDER.WONUM (title "Work Order")
Scheduled start and finish side by side
What you get. A Scheduling section with Scheduled Start and Scheduled Finish next to each other on the main tab.
Why it works. Two textboxes bound to date attributes inside one section; the framework picks the date widget from the attribute's type (DATETIME on both dictionaries), so no widget is named in the XML.
<section id="main_sched" label="Scheduling"><textbox id="main_schedstart" dataattribute="SCHEDSTART"/><textbox id="main_schedfinish" dataattribute="SCHEDFINISH"/></section>Verify on your instance: Editable schedule dates on the main tab bypass the Scheduling tab's validation messages only in appearance; the object still validates finish after start.
Sources: MAS 9.2 data dictionary — WORKORDER.SCHEDSTART, SCHEDFINISH (DATETIME) (lab://maximo/9.2/db/object/workorder) · WORKORDER.SCHEDSTART, SCHEDFINISH (DATETIME); MAS 9.2 data dictionary — Application Designer registry object CTRL_SECTION (lab://maximo/9.2/db/object/ctrl_section) · CTRL_SECTION.LABEL
Sort the List tab newest first by default
What you get. The List tab opens sorted by Reported Date, newest first, before anyone clicks a header.
Why it works. orderby on the table (or its tablebody) seeds the query's ORDER BY; the stock screens use it on child tables (orderby="doctype desc,createdate asc" on attachment tables). Users can still re-sort by clicking a sortable column.
<table id="results_showlist" mboname="WORKORDER" orderby="reportdate desc" …>Verify on your instance: Order by an indexed column: the List tab query runs against the whole object and an unindexed sort is slow on large sites.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLE (lab://maximo/9.2/db/object/ctrl_table) · CTRL_TABLE.ORDERBY; MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLEBODY (lab://maximo/9.2/db/object/ctrl_tablebody) · CTRL_TABLEBODY.ORDERBY; MAS 9.2 data dictionary — WORKORDER.REPORTDATE (lab://maximo/9.2/db/object/workorder) · WORKORDER.REPORTDATE
More rows per page on the List tab
What you get. The List tab shows forty rows per page instead of the default.
Why it works. displayrowsperpage on the tablebody is the registered property (CTRL_TABLEBODY.DISPLAYROWSPERPAGE) behind the "rows per page" the framework paginates by.
<tablebody id="results_showlist_tablebody" displayrowsperpage="40" filterable="true">Verify on your instance: Each row costs a fetch of every column shown; forty rows of a wide list table is noticeable on slow links.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLEBODY (lab://maximo/9.2/db/object/ctrl_tablebody) · CTRL_TABLEBODY.DISPLAYROWSPERPAGE; MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLE (lab://maximo/9.2/db/object/ctrl_table) · CTRL_TABLE.DISPLAYROWSPERPAGE
Move the Status column to the front of the List tab
What you get. Status is the first data column on the List tab, right after the select and detail controls.
Why it works. Column order is document order inside the tablebody; moving a tablecol element moves the column. The playground's change summary reports it as a move, the way mxdiff does.
<tablebody …>
<tablecol type="checkbox" …/> <tablecol type="event" …/>
<tablecol id="results_status" dataattribute="STATUS"/>
…Verify on your instance: Users' saved column preferences (if the site enabled them) can override the order they see.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLECOLUMN (lab://maximo/9.2/db/object/ctrl_tablecolumn) · CTRL_TABLECOLUMN.DATAATTRIBUTE; MAS 9.2 stock presentation WOTRACK (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/wotrack) · WOTRACK · results_showlist_tablebody column order
Load a heavy child table collapsed
What you get. The tasks table opens collapsed; its rows are fetched only when the user expands it.
Why it works. collapsed="true" on a table (CTRL_TABLE.COLLAPSED, with collapsable and collapsedlabel) defers the table's fetch, which is why the stock screens ship some attachment and history tables that way.
<table id="plans_task_table" relationship="SHOWCHILD" collapsed="true" collapsable="true" collapsedlabel="Tasks (expand)">Verify on your instance: A collapsed table still validates on save; only the fetch is deferred.
Sources: MAS 9.2 data dictionary — Application Designer registry object CTRL_TABLE (lab://maximo/9.2/db/object/ctrl_table) · CTRL_TABLE.COLLAPSED, COLLAPSABLE, COLLAPSEDLABEL; MAS 9.2 stock presentation ASSET (image://cp/manage/manageadmin:9.3.31/maxdemo/maxpresentation/asset) · ASSET · collapsed="false" on the relationship tables
Start Center result set: my priority 1 and 2 work, coloured
What you get. A Start Center portlet lists the signed-in person's open priority 1 and 2 work orders, with the priority cell red.
Why it works. A Result Set portlet is a saved query plus column and colour options. The query is a public saved query on Work Order Tracking; the portlet's colour options colour a column by an expression on an attribute — the same WOPRIORITY the List tab trick uses. No XML, no script.
-- saved query on WOTRACK (public):
(owner = :&PERSONID& or ownergroup in (select persongroup from persongroupteam where respartygroup = :&PERSONID&))
and wopriority in (1,2) and status not in ('COMP','CLOSE','CAN')Verify on your instance: The saved query must be public (or owned by the group) for other users' Start Centers to see it; colour options are per result set, set by the template owner.
Sources: MAS 9.2 data dictionary — WORKORDER.WOPRIORITY, STATUS, OWNER, OWNERGROUP (lab://maximo/9.2/db/object/workorder) · WORKORDER.WOPRIORITY, STATUS, OWNER, OWNERGROUP; MAS 9.2 system table CONDITION, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/condition) · MYAPP: :personid = :&PERSONID& (the bind variable a personal query uses); IBM Docs — Maximo Manage: Result Set portlet
Start Center KPI: overdue PM and emergency work
What you get. Two gauges on the Start Center: overdue PM work orders and overdue emergency work, from the KPIs the product ships.
Why it works. PMWOOVER and EMWOOVER are stock KPIs in KPIMAIN (with PMPERF, WOOPENAPPR, CLOSEDWNOACT and others); a KPI Graph portlet renders any KPI the user is granted. Nothing to write — only to choose and grant.
-- KPI Manager: PMWOOVER, EMWOOVER (stock); KPI Graph portlet → select both.Verify on your instance: KPIs compute on the KPI cron task schedule; a fresh instance shows zero until the first run. Grant the KPI to the group in KPI Manager or the gauge is empty.
Sources: MAS 9.2 system table KPIMAIN, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/kpimain) · PMWOOVER "Overdue PM Work", EMWOOVER "Overdue Emergency Work", PMPERF "PM Performance", WOOPENAPPR "Open Work Orders Waiting Approval"; IBM Docs — Maximo Manage: KPI Graph portlet
Start Center quick insert: new work order and new request
What you get. Two one-click links on the Start Center that open Work Order Tracking and Service Requests on a new record.
Why it works. The Quick Insert portlet lists application insert actions the user holds (the INSERT signature option per app); it is the fastest route to a new record and needs nothing beyond the grants that already exist.
-- Quick Insert portlet → Select Actions → WOTRACK Insert, SR Insert.Verify on your instance: Only apps where the group holds INSERT appear; a link that is missing is a security grant, not a portlet setting.
Sources: MAS 9.2 system table SIGOPTFLAG, stock rows (image://cp/manage/manageadmin:9.3.31/maxdemo/sigoptflag) · INSERT options per application; IBM Docs — Maximo Manage: Quick Insert portlet
Start Center bulletin with an expiry
What you get. A shift notice on every Start Center that disappears by itself after the date you set.
Why it works. The Bulletin Board portlet shows messages from the Bulletin Board application; each message carries post and expiry dates and an audience of organisations, sites or groups, so nothing needs removing afterwards.
-- Bulletin Board app: New message, Post Date, Expire Date, Audience; Start Center Bulletin Board portlet shows it.Verify on your instance: A message with no audience shows to everyone; scope it to the site or group whose shift it concerns.