Make a field required using the Conditional Expression Manager

The conditional expression manager is a useful tool to use to conditionally display or hide data or fields.  This helpful trick will show you how to make a field required based on some other values in other fields.  In previous version of Maximo, this used to be called Field Control.  Now, I know that you can just go into the Database Configuration and set any attribute you want to be required, but sometimes that doesn’t fit all situations.  For example, let’s say that we want to make the GL Account field required, now if we had gone into the DB configuration and made that field required at all times and when a workorder is created, if the user entering the workorder doesn’t know the right GL Account to charge against, then the user wouldn’t be able to create the workorder.  Unless of course they didn’t care and just put in any value just for the sake of saving the workorder.  So in this case, making the GL Account attribute required would not work.

This is where the Conditional Expression Manager comes in.  We can set up a rule or condition to say something like this: if the workorder status does not equal ‘WAPPR’ (which is the default workorder status when a new one is created), and the GLAccount field is null or empty, then evaluate the rule or condition to true, otherwise the rule is false.  And depending on whether the rule returns true or false, you can do certain things like make the GL Account field required.  So in this scenario, when are user creates a new workorder with a NULL GL Account value, since the default status is ‘WAPPR’, this rule will return false, therefore not making the GL Account field required.  Now if this user where to go ahead and try to change the status to ‘APPR”, the rule would evaluate to true, and the user will see an message saying the GL Account field is required.

First, here is a brief explanation of what the Condition Expression Manager does:

You use the Conditional Expression manager application to create and maintain a library of conditions.  These conditions can contain expressions and class files.  In other applications, such as Application Designer and Security Groups, you select from predefined conditions to set up conditional behavior.

When the express evaluates to true, condition let you configure access to fields, tabs, and other user interface controls within applications.  For example, you can set the following types of conditional access:

  • Give read-only access to information displayed in a field
  • Give read-write access to information displayed in a field
  • Give a user group read-only access to a specific field or action in an application
  • Give all members of a user group read-write access to a specific application
  • Do not display a field or tab in an application to certain users

You can also set access to application options, controls, or data elelments.  Examples include:

  • Grant access to application options in the Select Action menu for a security group
  • Configure any property in a control for a group, such as making a control hidden, masked, read-only, or required
  • Configure other properties, such as color, label, and application link, to differ according to group and different conditions
  • Show or hide data attribute globally or for a security group

Now I will show you how to set this up.

First, you need to create a condition.  To do this, go to Administration-> Conditional Expression Manager.  Click on new row to add a record and give it any name you want, since our condition will check if the GL Account is null we will just call it “Check if GL Account is empty”.  Enter the following values:

  • Type – EXPRESSION
  • Expression – STATUS <> ‘WAPPR’ AND :GLACCOUNT IS NULL

Yes the semicolon (;) is required in the expression field.  So this condition is checking if the GL Account value is null and the status is WAPPR.  If this condition is met, the result will return true.

Now the next thing we need to do, is associate this condition with an attribute.  So go to Application -> Security Groups.  Once there, go to Select Action -> Global Data Restrictions.  In the dialog, click on the “Attribute Restrictions” tab.  Click on new row and enter the following values:

  • Object – WORKORDER
  • Attribute – GLACCOUNT
  • Application – WOTRACK
  • Type – REQUIRED
  • Reevaluate – Checked
  • Condition – 1001 (whatever the ID of the condition you created above)

Now click OK to save.  Now if you go into the WOTRACK application, you will be able to create a workorder without a GL Account and save it.  But once you try to change the status to anything other than WAPPR, you will get an error message saying that the GL Account value is required.

You can also look at this KB article for more info on setting up required field using attribute restrictions

Update: Read the comments below on the possible scenarios of what can happen when making fields required using the conditional expression manager…

Did You Know...

As Maximo Experts, we have developed Maximo adds on products to make Maximo work assignment simple, reporting easy, and facilitating service requests seamless. Check out our additional products EZPlanner, EZInsight, and EZRequest.

Find Out More

12 thoughts on “Make a field required using the Conditional Expression Manager

  1. This solution is very tricky. It usually works well when you defaulted this field with some values on all records for the condition. Otherwise you will get error messages (in your case “GL Account is required”) on any WO’s modification in APPR/INPRG/COMP… statuses. You can run into this error message not only in WOTRACK application but in Receiving or Invoices because they update Service/Material costs field…
    Then:
    – parent/child relation – when you change status on Parent and receive an error about missing field (that wasn’t actually populated on child’s record) and you don’t know what to do, because you have clearly set this field on Parent
    – WO tasks have status field too – this issue can be fixed by adding ” and istask=0″ condition to “Check if GL Account is empty” condition.

    As I said it is tricky 😉
    Regards,
    Alexey

    1. Thanks, that is a very good point that you made. As with any Maximo modifications, it bears warning to make sure you fully test all modules before using it in a production environment. I did not test this fully so the changes you suggest should work.

      Now that we are thinking along these lines, I wonder if I generated a PM into a work order with a default status of INPRG and without a GL Account, if it would throw an error?

      1. Yes, it will.

        I’ve tested this scenario with my field and Generate WO function on a PM with empty field through an exception:
        BMXAA3210E – Failure while generating work orders.
        BMXAA4195E – Required field Risk Level is blank.

  2. Looks Tricky!

    I have a challenge where the customer wants the Serial Number field on Asset Application to be required and to immediately highlight that there is already an asset with this serial number.
    Setting the serial number to required is easy but how do I do the serial number warning?
    On the spreadsheet they currently use they make the field fill colour go red and have another column which states either Duplicate or OK using the formula IF(COUNTIF$1$2:$1$4201,< )>1,”Duplicate”,”OK”)
    Could you suggest a solution or a hint to the conditional expression, please
    Brian S

    1. That’s a bit more complicated than making a field required. You may be able to do that with custom actions with some custom java code, but I am not sure.

      1. Yes! So, I decided to try and create a new field on the Asset application which states DUPLICATE if the serial number entered is a duplicate and OK if it is not.

        So far I have created an ALN Domain SNDUP which contains the values DUPLICATE and OK
        I have created an attribute in the ASSET Table called DUPSN which is non-persistent and references the SNDUP domain with a lookup of VALUELIST.
        I have added this field to the ASSET Application and on opening the application on any record I can click on the spyglass icon next to it and see the DOMAIN choices.

        I have a conditional expression used to run a query on the list part of ASSET which then lists all records that have a duplicate serial number

        exists(select 1 from asset where serialnum is not null and serialnum=:serialnum and siteid=:siteid and assetnum:assetnum)

        So, somehow I need to get Duplicate Serial # populated depending on the value in serial number and whether it is duplicated elsewhere in assets

        would you be able to help with this Chon?

        1. You might have to use a custom action (System Configuration -> Platform Configuration -> Actions) to set that value to whatever you want.

          1. Okay will look into this – do you know of a good reference guide for action and workflow designing?

  3. In your explanation of creating a conditional expression you say “Yes the semicolon (;) is required in the expression field.” Did you mean colon instead of semicolon?

Leave a Reply

Your email address will not be published. Required fields are marked *