Wednesday, 24 July 2019

Maximo SOAPUI error javax.xml.ws.WebServiceException


SOAPUI error while sending payload to below url (in cluster environment)

http://localhost:9080/meaweb/services/MXASSET

Error:

<faultcode>soapenv:Server</faultcode>
 <faultstring>javax.xml.ws.WebServiceException</faultstring>

Systemout log error:
CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "wsSecureProcessMOS" on bean "BeanId(maximoui#mboejb.jar#mosservice, null)". Exception data: java.lang.NullPointerException


Cause: This error occurs in cluster environments. MEAMDB is configured for MIF cluster and its port is 9082 in my case. But I was using UI port 9080.

Solution 1: change port in url 
http://localhost:9082/meaweb/services/MXASSET

Solution 2: This error may occur if AD is configured. If authentication is basic and userid & password is wrong, then this error occurs. Enter correct credentials.

and then send payload to it. 


Thursday, 13 June 2019

Maximo Industry Solutions Prefix and Java versions

Industry Solution Prefix
Calibration.................................................... PLUSC
Calibration Mobile........................................... PLUSC
Asset Configuration Manager...................... PLUSA
Government..................................................... PLUSR
Nuclear.............................................................. PLUS
Oil and Gas.................................................... PLUSG
Primavera Adapter........................................ PLUSV
Service Provider.......................................... PLUSP
Transportation...................................... PLUST
Utilities.................................................... PLUSD
Spatial.................................................... PLUSS
Maximo for Energy Optimization..................... PLUSE
Health Care......................................... PLUSH
Facilities and Space Planning................. PLUSF

Source: https://www-01.ibm.com/support/docview.wss?uid=swg21650645

Java Server Runtime Environment 1.7 ( JDK ) is supported on all Feature Pack levels of Maximo release 7.6.0.
Java Server Runtime Environment 1.8 ( JDK ) is supported on Feature Pack levels of Maximo release 7.6.0.6 and newer.
Java Server Runtime Environment 1.8 ( JDK ) is required on Feature Pack levels of Maximo release 7.6.1.0 and newer.

Tuesday, 11 June 2019

Maximo 7.6.1 not validate comments in condition

Recently I faced an issue while doing upgrade from Maximo 7.5.0.6 to Maxmo 7.6.1

There was a workflow condition contains sql comments like "--test commetns".

Maximo 7.5.0.6 - Go to condition expression manager --> select any object --> enter any valid query and also enter "-- test comments" --> click on test expression --> you will get validation successful

For example:
Object = PR
Condition=
:contact='xxxx'
--test comments

Click on "Test Expression" --> Validation Sucessful

Maximo 7.6.1 - Go to condition expression manager --> select any object --> enter any valid query and also enter "-- test comments" --> click on test expression --> ERROR: condition#ConditionInvalid

For example:
Object = PR
Condition=
:contact='xxxx'
--test comments

Click on "Test Expression" --> Error System Message popup "condition#ConditionInvalid"

Solution: Remove the comments in the condition.




Monday, 27 May 2019

Error in SOAPUI - axis2ns1:Server Internal Error

Error: 
Response:
      <soapenv:Fault xmlns:axis2ns1="http://schemas.xmlsoap.org/soap/envelope/">
        <faultcode>axis2ns1:Server</faultcode>
        <faultstring>Internal Error</faultstring>
        <detail/>
      </soapenv:Fault>

Solution:
Add custom property "webservices.unify.faults" as false in websphere.

Servers > Server Types > Websphere application servers > Application Servers > MXServer > Process definition > Java Virtual Machine > Custom properties > Create new property - webservices.unify.faults = false

Save to master configuration and Restart the Application Server

Note: In cluster environment, add property to all clusters.
Source: https://www-01.ibm.com/support/docview.wss?uid=swg21984967 

Tuesday, 12 March 2019

Display "Select Action" menu on toolbar

