
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&v=2&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…