CreateAgent.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. /**
  2. Licensed Materials - Property of IBM
  3. IBM Cognos Products: DOCS
  4. (C) Copyright IBM Corp. 2005, 2010
  5. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with
  6. IBM Corp.
  7. */
  8. /**
  9. * CreateAgent.java
  10. *
  11. * Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  12. * Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  13. *
  14. * Description: This code sample demonstrates how to create and run an agent
  15. */
  16. import java.rmi.RemoteException;
  17. import com.cognos.developer.schemas.bibus._3.AddOptions;
  18. import com.cognos.developer.schemas.bibus._3.AgentDefinition;
  19. import com.cognos.developer.schemas.bibus._3.AgentOptionBoolean;
  20. import com.cognos.developer.schemas.bibus._3.AgentOptionEnum;
  21. import com.cognos.developer.schemas.bibus._3.AgentTaskDefinition;
  22. import com.cognos.developer.schemas.bibus._3.AnyTypeProp;
  23. import com.cognos.developer.schemas.bibus._3.AsynchReply;
  24. import com.cognos.developer.schemas.bibus._3.AsynchReplyStatusEnum;
  25. import com.cognos.developer.schemas.bibus._3.BaseClass;
  26. import com.cognos.developer.schemas.bibus._3.BaseClassArrayProp;
  27. import com.cognos.developer.schemas.bibus._3.BaseParameterAssignment;
  28. import com.cognos.developer.schemas.bibus._3.BaseParameterAssignmentArrayProp;
  29. import com.cognos.developer.schemas.bibus._3.DataEnum;
  30. import com.cognos.developer.schemas.bibus._3.MetadataModelItemName;
  31. import com.cognos.developer.schemas.bibus._3.Option;
  32. import com.cognos.developer.schemas.bibus._3.OptionArrayProp;
  33. import com.cognos.developer.schemas.bibus._3.ParameterAssignmentDataItem;
  34. import com.cognos.developer.schemas.bibus._3.ParameterValue;
  35. import com.cognos.developer.schemas.bibus._3.ParmValueItem;
  36. import com.cognos.developer.schemas.bibus._3.PropEnum;
  37. import com.cognos.developer.schemas.bibus._3.QueryOptions;
  38. import com.cognos.developer.schemas.bibus._3.Report;
  39. import com.cognos.developer.schemas.bibus._3.ReportServiceReportSpecification;
  40. import com.cognos.developer.schemas.bibus._3.RunOptionBoolean;
  41. import com.cognos.developer.schemas.bibus._3.RunOptionData;
  42. import com.cognos.developer.schemas.bibus._3.RunOptionEnum;
  43. import com.cognos.developer.schemas.bibus._3.RunOptionStringArray;
  44. import com.cognos.developer.schemas.bibus._3.SearchPathMultipleObject;
  45. import com.cognos.developer.schemas.bibus._3.SearchPathSingleObject;
  46. import com.cognos.developer.schemas.bibus._3.SimpleParmValueItem;
  47. import com.cognos.developer.schemas.bibus._3.Sort;
  48. import com.cognos.developer.schemas.bibus._3.Specification;
  49. import com.cognos.developer.schemas.bibus._3.StringProp;
  50. import com.cognos.developer.schemas.bibus._3.TokenProp;
  51. import com.cognos.developer.schemas.bibus._3.UpdateActionEnum;
  52. public class CreateAgent {
  53. // This is the constructor.
  54. public CreateAgent()
  55. {
  56. super();
  57. }
  58. //This method creates a new agent
  59. public boolean addNewAgent(CRNConnect connection, String parentSearchPath, String anAgentName, String runReportName)
  60. {
  61. String reportSearchPath=new String("/content/folder[@name='Samples']/folder[@name='Models']/package[@name='GO Data Warehouse (query)']/folder[@name='SDK Report Samples']/report[@name='Product Quantity and Price']");
  62. String taskReportSearchPath=new String("/content/folder[@name='Samples']/folder[@name='Models']/package[@name='GO Data Warehouse (query)']/folder[@name='SDK Report Samples']/report[@name='Retailer Contact']");
  63. String targetPath="/folder[@name='My Folders']";
  64. BaseClass parent[];
  65. AddOptions myAddOptions = new AddOptions();
  66. myAddOptions.setUpdateAction(UpdateActionEnum.replace);
  67. //Create new agent definition object
  68. AgentDefinition myAgent = new AgentDefinition();
  69. TokenProp myToken = new TokenProp();
  70. myToken.setValue(anAgentName);
  71. myAgent.setDefaultName(myToken);
  72. try {
  73. parent = connection.getCMService().query(
  74. new SearchPathMultipleObject("~"),
  75. new PropEnum[]{PropEnum.searchPath}, new Sort[]{}, new QueryOptions());
  76. parentSearchPath = parent[0].getSearchPath().getValue() + targetPath;
  77. BaseClassArrayProp agentParent = new BaseClassArrayProp();
  78. agentParent.setValue(parent);
  79. myAgent.setParent(agentParent);
  80. } catch (RemoteException e1) {
  81. e1.printStackTrace();
  82. return false;
  83. }
  84. SearchPathMultipleObject searchPath = new SearchPathMultipleObject();
  85. searchPath.set_value(parentSearchPath);
  86. BaseClass[] bc = new BaseClass[] {myAgent};
  87. // Add Agent Definition to the content store
  88. try {
  89. bc = connection.getCMService().add(new SearchPathSingleObject(parentSearchPath),bc,myAddOptions);
  90. } catch (RemoteException e) {
  91. e.printStackTrace();
  92. return false;
  93. }
  94. String agentDefinitionSearchPath = ((AgentDefinition)bc[0]).getSearchPath().getValue();
  95. String spec = "";
  96. try {
  97. BaseClass myBaseClass[] = connection.getCMService().query(
  98. new SearchPathMultipleObject (reportSearchPath),
  99. new PropEnum[]{PropEnum.metadataModel, PropEnum.metadataModelPackage, PropEnum.storeID}, new Sort[]{}, new QueryOptions());
  100. spec = "<report expressionLocale=\"en-us\" xmlns=\"http://developer.cognos.com/schemas/report/15.0/\"> <!--RS:15.0--> <modelPath>/content/folder[@name='Samples']/folder[@name='Models']/package[@name='GO Data Warehouse (query)']/model[@name='model']</modelPath> <queries> <query name=\"Query1\"> <source><model/></source> <selection><dataItem name=\"Reason description\" label=\"Reason description\" aggregate=\"none\"><expression>[Returned items (query)].[Return reason].[Reason description]</expression></dataItem><dataItem name=\"Retailer Name\" label=\"Retailer Name\" aggregate=\"none\"><expression>[Returned items (query)].[Retailers].[Retailer name]</expression></dataItem></selection> <detailFilters><detailFilter use=\"required\" postAutoAggregation=\"false\"><filterExpression>[Returned items (query)].[Returned items fact].[Return quantity] &gt; ?total_return_value? and [Returned items (query)].[Return reason].[Reason description] in ('Incompleteproduct','Unsatisfactoryproduct','Defective product') </filterExpression></detailFilter></detailFilters><queryHints><localCache value=\"false\"/></queryHints> </query> </queries> <layouts> <layout> <reportPages> <page name=\"Page1\"> <style> <defaultStyles> <defaultStyle refStyle=\"pg\"/> </defaultStyles> </style> <pageBody> <style> <defaultStyles> <defaultStyle refStyle=\"pb\"/> </defaultStyles> </style> <contents> <list refQuery=\"Query1\"> <style> <CSS value=\"border-collapse:collapse\"/> <defaultStyles> <defaultStyle refStyle=\"ls\"/> </defaultStyles> </style><listColumns> <listColumn> <listColumnTitle> <style> <defaultStyles> <defaultStyle refStyle=\"lt\"/> </defaultStyles> </style> <contents> <textItem> <dataSource> <dataItemLabel refDataItem=\"Reason description\"/> </dataSource> </textItem> </contents> </listColumnTitle> <listColumnBody> <style> <defaultStyles> <defaultStyle refStyle=\"lc\"/> </defaultStyles> </style> <contents> <textItem> <dataSource> <dataItemValue refDataItem=\"Reason description\"/> </dataSource> </textItem> </contents> </listColumnBody> </listColumn> <listColumn> <listColumnTitle> <style> <defaultStyles> <defaultStyle refStyle=\"lt\"/> </defaultStyles> </style> <contents> <textItem> <dataSource> <dataItemLabel refDataItem=\"Retailer Name\"/> </dataSource> </textItem> </contents> </listColumnTitle> <listColumnBody> <style> <defaultStyles> <defaultStyle refStyle=\"lc\"/> </defaultStyles> </style> <contents> <textItem> <dataSource> <dataItemValue refDataItem=\"Retailer Name\"/> </dataSource> </textItem> </contents> </listColumnBody> </listColumn> </listColumns> </list> </contents> </pageBody> </page> </reportPages> </layout> </layouts> <classStyles> <classStyle name=\"hideItem\" > <CSS value=\"display:none\" /> </classStyle> </classStyles> </report>";
  101. AnyTypeProp myProperty = new AnyTypeProp();
  102. myProperty.setValue(spec);
  103. ((Report)myBaseClass[0]).setSpecification(myProperty);
  104. // add model, package and event specification information to Agent Definition
  105. connection.getCMService().add(new SearchPathSingleObject(agentDefinitionSearchPath),myBaseClass,myAddOptions);
  106. // add searchPath to BaseClass object
  107. StringProp mySearchPath = new StringProp();
  108. mySearchPath.setValue(agentDefinitionSearchPath);
  109. myBaseClass[0].setSearchPath(mySearchPath);
  110. // get a 'Retailer Contact' report object from CM and set it as a task report
  111. BaseClass bcPromptReport[] = connection.getCMService().query( new SearchPathMultipleObject (taskReportSearchPath),new PropEnum[]{PropEnum.searchPath, PropEnum.defaultName,PropEnum.storeID}, new Sort[]{}, new QueryOptions());
  112. //assign the report execution to a new taskDefinition of the agent
  113. AgentTaskDefinition myAgentTaskDefinition = new AgentTaskDefinition();
  114. //set searchPath the taskObject to a storeID of the report
  115. BaseClassArrayProp taskObject = new BaseClassArrayProp();
  116. BaseClass bcObject[] = new BaseClass[1];
  117. StringProp myStringProp = new StringProp();
  118. String storeIDString = bcPromptReport[0].getStoreID().getValue().get_value();
  119. myStringProp.setValue("storeID(\"" + storeIDString + "\")");
  120. bcObject[0] = new Report();
  121. bcObject[0].setSearchPath(myStringProp);
  122. taskObject.setValue(bcObject);
  123. myAgentTaskDefinition.setTaskObject(taskObject);
  124. //set defaultName of agentTaskDefinition to defaultName of the report
  125. TokenProp myTokenProp = new TokenProp();
  126. myTokenProp.setValue(bcPromptReport[0].getDefaultName().getValue());
  127. myAgentTaskDefinition.setDefaultName(myTokenProp);
  128. //set options
  129. OptionArrayProp myOptionArrayProp = new OptionArrayProp();
  130. Option options[] = new Option[5];
  131. AgentOptionBoolean myAgentOptionBoolean = new AgentOptionBoolean();
  132. myAgentOptionBoolean.setName(AgentOptionEnum.fromString("availableAsEmailAttachment"));
  133. myAgentOptionBoolean.setValue(true);
  134. options[0] = myAgentOptionBoolean;
  135. RunOptionBoolean myRunOptionBoolean = new RunOptionBoolean();
  136. myRunOptionBoolean.setName(RunOptionEnum.saveOutput);
  137. myRunOptionBoolean.setValue(true);
  138. options[1] = myRunOptionBoolean;
  139. RunOptionBoolean myRunOption = new RunOptionBoolean();
  140. myRunOption.setName(RunOptionEnum.prompt);
  141. myRunOption.setValue(false);
  142. options[2] = myRunOption;
  143. RunOptionData myRunOptionData = new RunOptionData();
  144. myRunOptionData.setName(RunOptionEnum.data);
  145. myRunOptionData.setValue(DataEnum.runWithAllData);
  146. options[3] = myRunOptionData;
  147. RunOptionStringArray myRunOptionStringArray = new RunOptionStringArray();
  148. myRunOptionStringArray.setName(RunOptionEnum.outputFormat);
  149. myRunOptionStringArray.setValue( new String[] {"PDF"} );
  150. options[4] = myRunOptionStringArray;
  151. myOptionArrayProp.setValue(options);
  152. myAgentTaskDefinition.setOptions(myOptionArrayProp);
  153. // set parameter Assignment
  154. BaseParameterAssignmentArrayProp myBaseParameterAssignmentArrayProp = new BaseParameterAssignmentArrayProp();
  155. BaseParameterAssignment myBaseParameterAssignment[] = new BaseParameterAssignment[1];
  156. ParameterAssignmentDataItem myParameterAssignmentDataItem = new ParameterAssignmentDataItem();
  157. MetadataModelItemName mmin = new MetadataModelItemName();
  158. mmin.set_value("[Retailer Name]");
  159. myParameterAssignmentDataItem.setDataItemName(mmin);
  160. myParameterAssignmentDataItem.setParameterName("Parameter1");
  161. myBaseParameterAssignment[0] = myParameterAssignmentDataItem;
  162. myBaseParameterAssignmentArrayProp.setValue(myBaseParameterAssignment);
  163. myAgentTaskDefinition.setParameterAssignments(myBaseParameterAssignmentArrayProp);
  164. // set parameters
  165. ParameterValue[] myParameterValue = new ParameterValue[1];
  166. myParameterValue[0] = new ParameterValue();
  167. myParameterValue[0].setName("Parameter1");
  168. ParmValueItem[] myParmValueItem = new ParmValueItem[1];
  169. SimpleParmValueItem mySimpleParmValueItem = new SimpleParmValueItem();
  170. mySimpleParmValueItem.setInclusive(true);
  171. mySimpleParmValueItem.setDisplay("Retailer Name");
  172. mySimpleParmValueItem.setUse("Retailer Name");
  173. myParmValueItem[0] = mySimpleParmValueItem;
  174. myParameterValue[0].setValue( myParmValueItem );
  175. BaseClass bc1[] = new BaseClass[]{myAgentTaskDefinition};
  176. //add the agentTaskDefinition object to the agent object
  177. bc1 = connection.getCMService().add(new SearchPathSingleObject(bc[0].getSearchPath().getValue()),bc1,myAddOptions);
  178. } catch (RemoteException e) {
  179. e.printStackTrace();
  180. return false;
  181. }
  182. // Run the agent
  183. AsynchReply myAsynchReply = null;
  184. //set parameter value before running the agent
  185. ParameterValue[] myParameterValue = new ParameterValue[1];
  186. myParameterValue[0] = new ParameterValue();
  187. myParameterValue[0].setName("total_return_value");
  188. ParmValueItem[] myParmValueItem = new ParmValueItem[1];
  189. SimpleParmValueItem mySimpleParmValueItem = new SimpleParmValueItem();
  190. mySimpleParmValueItem.setInclusive(true);
  191. mySimpleParmValueItem.setDisplay("1500");
  192. mySimpleParmValueItem.setUse("1500");
  193. myParmValueItem[0] = mySimpleParmValueItem;
  194. myParameterValue[0].setValue(myParmValueItem);
  195. try {
  196. ReportServiceReportSpecification rspec = new ReportServiceReportSpecification();
  197. rspec.setValue( new Specification(spec));
  198. myAsynchReply = connection.getMonitorService().run(new SearchPathSingleObject(agentDefinitionSearchPath), myParameterValue, new Option[]{});
  199. if (!myAsynchReply.getStatus().equals(AsynchReplyStatusEnum.conversationComplete))
  200. {
  201. while (!myAsynchReply.getStatus().equals(AsynchReplyStatusEnum.conversationComplete))
  202. {
  203. myAsynchReply =
  204. connection.getMonitorService().wait(
  205. myAsynchReply.getPrimaryRequest(),
  206. new ParameterValue[] {},
  207. new Option[] {});
  208. }
  209. }
  210. } catch (RemoteException e) {
  211. e.printStackTrace();
  212. return false;
  213. }
  214. return true;
  215. }
  216. }