In Maximo 7.6.1, system property is added to display "Select Action" menu on toolbar. Or else it will display on side bar.

System property name: mxe.webclient.showSelectActionInToolbar
Set to 1 to always show Select Action drowdown in the toolbar.

After Maximo upgrade toolbar actions are missing

When I upgrade to Maximo 7.6.1, toolbar options are not displayed.

Solution: Go to System Properties application --> search for "mxe.webclient.showOnToolbar"

Change global value to empty, I mean left it blank.


Save the property and do live refresh.

Monday, 4 March 2019

Enable/Disable MIF authentication


Disable MIF authentication:

In Maximo 7.6.1 --> System property --> mxe.int.allowdefaultlogin = 1
This property also overrides the ALLOWDFLTLOGIN settings in the ejb-jar.xml file for the default integration user.
source: https://www.ibm.com/support/knowledgecenter/en/SSLKT6_7.6.1/com.ibm.mam.doc/overview/c_new_mif_sys_prop_.html

NOTE: Cluster environment, restart all the clusters.

Enable MIF authentication:

Maximo authentication is enabled by setting the mxe.useAppServerSecurity system property to 0 (false).
If maximo authentication is enabled, all HTTP-based inbound transactions must specify an HTTP header with the following attributes:
MAXAUTH
username:password (User credentials encoded to base64 format)

Note: I used this website to encode base64 https://www.base64encode.org/

Maximo Application Server authentication is enabled by setting mxe.useAppServerSecurity system property to 1 (true).

Take a backup of "ejb-jar.xml" from "maximo/applications/maximo/mboejb/ejbmodule/META-INF".
Modify "ejb-jar.xml" : ALLOWDFLTLOGIN as 1 (change 4 entries)
<env-entry>
<env-entry-name>ALLOWDFLTLOGIN</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>1</env-entry-value>
</env-entry>

The ALLOWDFLTLOGIN value must be set to 1 (true) for each of the following services in the XML file:
Enterprise Services
Object Structure Service
Standard Services
Workflow service

Note: The default integration user is not supported if you use the REST API or OSLC API. After you update the ejb-jar.xml deployment file, you must rebuild and redeploy the Maximo EAR file.

Source: https://www-01.ibm.com/support/docview.wss?uid=swg21965724 

Always try above steps in non production environments.


Friday, 8 February 2019

ORA-00959: Tablespace 'MAXIMO' does not exist

Error occurred while doing updatedb: Maximo 7.6.1 - Oracle 12c (12.2) - Websphere 9.0.0.7

ORA-00959: Tablespace 'MAXIMO' does not exist

After creating oracle database instance, we creates tablespaces MAXDATA, MAXTEMP and MAXINDEX.

Identify whether store partitions of the tables and indexes are correctly inserted in below tables:

SELECT DISTINCT STORAGEPARTITION FROM MAXTABLECFG;

if it returns MAXIMO, then run below query

UPDATE MAXTABLECFG SET STORAGEPARTITION = 'MAXDATA' WHERE STORAGEPARTITION = 'MAXIMO' ;

UPDATE MAXTABLE SET STORAGEPARTITION = 'MAXDATA' WHERE STORAGEPARTITION = 'MAXIMO' ;

COMMIT;

Now will verify in MAXSYSINDEXES

SELECT DISTINCT STORAGEPARTITION FROM MAXSYSINDEXES;

if it returns MAXIMO, then run below query

UPDATE MAXSYSINDEXES SET STORAGEPARTITION = 'MAXDATA' WHERE STORAGEPARTITION = 'MAXIMO' ;
COMMIT;

For me, above solution is worked. Please try in dev environment and analyse the solution, before you apply to production.

Tuesday, 22 January 2019

Kill Oracle session

Sorry guys, its been long time.

Error occured in Maximo 7.6.1 and Oracle 12c. This error occured while doing db config after adding index in WORKORDER table.

Error: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

Ran below query to find out the locked sessions:

