Archive for the ‘Maximo User Interface’ Category

Show Workorder on Google Map

Google Map in Workorder Tracking

Google Map in Workorder Tracking

Hello;

If you store coordinates in your workorders or location etc. you can show the places on google maps in Maximo. I implemented this on Maximo 6. There are many steps to accomplish this task.. I will tell you about it step by step…
1-You have to get a Google Map api key from this address: http://code.google.com/apis/maps/signup.html .. Write your maximo server address to the textbox and click Generate Key.. Note your key.. We will use it later…
2-Create iframe control: Go to %MAXIMOROOT%\applications\maximo\maximouiweb\webmodule\webclient\controls and create a folder named: iframe. We will send data to google map script from this control. I assume that longitude and latitude are stored in Workorder object as Longitude and Latitude attributes…
Create a jsp file named control.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<%@ include  file="../../common/controlheader.jsp" %>
	<%-- 
		PROPERTY	GLOBAL		VALUES
		id		true		...
		height 		false 		###
		width		false 		###
		url 		false		...
	--%>
	<mro:handleevent eventtype="loadinit">
		<mro:loadglobalproperties />
		<%
		int height = controlProperties.getInt("height", 100);
		int width = controlProperties.getInt("width", 100);
		String url = controlProperties.getString("src");
		%>
	</mro:handleevent>
 
	<mro:handleevent eventtype="render">
		<%
		int height = controlProperties.getInt("height", 100);
		int width = controlProperties.getInt("width", 100);
		String url = controlProperties.getString("src");
		String apptitle = sessionContext.getCurrentApp().getAppTitle();
		psdi.util.MXSession mxs=sessionContext.getMXSession();
		psdi.mbo.MboSetRemote woSet=mxs.getMboSet("WORKORDER");
		woSet.setWhere("WOCLASS in ('WORKORDER', 'ACTIVITY') and istask=0 and boylam is not null and enlem is not null");
		System.out.println("WO Count: "+woSet.count());
		java.util.ArrayList coordinateList = new java.util.ArrayList(woSet.count());
		for(int i=0;i<woSet.count();i++){
		java.util.ArrayList coordinate=new java.util.ArrayList(5);
		psdi.mbo.MboRemote wo=woSet.getMbo(i);
		coordinate.add(0,wo.getString("WONUM"));
		coordinate.add(1,wo.getString("DESCRIPTION"));
		coordinate.add(2,wo.getString("STATUS"));
		coordinate.add(3,wo.getString("LONGITUDE"));
		coordinate.add(4,wo.getString("LATITUDE"));
		coordinateList.add(coordinate);
 
		}
		session.setAttribute("CoordinatesList",coordinateList);
		%>
		<iframe src="<%=url%>" height="<%=height%>" width="<%=width%>"> </iframe>
	</mro:handleevent>
 
 
<%@ include file="../../common/controlfooter.jsp" %>

Here we defined iframe control and we added the workorder information to the CoordinatesList variable of session.

Now create another file called allwoongmaps.jsp in the same folder..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
	  <head>
	    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
	    <title></title>
	    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<strong>KEY</strong>"
	            type="text/javascript"></script>
	    <script type="text/javascript">
 
	    function initialize() {
 
	      if (GBrowserIsCompatible()) {
	        var map = new GMap2(document.getElementById("map_canvas"));
			 GEvent.addListener(map, "click", function(overlay, point){
			 if (point) {
			     map.addOverlay(new GMarker(point));
			     var msg = "Latitude: "+point.lat()+"<br>"+"Longitude: "+point.lng();
			     document.getElementById("mypoint").innerHTML = msg;
			 }  //close if(point)...
 
 
		   });   //close GEvent...
 
			var yellowIcon = new GIcon();
	yellowIcon.image ="http://esa.ilmari.googlepages.com/markeryellow.png";
	yellowIcon.iconSize = new GSize(20, 34);
	yellowIcon.iconAnchor = new GPoint(9, 34);
	var turqIcon = new GIcon();
	turqIcon.image = "http://www.google.com/uds/samples/places/temp_marker.png";
	turqIcon.iconSize = new GSize(20, 34);
	turqIcon.iconAnchor = new GPoint(9, 34);
 
 
 
	 <%
	java.util.ArrayList CoordinateList=(java.util.ArrayList) session.getAttribute("CoordinatesList");
		for(int i=1;i<CoordinateList.size()+1;i++){
			java.util.ArrayList Coordinate=(java.util.ArrayList)CoordinateList.get(i-1);
			String wonum=(String)Coordinate.get(0);
			String description=(String)Coordinate.get(1);
			String status=(String)Coordinate.get(2);
			String enlem=(String)Coordinate.get(3);
			String boylam=(String)Coordinate.get(4);
			double boydouble=Double.parseDouble(boylam);
			double enlemdouble=Double.parseDouble(enlem); 
			String marker="marker"+i;
			String point="point"+i;
			String icon;
			if(wonum.equalsIgnoreCase("1000"))
			icon="yellowIcon";
			else icon="turqIcon";
			if(i==1){ %>
	        map.setUIToDefault();
			map.setCenter(new GLatLng(<%=boydouble%>,<%=enlemdouble%>), 5);
			<%}%>
	          var <%=point%> = new GLatLng(<%=boydouble%>,<%=enlemdouble%>);
			  var <%=marker%>=new GMarker(<%=point%>,{icon:<%=icon%>});
	          map.addOverlay(<%=marker%>);
	     <% 
	    }%>
	}
	}
	    </script>
	  </head>
 
	  <body onload="initialize()" onunload="GUnload()">
	  <div id="mypoint"></div>
	    <div id="map_canvas" style="width: 470px; height: 200px"></div>
 
	  </body>
	</html>

On line 7 we add our own Google api key that we noted before… and we create our own map from longitude and latitude information on Workorder…
Now open Application Designer and export your application as xml file.Save it and back it up. then add this line to whereever you want.

<iframe src="http://localhost:7001/maximo/webclient/controls/iframe/allwoongmaps.jsp" height="200" width="500" id="genid_headera_4_child_1" />

localhost should be your servers ip…;
Save it and import from application designer.. Rebuild and redeploy… You’re going to see map like this…

read comments here

Set Inbox Order

Hello;
Our clients always have problems with their inboxes. One of the major problem is that the inbox is not sorted. To sort inbox in Maximo we have to modify a jsp file. Here is how it is done.. This is done for Maximo 6.2.2
First we open %MAXIMOROOT%\applications\maximo\maximouiweb\webmodule\webclient\controls\startcenter\portlets\inbxconfig.jsp file. Take a backup of this file…

Then we should find

1
2
3
4
else
		{
			portletBean	= (InboxPortletBean)sessionContext.getCurrentApp().get(portletId);
		}

After these lines add these…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
boolean allowsort = true;
		if (portletBean.isPropertyDefined("allowsort") && portletBean.getPortletInfoValue("allowsort") != null )
		{
		 if ( ((String)portletBean.getPortletInfoValue("allowsort")).equals("true"))
		 {
		  allowsort = false;
		 } 
		}
 
		if (allowsort)
		{
		 portletBean.setPortletInfoValue("sortattribute","startdate");
		 portletBean.setPortletInfoValue("sorttype","desc");
		}

On line 12,13 we ordered inbox to startdate descending… Then save the file… Rebuild and redeploy..

Have a good day…

PS: Test before taking it to the live system…

read comments here