Saturday, August 4, 2012

Maximo Webservice Interaction

Currently, I am engaged in project of Astra Daihatsu Motors to implement Maximo. This company currently implement SAP for their Finance. This is quite interesting to deal with. You may know that SAP has PI (Process Integration), while Maximo got MEA/MIF for the integration framework. SAP is implemented by AGIT (it may stand for Astra Graphia IT, not sure). You know when the first, we had a meeting with SAP team. We asked them to use DB as the endpoint for our integration. Surprisingly, they said that SAP cannot be configured to have DB as the endpoint. Uhhmmm, well, I had a thought that "is the SAP which has a very dull Integration component or is it about their capability of SAP implementation?".Well, I think is not the problem of SAP as SAP is a huge complex enterprise application which is not supposed to incapable of having such integration.

Hahaha, after the discussion, we, Maximo team, had a discussion regarding the SAP team. and yes, it was as what I thought. With all those stupid people, how could it be possible for AGIT to not know the way.

Ok, let's continue with the topic of this blog. After having discussion, we both agree that we gonna use webservice and yes, we, Maximo Team, are the one who perform most of the configuration -.-" (while we had a talk before the meeting that we gonna asked them to do the work most, mission failed...hahaha). Ok, then in Maximo we had Interaction diagram which can be used to do the work. As we do not need to perform any code to use this. This feature is very handy in this situation. Just doing configuration and not coding. Very nice of Maximo Feature here (I should get credit for this). But the bad news is that this feature cannot deal with SOAP which require header in the request. You will get an error of axis (I forget the error message). But, it may be fulfilled if I do some coding in the mapping class in the Interaction (I havent tried this anyway but will try later).

Monday, July 23, 2012

Transfer Order

If you had an experience of dealing with Maximo 7.5, especially in the part of Transfer Order or Internal Purchase Order, you will notice that Maximo is so freakin slow. To transfer about 1500 assets, you gonna ends up with a hung machine. The figure may be too much for Maximo to transfer. In Maximo, there are 2 activities of Transfer, we call it Transfer Out and Transfer In. We can breakdown the activities of both, to be more detail, but i dont want to share it out here. What i want to share out is that, the slowness of Maximo. I implemented Maximo in AORA, and you know the number of assets to transfer daily can reach about 1500 even more. All the people really got screw up with the slowness. Some more the websphere was restarting by itself because of lacking memory. Digging into the source of Maximo, makes me understand that there is a  Maximo developer who fucks up with the code.

Knowing that, I just modified the Transfer Order process. Streamlining the process as to use excel to perform Transfer Order and let the background process deal with the file will help users' tasks on using Maximo. Besides, having API of Maximo is really helpful in designing your code or doing customization of Maximo. And now, there is no more people of AORA got screwed because of the new design of Transfer Order.

One of the mechanism of Transfer Order that I have changed is related to the way Maximo creates record of invuselinesplit, shipment, shipmentline and matrectrans. Most of you may know what all of these tables for when you perform Transfer Out(Most of these tables are introduced in latest Maximo 7.5), these tables are used most. Maximo 7.5 process the records on the last 3 tables in the same method, which is during status change. Imagine, that you are going to Transfer Out a thousands of records and with the current process, Maximo will populate a thousands and more record in memory. That's y, Transfer Out process takes too much resources and takes too much time for user to complete. I changed the way this Transfer Out process does. So, When user will Transfer Out a thousand of records, the process will populate in the memory for about 20 records, after that, it will save it to DB. In this way, there will no more Out of Memory problem in your Maximo application when you do Transfer Out.

table or view does not exist

Just to share out something about Oracle during implementation of Maximo in my client. I was doing some integration between Maximo and MQ. As there is no clear way of doing integration between Maximo and MQ, we decided to use DB as the endpoint of Maximo integration to MQ. The data is only one way, that is from MQ to Maximo.We use Oracle package which runs every 8 am and 5 pm every day.

The things came up when I created stored procedure from other schema. If we test the query in the schema (not in stored procedure), it was smoothly being executed, but if we apply it in the stored procedure. The stored procedure wont be able to be compiled with error of nonexistence of table. Granting privilege will solve the problem

Sunday, October 30, 2011

Update field automaticaly once another field get updated

Now, I just want to share out a bit of how to update the field automatically in Maximo. A lot of time, we have requirement on how to update the field once another field get updated. Yes, this is really to ease user for not updating another field manually while the information exists in another table. Well, this kind of behaviour is quite common in the UI of maximo. Let's say in the Purchase Order application. Once you update the field of quantity, you should get the total cost of the purchase. that is, one of the default behavior of the Maximo UI.


In order to perform the above behavior, you can do it in 2 ways.
  1. Coding in the level of Mbo
  2. Coding in the level of Bean
Both must be done by coding. :P Well, it's indeed this blog is meant to be.
Anyway, doing coding in level Mbo, you can do it in Fld classes. Thus, you need to perform some changes on metada of Maximo's database. But, one thing that you need to ensure is that you update the same Mbo as what the bean is actually display. Because, a lot of time, the mbo object is not the same as what the mbo object used in Bean. Thus, updating the data will take no effect on the mbo which current bean displays.

doing coding in the level of Bean, will definitely give you the right Mbo. Thus, there is no need to worry about different Mbo object problem as I describe above.