select a.sid, a.serial#,b.object_id,b.oracle_username,b.os_user_name,c.object_name,c.owner from v$session a, v$locaked_bject b, dba_objets c where b.object_id = c.object_id and a.sid = b.session_id and object_name='<TABLE NAME>';

Once you get the output, note the sid and serial# values.

Run below query to kill the locaked session by login into sqlplus as user 'system'. If you know any user like 'sys' or 'maximo' having privileges to kill session, use them.

alter system kill session 'sid,session#'; -- Replace the sid and serial# values in the query.

Now verify DB config is stuck:

select * from maxvars where varname = 'CONFIGURING'; --Verify VARVALUE=0

If VARVALUE is 1, then change to 0.

update maxvars set varvalue = 0 where varname = 'CONFIGURING';

commit;

Sometimes it is required to restart the server. In my case, DB Configuration application was hung. so restarted the server. Once application is up, then recreated the index.

Thank you.


Thursday, 17 September 2015

MBO Date Formats

Sometimes we need to filter the MboSet records based on dates.
  • By using MXFormat.dateToSQLString(Date d) you can get the date format as "yyyy-MM-dd".

For example:
MboSetRemote mboSetRemote = getMboSet("ASSET");
mboSetRemote.setWhere(MXFormat.dateToSQLString(getDate("STATUSDATE")));

Here MXFormat.dateToSQLString will return date as string and format is '2015-09-17' (with single quotes).

  • If your database is using different date format, then update it in system properties mxe.db.format.date and use SQLFormat.getDateFunction(Date d)

For example:
MboSetRemote mboSetRemote = getMboSet("ASSET");
mboSetRemote.setWhere(SQLFormat.getDateFunction(getDate("STATUSDATE"));

Here SQLFormat.getDateFunction will return date as string in two ways:

1. If mxe.db.format.date is not null/blank then it will return string with given date format in this property.
for example: If mxe.db.format.date is dd-MM-yyyy, then return string will be '17-09-2015' (with single quotes)
2. If mxe.db.format.date is null/blank, then it will return same as MXFormat.dateToSQLString method, i.e. '2015-09-17' (with single quotes).

Hope it helps :)

Wednesday, 9 September 2015

BMXAA6002E - You cannot save object JOBPLAN : Job Plan=TESTJP1 Organization=ORG1 Site=SITE1 Revision=0 because of the data security restrictions. If you save the object, it becomes read-only and hidden

Error: BMXAA6002E - You cannot save object JOBPLAN : Job Plan=TESTJP1 Organization=ORG1 Site=SITE1 Revision=0 because of the data security restrictions. If you save the object, it becomes read-only and hidden

Environment: Maximo 7.6.0.1

Steps to reproduce above error:

1. Create a job plan and save it with DRAFT status.
2. Create a condition expression "status <> 'DRAFT'".
3. Create a global data restriction --> Object restriction --> Object JOBPLAN , app JOBPLAN , READONLY and add condition created in step 2.
4. Create a new user and associate a security group which has access job plan application (not maxadmin group).
5. Login with new user and go to job plans application.
6. Change status of job plan created in step 1 to ACTIVE and save the record.
7. Above error will occur.

Note: These steps will reproduce error in Maximo 7.6.0.1. In Maximo 7.1, job plans are editable even status is ACTIVE. So above steps will not reproduce errors in Maximo 7.1.

Cause: Out of box Job plan mbo is flagged to readonly when status is ACTIVE or INACTIVE. In our case, condition again trying to flag it readonly for the same mbo, hence this error occurs.

Solution: No need to put condition for Job plan to make it READONLY when status is ACTIVE or INACTIVE.

These are just my findings, if anyone have different approach, please provide your inputs in comments.

Friday, 4 September 2015

Maximo restore database error in SQL Server

System.Data.SqlClient.SqlError: RESTORE cannot process database '<DbName>' because it is in use by this session. It is recommended that the master database be used when performing this operation.

