Using Preventive Maintenance (PM) Records to Create Work Orders

Preventive Maintenance (PM) records are templates for scheduled preventive maintenance work. They are used to generate PM work orders and related records, and commonly used on assets and locations that require periodic maintenance to maximize the performance and avoid untimely failures. The following example will show you how to create a preventive maintenance work order for periodic maintenance and inspections to be performed on an asset.

Create a New PM

Go to the Preventive Maintenance application, and from the Toolbar click “New PM” button


PM Number: The unique identifier of a Preventive Maintenance record. Every PM record is specific only to one Asset or Location record.
Location/Asset: Asset or Location where the preventive maintenance will be done.
Status: A new PM record will automatically have a DRAFT status.
Storeroom: If a Job Plan has estimated materials, Maximo needs to know the Storeroom to create the item reserved.
Route: A list of related asset or work locations. When a work order is generated from a PM with a route, a parent work order will be created for the asset or location and a child work order for each asset on the route. If the child work orders contain tasks, the task-type work orders will also be created.
Counter: The number of generated work orders from the PM since the first record is created.
Lead Time (Days):  The number of days before the actual work can be started. When using the Lead Time option, check the Lead Time Active check box.

PM Frequency

Preventive maintenance work is typically triggered by one or more conditions:

  • Time-based PMs: Elapsed time since previous work.
  • Meter-based PMs: Metered usage of assets.
  • A combination of elapsed time and metered usage. For example, you can schedule a PM that triggers work every six months or every 300 hours, whichever comes first.


Estimated Next Due Date: Specify a value if the PM is time-based. This date is the first date that the PM is scheduled to generate work orders.

Associate PM with a Job Plan

PMs can contain job plan and corresponding safety plan information that will be copied to work orders. We can choose an existing Job Plan from the PM application.


Information associated with a PM becomes part of the work order records you generate from the PM. For example, each Job Plan Task will become the task of the related work orders.


There are other features associated by adding a new PM, such as a PM hierarchy can be built by creating parent-child relationships between similar PMs, which enables the users to generate hierarchies of related work orders. You can also schedule PM work for assets on a route.

Create PM Work Orders

There are two ways to generate PM Work Orders: automatically or manually.  To generate it automatically, Maximo user with administrative privilege can schedule the generation of PM Work Order using the Cron Task (PMWoGenCronTask) Setup. To manually generate PM Work Order,  the PM status must be ACTIVE, and the asset or location listed on the PM must have a status of OPERATING.
In the Preventive Maintenance application, from the Select Action menu, select Generate Work Orders. In the dialog box, use the following fields to specify which PMs generate work orders:


Generate WOs Due Today Plus This Number of Days: Insert a “slack” time value in days to generate work orders in advance of their due dates.

Use Frequency Criteria: By default, this box is selected. When selected, the system evaluates the frequency criteria for the selected set of records to determine which PMs are due to generate work orders. If a PM is part of a hierarchy, it may trigger work order generation from the entire PM hierarchy.

When you generate work orders from a PM with an associated job plan, default safety and measurement point information is copied to the work orders.


Did You Know...

As Maximo Experts, we have developed several add-on products for Maximo that mobilize the work force, simplifies assignments, provides ad-hoc reporting capabilities and facilitates the seamless integration of Service Requests into Maximo.

Check out our products by clicking on the following links: EZMaxMobile, EZMaxPlanner and EZMaxRequest.

Find Out More

8 thoughts on “Using Preventive Maintenance (PM) Records to Create Work Orders

  1. Is there a flow chart that explains when we run PMs, how a work order’s description, lead, asset, location, etc is constructed based on whether a PM has a persongroups vs lead, job plan, route, etc?

    1. You enter your meter readings. When the PM “Generate Work Order” is run, it checks to see if the meter reading has exceeded the range. For example, if your PM is every 5,000 then if the last meter reading exceeds 5,000, the PM work order is created.

  2. Is it possible to use both time based and meter based frequency AND job plan sequencing? For example: the monthly PM will use job plan A and when the asset usage reaches a certain number of hours, it will use job plan B which is essentially job plan A with some extra tasks.

  3. I have PM hierarchy based on times frequency. When I have a child arrive at due date of manually generation, and not other child or the parent, ALL the hierarchy is generate. It’s a normal fonction ? Could we change a parameter to have only the PM due date generate?

  4. Hi,

    We are getting below error while generating CHILD workorders from pm having route-
    body { margin: 0 0 0 0; padding:0 0 0 0 }
    td,div { font-family:Arial;font-size:10pt;vertical-align:top }
    /* Copyright IBM Corp. 2013 All Rights Reserved. */
    body { margin: 0 0 0 0; padding:0 0 0 0; overflow:hidden; }
    .transcript { background-color:#d2d2d2; }
    .messageBlock { padding-left:10px; padding-right:10px; margin-bottom:3px }
    .message { padding-left:20px; margin-left:95px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-space:pre; white-space:pre-wrap;}
    .messageCont { padding-left:20px; margin-left:95px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-space:pre;white-space:pre-wrap;}
    .other { font-size:11px;color:#1970b0;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .myself { font-size:11px;color:#222222;font-style:normal;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont { font-size:8px;text-align:right; color:#1970b0;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .myselfCont { font-size:8px;text-align:right; color:#222222;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .system { font-size:11px; word-wrap:break-word;color:#da8103;font-style:normal;font-weight:normal; white-space:-moz-pre-wrap; _white-space:pre;white-space:pre-wrap; }
    .showTimestamp { padding-left:20px; font-size:11px; float:right; color:#999999;font-style:normal;font-weight:normal; }
    .other1 { font-size:11px; color:#ba006e;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont1 { font-size:8px;text-align:right; color:#ba006e;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other2 { font-size:11px; color:#007670;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont2 { font-size:8px;text-align:right; color:#007670;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other3 { font-size:11px; color:#3b0256;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont3 { font-size:8px;text-align:right; color:#3b0256;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other4 { font-size:11px; color:#00512b;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont4 { font-size:8px;text-align:right; color:#00512b;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other5 { font-size:11px; color:#a91024;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont5 { font-size:8px;text-align:right; color:#a91024;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other6 { font-size:11px; color:#b8471b;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont6 { font-size:8px;text-align:right; color:#b8471b;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other7 { font-size:11px; color:#7f1c7d;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont7 { font-size:8px;text-align:right; color:#7f1c7d;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .highlight { background-color:#bed6f8; }
    .datestamp { padding-right:0px; font-size:11px; cursor:default; margin-bottom:3px; background-color:#c0c0c0; width:100%; float:left; text-align:right; color:#ffffff; font-weight:bold; font-style:italic; }
    #chatAlert { float:left; border-bottom:1px solid #E8D091; padding:6px; width:100%; color:#A5754C; }
    #chatAlertImage { float:left; }
    #chatAlertText { float:left; margin-left:6px; margin-right:10px;}
    #chatAlertClose { float:right; margin-right:10px; padding-right:6px; margin-top:0px; }
    #chatAlertText a { color:#A5754C; }
    #chatAlertText a:hover { color:#A5754C; text-decoration:none; }

    .tsDisplay { display:block }.dsDisplay { display:none }

    BMXAA4191E – The value TEST is not valid for parent pmnum. Specify a valid value for parent pmnum.

    Task workorders are generating fine.

Leave a Reply