Add Work Log Functionality to other Maximo Objects

The Work Log is a great piece of functionality added to Maximo in version 6. It provides a chronological and historical view of notes captured against a Work Order or a Service Request. In previous versions, the record’s long description field was the only mechanism for capturing notes. Now, the Work Log allows for better organization of notes – specifically how notes were captured, displayed, and reported on. As versions of Maximo progressed over time, more applications began adopting Work Logs to organize notes. Work Logs are now present in Purchase Requisitions, Purchase Orders, and other record types. However, Work Logs are not present everywhere in Maximo… yet.

This article will describe how to configure Work Logs for other record types, so that they too can have the benefit of organized, chronological notes. In this example, we will add Work Logs to Location records in Maximo.

EDIT: This solution works for site-level parent objects, such as Locations. Organization-level parent objects, such as Companies, will throw an exception as they do not have a SITEID attribute in their table definition.

Step 1: Check Field Lengths

The WORKLOG table has a field called RECORDKEY that is used to store the key attribute information for the related record. In the case of Work Orders, the WONUM field is stored as the RECORDKEY. In the case of Service Requests, the TICKETID is stored as the RECORDKEY.

As we are configuring Work Logs for Locations, we need to store the LOCATION field as the RECORDKEY in the WORKLOG table. Before doing so, let’s make sure that the field length of the WORKLOG.RECORDKEY is at least as long as the LOCATIONS.LOCATION field, to prevent character length issues down the line.

  1. Log into Maximo as an administrative user
  2. Navigate to the System Configuration > Platform Configuration > Database Configuration application
  3. Locate the LOCATIONS object, then navigate to the Attributes tab
  4. Locate the LOCATION attribute, and note its field type and length
  5. Navigate back to the List View, locate the WORKLOG object, then navigate to the Attributes tab
  6. Locate the RECORDKEY attribute, and note its field type and length
  7. Update the Length attribute to be at least as long as the length of the LOCATIONS.LOCATION field, if necessary
  8. Save the record and perform the Database Configuration steps, if necessary

Step 2: Add New Relationship

We will need to relate the LOCATIONS table to the WORKLOG table via a relationship in Maximo. This relationship will be used as part of the subsequent configuration to display Work Log entries that are related to a given Location.

  1. Log into Maximo as an administrative user
  2. Navigate to the System Configuration > Platform Configuration > Database Configuration application
  3. Locate the LOCATIONS object, then navigate to the Relationships tab
  4. Click the New Row button:
    1. Name: WORKLOG
    2. Child: WORKLOG
    3. Where Clause: recordkey=:location and class=’LOCATION’ and siteid=:siteid
    4. Remarks: Relationship to the WORKLOG table, used to find all work log records for a given Location record. The resulting set will contain zero or more records.
  5. Click the Save button

Step 3: Add Screen Changes