While restoring database, faced above issue.

Even though all services stopped, still restore database given error that “Database is in use by this session”

Solution:

Connect to Sql server management studio:

Expand Security à Login à Right click on “maximo” à Click Properties

 “Default database:” value = <your database name>. Change it to “master”.

Friday, 24 July 2015

Automation Script - Retrieve List

Sample code - Retrieve list event of attribute launch point in automation script:

In my example, I want to display only PR companies starting with "SK".

1. Created a table domain, TEST_COMP_SK
2. Create a attribute launch point and select option "Retrieve List".

Launch point name: TEST_PRVENDOR
Object: PR
Attribute: VENDOR

Script Name: TEST_RETRIEVELIST
Script Language: jython

Source Code:

domainid = "TEST_COMP_SK"
listWhere = "COMPANY LIKE 'SK%'"
listOrder = "COMPANY"

Save the script.

THATS IT :)

Now you can test in PR application - Company lookup - It will display companies starting with SK and order by company name ascending.

Below information will give the list of implicit variables in Retrieve List event:

1. domainid - Specifies the domain that is used to provide the list of values that are shown for the attribute launch point.
2. listWhere - Establishes which set of result data is displayed and which filter is set before the results are shown. Set the listWhere variable to a WHERE clause that uses the related MBO.
3. listOrder - Set to any ORDER BY attribute names that are used to order the results of the retrieve list event.
4. relationObject - Applies to the related MBO that is searched from the current MBO.
5. relationWhere - Establishes the criteria that is used to perform the retrieve list event. Set to a WHERE clause that queries the related MBO.
6. srcKeys - Applies to the set of attribute names from the current MBO that is used to lookup a related record in another related or target MBO. For example, the set of attribute names from the current MBO might be used to look up that FAILURECODES field from the ASSET business object.
7. targetKeys - Applies to the set of attribute names in the target MBO that is looked up from the current MBO on which the attribute launch point is defined.
8. listErrorGroup - Identifies the group ID of the message that the user sees when the retrieve list event fails.
9. listErrorKey - Identifies the key ID of the message that the user sees when the retrieve list event fails.

Source: http://www-01.ibm.com/support/knowledgecenter/SSLKT6_7.6.0/com.ibm.mbs.doc/autoscript/r_variables_automation_scripts.html?lang=en



 

Monday, 15 June 2015

Error: The mbo value info for atttribute AUTHALLGLS for object grpreassignauth could not be retrieved

One of my friend faced this issue. This error is little bit tricky, because there is no attribute called "AUTHALLGLS" exist in GRPREASSIGNAUTH table. But still maximo throws this error. And also error logs will not provide any detailed information. This error can find in system out log as a warning.

This error can occur while creating new security group or assigning security group to user.

Cause: Few security groups has granted access to create users.

Solution: Except for MAXADMIN security group, need to remove granted access to create users for other security groups.

I am providing this in my blog, just in case, if anyone faces this issue and not to waste their time to solve it.

 

Tuesday, 9 June 2015

Continous queue stopped processing records into queue.

While importing records into Maximo using continuous queue, after certain amount of errors (in my case, after every 10 errors) in message reprocessing application, continuous queue stopped working.

To solve this issue, I followed below steps:

1. Enable MDB bean for cqin err:

Take a backup of "ejb-jar.xml" from "<Drive>:\IBM\SMP\maximo\applications\maximo\mboejb\ejbmodule\META-INF"
Open the file from "ejb-jar.xml" in notepad++, search for "MEA MDB for error queue". Uncomment it.

BEFORE CHANGE:

<!-- MEA MDB for error queue
    <container-transaction>
     <method>
        <ejb-name>JMSContQueueProcessor-2</ejb-name>
        <method-name>*</method-name>
     </method>
   
     <trans-attribute>Required</trans-attribute>
   
    </container-transaction>
-->

AFTER CHANGE:

