Guide to integrating new ILOG optimization models for scheduling problems with Maximo Scheduler 7.5.2
Authors: Krishna Dantam, Sarika Budhiraja
Overview
Maximo Scheduler release 7.5.2 provides two optimization models for solving generic Scheduling problem.
· WORKPLAN model
helps with solving Resource Leveling and Capacity Planning use cases.
· WORKASSIGN model
helps with solving Labor Assignment and Spatial Scheduling use cases.
Each optimization model objective has a certain number of user-defined parameters and variables to adjust the results of the scheduling solution. However, the core input parameters to the model objectives cannot be altered out of the box. For example, resource leveling can solve the scheduling problem based on work order priority because it is included as an input parameter. Existing optimization model that are provided out of the box cannot be altered and only new optimization models can be developed by customers. This document provides needed information to integrate optimization models developed using “Eclipse for ODM Enterprise” (provided with IBM ILOG ODM Enterprise Developer Edition) for solving Scheduling problems with Maximo Scheduler product.
To build custom optimization model for scheduler the following additional licenses must be obtained:
· IBM ILOG ODM Enterprise Developer Edition
· IBM ILOG ODM Enterprise Optimization Server
High Level Architecture
The following architecture diagram shows the high level components of the scheduler optimization using ILOG Optimization server. Using this architecture it is possible to plug–in a custom optimization model into Maximo Scheduler Applications. Plugging in a new custom optimization model involves
Building new ODME application using “Eclipse for ODM Enterprise” and bringing that application files into Maximo.
Building adapter code that extracts the needed input data for the optimization from the Maximo database and process the optimized output.
Enable the Scheduler applications (UI) to make use of the optimization model.
The ODME application built using “Eclipse for ODM Enterprise” needs to be packaged into maximo ear file (using tools/script provided) so that Maximo can
Use that application and provide ability to deploy the application to ODME optimization server
Provide the ability to submit the optimization built using the ODME application and process the result utilizing the adapter.
Steps to add a new optimization model
Every optimization model must be identified by with a unique name within Maximo system and this name has to be linked to a ODM Application Name that is used to create the ODM Application within the “Eclipse for ODM Enterprise”. The ODM Application Name is used by the Optimization Server to identify the application.
To add new optimization model to the Scheduler applications, the following steps need to be followed:
a) Package the Optimization Model
Maximo Scheduler applications need to know about the Optimization Model files (created using “Eclipse for ODM Enterprise”) for deploying and for running the optimization. These files are packaged into a zip format and included as part of the maximo.ear file. The Maximo run time uses this zip file to deploy the optimization model to the optimization server as well as when the optimization is run.
Follow the steps below to package the custom model:
- Create a new folder for the custom model under optimization\odmeprojects\ folder. Copy all of your ODME application project files created using “Eclipse for ODM Enterprise” in this folder.
For example, for your custom model called WorkPlanningNEW, you can create a folder WorkPlanningNew and copy your entire odme application project files created using “Eclipse for ODM Enterprise” in this folder.
- Make a copy of existing createdeployments.xml file and save as createdeplymentsNEW.xml. Add the following section to the target name CreateALLODMPackages:
<antcall target="createODMAppPackage">
<param name="ODMPROJECT" value="WorkPlanningNEW\MaximoScheduler1"/>
<param name="ODMAPP" value="NEWWORKPLAN"/>
</antcall>
Where the ODMPROJECT points to the ODME Project folder and the ODMAPP is the new ODM Application name to be used within Maximo.
- Make a copy of optimization/tool/createdeployments.cmd and save as createdeploymentsNew.cmd . Replace the following line
call %ANT_HOME%\bin\ant -buildfile .\createdeployments.xml %1
with
call %ANT_HOME%\bin\ant -buildfile .\createdeploymentsNew.xml %1
- Run the createdeploymentsNew.cmd from a command prompt. This will create the optimization package used by Maximo in the following folder (using the ODMAPP name) applications\maximo\optimization\mxodmepackages. Make sure the package zip file is created under this folder.
b) Implement Custom Adapter
When an optimization run is initiated the scheduler framework code figures out the adapter that is associated with the optimization model and does the following:
- Creates a scenario within the optimization scenario repository associated with optimization model.
- Asks the adapter to process the input that is needed for the optimization run using the scenario that is created.
- Contacts the optimization server and processes the optimization for the input data for the scenario (Submits the optimization job).
- Waits for the optimization run to be completed.
- After the optimization run, the scheduler framework would get a call back and based on this call back the adapter would be called again to process the output.
The following diagram illustrates how the scheduler framework code uses the adapter to run a specific optimization requested.
Complete the following steps to implement and register the Adapter:
- Create a Java class that extends the
com.ibm.tivoli.maximo.optimization.adapter.DefaultOptimizSchedule Planning AdapterationModelAdapter.
See Index Schedule planning Adapter for sample code.
Input Data Processing
Implement the following method (prepareInputData) to prepare the input data needed to solve the optimization problem. This method implementation should read the data from Maximo database and write the data to the optimization scenario input tables using ILOG ODME client API. This method is called whenever optimization run is requested for the registered adapter.
public void prepareInputData(OptimizationModelAdapterInputDataContext inputDataContext,
OptimizationInputProcessParameters inputProcessParameters) throws MXException;
Implement the following method (getInputParameters) for getting the input parameters. This method is called whenever optimization run is requested for the registered adapter. The parameters for the optimization model saved in Maximo database (when the optimization run is initiated) need to be read and any Serializable Java object that the adapter can use (as a part of the call to prepareInputData()) can be constructed based on this data. The created Serializable Java object represents the Input Parameter information that is used by the adapter code to pass the information to the ODME Scenario that the user runs. This Serializable Java class should have the get and set methods for each parameter name. The set methods are used by the input parameter dialog when the user interacts with the dialog to modify the parameters. The get methods are used by the adapter code to get access to the input parameters set by the user.
public Serializable getInputParameters(OptimizationModelAdapterInputDataContext inputDataContext,
Long skdProjectId ) throws MXException;
Output Data Processing
Implement the following method (processOutputData) to process the optimization solution. This method implementation should extract the data from the scenario output tables and write the data to the Maximo database appropriately. This method is called only if the optimization solve is successfully completed and a solution exists to the problem.
public void processOutputData(OptimizationModelAdapterOutputDataContext outputDataContext, OptimizationOutputProcessParameters outputProcessParameters) throws MXException;
- Copy the complied classes (Input and Output Data Processing) in the following folder under appropriate package name used for Java classes:
MAXIMO_FOLDER\applications\maximo\optimization\classes
- Copy the Serializable class in the following folder under appropriate package name used for Java classes
MAXIMO_FOLDER\applications\maximo\businessobjects\classes
- Register the adapter class by inserting data into MXODMAPP table.
For example:
insert into mxodmapp (odmappname, description, mxodmappid, hasld, langcode, odmapplicationid,
isdeployed, adapterclass) values ('NEWWORKPLAN', 'New Model', 4, 0, 'EN', 'MaximoScheduler1', 0,
'newoptimization.newworkplan.SchedulePlanningAdapter')
Where
ODMAPPNAME is the new ODM application name.
ODMAPPLICATIONID is ODM Application Id for the application created in “Eclipse for ODM Enterprise”.
ADAPATERCLASS is the class name (created in step 4). It is needed to pass input parameters and get output parameters.
c) Register Optimization Model
The new custom model needs to be registered in the Maximo database, so that Maximo applications can know which model to run based on user selection. Every optimization model must also have Input Parameters that are filled-in by the user when running optimization. The input parameter data is stored in the Maximo database and controlled via Maximo Business Object associated with the table via UI.
Optimization Model Usage Type:
An Optimization model can be reused for different purposes based on the use case. For example, Resource leveling and Capacity planning use cases use the same optimization model called WORKPLAN. The model should know what logic to trigger based on the use case (use case specific information can also be passed to the optimization model via input parameters). This can be treated as a usage and the optimization model for this usage name needs to be registered.
The new custom model can be added for Scheduler or Graphical assignment applications. In this document, Scheduler application is used as an example. Also the usage type used in the examples is called USAGE1. Make sure to replace these with appropriate values.
Complete the following steps to register the optimization model and its usage type:
- Create Signature option for new model. This sig option is used to control security access for this optimization model usage type.
- Go to Platform Configuration and then Application Designer.
- Filter for application “Scheduler”.
- From Scheduler application, select action "Add/Modify Signature Options”.
- Add a new row.
For the option name, specify the usage type for this model
- Fill in the description.
- Save.
For example, Option name as USAGE1, Description: New Model Usage1,
Prerequisite: SAVE.
- Create a menu item that will be used to invoke the input parameter dialog for this usage type of the optimization model.
- Go to Modify/Add Select Action Menu.
- Add a new row.
- Enter the values.
For example:
- Element Type: OPTION
- Key Value : USAGE1
- Position: 110
- SubPosition :40
- Visible : checked
- Tabs: MAIN
- Save.
- Grant access for the new menu option (created above).
- Go to Security Groups application.
- Select group that needs access to this menu option.
- Click on Applications tab.
- Select ‘Scheduler’ application
- Grant access to usage type signature option( USAGE1).
- Create Maximo business object for input parameters and default values
- Create a table for input object. The table/object name must be specified with the following notation.
SKDusagetypePARAM. (take a look at the V7520_21.dbc included with scheduler code)
For example SKDUSAGE1PARAM
INPUTNAME UPPER (30) Identifies the USAGE1 template.
DESCRIPTION ALN(100) Describes the resource leveling template
ISTEMPLATE YORN(1) Set to 1 if parameters are through USAGE1 template dialog or the default is set to 0.
SKDNEW1ID INTEGER(12) Unique Id
PARAM1 YORN(1) Input parameter1
PARAMn ..... Input parametern
- Create Maximo business object classes to represent the above business object.
For example, create SKDUSAGE1ParamSet and SKDUSAGE1Param classes. Just like any other Maximo Business Object classes, make sure to run the RMIC command to generate the stub files for these classes (new SKDUSAGE1ParamSet & SKDUSAGE1Param classes).
- Create an entry into SKDODMAPP table to register the input object name to optimization model usage type. The following describes the columns of the table:
Odmappname (Identifies name of the ODM application)
Description (Describes the ODM application)
Usewith (Indicates the maximo application from where the optimization model is run.)
Optscenario (Optimization scenario type name.) .It should be OPTIONNAME created in step 6.
Inputobj name (Indicates the input parameter object name of the ODM application.) created in step 8.
Skdodmappid ( Unique Id)
Hasld (Boolean flag to indicate if there is any long description for this record) Set it to 0.
For example, the following SQL shows an entry that registers the optimization model usage called USAGE1, with the Scheduler application.
insert into skdodmapp (odmappname, description, usewith, inputobj, skdodmappid, optscenario, hasld, langcode)
values ('NEWWORKPLAN', 'New Model', 'SCHEDULER', 'SKDUSAGE1PARAM', 100, 'USAGE1', 0, 'EN')
- Create the following relationships to access the input parameter data. Make sure to change values appropriately based on the names used.
- Go to Database Configuration.
- Select object SKDUSAGE1PARAM
- Click on Relationships tab.
- Add new row.
- Add the following data.
- Name: SKDPROJECTSCENARIO
- Child: SKDPROJECTSCENARIO
- WhereClause: inputobjid =:skdusage1paramid
- Remarks: Relationship to the SKDProjectScenerio table, used to find all project scenerio's using in template.
- Save.
- Find object SKDPROJECTSCENARIO
- Go to Relationships tab.
- Add new row.
- Add the following data.
- Name: USAGE1PARAM
- Child: SKDUSAGE1PARAM
- WhereClause: skdusage1paramid=:inputobjid
- Remarks: New Model Parameter.
- Save.
d) Enable Scheduler applications (UI) to make use of the Custom Optimization Model
The new custom model requires multiple dialogs to integrate well into the Maximo applications. These dialogs are for
- Create scenario.
- Run optimization scenario
- Lookup template
- Update the presentation of Maximo application that requires this optimization model. This is done by creating the following dialogs. The dialog name must be specified in the following format:
Create scenario dialog,
Use the dialog id as usage type. It will get created in Register Optimization Model section in Step1. For example USAGE1.
Run optimization dialog,
Use the dialog id as usage type appended with _OPTMZ.
For example USAGE1_OPTMZ
- A template (optionally) can be created to default input parameters for the new scenarios by following steps:
- Add Sigoption:
- Go to System Configuration ->Platform Configuration ->Application Designer.
- Filter for application “Scheduler”.
- From Scheduler application, select action "Add/Modify Signature Options”.
- Add a new row.
- For the option name, specify the usage type for this model
- Fill in the description
- Save.
For example, Optionname as USAGE1_TL and Description: New Model Usage1
- Create a menu item that will be used to invoke the input parameter dialog for this usage type of the optimization model.
- Go to Modify/Add Select Action Menu.
- Add a new row.
- Enter the values.
For example :
- Element Type: OPTION
- Key Value : USAGE1_TL
- Position: 275
- SubPosition :0
- Visible : checked
- Tabs: ALL
- Save.
- Grant access for the new menu option (created above).
- Go to Security Groups application.
- Select group
- Click on Applications tab.
- Select ‘Scheduler’ application
- Grant access to usage type sig option (USAGE1_TL).
- Update the presentation of appropriate Maximo Scheduler application and add new template dialogs.
- Create template dialog; use the dialog id as signature option created above step. For example USAGE1_TL.
- Template lookup dialog; Use the dialog id as LOOKUP_signature option created in above step. For example LOOKUP_USAGE1TL
e) Enable the custom model to run via Crontask
To enable the optimization model run using cron task. The Cron Task definition can be added in two ways, one via the Maximo Cron Task Setup application or via SQL tool.
Enabling with the Cron Task Setup application
To enable via Maximo Cron Task Setup Application, go to the Cron Task Setup application and follow these steps:
- Add the following cron task definitions for a recurring task :
- Click on New Cron Task Definition button on the top.
- Add the following data for recurring cron task definition:
- CronTask : Crontask name should be in the following format:
"ODME" appended with usage type (created in Register Optimization Model section in step1).
For example, ODMEUSAGE1
- Description: Crontask definition to run New Model Optimization
- Class: Set as com.ibm.tivoli.maximo.skd.optimization.ODMECronTask
- Access Level: READONLY
- Save.
For example,
Cron Task = ODMEUSAGE1
Description = Crontask definition to run New Model Optimization
Class = com.ibm.tivoli.maximo.skd.optimization.ODMECronTask
Access Level = READONLY
- Add the following cron task definitions for a one-time cron task:
- Click on New Cron Task Definition button on the top.
- Add the following data for one time cron task definition:
- CronTask : Crontask name should be in the following format:
"ODME" appended with usage type (created in Register Optimization Model section in step1) appended with "T"
For example, ODMEUSAGE1T
- Description : Crontask definition to run New Model Optimization
- Class: com.ibm.tivoli.maximo.skd.optimization.ODMECronTaskT
- Access Level: READONLY
- Save
For example,
Cron Task = ODMEUSAGE1T
Description = Crontask definition to run New Model Optimization
Class = com.ibm.tivoli.maximo.skd.optimization.ODMECronTaskT
Access Level = READONLY
Enabling via SQL tool
To enable via SQL tool, using the following SQL as an example. Make sure to change the values appropriately.
insert into crontaskdef (crontaskname,classname,description,crontaskdefid,accesslevel,langcode,hasld)
select 'ODMEUSAGE1','com.ibm.tivoli.maximo.skd.optimization.ODMECronTask',
'Crontask to run New Model Optimization.', crontaskdefseq.nextval, value, 'EN', 0 from synonymdomain
where domainid = 'CRONACCESS' and maxvalue = 'READONLY';
insert into crontaskdef (crontaskname,classname,description,crontaskdefid,accesslevel,langcode,hasld)
select 'ODMEUSAGE1T','com.ibm.tivoli.maximo.skd.optimization.ODMECronTaskT',
'Crontask to run New Model Optimization.', crontaskdefseq.nextval, value, 'EN', 0 from synonymdomain
where domainid = 'CRONACCESS' and maxvalue = 'READONLY';
Commit;
f) Deploying Optimization Model
Every time run the following command to update any new model changes. This command is created as part of packaging the custom model earlier.
optimization\tools createdeploymentsNew.cmd
Make sure the package zip file is updated in the following folder after the command is successfully run
applications\maximo\optimization\mxodmepackages
Rebuild and redeploy Maximo ear file.
For deploying the new optimization model into the Optimization Server, use the following steps:
Go to “Configure Optimization Server” action in the Maximo Scheduler application.
Deploy the new application. It will add data to MXODMAPPPKG table, the new odmappname and the application package.
Verify that the ODME application model is deployed on the Optimization Server by checking the ODME console from a browser.
Verify the new optimization model integration
After the optimization model is integrated into the appropriate Maximo Scheduler applications, make sure the integration changes are deployed into the Maximo Server and the new optimization model is also deployed into the Optimization Server. After this deployment is successful, verify that the new optimization can be run successfully. Use the following steps as a check list to verify the integration.
- Create a simple Schedule and make sure the schedule has some data to optimize based on what you think the new optimization model should do.
- Approve the Schedule and try to create a scenario with the new optimization Model. You should have the menu options available to create a scenario with new optimization model.
- Make sure scenario is saved and then select the Run Optimization option/button. This should launch the scenario input dialog. Make sure the input dialog has the necessary information needed for the new optimization model.
- Submit the Optimization run for immediate mode and see if the optimization is started. Verify on the ODME Optimization Server console, if a Job is submitted with the new model.
- Make sure that the Optimization model output is processed after successful run and the result is presented to the user.
- Once the immediate mode works, make sure to run the optimization again and select to run via back ground and submit. Make sure that the optimization is run on the scheduled time and produces the desired result.
Index
Schedule Planning Adapter
public class SchedulePlanningAdapter extends DefaultOptimizationModelAdapter
{
Prepare the input data needed to solve the optimization problem. This method implementation should read the data from maximo database and write the data to the optimization scenario tables. This method is called whenever optimization run is requested for the registered adapter.
public void prepareInputData( OptimizationModelAdapterInputDataContextinputDataContext, OptimizationInputProcessParameters inputProcessParameters) throws MXException
{
If the data needs to be read from Maximo database using the database connection, the following connection api can be used.
this.connection = inputDataContext.getConnection();
If the schedule data need to be read for the specific schehule for which the optimization is run , the following api can be used to get the schedule project.
String projectIdStr =(String)inputProcessParameters.getInputProcessParameter(SKDOptimizationRunContextNames.OPTRUNCONTEXT_SCHEDULEPROJECTID);
this.projectId = Long.valueOf(projectIdStr);
To get the input parameters for the optimization run, use the followinfg api :
Object parameters =inputProcessParameters.getInputParameters();
In this example, SKDInputParamInfo is the serializlable object returned from the getInputParameters(...) api implemented in this class.
this.inputParamInfo =(SKDInputParamInfo)parameters;
Load the input data from maximo database into the optimization server scenario tables using inputDataContext's getScenarioRepostitoryTable() api.
Execute Query to get data from the Maximo database. Iterate through the result set and set the data into scenario tables.
String query = "select distinct startdatetime as startDate from table1 where skdprojectid = ? " ;
stmt = connection.prepareStatement(query);
stmt.setLong(1, projectId);
rs = stmt.executeQuery();
while (rs.next())
{
Date startTime = rs.getTimestamp("startDate");
IloTable assetMaintenanceDOTable = getScenarioRepositoryTable("app.NewModelTestDo");
IloRow row = assetMaintenanceDOTable.makeNewRow();
row.setValue("startDate",
MXODMModelDateConverter.convertDateToString(startTime, Locale.getDefault()));
row.setValue("assetName", assetName);
.....................................
NewModelTestDOTable.addRow(row);
}
}
This method implementation should read the input parameters from the input object and write to the serializable object. This method is called whenever optimization run is requested for the registered adapter.
public Serializable getInputParameters(OptimizationModelAdapterInputDataContext inputDataContext, Long skdProjectId) throws MXException {
Get input parameter values from input mbo (SKDUSAGE1PARAM.)
UserInfo ui = inputDataContext.getUserInfo();
MboSetRemote skdProjectSet = MXServer.getMXServer().getMboSet("SKDPROJECT",
skdProjectSet.setWhere("skdprojectid = " + skdProjectId);
skdProjectSet.reset();
.........................
String optmztype= skdProjectSet.getMbo(0).getString("type");
MboSetRemote projectScenarioSet = skdProjectSet.getMbo(0).getMboSet("PROJECTSCENARIO");
MboRemote projectscenario= projectScenarioSet.getMbo(0);
MboRemote inputMbo= null;
............................
String inputobjrelname=optmztype.toUpperCase() + "PARAM";
inputMbo=projectscenario.getMboSet(inputobjrelname).getMbo(0);
if (inputMbo != null)
{
supportSkillLvls = inputMbo.getInt("CMATCHSKILL");
...........................
}
Set the input params values into new serialized object for optimization to use and return this object. In this example, SKDInputParamInfo is the serialable object.
inputParamInfo= new SKDInputParamInfo();
inputParamInfo.setSupportSkillLvls(supportSkillLvls);
................
}
Process the optimization solution.
This method implementation should extract the data from the scenario tables and write the data to the maximo database appropriately. This method is called only if the optimization solve is successfully completed and a solution exists to the problem.
public void processOutputData(OptimizationModelAdapterOutputDataContext outputDataContext, OptimizationOutputProcessParameters outputProcessParameters) throws MXException {
Update maximo tables based on the output parameters values.
Get the connection from the outputDataContext using the following api.
Connection connection = outputDataContext.getConnection();
Get the skdprojectid.
String projectIdStr = outputProcessParameters.getOutputProcessParameter(
SKDOptimizationRunContextNames.OPTRUNCONTEXT_SCHEDULEPROJECTID);
long projectId = Long.valueOf(projectIdStr);
Get the output from the opmization run using the following api:
IloTable iloTable = outputDataContext.getScenarioRepositoryTable("app.NewModelTestDo");
Collection<IloRow> rows = iloTable.getRows();
Iterator<IloRow> rowIterator = rows.iterator();
PreparedStatement pStmt = null;
String updateSql ="update table set startdate = ?, .. where skdprojectid = ? ";
pStmt = connection.prepareStatement(updateSql);
while (rowIterator.hasNext())
{
IloRow iloRow = (IloRow) rowIterator.next();
Date startDateValue = MXODMModelDateConverter.convertStringToDate(startDateAsString, Locale.getDefault());
pStmt.setTimestamp(1, new java.sql.Timestamp(startDateValue.getTime()));
........................
}
}
}
Presentations
Create Scenario dialog
<dialog id="USAGE1" label="Create Usage1 Scenario" relationship="SKDPROJECTBASELINE" savemode="ONLOADUNLOAD" beanclass="com.ibm.tivoli.maximo.skd.beans.SKDScenarioDataBean">
<section id="usage1_grid1_1_1_grid4" >
<multiparttextbox id="usage1_grid1_1_1_grid4_4" label="Scenario" dataattribute="baselinename" descdataattribute="description"/>
<textbox id="usage1_grid1_1_1_grid4_3" dataattribute="baselinememo" label="Memo"/>
<textbox id="usage1_grid1_1_1_grid4_41" dataattribute="INPUTNAME" lookup="USAGE1TL"/>
</section>
<buttongroup id="usage1_2" >
<pushbutton id="usage1_2_1" label="OK" default="true" mxevent="dialogok" />
<pushbutton id="usage1_2_11" label="OK and Move" mxevent="dialogokandmove" />
<pushbutton id="usage1_n_2_2" label="Cancel" mxevent="dialogcancel" />
</buttongroup>
</dialog>
Run Optimization dialog
<dialog id="USAGE1_OPTMZ" label="New Model Optimization" beanclass="com.ibm.tivoli.maximo.skd.beans.SKDOptimDataBean">
<section id="runoptmz_n_grid1_1_1_grid4" datasrc="MAINRECORD">
<multiparttextbox id="runoptmz_n_grid1_1_1_grid4_4" dataattribute="scenarioname" descdataattribute="description"/>
</section>
<section id="runoptmz_n_grid3_sec" label="Schedule">
Define variables to show the options to run the scenario. For example Immediate or schedule it to run it later
..................
</section>
<section id="runoptmz_n_grid1_1_1_grid6" >
Section to show usage input name
</section>
<tabgroup id="runoptmz_n_tabgroup" >
<tab id="runoptmz_n_tab2" label="Parameters">
<section id="runoptmz_n_table_details_2" >
Section to display input parameters for the new model....
</section>
</tab>
</tabgroup>
<section id="runoptmz_n_lastrun_1" label="Last Run" collapsable="true" collapsed="true" >
Section to show the status attributes of last run...
</section>
<buttongroup id="runoptmz_n_2" >
<pushbutton id="runoptmz_n_2_1" label="Save" default="true" mxevent="saveoptmz" />
<pushbutton id="runoptmz_n_2_2" label="Submit" default="true" mxevent="runoptmz" sigoption="SUB" />
<pushbutton id="runoptmz_n_2_3" label="Close" mxevent="dialogcancel" />
</buttongroup>
</dialog>
Create Template dialog
<dialog id="USAGE1_TL" mboname = "SKDUsage1Param" label="New Usage1 Model Templates" dataattribute="istemplate" value="1" defaulttype="query">
Define the variables that you want the optimization model to take into account when optimizing. The template can be used to optimize any schedule.
</dialog>
Lookup Template dialog
<dialog id="LOOKUP_USAGE1TL1" mboname ="SKDUsage1Param" label="New Usage Model Template" beanclass="com.ibm.tivoli.maximo.skd.beans.SKDLookupDataBean">
Define a table for templatelookup to be used during scenario creation.
</dialog>
#Maximo#MaximoScheduler#AssetandFacilitiesManagement#Scheduler