This is where the fun begins! We need to add the Work Log screen details to our Locations application in Application Designer. The steps below can be simplified by copying and pasting the XML for the new Work Log screen details into the exported Location XML file, and importing the resulting file back. If you run into trouble, watch our YouTube video on how to perform these steps.

  1. Log into Maximo as an administrative user
  2. Navigate to the System Configuration > Platform Configuration > Application Designer application
  3. Locate the LOCATION application, then navigate to the Workspace tab
  4. Click the Export Application Definition button on the toolbar (ensure your popup blocker allows popups from the Maximo URL)
  5. Save the resulting XML file to a local or network drive
  6. Edit the LOCATION.XML file with your favorite text editor
  7. Add the following <tab> control to the document after the last <tab> control in the main tab group:
    <tab id="log_tab" label="Log">
    	<section border="true" id="log_section">
    		<sectionrow id="log_section_r1">
    			<sectioncol id="log_section_r1c1">
    				<section id="log_section_r1c1_1">
    					<multiparttextbox dataattribute="location" descdataattribute="description" id="log_section_r1c1_1_attr_1"/>
    				</section>
    			</sectioncol>
    			<sectioncol id="log_section_r1c2">
    				<section id="log_section_r1c2_1">
    					<textbox dataattribute="siteid" id="log_section_r1c2_1_attr_1"/>
    				</section>
    			</sectioncol>
    		</sectionrow>
    	</section>
    	<table id="worklog" label="Work Logs" orderby="createdate desc" relationship="WORKLOG">
    		<tablebody displayrowsperpage="18" filterable="true" id="worklog_tb">
    			<tablecol filterable="false" hidden="false" id="worklog_tb1" mxevent="toggledetailstate" mxevent_desc="Show Detail" sortable="false" type="event"/>
    			<tablecol dataattribute="recordkey" id="worklog_tb2" sortable="true">
    				<textbox id="worklog_tb2_1" menutype="hyperlink"/>
    			</tablecol>
    			<tablecol dataattribute="class" id="worklog_tb3" sortable="true"/>
    			<tablecol dataattribute="createby" id="worklog_tb4" sortable="true"/>
    			<tablecol dataattribute="createdate" id="worklog_tb5" sortable="true"/>
    			<tablecol dataattribute="logtype" id="worklog_tb6" linkedcontrolid="worklog_tb_details_sec17" sortable="true"/>
    			<tablecol dataattribute="description" id="worklog_tb7" sortable="true"/>
    			<tablecol dataattribute="clientviewable" id="worklog_tb8" sortable="true"/>
    			<tablecol filterable="false" hidden="false" id="worklog_tb_delete" mxevent="toggledeleterow" mxevent_desc="Mark Row for Delete" mxevent_icon="btn_garbage.gif" sortable="false" type="event"/>
    		</tablebody>
    		<tabledetails id="worklog_tb_details">
    			<section id="worklog_tb_details_sec1" label="Details">
    				<sectionrow id="worklog_tb_details_row1">
    					<sectioncol id="worklog_tb_details_row1_col1">
    						<section id="worklog_tb_details_row1_col1_1">
    							<textbox dataattribute="recordkey" id="worklog_tb_details_sec11" menutype="hyperlink"/>
    							<textbox dataattribute="class" id="worklog_tb_details_sec12"/>
    							<textbox dataattribute="createby" id="worklog_tb_details_sec13"/>
    							<textbox dataattribute="createdate" displaytype="DATETIME" id="worklog_tb_details_sec16"/>
    							<textbox dataattribute="logtype" id="worklog_tb_details_sec17" lookup="valuelist"/>
    							<checkbox dataattribute="clientviewable" id="worklog_tb_details_sec18"/>
    						</section>
    					</sectioncol>
    					<sectioncol id="worklog_tb_details_row1_col2">
    						<section id="worklog_tb_details_row1_col2_1">
    							<textbox dataattribute="description" id="worklog_tb_details_sec14" lookup="longdesc"/>
    							<richtexteditor dataattribute="description_longdescription" height="100" id="worklog_tb_details_sec15" width="660"/>
    						</section>
    					</sectioncol>
    				</sectionrow>
    			</section>
    		</tabledetails>
    		<buttongroup id="worklog_buttons">
    			<pushbutton default="true" id="worklog_newrow" label="New Row" mxevent="addrow"/>
    		</buttongroup>
    	</table>
    </tab>
    
  8. A couple of notes:
    1. If you are linking to an object other than Locations, be sure to change the header <section> control to reference the primary key of the object you are linking to.
    2. If you don’t want to allow for deletion of a row, or want to control deletion through a Signature Option, you can remove or modify the <tablecol> control with the toggledeleterow event.
  9. Save the LOCATION.XML file
  10. Import the LOCATION.XML file back into Application Designer by using the Import Application Definition button on the toolbar.

Step 4: Link the Records

In order for this to work, we’ll need to create a simple Automation Script to link the Work Log entry with its parent Location. This script will fire upon add of a new WORKLOG entry, and will populate the Record Class and Record Key fields on the WORKLOG table from the parent Location record. This ensures that the current Work Log entry is linked to the proper Location.

  1. Log into Maximo as an Administrative user
  2. Navigate to the System Configuration > Platform Configuration > Automation Scripts application.
  3. From the Select Action menu, choose the Create > Script option
    1. Script: WORKLOG.NEW
    2. Description: Work Log Script on Add
    3. Script Language: python
    4. Log Level: ERROR
    5. Active: Yes
  4. Source Code:
    ownerMbo = mbo.getOwner()
    if ownerMbo and ownerMbo.isBasedOn("LOCATIONS"):
        mbo.setValue("CLASS", "LOCATION", mbo.NOACCESSCHECK|mbo.NOACTION|mbo.NOVALIDATION)
        mbo.setValue("RECORDKEY", ownerMbo.getString("LOCATION"), mbo.NOACCESSCHECK|mbo.NOACTION|mbo.NOVALIDATION)
    

     

  5. Click the Create button

