This discussion is archived
1 Reply Latest reply: Nov 20, 2012 7:34 AM by JasonBatzlaff RSS

Initializing Configurator session thru CIO

Akhil Agarwal Newbie
Currently Being Moderated
Hi,

I am looking for a 'sample java code' to understand how to initialize Configurator session thru CIO.

I did go thru the 'Oracle Configurator Extensions and Interface Object Developer’s Guide' , but the sample code provided over there is too simple.
I am looking for something more, a sample code which can help me understand how to 'choose options', 'populate value' thru the CIO.

Akhil
  • 1. Re: Initializing Configurator session thru CIO
    JasonBatzlaff Explorer
    Currently Being Moderated
    Akhil,

    I have an example of working with initializing a Configurator session. In my first example, I started by doing all of the java within a JSP. Eventually, I was able to put the java into specific classes and call these classes and methods from a JSP. In my scenario, the JSP was the vehicle for launching the application, but it is not required. I am sure you can do the same from a pure-java program as well.

    An example of the important Java aspects that were used are listed below:
    //Set some default variable values
    String dbcFileName = "<path to DBC file>";
    CIO cio;
    Context context;
    String errMessage = "No errors";
    IRuntimeNode rootNode = null;
    Configuration cfg = null;
    
    //set the context and create the cio object
    context = new CZWebAppsContext(dbcFileName);
    cio = new CIO(); // Create shared global CIO
    
    // Create the ConfigParameters object and set non-default parameters
    int modelId = 34272620;
    String lineId = "155184891"; //used to pass oe line id as client_line
    
    ConfigParameters cp = new ConfigParameters(modelId);
    
    java.util.Calendar modelLookupDate = Calendar.getInstance(); //current date and time
    
    //start the configuration using the cio object previously created
    try {
      cp.setModelLookupDate(modelLookupDate);
      cp.addUserParam("client_line", lineId);
      cfg = cio.startConfiguration(cp, context);
      rootNode = (IRuntimeNode)cfg.getRootBomModel();
    } catch (Exception e) {
      errMessage = e.getMessage();
    }
    
    //This part was important.  For some reason, when you launch the model, the ROOT node is NOT selected as we would normally expect
    //This part of the code will select the top/root node of the configuration.
    
    String exceptionOutput = "no errors";
    if (rootNode instanceof StateNode) {
         StateNode stateRootNode = (StateNode)rootNode;
         try {
              ConfigTransaction tr = cfg.beginConfigTransaction();
              stateRootNode.setState(IState.UTRUE);
              cfg.commitConfigTransaction(tr);
         } catch (Exception e) {
              exceptionOutput = "Exception Encountered: " + e.getMessage();
         }
    }
    
    //Here you can now begin side-affecting the model using your standard CIO calls (eg. set values, select options, etc.).  Be sure to use Config Transactions.
    //I have noticed that if you have CXs that you want to execute at the end of the configuration, you will need specifically tell the config object to execute the event.
    //I don't recall exactly how this was called, but it should be documented in the JavaDoc or in the CX Guide.
    
    //Now we have to close out the session
    String errMessageB = "No errors";
    long configHdrId = 0;
    long configRevNbr = 0;
    boolean configValid = false;
    boolean configComplete = false;
    
    try {
      cfg.saveNew();
      configHdrId = cfg.getConfigHeaderIdLong();
      configRevNbr = cfg.getConfigHeaderRevisionLong();
      configValid = cfg.isValid();
      configComplete = cfg.isComplete();
      cio.closeConfiguration(cfg);
      context.releaseJDBCConnection();
      context.free();
    } catch (Exception e) {
      errMessageB = e.getMessage();
    }
    Edited by: JasonBatzlaff on Nov 20, 2012 7:33 AM

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points