<!-- MEA MDB for error queue-->
    <container-transaction>
     <method>
        <ejb-name>JMSContQueueProcessor-2</ejb-name>
        <method-name>*</method-name>
     </method>
   
     <trans-attribute>Required</trans-attribute>
   
    </container-transaction>

Take a backup of "ibm-ejb-jar-bnd.xmi" from "<Drive>:\IBM\SMP\maximo\applications\maximo\mboejb\ejbmodule\META-INF"
Open the file from "ibm-ejb-jar-bnd.xmi" in notepad++, search for "MEA MDB for error queue". Uncomment it.

BEFORE CHANGE:
<!-- MEA MDB for error queue
  <ejbBindings xmi:type="ejbbnd:MessageDrivenBeanBinding" xmi:id="MessageDrivenBeanBinding_1" activationSpecJndiName="intjmsacterr">
    <enterpriseBean xmi:type="ejb:MessageDriven" href="META-INF/ejb-jar.xml#MessageDriven_JMSContQueueProcessor_2"/>
  </ejbBindings>
-->
AFTER CHANGE:
<!-- MEA MDB for error queue-->
  <ejbBindings xmi:type="ejbbnd:MessageDrivenBeanBinding" xmi:id="MessageDrivenBeanBinding_1" activationSpecJndiName="intjmsacterr">
    <enterpriseBean xmi:type="ejb:MessageDriven" href="META-INF/ejb-jar.xml#MessageDriven_JMSContQueueProcessor_2"/>
  </ejbBindings>

Rebuild and Redeploy maximo.

2. Login into Maximo:

Go to --> System Configuration--> Platform Configuration --> Select "Crontask setup" --> Search for "JMSQSEQCONSUMER" and open it.

Create a crontask instance of "CQINERR", Schedule "30s,*,*,*,*,*,*,*,*,*", Runas user "MAXADMIN".
 In parameters, Enter below values:
MESSAGEPROCESSOR = psdi.iface.jms.QueueToMaximoProcessor
QUEUENAME = psdi.iface.jms.QueueToMaximoProcessor
ERRORQUEUE = 0
TARGETENABLED = 0

Activate the instance and save the crontask.

3. Change destination of errors in websphere:
Login into websphere.
In Left panel --> Expand "Service Integration" --> Click on "Buses" --> Right panel click on "intjmsbus"-->Under "Destination Resources" click on "Destinations" -->Click on CQINBD -->Under "Exception Destination" select "Specify"--> Enter the value CQINERRBD --> Click "Apply" --> Save it into master --> Click ok --> Save it into Master.
Note: No need to restart server.

Testing:

Import 100 error records into any application and search in message processing that all 100 records exists in it. Earlier it was only 10 error records in my case, now it shows all 100 records.
In websphere, you can notice that all error records are moved into cqinerrbd destination.

I hope this article may help to some one who are new to maximo websphere process. As I suggest always, first try in development environments and also above mentioned parameters may differ based on environments.




 

BMXAA0667E - The value of the changed attribute could not be assigned.

Error: BMXAA0667E - The value of the changed attribute could not be assigned.


 I faced this error, when trying to update length of one field in INVENTORY table. The field which I am trying to update length is a same as object and same as attribute in INVVENDOR table. So I started investigating INVVENDOR table, then I found below cause.

In my environment, problem is, INVVENDOR has a audit table A_INVVENDOR, but audit enabled is unchecked.
While investigating, found that, audit table A_INVVENDOR details available in MAXATTRIBUTECFG and MAXATTRIBUTE tables, but A_INVVENDOR table itself not exist.

Note: Before doing below changes, make sure you have backup of database. And better try in your development environment first.

Steps:

1. In database configuration, INVVENDOR table, make sure audit is disabled and audit table field is blank. In my case, audit enabled is false, but audit table field has value A_INVVENDOR. To remove, audit table field (it is read only), first check the check box of audit enabled, it makes audit table field editable. Now remove value of audit table field and uncheck audit enabled field. Save the record.