Step 5: Test the Solution

Now that it’s configured, it is time to try out our solution.

  1. Log into Maximo
  2. Navigate to the Assets > Locations application
  3. Find a Location that you would like to add a new Work Log entry against. In this case, we are looking at the ADDR201 Location from the Maximo Demo database.
  4. Click on the Log tab
  5. Click the New Row button
  6. Fill out the pertinent details
  7. Click the Save button

Congratulations! We have Work Logs on Locations. For a visual instruction of the previous steps, check out our video tutorial.

 

We love hearing from our readers!  Feel free to leave comments or feedback below.

 

Related posts

16 comments

  • Hi,
    I added this to Invoice and while everything looks good, when selectin ‘New Row’ nothing happens. Any advice?
    I changed everything from these instructions to Invoice related variables, fields but nothing. I have triple checked the script and xml but I’m not seeing anything.
    Anyone else have this issue?
    Thanks

    • A
      Alex Walter

      Can you confirm that the script is running by putting some logging into the script?

  • We are a bunch of volunteers and starting a brand new scheme in our community.
    Your web site provided us with helpful info to work on. You’ve performed
    a formidable job and our whole neighborhood might be grateful to you.

    • A
      Alex Walter

      Thanks! Hope it’s been helpful.

      • Yinka Oludipe

        Hi Alex,

        Thanks for this great post. Prior to coming across this post, my team have been trying to track changes to PM by adding notes to the long description field of the PM application – which is you well know is very obscure and difficult to report on. Your guide has given me a better way to track changes to PMs in a more transparent way.

        What I’d like to do is put enforcement on it by mandating log entry prior to any ‘save’ action after changes. I’m still ong way from that though because, having followed your guide to the letter, I get everything except when I click on ‘New Row’ to add a new log, I don’t see a new row. Instead, when a click on the ‘List’ tab to exit, I get prompted to save. If I click ‘save’ i get the following error message:

        BMXAA7998E – You have not entered a value in the following required fields:
        > Record
        > Class
        Enter the required values before you save this record.

        What am I missing here, please?

        Your help is appreciated . And once again, thank you for the excellent post.

        Yinka
        Maximo 7.5.7

        • A
          Alex Walter

          The issue is most likely with that Automation Script in Step 4. Make sure you change the references from LOCATION(S) to PM.

  • Kaushik Samaddar

    Thank you for the great article.

    We have found a problem with the work log details text area. The font size of the text area by default is very small. The font size can be changed by highlighting it and selecting the size as medium or more. However, if one the size is changed on one line and hit Enter, the next line defaults to the small size again.

    Is there a way we can default / customize the size i.e. can we change the size to medium by default?

  • Is there a way to rollup all Child Work Order Work Logs to the Parent Work Order?

    • Alex Walter

      I believe so, although I’ve never tried that before. You should be able to adjust the relationship used to pull in the extra records. Just be careful – you’ll want to probably create a new relationship instead of modifying the existing one to be sure that other facets of the application aren’t adversely affected.

  • Robert Buster

    I added WorkLog to Assets app, and I am getting “Cannot add new row” error when I try to add a WorkLog! Don’t see anything in the logs

    • Anonymous

      Never mind. I had added a prefix to the ASSET->WORKLOG relationship to identify it as a custom relationship, and had forgotten to change that in the screen XML. All is well.

  • Ed Matthews

    To provide auth to Worklog seems to require also granting the higher level “Save” authorization, which makes many fields editable.
    Have you run across a related requirement to provide a “view only” user only access to create worklog entries?
    Any ideas on how you might provide that kind of access?
    (By contrast to Worklog, granting Communication does not require granting Save.)

    Thanks,
    Ed

    • Prasad Bakal

      Hi Ed,

      You can use conditional UI to provide read only and save access on the Application UI based on a custom sig option and conditional UI.
      Create a Sigoption like “WorkLogSave”
      Configure conditional UI on the WorkLog Table to set “inputmode” property based on user’s access to WorkLogSave

      Regards,
      Prasad Bakal

  • Thank you for some other great post. The place else
    could anybody get that type of info in such an ideal manner of writing?
    I’ve a presentation next week, and I am at the look for such information.

  • When I added worklog to Companies object I got an error because the Company object is an ORG level object not a site level one. As such there is no SITEID attribute and the worklog threw an error when trying to add a new one. The only work around I could find was to add a new siteid attribute. Do you know a better work around?

    • Alex Walter

      Thanks for trying out our solution! While the WORKLOG object is a system-level object, you are correct in that this solution only works with site-level parent objects. Unfortunately there is code in the add() method of the Work Log MBO that attempts to set the Site ID of the Work Log to the SITEID attribute of the parent object. In the case of org-level objects, such as Companies, this will throw an exception.

      I see three possible options for a workaround, none of which I’m particularly fond of:

      1. Add a SITEID attribute to the parent object, such as Companies, as you’ve done
      2. Extend the Work Log MBO via Java customization, and override the add() method to conditionally set the Site ID
      3. Create a custom table that replicates the WORKLOG functionality

Shane

Maximo Analyst

As a recent graduate in computer science and cybersecurity with a CompTIA Sec+ certification, I thrive on learning and embracing emergent challenges head-on. Though new to Maximo, I approach the day to day with determination and enthusiasm. I have been known to be competitive while also being a strong team player. Beyond the realm of technology, I cherish spending time with loved ones, playing video games, doing exercise, and cooking. I am grateful to be where I am and around so many amazing people.

MAS 8

Time to Benefit
Lower Costs
Scalability and Integration
Continuous Upgrades
Easy of Use

Visual Inspection

Accelerate Defect Detection
Flexibility to Train and Deploy
Increase Uptime 24/7 Real Time Monitoring
Better Worker Safety

Monitor

Enterprise Level Data Aggregation
Scaled Operations
AI Deductions
Advanced Root Cause Analysis

Predict

Condition Based Maintenance
Lower Costs
Better Asset Availability
Reduced Risk

Manage

Comprehensive View of Assets
Understand Resource Attributes, Configuration and Relationships
Drill Down View

Health

Improve Reliability
Performance Insight
Better Planning
Clean Data
Optimization – Data, Costs, Risks

Mobility

Boost Productivity
Safer Workplace
Reduce Knowledge Gaps
Avoid Downtime

Digital Twin

Integrate with IoT for Intelligent Asset Management
Measure Health and Performance
Meet Sustainability Goals
Write Your Digital Story – Learn from Data

Dexter

Maximo Analyst

Dexter began his career in the warehouse field. Developing his skills in inventory control, accounts payable, shipping, and receiving, and procurement. While working at Apex he was learning the Maximo system in and out. Eventually learning it so well he taught everyone how to use it. Eventually becoming a system administrator for the Apex site.

A fun fact about Dexter is that he was an Elvis impersonator for 24 years. He enjoys singing, fishing, golf, and playing pool. He's an avid movie buff, most likely you'll find him watching the latest movie.

Chip

Client Relations Specialist

Chip is new to Maximo but has worked for various software companies through his career in both a sales and client relations role. In his spare time, Chip likes to golf, travel and work on projects around the house, especially those with an artistic touch. He is also up for any type of competition whether that be playing cards, board games or recreational sports.

Sarah

Maximo Analyst

Sarah is a recent graduate starting her asset management career. She counts fast learning and determination as key skills that she’s applying to become an Maximo pro! Sarah’s background in IT Services and studies in computer science have strengthened her natural problem-solving skills and desire to help others through technology. In her free time, Sarah enjoys baking, sewing, reading comic books, and building her own video game.

Derrick

Maximo Analyst

Derrick is someone who lives for mental exercise. New challenges spin his problem solving wheels. Defeat is not an option and challenges make him smile. His catch phrase is “I’m an Engineer”. Derrick takes pride in his work. He is a highly self-driven talent when it comes to his interests and programming couldn’t be any higher on this list.

Outside of the office Derricks interests includes cars, motorcycles, and anything generally fast and loud. He stays in the loop on latest in tech, loves gaming and most of all is a die-hard anime fan. Outside of bike night, you are most likely to catch him relaxing in the glow of lights from his PC.

Xavier Galarza

Maximo Analyst