2. Apply configuration changes. It will remove A_INVVENDOR meta data available in MAXATTRIBUTECFG and MAXATTRIBUTE tables.

3. Now, change the length of the required field in INVENTORY table and save the record. Error will not occur.

 

Tuesday, 2 June 2015

Maximo attachments - doclinks

Step 1:
Create folder doclinks in your drive. And also create subfolders under doclinks --> "attachments", "images" and "diagrams".
Names of the folders are case sensitive.

Step 2:

1. Take a backup fo httpd.conf file from path <drive>\IBM\HTTPServer\conf
2. Open httpd.conf file from path <drive>\IBM\HTTPServer\conf
3. Find ‘DocumentRoot’ and change DocumentRoot "D:\doclinks"
4. Save and close the file.


Step 3:
Go to System properties application:
1. mxe.doclink.doctypes.defpath = D:\doclinks
2. mxe.doclink.path01 = D<PATH>\doclinks = http://<servername or IP>
3. mxe.doclink.doctypes.topLevelPaths = D:\doclinks
4. Rebuild and restart the server.


Step 4:
Login into Maximo.
Go to any application --> From select action menu click on "Manage folders"
Attachments = D:\doclinks\attachments
Images = D:\doclinks\images
Diagrams = D:\doclinks\diagrams



Step 5: Testing
Go to PR application --> Click new row and attach a document
Save it. Then click view attachments and click on the attached file. File will be opened.

Hope this topic will be helpful!! :)

Tuesday, 26 May 2015

Automation Script - get current date and time.

In automation script, there is no implicit variable available to get current date and time. I followed below procedure, to get current date and time to set date time field.

from java.util import Calendar

#Create a instance for Calendar
cal = Calendar.setInstance();

#Get Current date and time by using cal.getTime()
currentDateTime = cal.getTime();

#AS I AM APPLYING THIS SCRIPT TO WORKTYPE OF WORKORDER, ALREADY DECLARED VARIABLES FOR WORKTYPE as worktype AND TARGSTARTDATE as tsd

if worktype="CM":
 tsd = currentDateTime


Hope it helps to someone who are new to set date time in automation script.

 

Friday, 22 May 2015

Route stops data loading

While loading route stops, make sure below fields are exist in your file:

ASSETLOCORGID
ASSETLOCSITEID
ROUTESTOPID (This field is to provide sequence number of route stop for a respective route)

If those fields are not exist and trying to load route stops with locations, error will appear "XXXXX is not a valid location".

ROUTESTOPID will help to avoid routestop duplicates.
For example:
ROUTE,ASSETNUM,LOCATION,JPNUM,STOPSEQUENCE,SITEID,ROUTESTOPID
1001,,LOC1,,10,SITE1,1
1001,,LOC2,,20,SITE1,2
1002,LOC21,,10,SITE1,1
1002,LOC22,,10,SITE1,2
1002,LOC23,,10,SITE1,3
1002,LOC24,,10,SITE1,4

if you don't provide ROUTESTOPID, when doing routes data loading second time, it will add duplicate records.
Below format will create duplicate records in route stops:
ROUTE,ASSETNUM,LOCATION,JPNUM,STOPSEQUENCE,SITEID
1001,,LOC1,,10,SITE1
1001,,LOC2,,20,SITE1
1002,LOC21,,10,SITE1
1002,LOC22,,10,SITE1
1002,LOC23,,10,SITE1
1002,LOC24,,10,SITE1 

PM Records data loading

While data loading PM records, make sure USEFREQUENCY = 1 for frequency based PMs.

Otherwise, problem is, even though you saved the record, it will ask again to save the pm record. PM Work orders will not generate.

Maximo SOAPUI error javax.xml.ws.WebServiceException

SOAPUI error while sending payload to below url (in cluster environment) http://localhost:9080/meaweb/services/MXASSET Error : <f...