I am a recent graduate who is motivated to learn and develop new skills. I like to challenge myself every day. I want to learn all about Maximo in order to teach others how effective Maximo can be for them. I have a good understanding of the development side and work well with problem solving. I am grateful for the position I am in, I love surrounding myself with great people that are more knowledgeable than me who will help me grow as a person. In my free time I love to play videos games, watch/ play sports and spend time with family. I am a competitive person and believe I am pretty good at all sports.

My other passion is to stream video games I play and connect with others online, I love showing others how to play a certain game or even show them a skill didn’t know existed. I love entertaining others and creating content for others to watch and enjoy.

Courtney LeBlanc

Business Analyst

Courtney is a polished Maximo consultant with over 10 years working in the industry. She has worn many hats including QA Specialist, Trainer, Functional Lead, Project Lead and Business Analyst. A point of great professional pride for Courtney is helping clients meet their needs and realize the power of their investment. Being a part of the process that helps clients learn how to use their system and get the most out of it is a great feeling at the end of the day.

Bob Richardson

Director of Managed Services and Senior Analyst

Bob has led more than 50 (but less than ∞) Maximo projects with top notch client satisfaction – so he must be doing something right. He is a seasoned veteran who heads our operational & managed services team. He is instrumental in developing many of our solutions and holds Maximo certifications in both functional and technical disciplines up to version 7.

Bob might or might not like squirrels. He enjoys traveling with his wife and outdoor activities. He has also been known to spend long hours in his garage contemplating life.

Kelly Nimmo

Director of Products and Senior Analyst

Kelly heads up our product development team and is a senior analyst with more than 11 years EAM/Maximo experience. She is the architect behind our flagship product offering MxMobile. She holds Maximo certifications in both functional and technical disciplines up to Maximo version 7.

In her free time if you don't find her on her boat, fishing and enjoying the beautiful Florida outdoors, then she's probably on the soccer field teaching her nieces and nephews how to do the around the world.

Kim Walter

COO

Kim began her career in Investment Banking in the Biotech and Tech sectors. After leaving banking, she focused on executive strategic development evolving her business building skills. Co-founding A3J Group was a natural fit with the idea of creating a fierce ninja style unit that outperforms all others. In her free time, she is training for her next eventing competition or studying to become a Master of Wine or practicing her tornado kick. She could be with her family hiking or surfing or cooking. But she’s definitely not sitting around doing nothing.

Alex Walter

CIO

Alex brings 18 years of Maximo/EAM consulting experience in Life Sciences, Oil & Gas, Water/Waste Management, Government facilities, and much more. He has been awarded the honor of IBM Champion from 2018-2021, and is the brainchild behind our revolutionary mobile solution MxMobile.

In his free time he buys camping gear, enjoys a good circular saw and spends time with his family hiking, surfing and being outdoors.

Enhancement

• Configuration
• Integration & data loading
• Report improvement
• Screen view & workflow changes

Sustainability

• Report
• Troubleshoot
• Learn
• Teach
• Lead

Change Management

• Advanced systematic improvements
• Tailored procedure implementation
• Script-, report-, and application-level source and document control through Git repository software
• Training on how to document and deploy changes

Monitoring

• Active monitoring of your IBM Maximo system’s heartbeat
• Triggered notifications and support tickets when Maximo is not responding
• Automated Escalations based on the health of various critical background processes.
• Periodic and quarterly scheduled system health checks

System Support & Trouble Shooting

•On Demand Support
•Advanced Troubleshooting
•Access to A3J Group’s Maximo Support Environment to submit trouble tickets
•Directly report bugs, request fixes and enhancements

System Patching & Environment Refreshes

• Tentative, bi-annual feature pack releases from IBM
• Minor patches (defined by the last number in the version model)
,• Quarterly lower environment refreshes

Admin

MxAsk

Create new self-service requests in a wizard-style format, and view the details of their open service requests.

MxApprove

Accept, reject, and reassign assignments, review assigned records, and view your workflow inbox.

MxMobile

A suite of mobile applications designed to integrate with IBM Maximo Asset Management. These apps modernize workflow, expedite inventory processes, reduce time spent on data entry, and more.

Workflow

MxMeter

View and enter meter readings, view trends in graphical format, and create readings while in offline mode.

MxAsset

Scan barcodes and view maintenance facts. Create meter readings, work orders or service requests. Toggle asset downtime.

MxWork

Create new work orders on the go, view existing work orders and attachments, and capture fingertip electronic signatures.
0