Table queries

Hi Gurus,
I've developed one simple application which contains table with two rows.The table is created statically.
My Problem is I will get the First row data from the context.This data should not be editable.
My requirement is
The second row should contain all the editable fields and if i enter some data in the second row, the first row should be effected by taking the second row values
Please suggest me how to suitable values.
Regards,
Adi.

Hi Bathineni,
Assume you have a node for table called Table with the following structure
Table>col1(String)>col2(String)-->enabled(boolean)
Bind this enabled atribute of the Table node to the enabled property of the Talbe's column editor.
IPrivate<viewname>.ITableElement ele1 = wdContext.nodeTable().createTableElement();
ele1.setCol1("Col1");
ele1.setCol2("Col2");
ele1.setEnabled(false);
IPrivate<viewname>.ITableElement ele2 = wdContext.nodeTable().createTableElement();
ele2.setCol1("Col21");
ele2.setCol2("Col22");
ele2.setEnabled(true);
Now you can put a button where the values of the first row would be same as that of the second row(or on the lead selection event). OnAction of this button you can set the values of the first row to the same as that of second row.
wdContext.nodeTable().getTableElementAt(1).setCol1(wdContext.nodeTable().getTableElementAt(0).getCol1());
wdContext.nodeTable().getTableElementAt(1).setCol2(wdContext.nodeTable().getTableElementAt(0).getCol2());
wdContext.nodeTable().getTableElementAt(1).setEnabled(wdContext.nodeTable().getTableElementAt(0).getEnabled());
Warm Regards,
Murtuza

Similar Messages

  • PO approval heirarchy - tables queries

    Hi,
    can anyone tell me how can i get the PO approval parties for any given PO from table queries?
    eg.
    PO num lvl1 lvl2 lvl3
    PO123 Jane Mary Peter
    assuming Jane is the first level of approval and Mary the next and Peter is the last.
    thanks.
    isabel

    do you meant the approval path?
    You will need to look at your approval hierarchy and also the employees table. are you using a direct or hierartchical approval chain?

  • Another user-modified table 'Queries' (OUQR) (ODBC -2039) [Message 131-183]

    Hi, Experts.
    I updated B1 2007B PL18 from PL13.
    I have following error message when modified query in query manager.
    "Another user-modified table 'Queries' (OUQR) (ODBC -2039) [Message 131-183]"
    However, I can modify same query in PL13.
    Please, share the information.

    Hi,
    If you can make sure nobody else modifying the query, it is probably a bug.  Log a message to support immediately.
    Thanks,
    Gordon

  • SAP UI5 Table Queries

    Hi Experts
    Recently I am working on a Assignment , where I have to display some Chart which is in the form of Gantt Chart.
    Is it possible to use the Gantt chart in SAPUI5 with additional libraries? if yes please elaborate how we can achieve this.
    As of now I do not find any hints on Gantt chart usage and I am trying to achieve the same using SAPUI5 Table with CSS /Java Script
    1. Is it possible to display a table with X columns out of which first 2 columns must not containt any header
    2. Is it possible to display a table without selection column (Removing the first column which is intended for selection)
    3. I want to display the table with rows and columns lines upon No Data, currently when Table is displayed with out content it displays without any internal lines which separates columns and rows.
    4. Is it possible to fill Entire Column with Single Text value in the middle.
    5. I wanted to change the color of one column background.
    6. Please let us know is it possible to fill a color in a particular table cell editor according to a value. Suppose the total value of a Cell is 9 , if the value coming from OData Service is like 4.5 then I have to fill the Green Color in the Cell according to Value.
       If it is 9 then I want to fill entire cell editor with Green colour
    I am trying to achive by various changes in CSS params on chrome but not able to achieve the same.
    Thanks and Regards
    KALYAN

    Hi Venkata,
    Find the below example using js
    var tab = new sap.m.Table("TAB",{
    columns:[new sap.m.Column({header: new sap.m.Label({})}),
    new sap.m.Column({header: new sap.m.Label({text:"Name"})}),
    new sap.m.Column({header: new sap.m.Label({text:"City"})})
    this code creates a table with 3 columns of which 1st column will not contain any header.
    Regards,
    Madhumahesh.

  • Problem occured when create a tree table for master-detail view objects using SQL queries?

    I am programming a tree table for master-detail view objects using SQL queries and these 2 view objects are not simple singel tables queries, and 2 complex SQL are prepared for master and view objects. see below:
    1. Master View object (key attribute is SourceBlock and some varaible bindings are used for this view object.)
    SELECT  cntr_list.SOURCE_BLOCK,                   
            sum(                   
             case when cntr_list.cntr_size_q = '20'                   
                  then cntr_list.cntr_qty                   
                  else 0 end ) as cntr20 ,                   
            sum(                   
             case when cntr_list.cntr_size_q = '40'                   
                  then cntr_list.cntr_qty                   
                  else 0 end ) as cntr40 ,                   
             sum(                   
             case when cntr_list.cntr_size_q = '45'                   
                  then cntr_list.cntr_qty                   
                  else 0 end ) as cntr45                    
    FROM (       
        SELECT yb1.BLOCK_M as SOURCE_BLOCK,       
               scn.CNTR_SIZE_Q,        
               count(scn.CNTR_SIZE_Q) AS cntr_qty        
        FROM  SHIFT_CMR scm, SHIFT_CNTR scn, YARD_BLOCK yb1, YARD_BLOCK yb2       
        WHERE       
        scm.cmr_n = scn.cmr_n             
        AND (scm.plan_start_dt BETWEEN to_date(:DateFrom,'YYYY/MM/DD HH24:MI:SS') AND to_date(:DateTo,'YYYY/MM/DD HH24:MI:SS')                 
        OR scm.plan_end_dt BETWEEN to_date(:DateFrom,'YYYY/MM/DD HH24:MI:SS') AND to_date(:DateTo,'YYYY/MM/DD HH24:MI:SS'))                 
        AND scm.shift_mode_c = :ShiftModeCode                           
        AND scm.end_terminal_c = :TerminalCode      
        AND scm.start_terminal_c = yb1.terminal_c                  
        AND scm.start_block_n = yb1.block_n                  
        AND substr(scn.start_location_c,(instr(scn.start_location_c,',',1,5)+1),instr(scn.start_location_c,',',1,6)-(instr(scn.start_location_c,',',1,5)+1)) BETWEEN yb1.slot_from_n AND yb1.slot_to_n                  
        AND scm.end_terminal_c = yb2.terminal_c                  
        AND scm.end_block_n = yb2.block_n                  
        AND substr(scn.end_location_c,(instr(scn.end_location_c,',',1,5)+1),instr(scn.end_location_c,',',1,6)-(instr(scn.end_location_c,',',1,5)+1)) BETWEEN yb2.slot_from_n AND yb2.slot_to_n           
        AND scn.status_c not in (1, 11)             
        AND scn.shift_type_c = 'V'             
        AND scn.source_c = 'S'       
        GROUP BY yb1.BLOCK_M, scn.CNTR_SIZE_Q       
    ) cntr_list       
    GROUP BY cntr_list.SOURCE_BLOCK
    2. Detail View object (key attributes are SourceBlock and EndBlock and same varaible bindings are used for this view object.)
    SELECT  cntr_list.SOURCE_BLOCK, cntr_list.END_BLOCK,                
            sum(                     
             case when cntr_list.cntr_size_q = '20'                     
                  then cntr_list.cntr_qty                     
                  else 0 end ) as cntr20 ,                     
            sum(                     
             case when cntr_list.cntr_size_q = '40'                     
                  then cntr_list.cntr_qty                     
                  else 0 end ) as cntr40 ,                     
             sum(                     
             case when cntr_list.cntr_size_q = '45'                     
                  then cntr_list.cntr_qty                     
                  else 0 end ) as cntr45                      
    FROM (         
        SELECT yb1.BLOCK_M as SOURCE_BLOCK,     
               yb2.BLOCK_M as END_BLOCK,  
               scn.CNTR_SIZE_Q,          
               count(scn.CNTR_SIZE_Q) AS cntr_qty          
        FROM  SHIFT_CMR scm, SHIFT_CNTR scn, YARD_BLOCK yb1, YARD_BLOCK yb2         
        WHERE         
        scm.cmr_n = scn.cmr_n               
        AND (scm.plan_start_dt BETWEEN to_date(:DateFrom,'YYYY/MM/DD HH24:MI:SS') AND to_date(:DateTo,'YYYY/MM/DD HH24:MI:SS')                   
        OR scm.plan_end_dt BETWEEN to_date(:DateFrom,'YYYY/MM/DD HH24:MI:SS') AND to_date(:DateTo,'YYYY/MM/DD HH24:MI:SS'))                   
        AND scm.shift_mode_c = :ShiftModeCode                             
        AND scm.end_terminal_c = :TerminalCode        
        AND scm.start_terminal_c = yb1.terminal_c                    
        AND scm.start_block_n = yb1.block_n                    
        AND substr(scn.start_location_c,(instr(scn.start_location_c,',',1,5)+1),instr(scn.start_location_c,',',1,6)-(instr(scn.start_location_c,',',1,5)+1)) BETWEEN yb1.slot_from_n AND yb1.slot_to_n                    
        AND scm.end_terminal_c = yb2.terminal_c                    
        AND scm.end_block_n = yb2.block_n                    
        AND substr(scn.end_location_c,(instr(scn.end_location_c,',',1,5)+1),instr(scn.end_location_c,',',1,6)-(instr(scn.end_location_c,',',1,5)+1)) BETWEEN yb2.slot_from_n AND yb2.slot_to_n             
        AND scn.status_c not in (1, 11)               
        AND scn.shift_type_c = 'V'               
        AND scn.source_c = 'S'         
        GROUP BY yb1.BLOCK_M, yb2.BLOCK_M, scn.CNTR_SIZE_Q         
    ) cntr_list         
    GROUP BY cntr_list.SOURCE_BLOCK, cntr_list.END_BLOCK
    3. I create a view link to create master-detail relationship for these 2 view objects.
    masterview.SourceBlock (1)->detailview.SourceBlock (*).
    4. I create a tree table using these 2 view objects with master-detail relationship.
    When I set default value for variable bindings of these 2 view objects and the matching records exist, tree table can work well. I can expand the master row to display detail row in UI.
    But I need to pass in dymamic parameter value for variable bindings of these 2 view objects, tree table cannnot work again. when I expand the master row and no detail row are displayed in UI.
    I am sure that I pass in correct parameter value for master/detail view objects and matching records exist.
    Managed Bean:
            DCIteratorBinding dc = (DCIteratorBinding)evaluteEL("#{bindings.MasterView1Iterator}");
            ViewObject vo = dc.getViewObject();
            System.out.println("Before MasterView1Iterator vo.getEstimatedRowCount()="+ vo.getEstimatedRowCount());
            System.out.println("Before MasterView1Iterator ShiftModeCode="+ vo.ensureVariableManager().getVariableValue("ShiftModeCode"));
            vo.ensureVariableManager().setVariableValue("DateFrom", dateFrom);
            vo.ensureVariableManager().setVariableValue("DateTo", dateTo);
            vo.ensureVariableManager().setVariableValue("ShiftModeCode", shiftModeC);
            vo.ensureVariableManager().setVariableValue("TerminalCode", terminalCode);
            vo.executeQuery();
            System.out.println("MasterView1Iterator vo.getEstimatedRowCount()="+ vo.getEstimatedRowCount());
            DCIteratorBinding dc1 = (DCIteratorBinding)evaluteEL("#{bindings.DetailView1Iterator}");
            ViewObject vo1 = dc1.getViewObject();
            System.out.println("Before DetailView1Iterator vo1.getEstimatedRowCount()="+ vo1.getEstimatedRowCount());
            System.out.println("Before DetailView1Iterator ShiftModeCode="+ vo1.ensureVariableManager().getVariableValue("ShiftModeCode"));
            vo1.ensureVariableManager().setVariableValue("DateFrom", dateFrom);
            vo1.ensureVariableManager().setVariableValue("DateTo", dateTo);
            vo1.ensureVariableManager().setVariableValue("ShiftModeCode", shiftModeC);
            vo1.ensureVariableManager().setVariableValue("TerminalCode", terminalCode);
            vo1.executeQuery();
            System.out.println("after DetailView1Iterator vo1.getEstimatedRowCount()="+ vo1.getEstimatedRowCount());
    5.  What's wrong in my implementation?  I don't have no problem to implement such a tree table if using simple master-detail tables view object, but now I have to use such 2 view objects using complex SQL for my requirement and variable bindings are necessary for detail view object although I also think a bit strange by myself.

    Hi Frank,
    Thank you and it can work.
    public void setLowHighSalaryRangeForDetailEmployeesAccessorViewObject(Number lowSalary,
                                                                              Number highSalary) {
            Row r = getCurrentRow();
            if (r != null) {
                RowSet rs = (RowSet)r.getAttribute("EmpView");
                if (rs != null) {
                    ViewObject accessorVO = rs.getViewObject();
                    accessorVO.setNamedWhereClauseParam("LowSalary", lowSalary);
                    accessorVO.setNamedWhereClauseParam("HighSalary", highSalary);
                executeQuery();
    but I have a quesiton in this way. in code snippet, it is first getting current row of current master VO to determine if update variables value of detail VO. in my case, current row is possibly null after executeQuery() of master VO and  I have to change current row manually like below.
    any idea?
                DCIteratorBinding dc = (DCIteratorBinding)ADFUtil.evaluateEL("#{bindings.SSForecastSourceBlockView1Iterator}");
                ViewObject vo = dc.getViewObject();           
                vo.ensureVariableManager().setVariableValue("DateFrom", dateFrom);
                vo.ensureVariableManager().setVariableValue("DateTo", dateTo);
                vo.ensureVariableManager().setVariableValue("ShiftModeCode", shiftModeC);
                vo.ensureVariableManager().setVariableValue("TerminalCode", terminalCode);
                vo.executeQuery();
                vo.setCurrentRowAtRangeIndex(0);
                ((SSForecastSourceBlockViewImpl)vo).synchornizeAccessorVOVariableValues();

  • Joining 18 tables -- one at a time or in two stages ?? best one..??

    I have to join 18 tables,.. Is it best to join all 18 in a single shot or to go with
    multi stages-- 9 tables in one stage and after that anotther 9 tables..
    Please anyone give me a good suggestion on this with some reason...
    Thanks in advance

    If you can look at your query and recognise that it is trying to collect (say) two small result sets and then join the result sets, then it is actually a good idea to express the query in that fashion to Oracle.
    Take for example a query that sums last week's profits for a supermarket by department using a 9 table query in about 2 minutes. A similar query reports the previous week's profits with a marginally different query in about two minutes. You write the two queries as inline views and join them to report the percentage change in profit by department - and the query takes 4 hours because Oracle has used "complex view merging" to turn your two 9-table queries into a single 18-table query.
    In this case, a workaround is to use the /*+ no_merge */ hint. In outline, something like:
    select     {columns}
    from
         select /*+ no_merge */
              dept_no,
              etc.
         from     ...
         )     lw,
         select /*+ no_merge */
              dept_no,
              etc.
         from     ...
         )     pw
    where
         pw.dept_no = lw.dept_no
    ;In less obvious cases you may still be able to find that you can break up a big query into a few smaller, logical sections, and use this technique to generate and join what are, in effect, intermediate results.
    An alternative to the /*+ no_merge */ hint is to use subquery factoring to the same end. There's a more complex example of the method here: http://jonathanlewis.wordpress.com/2007/07/01/internet-sql/
    In either case, avoid turning your 18-table query into 18 separate pieces and sticking them back together - it may make the optimizer do some very silly things. Karen Morton mentions an example of this on her blog: http://karenmorton.blogspot.com/2008/06/dont-do-work-you-dont-have-to-do.html
    Regards
    Jonathan Lewis
    http://jonathanlewis.wordpress.com
    http://www.jlcomp.demon.co.uk
    "The greatest enemy of knowledge is not ignorance,
    it is the illusion of knowledge." (Stephen Hawking)

  • Dataset from two set of tables based on condition

    I have two queries that will return same columns from two different set of tables ( column mapping has been taken care of). The return type is out ref cursor. (P_SUPPLY_REORDER )
    Query 1-SO
    select
    so.SMO_NO,
    so.SPLY_ORD_DT,
    so.fk_CUST_ID as CUST_ID,
    so.CUST_PO_NO,
    so.ATTENTION_NAME,
    sum(sol.SPLY_ORD_QTY) as SPLY_ORD_QTY,
    --sum(sol.sply_shp_qty),
    so.ST_NAME,
    so.ADDR_LN_2,
    so.ADDR_LN_3,--sta.SHIP_TO_ADDRESS_LINE_3,
    so.CITY_NAME,
    so.ST_TERR_CD,
    so.ZIP_CD,
    so.SPCL_SHP_INSTR_TXT,
    so.SHP_CNFRM_DT
    ,XCOM_ORDER_NO
    from
    supply_order so,
    supply_order_line sol,
    XCOM_ORDER_HEADER
    where
    so.FK_CUST_ID =in_cust_id
    and so.pc_ord_no = sol.fk_pc_ord_no and
    XCOM_ORDER_HEADER.FK_PC_ORD_NO = so.PC_ORD_NO
    group by so.SMO_NO, so.SPLY_ORD_DT, so.fk_CUST_ID,
    so.CUST_PO_NO, so.ATTENTION_NAME,
    so.ST_NAME, so.ADDR_LN_2, so.ADDR_LN_3, so.CITY_NAME, so.ST_TERR_CD,
    so.ZIP_CD, so.SPCL_SHP_INSTR_TXT, so.SHP_CNFRM_DT, XCOM_ORDER_NO;
    Query-2 Xcom
    select
    null as sMO_NO,
    xso.created_date as SPLY_ORD_DT,
    xso.fk_cust_id as cust_id,
    cust.cust_po_no as cust_PO_NO
    ,(sta.SHIP_TO_ATTN_FIRST_NAME||''||sta.SHIP_TO_ATTN_LAST_NAME) as attention_name,
    xsol.CARTONS_ORDERED as SPLY_ORD_QTY,
    --sum(sol.sply_shp_qty),
    sta.SHIP_TO_ADDRESS_LINE_1 as ST_NAME,
    sta.SHIP_TO_ADDRESS_LINE_2 as ADDR_LN_2,
    --sta.SHIP_TO_ADDRESS_LINE_3,
    NULL as ADDR_LN_3,
    sta.ship_to_city as CITY_NAME,
    sta.SHIP_TO_STATE as ST_TERR_CD,
    sta.SHIP_TO_POSTAL_CODE as ZIP_CD,
    sta.SHIPPING_INSTRUCTIONS as SPCL_SHP_INSTR_TXT,
    null  as SHP_CNFRM_DT,
    xso.XCOM_ORDER_NO as XCOM_ORDER_NO
    from
    XCOM_ORDER_HEADER xso,
    XCOM_ORDER_LINES xsol,
    customer cust,
    ship_to_address sta
    where
    cust.cust_id = xso.fk_cust_id and
    sta.fk_cust_id = xso.fk_cust_id
    and xso.FK_CUST_ID =in_cust_id
    and xso.FK_PC_ORD_NO is null
    and xso.xcom_order_no = xsol.fk_xcom_order_no;Now the requirement is
    One of four conditions are possible for each Supply Reorder Number:
    •     Both table queries return no records
    -     Populate all the P_SUPPLY_REORDER output fields with nulls
    •     SUPPLY_ORDER returns a record, but XCOM_ORDER_HEADER returns no records
    -     Populate output fields with values from the join of SUPPLY_ORDER and SUPPLY_ORDER_LINE.
    •     SUPPLY_ORDER returns no records, but XCOM_ORDER_HEADER returns one record
    -     Populate output fields with values from the join of XCOM_ORDER_HEADER and XCOM_ORDER_LINES.
    •     SUPPLY_ORDER returns a record, and XCOM_ORDER_HEADER returns a record; find out the latest order by comapring max(SPLY_ORD_DT)
    from SUPPLY_ORDER with max(CREATED_DATE) from XCOM_ORDER_HEADER.
    -     If the latest order is in SUPPLY_ORDER, then populate output fields with values from the join of SUPPLY_ORDER and SUPPLY_ORDER_LINE.
    -     If order dates are equal from both join results, then populate output fields with values from the join of SUPPLY_ORDER and SUPPLY_ORDER_LINE.
    -     If the latest order is in XCOM_ORDER_HEADER, then populate output fields with values from the join of XCOM_ORDER_HEADER and XCOM_ORDER_LINES.
    Question is how can we switch over the queries to pull respective dataset based on these conditions ( checking that which table join is going to return a row and then based upon latest order if both tables return a row) and all this logic as part of single SQL statement that is returned as OUT Ref Cursor.
    Your help will be really appreciated. Thanks much in advance.

    It would be easier if you would supply a dataset we can work with. And I assume the queries are called within a other cursor which returns in_cust_id right?
    The best/fasters way would be to say goodbye to nested cursors.
    You need:
    the in_cust_id_query
    extend SUPPLY_ORDER with a new field
    max(CREATED_DATE) over (partiontion by cust_id) max_created_dateextend XCOM_ORDER_HEADER with a new field
    max(SPLY_ORD_DT)over (partiontion by cust_id) max_sply_ord_dateThen you make a 3 level SELECT
    the innerst () join all 3 sources
    the second level names the rule
    the outermost level applies the rule to each field:
    SELECT
    -- case statement to each field:
    CASE rule
    WHEN 1 THEN null
    WHEN 2 THEN s_smo_no
    WHEN 3 .... END  SMO_NO,
    SELECT
    -- check all rules:
    case
    --• Both table queries return no records
    when s_in_cust_id IS NULL and h_in_cust_id IS NULL then 1
    --• SUPPLY_ORDER returns a record, but XCOM_ORDER_HEADER returns no records
    when s_in_cust_id IS NOT NULL and h_in_cust_id IS NULL then 2
    --• SUPPLY_ORDER returns no records, but XCOM_ORDER_HEADER returns one record
    when s_in_cust_id IS NULL and h_in_cust_id IS NOT NULL then 3
    ELSE 4 end rule_id,
    i.*
    (SELECT c.in_cust_id,
                 s.*, (with alias of course eg. s_...)
                h.*, (with alias of course  e.g. h_...)
    from  in_cust_id_query c
      LEFT JOIN SUPPLY_ORDER s
       on (c.in_cust_id = s.in_cust_id)
    LEFT XCOM_ORDER_HEADER h
      on (c.in_cust_id = h.in_cust_id) i;I hope you get it.
    Of course you can do what you probable currently do. Open both cursors one by one and compare the results. But when you have 10000 in_cust_ids you start 20000 queries and you have a lot of code.
    This method I'm showing need these roles coded as well, but you'll have ONE single query and that will be as fast as ORACLE can be. And I believe it's easier to read too. (But not simple!)
    If you need more help, try to supply an example we can work on.
    -- andy

  • Migration (import) of simple Access table+screen to Apex is failing

    Hi,
    I have tried Exporting and then migrating an Access application - but have had repeated failures on the import step. These attempts are on the Oracle Application Express environment for evaluating Apex - I have a Workspace allocation (wsmihail1) on the Oracle database ( my schema is DBS1). User id is [email protected]
    Now, I have tried creating a Real simple Access application - 1 simple table & 1 form & 1 comand button !!
    Still crash::
    In APEX Create Migration Project screen / step :::::
    - try to Import db2.sql ....
    KEEP getting ::
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ERR-1021 Unable to run "function body returning boolean" validation.
    FYI::::
    THE db2.sql file is copied to here:::
    REM This SQL script was generated by the Oracle Migration Workbench
    REM Exporter for Microsoft Access on 19/10/2007 17:02:59
    REM Release: 10.2.0.2.0
    REM Version: Microsoft Access 2002
    REM Do not modify this file as any modification will invalidate the export
    REM and subsequent migration of your Microsoft Access database
    set define off
    set verify off
    set serveroutput on size 1000000
    set feedback off
    WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACCESS (
         p_dbid => 1,
         p_dbname => 'db2',
         p_dbsize => '176KB',
         p_dbpathname => 'C:\db2.mdb',
         p_dbuser => 'db2',
         p_dbpassword => ' ',
         p_isappdb => 1,
         p_isattacheddb => 0,
         p_convertdb => 1,
         p_jetversion => 4.0,
         p_accessversion => 'MS Access 2000',
         p_build => 501,
         p_collatingorder => 1033,
         p_querytimeout => 60,
         p_startupform => NULL,
         p_startupshowstatusbar => 1
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_TABLES (
         p_dbid => 1,
         p_tblid => 1,
         p_tblname => 'Table1',
         p_primarykey => 1,
         p_cnvtablestruct => 1,
         p_cnvmovedata => 1,
         p_cnvri => 1,
         p_cnvvalidation => 1,
         p_cnvdefault => 1,
         p_cnvaddtimestamp => 1,
         p_attachtablebacktoaccess => 1,
         p_savepassword => 0,
         p_cnvmakeupdateable => 1,
         p_retainlocalcopy => 0,
         p_syncwithserver => 1,
         p_ownerid => 1,
         p_validationtext => ' ',
         p_validationrule => ' ',
         p_numberofrows => 4,
         p_cachingtable => 0,
         p_description => ' ',
         p_attributes => 0,
         p_conflicttable => NULL,
         p_datecreated => '20071019164930',
         p_lastupdated => '20071019164934',
         p_recordcount => 4,
         p_orderbyon => 1,
         p_replicafilter => NULL,
         p_sourcetablename => ' ',
         p_updatable => 0
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_COLUMNS (
         p_dbid => 1,
         p_colid => 1,
         p_tblid => 1,
         p_colname => 'ID',
         p_coltype => 4,
         p_coltypedesc => 'Long',
         p_colautoincr => 0,
         p_nextcountervalue => 0,
         p_maxlengthsource => 0,
         p_avglengthsource => 0,
         p_coltextsize => 4,
         p_allowzerolength => 0,
         p_defaultvalue => '0',
         p_colrequired => 1,
         p_colcollatingorder => 1033,
         p_colordposition => 1,
         p_validationrule => ' ',
         p_validationtext => ' ',
         p_columndescription => ' ',
         p_columnhidden => 1,
         p_columnorder => 0,
         p_columnwidth => '-1',
         p_decimalplaces => 255,
         p_foreignname => ' ',
         p_validateonset => 1
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_COLUMNS (
         p_dbid => 1,
         p_colid => 2,
         p_tblid => 1,
         p_colname => 'Desc',
         p_coltype => 10,
         p_coltypedesc => 'Text',
         p_colautoincr => 0,
         p_nextcountervalue => 0,
         p_maxlengthsource => 0,
         p_avglengthsource => 0,
         p_coltextsize => 50,
         p_allowzerolength => -1,
         p_defaultvalue => ' ',
         p_colrequired => 1,
         p_colcollatingorder => 1033,
         p_colordposition => 2,
         p_validationrule => ' ',
         p_validationtext => ' ',
         p_columndescription => ' ',
         p_columnhidden => 1,
         p_columnorder => 0,
         p_columnwidth => '-1',
         p_decimalplaces => 0,
         p_foreignname => ' ',
         p_validateonset => 1
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_INDEXES (
         p_dbid => 1,
         p_indid => 1,
         p_tblid => 1,
         p_indname => 'ID',
         p_cnvindex => 1,
         p_isprimary => 0,
         p_isunique => 0,
         p_isforeign => 0,
         p_ignorenulls => 0,
         p_isrequired => 0,
         p_distinctcount => 4,
         p_isclustered => 0
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_IDX_COLS (
         p_dbid => 1,
         p_indcolid => 1,
         p_indid => 1,
         p_colid => 1,
         p_colorder => 1,
         p_tblid => 1,
         p_colname => 'ID'
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_INDEXES (
         p_dbid => 1,
         p_indid => 2,
         p_tblid => 1,
         p_indname => 'PK_Table1',
         p_cnvindex => 1,
         p_isprimary => 1,
         p_isunique => 1,
         p_isforeign => 0,
         p_ignorenulls => 0,
         p_isrequired => 1,
         p_distinctcount => 4,
         p_isclustered => 0
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_IDX_COLS (
         p_dbid => 1,
         p_indcolid => 2,
         p_indid => 2,
         p_colid => 1,
         p_colorder => 1,
         p_tblid => 1,
         p_colname => 'ID'
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_TAB_PERM (
         p_dbid => 1,
         p_tblid => 1,
         p_userid => 1,
         p_permissionid => 1,
         p_permission => 1048319,
         p_permission_desc => ' DB_SEC_CREATE DB_SEC_FULLACCESS DB_SEC_DELETE DB_SEC_READSEC DB_SEC_WRITESEC DB_SEC_WRITEOWNER DB_SEC_FRMRPT_READDEF DB_SEC_FRMRPT_WRITEDEF DB_SEC_MAC_READDEF DB_SEC_MAC_WRITEDEF DB_SEC_MAC_EXECUTE DB_SEC_MOD_READDEF DB_SEC_MOD_WRITEDEF '
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS (
         p_dbid => 1,
         p_formid => 1,
         p_formname => 'MyForm',
         p_afterdelconfirm => ' ',
         p_afterinsert => ' ',
         p_afterupdate => ' ',
         p_allowadditions => 0,
         p_allowdeletions => 0,
         p_allowedits => 0,
         p_allowediting => 0,
         p_allowfilters => 0,
         p_allowupdating => 1,
         p_autocenter => 0,
         p_autoresize => 0,
         p_backcolor => -2147483633,
         p_beforedelconfirm => ' ',
         p_beforeinsert => ' ',
         p_beforeupdate => ' ',
         p_borderstyle => 2,
         p_formcaption => 'MyForm',
         p_closebutton => 0,
         p_controlbox => 0,
         p_count => 5,
         p_currentview => 0,
         p_cycle => 0,
         p_dataentry => 1,
         p_datasheetbackcolor => 16777215,
         p_datasheetcellseffect => 0,
         p_datasheetfontheight => 10,
         p_datasheetfontitalic => 1,
         p_datasheetfontname => 'Arial',
         p_datasheetfontunderline => 1,
         p_datasheetfontweight => 400,
         p_datasheetforecolor => 0,
         p_datasheetgridlinesbehavior => 3,
         p_datasheetgridlinescolor => 12632256,
         p_defaultediting => 2,
         p_defaultview => 0,
         p_dividinglines => 0,
         p_fastlaserprinting => 0,
         p_filter => ' ',
         p_filteron => 1,
         p_frozencolumns => 1,
         p_gridX => 10,
         p_gridY => 10,
         p_hasmodule => 0,
         p_helpcontextid => 0,
         p_helpfile => ' ',
         p_hwnd => 590738,
         p_insideheight => 2265,
         p_insidewidth => 5490,
         p_keypreview => 1,
         p_layoutforprint => 1,
         p_logicalpagewidth => 9012,
         p_maxbutton => 0,
         p_menubar => ' ',
         p_minbutton => 0,
         p_minmaxbuttons => 3,
         p_modal => 1,
         p_navigationbuttons => 0,
         p_onactivate => ' ',
         p_onapplyfilter => ' ',
         p_onclick => ' ',
         p_onclose => ' ',
         p_oncurrent => ' ',
         p_ondblclick => ' ',
         p_ondeactivate => ' ',
         p_ondelete => ' ',
         p_onerror => ' ',
         p_onfilter => ' ',
         p_ongotfocus => ' ',
         p_onkeydown => ' ',
         p_onkeypress => ' ',
         p_onkeyup => ' ',
         p_onload => ' ',
         p_onlostfocus => ' ',
         p_onmousedown => ' ',
         p_onmousemove => ' ',
         p_onmouseup => ' ',
         p_onopen => ' ',
         p_onresize => ' ',
         p_ontimer => ' ',
         p_onunload => ' ',
         p_openargs => 'True',
         p_orderby => ' ',
         p_orderbyon => 1,
         p_painting => 0,
         p_palettesource => '(Default)',
         p_picture => '(NONE)',
         p_picturealignment => 2,
         p_picturesizemode => 0,
         p_picturetiling => 1,
         p_picturetype => 0,
         p_popup => 1,
         p_recordlocks => 0,
         p_recordselectors => 0,
         p_recordsettype => 0,
         p_recordsource => 'Table1',
         p_rowheight => -1,
         p_scrollbars => 3,
         p_shortcutmenu => 0,
         p_shortcutmenubar => ' ',
         p_showgrid => 0,
         p_tag => ' ',
         p_timerinterval => 0,
         p_toolbar => ' ',
         p_viewsallowed => 0,
         p_visible => 0,
         p_whatsthisbutton => 1,
         p_width => 4044,
         p_windowheight => 2970,
         p_windowwidth => 5910
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_CONTROLS (
         p_dbid => 1,
         p_formid => 1,
         p_controlid => 1,
         p_controlname => 'ID',
         p_controltype => 109,
         p_eventprocprefix => 'ID',
         p_inselection => 1,
         p_left => 1677,
         p_parent => 'MyForm',
         p_section => 0,
         p_tag => ' ',
         p_top => 114,
         p_visible => 0,
         p_backcolor => -2147483643,
         p_backstyle => 1,
         p_boundcolumn => NULL,
         p_ctrlcaption => ' ',
         p_columncount => NULL,
         p_columnheads => ' ',
         p_columnwidths => ' ',
         p_controlsource => 'ID',
         p_controltiptext => ' ',
         p_defaultvalue => ' ',
         p_displaywhen => 0,
         p_enabled => 0,
         p_fontbold => 1,
         p_fontitalic => 1,
         p_fontname => 'MS Sans Serif',
         p_fontsize => 8,
         p_fontunderline => 1,
         p_fontwheight => NULL,
         p_forecolor => -2147483640,
         p_format => ' ',
         p_height => 255,
         p_helpcontextid => 0,
         p_limittolist => 1,
         p_linkchildfields => ' ',
         p_linkmasterfields => ' ',
         p_listrows => NULL,
         p_multirow => 1,
         p_onchange => ' ',
         p_onclick => ' ',
         p_ondblclick => ' ',
         p_onkeydown => ' ',
         p_onkeypress => ' ',
         p_onkeyup => ' ',
         p_onmousedown => ' ',
         p_onmousemove => ' ',
         p_onmouseup => ' ',
         p_optionvalue => NULL,
         p_pageindex => NULL,
         p_picture => ' ',
         p_picturealignment => NULL,
         p_pictureresizemode => NULL,
         p_picturetiling => 1,
         p_picturetype => NULL,
         p_rowsource => ' ',
         p_rowsourcetype => ' ',
         p_shortcutmenubar => ' ',
         p_sourceobject => ' ',
         p_statusbartext => ' ',
         p_style => NULL,
         p_tabfixedheight => NULL,
         p_tabfixedwidth => NULL,
         p_tabindex => 0,
         p_tabstop => 0,
         p_textalign => 0,
         p_textfontcharset => 0,
         p_width => 900
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_CONTROLS (
         p_dbid => 1,
         p_formid => 1,
         p_controlid => 2,
         p_controlname => 'ID_Label',
         p_controltype => 100,
         p_eventprocprefix => 'ID_Label',
         p_inselection => 1,
         p_left => 57,
         p_parent => 'ID',
         p_section => 0,
         p_tag => ' ',
         p_top => 114,
         p_visible => 0,
         p_backcolor => -2147483633,
         p_backstyle => 0,
         p_boundcolumn => NULL,
         p_ctrlcaption => 'ID',
         p_columncount => NULL,
         p_columnheads => ' ',
         p_columnwidths => ' ',
         p_controlsource => ' ',
         p_controltiptext => ' ',
         p_defaultvalue => ' ',
         p_displaywhen => 0,
         p_enabled => 1,
         p_fontbold => 1,
         p_fontitalic => 1,
         p_fontname => 'MS Sans Serif',
         p_fontsize => 8,
         p_fontunderline => 1,
         p_fontwheight => NULL,
         p_forecolor => -2147483630,
         p_format => ' ',
         p_height => 255,
         p_helpcontextid => 0,
         p_limittolist => 1,
         p_linkchildfields => ' ',
         p_linkmasterfields => ' ',
         p_listrows => NULL,
         p_multirow => 1,
         p_onchange => ' ',
         p_onclick => ' ',
         p_ondblclick => ' ',
         p_onkeydown => ' ',
         p_onkeypress => ' ',
         p_onkeyup => ' ',
         p_onmousedown => ' ',
         p_onmousemove => ' ',
         p_onmouseup => ' ',
         p_optionvalue => NULL,
         p_pageindex => NULL,
         p_picture => ' ',
         p_picturealignment => NULL,
         p_pictureresizemode => NULL,
         p_picturetiling => 1,
         p_picturetype => NULL,
         p_rowsource => ' ',
         p_rowsourcetype => ' ',
         p_shortcutmenubar => ' ',
         p_sourceobject => ' ',
         p_statusbartext => ' ',
         p_style => NULL,
         p_tabfixedheight => NULL,
         p_tabfixedwidth => NULL,
         p_tabindex => NULL,
         p_tabstop => 1,
         p_textalign => 0,
         p_textfontcharset => 0,
         p_width => 1560
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_CONTROLS (
         p_dbid => 1,
         p_formid => 1,
         p_controlid => 3,
         p_controlname => 'Desc',
         p_controltype => 109,
         p_eventprocprefix => 'Desc',
         p_inselection => 1,
         p_left => 1677,
         p_parent => 'MyForm',
         p_section => 0,
         p_tag => ' ',
         p_top => 456,
         p_visible => 0,
         p_backcolor => -2147483643,
         p_backstyle => 1,
         p_boundcolumn => NULL,
         p_ctrlcaption => ' ',
         p_columncount => NULL,
         p_columnheads => ' ',
         p_columnwidths => ' ',
         p_controlsource => 'Desc',
         p_controltiptext => ' ',
         p_defaultvalue => ' ',
         p_displaywhen => 0,
         p_enabled => 0,
         p_fontbold => 1,
         p_fontitalic => 1,
         p_fontname => 'MS Sans Serif',
         p_fontsize => 8,
         p_fontunderline => 1,
         p_fontwheight => NULL,
         p_forecolor => -2147483640,
         p_format => ' ',
         p_height => 255,
         p_helpcontextid => 0,
         p_limittolist => 1,
         p_linkchildfields => ' ',
         p_linkmasterfields => ' ',
         p_listrows => NULL,
         p_multirow => 1,
         p_onchange => ' ',
         p_onclick => ' ',
         p_ondblclick => ' ',
         p_onkeydown => ' ',
         p_onkeypress => ' ',
         p_onkeyup => ' ',
         p_onmousedown => ' ',
         p_onmousemove => ' ',
         p_onmouseup => ' ',
         p_optionvalue => NULL,
         p_pageindex => NULL,
         p_picture => ' ',
         p_picturealignment => NULL,
         p_pictureresizemode => NULL,
         p_picturetiling => 1,
         p_picturetype => NULL,
         p_rowsource => ' ',
         p_rowsourcetype => ' ',
         p_shortcutmenubar => ' ',
         p_sourceobject => ' ',
         p_statusbartext => ' ',
         p_style => NULL,
         p_tabfixedheight => NULL,
         p_tabfixedwidth => NULL,
         p_tabindex => 1,
         p_tabstop => 0,
         p_textalign => 0,
         p_textfontcharset => 0,
         p_width => 2310
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_CONTROLS (
         p_dbid => 1,
         p_formid => 1,
         p_controlid => 4,
         p_controlname => 'Desc_Label',
         p_controltype => 100,
         p_eventprocprefix => 'Desc_Label',
         p_inselection => 1,
         p_left => 57,
         p_parent => 'Desc',
         p_section => 0,
         p_tag => ' ',
         p_top => 456,
         p_visible => 0,
         p_backcolor => -2147483633,
         p_backstyle => 0,
         p_boundcolumn => NULL,
         p_ctrlcaption => 'Desc',
         p_columncount => NULL,
         p_columnheads => ' ',
         p_columnwidths => ' ',
         p_controlsource => ' ',
         p_controltiptext => ' ',
         p_defaultvalue => ' ',
         p_displaywhen => 0,
         p_enabled => 1,
         p_fontbold => 1,
         p_fontitalic => 1,
         p_fontname => 'MS Sans Serif',
         p_fontsize => 8,
         p_fontunderline => 1,
         p_fontwheight => NULL,
         p_forecolor => -2147483630,
         p_format => ' ',
         p_height => 255,
         p_helpcontextid => 0,
         p_limittolist => 1,
         p_linkchildfields => ' ',
         p_linkmasterfields => ' ',
         p_listrows => NULL,
         p_multirow => 1,
         p_onchange => ' ',
         p_onclick => ' ',
         p_ondblclick => ' ',
         p_onkeydown => ' ',
         p_onkeypress => ' ',
         p_onkeyup => ' ',
         p_onmousedown => ' ',
         p_onmousemove => ' ',
         p_onmouseup => ' ',
         p_optionvalue => NULL,
         p_pageindex => NULL,
         p_picture => ' ',
         p_picturealignment => NULL,
         p_pictureresizemode => NULL,
         p_picturetiling => 1,
         p_picturetype => NULL,
         p_rowsource => ' ',
         p_rowsourcetype => ' ',
         p_shortcutmenubar => ' ',
         p_sourceobject => ' ',
         p_statusbartext => ' ',
         p_style => NULL,
         p_tabfixedheight => NULL,
         p_tabfixedwidth => NULL,
         p_tabindex => NULL,
         p_tabstop => 1,
         p_textalign => 0,
         p_textfontcharset => 0,
         p_width => 1560
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_CONTROLS (
         p_dbid => 1,
         p_formid => 1,
         p_controlid => 5,
         p_controlname => 'Command4',
         p_controltype => 104,
         p_eventprocprefix => 'Command4',
         p_inselection => 1,
         p_left => 2891,
         p_parent => 'MyForm',
         p_section => 0,
         p_tag => ' ',
         p_top => 56,
         p_visible => 0,
         p_backcolor => NULL,
         p_backstyle => NULL,
         p_boundcolumn => NULL,
         p_ctrlcaption => 'Command4',
         p_columncount => NULL,
         p_columnheads => ' ',
         p_columnwidths => ' ',
         p_controlsource => ' ',
         p_controltiptext => ' ',
         p_defaultvalue => ' ',
         p_displaywhen => 0,
         p_enabled => 0,
         p_fontbold => 1,
         p_fontitalic => 1,
         p_fontname => 'MS Sans Serif',
         p_fontsize => 8,
         p_fontunderline => 1,
         p_fontwheight => NULL,
         p_forecolor => 0,
         p_format => ' ',
         p_height => 340,
         p_helpcontextid => 0,
         p_limittolist => 1,
         p_linkchildfields => ' ',
         p_linkmasterfields => ' ',
         p_listrows => NULL,
         p_multirow => 1,
         p_onchange => ' ',
         p_onclick => '[Event Procedure]',
         p_ondblclick => ' ',
         p_onkeydown => ' ',
         p_onkeypress => ' ',
         p_onkeyup => ' ',
         p_onmousedown => ' ',
         p_onmousemove => ' ',
         p_onmouseup => ' ',
         p_optionvalue => NULL,
         p_pageindex => NULL,
         p_picture => '(NONE)',
         p_picturealignment => NULL,
         p_pictureresizemode => NULL,
         p_picturetiling => 1,
         p_picturetype => 0,
         p_rowsource => ' ',
         p_rowsourcetype => ' ',
         p_shortcutmenubar => ' ',
         p_sourceobject => ' ',
         p_statusbartext => ' ',
         p_style => NULL,
         p_tabfixedheight => NULL,
         p_tabfixedwidth => NULL,
         p_tabindex => 2,
         p_tabstop => 0,
         p_textalign => NULL,
         p_textfontcharset => 0,
         p_width => 964
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_MODULES (
         p_dbid => 1,
         p_moduleid => 1,
         p_formid => 1,
         p_modulename => 'Form_MyForm',
         p_countofdeclarationlines => 1,
         p_countoflines => 21,
         p_lines => 'Option Compare Database
    NULL
    Private Sub Command4_Click()
    NULL
    Dim varX As Variant
    varX = MsgBox(Chr(34)Click [OK] to quit app or [Cancel] to stay.Chr(34), vbYesNo)
    If varX = vbYes Then
    MsgBox Chr(34)Exit appChr(34)
    Application.Quit
    Else
    NULL
    MsgBox Chr(34)StayChr(33)Chr(34)
    NULL
    End If
    NULL
    End Sub
         p_moduletype => 1
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_PERM (
         p_dbid => 1,
         p_formid => 1,
         p_userid => 1,
         p_permissionid => 1,
         p_permission => 1048575,
         p_permission_desc => ' DB_SEC_CREATE DB_SEC_FULLACCESS DB_SEC_DELETE DB_SEC_READSEC DB_SEC_WRITESEC DB_SEC_WRITEOWNER DB_SEC_FRMRPT_EXECUTE DB_SEC_FRMRPT_READDEF DB_SEC_FRMRPT_WRITEDEF DB_SEC_FRMRPT_EXECUTE DB_SEC_MAC_READDEF DB_SEC_MAC_WRITEDEF DB_SEC_MAC_EXECUTE DB_SEC_MOD_READDEF DB_SEC_MOD_WRITEDEF '
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GROUPS (
         p_dbid => 1,
         p_groupid => 1,
         p_grpname => 'Admins'
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GROUPS (
         p_dbid => 1,
         p_groupid => 2,
         p_grpname => 'Users'
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_USERS (
         p_dbid => 1,
         p_userid => 1,
         p_username => 'admin'
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GRPSMEMBERS (
         p_dbid => 1,
         p_grpmbrid => 1,
         p_userid => 1,
         p_groupid => 1
    end;
    begin
    WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GRPSMEMBERS (
         p_dbid => 1,
         p_grpmbrid => 2,
         p_userid => 1,
         p_groupid => 2
    end;
    +++++++++++++++++++++++++++++++++++++++++++
    The associated .xml file is :::
    <?xml version="1.0" encoding="UTF-8" ?>
    - <!-- this file was generated by the Oracle Migration Workbench Exporter for Microsoft Access 10.2.0.2.0 on 19/10/2007 17:02:59
    -->
    - <!-- Do not modify this file as any modification will invalidate the export and subsequent migration of your Microsoft Access database
    -->
    - <DATABASES>
    - <DATABASE>
    <DBID>1</DBID>
    <DBNAME>db2</DBNAME>
    <DBSIZE>1</DBSIZE>
    <DBPATHNAME>C:\db2.mdb</DBPATHNAME>
    <DBUSER>db2</DBUSER>
    <DBPASSWORD>oracle</DBPASSWORD>
    <ISAPPDB>1</ISAPPDB>
    <ISATTACHEDDB>0</ISATTACHEDDB>
    <CONVERTDB>1</CONVERTDB>
    <VERSION>4.0</VERSION>
    <ACCESSVERSION>MS Access 2000</ACCESSVERSION>
    <BUILD>501</BUILD>
    <COLLATINGORDER>1033</COLLATINGORDER>
    <QUERYTIMEOUT>60</QUERYTIMEOUT>
    <STARTUPFORM />
    <STARTUPSHOWSTATUSBAR>1</STARTUPSHOWSTATUSBAR>
    - <TABLES>
    - <TABLE PRIMARY_KEY="1">
    <TBLID>1</TBLID>
    <DBID>1</DBID>
    <TBLNAME>Table1</TBLNAME>
    <CNVTABLESTRUCT>1</CNVTABLESTRUCT>
    <CNVMOVEDATA>1</CNVMOVEDATA>
    <CNVRI>1</CNVRI>
    <CNVVALIDATION>1</CNVVALIDATION>
    <CNVDEFAULT>1</CNVDEFAULT>
    <CNVADDTIMESTAMP>1</CNVADDTIMESTAMP>
    <ATTACHTABLEBACKTOACCESS>1</ATTACHTABLEBACKTOACCESS>
    <SAVEPASSWORD>0</SAVEPASSWORD>
    <CNVMAKEUPDATEABLE>1</CNVMAKEUPDATEABLE>
    <RETAINLOCALCOPY>0</RETAINLOCALCOPY>
    <SYNCWITHSERVER>1</SYNCWITHSERVER>
    <OWNERID>1</OWNERID>
    <VALIDATIONTEXT />
    <VALIDATIONRULE />
    <NUMBEROFROWS>4</NUMBEROFROWS>
    <CACHINGTABLE>0</CACHINGTABLE>
    <DESCRIPTION />
    <ATTRIBUTES>0</ATTRIBUTES>
    <CONFLICTTABLE />
    <DATECREATED>19/10/2007 16:49:30</DATECREATED>
    <LASTUPDATED>19/10/2007 16:49:34</LASTUPDATED>
    <RECORDCOUNT>4</RECORDCOUNT>
    <ORDERBYON>1</ORDERBYON>
    <REPLICAFILTER />
    <SOURCETABLENAME />
    <UPDATABLE>0</UPDATABLE>
    - <COLUMNS>
    - <COLUMN>
    <COLID>1</COLID>
    <TBLID>1</TBLID>
    <DBID>1</DBID>
    <COLNAME>ID</COLNAME>
    <COLTYPE>4</COLTYPE>
    <COLTYPEDESC>Long</COLTYPEDESC>
    <COLAUTOINCR>0</COLAUTOINCR>
    <NEXTCOUNTERVALUE>0</NEXTCOUNTERVALUE>
    <MAXLENGTHSOURCE>0</MAXLENGTHSOURCE>
    <AVGLENGTHSOURCE>0</AVGLENGTHSOURCE>
    <COLTEXTSIZE>4</COLTEXTSIZE>
    <ALLOWZEROLENGTH>0</ALLOWZEROLENGTH>
    <DEFAULTVALUE>0</DEFAULTVALUE>
    <COLREQUIRED>1</COLREQUIRED>
    <COLCOLLATINGORDER>1033</COLCOLLATINGORDER>
    <COLORDPOSITION>1</COLORDPOSITION>
    <VALIDATIONRULE />
    <VALIDATIONTEXT />
    <COLUMNDESCRIPTION />
    <COLUMNHIDDEN>1</COLUMNHIDDEN>
    <COLUMNORDER>0</COLUMNORDER>
    <COLUMNWIDTH>-1</COLUMNWIDTH>
    <DECIMALPLACES>255</DECIMALPLACES>
    <FOREIGNNAME />
    <VALIDATEONSET>1</VALIDATEONSET>
    </COLUMN>
    - <COLUMN>
    <COLID>2</COLID>
    <TBLID>1</TBLID>
    <DBID>1</DBID>
    <COLNAME>Desc</COLNAME>
    <COLTYPE>10</COLTYPE>
    <COLTYPEDESC>Text</COLTYPEDESC>
    <COLAUTOINCR>0</COLAUTOINCR>
    <NEXTCOUNTERVALUE>0</NEXTCOUNTERVALUE>
    <MAXLENGTHSOURCE>0</MAXLENGTHSOURCE>
    <AVGLENGTHSOURCE>0</AVGLENGTHSOURCE>
    <COLTEXTSIZE>50</COLTEXTSIZE>
    <ALLOWZEROLENGTH>-1</ALLOWZEROLENGTH>
    <DEFAULTVALUE />
    <COLREQUIRED>1</COLREQUIRED>
    <COLCOLLATINGORDER>1033</COLCOLLATINGORDER>
    <COLORDPOSITION>2</COLORDPOSITION>
    <VALIDATIONRULE />
    <VALIDATIONTEXT />
    <COLUMNDESCRIPTION />
    <COLUMNHIDDEN>1</COLUMNHIDDEN>
    <COLUMNORDER>0</COLUMNORDER>
    <COLUMNWIDTH>-1</COLUMNWIDTH>
    <DECIMALPLACES>0</DECIMALPLACES>
    <FOREIGNNAME />
    <VALIDATEONSET>1</VALIDATEONSET>
    </COLUMN>
    </COLUMNS>
    - <INDEXES>
    - <INDEX>
    <INDID>1</INDID>
    <TBLID>1</TBLID>
    <DBID>1</DBID>
    <INDNAME>ID</INDNAME>
    <CNVINDEX>1</CNVINDEX>
    <ISPRIMARY>0</ISPRIMARY>
    <ISUNIQUE>0</ISUNIQUE>
    <ISFOREIGN>0</ISFOREIGN>
    <IGNORENULLS>0</IGNORENULLS>
    <ISREQUIRED>0</ISREQUIRED>
    <DISTINCTCOUNT>4</DISTINCTCOUNT>
    <ISCLUSTERED>0</ISCLUSTERED>
    - <INDEX_COLUMNS>
    - <INDEX_COLUMN>
    <INDCOLID>1</INDCOLID>
    <INDID>1</INDID>
    <COLID>1</COLID>
    <DBID>1</DBID>
    <COLORDER>1</COLORDER>
    <TBLID>1</TBLID>
    <COLNAME>ID</COLNAME>
    </INDEX_COLUMN>
    </INDEX_COLUMNS>
    </INDEX>
    - <INDEX>
    <INDID>2</INDID>
    <TBLID>1</TBLID>
    <DBID>1</DBID>
    <INDNAME>PK_Table1</INDNAME>
    <CNVINDEX>1</CNVINDEX>
    <ISPRIMARY>1</ISPRIMARY>
    <ISUNIQUE>1</ISUNIQUE>
    <ISFOREIGN>0</ISFOREIGN>
    <IGNORENULLS>0</IGNORENULLS>
    <ISREQUIRED>1</ISREQUIRED>
    <DISTINCTCOUNT>4</DISTINCTCOUNT>
    <ISCLUSTERED>0</ISCLUSTERED>
    - <INDEX_COLUMNS>
    - <INDEX_COLUMN>
    <INDCOLID>2</INDCOLID>
    <INDID>2</INDID>
    <COLID>1</COLID>
    <DBID>1</DBID>
    <COLORDER>1</COLORDER>
    <TBLID>1</TBLID>
    <COLNAME>ID</COLNAME>
    </INDEX_COLUMN>
    </INDEX_COLUMNS>
    </INDEX>
    </INDEXES>
    - <PERMISSIONS>
    - <USRS>
    - <USR>
    <USRNAME>admin</USRNAME>
    <PERMISSION>1048319</PERMISSION>
    </USR>
    </USRS>
    - <GRPS>
    - <GRP>
    <USRNAME>Admins</USRNAME>
    <PERMISSION>1048319</PERMISSION>
    </GRP>
    - <GRP>
    <USRNAME>Users</USRNAME>
    <PERMISSION>1048319</PERMISSION>
    </GRP>
    </GRPS>
    </PERMISSIONS>
    </TABLE>
    </TABLES>
    <QUERIES />
    <RELATIONS />
    <MODULES />
    - <GROUPS>
    - <GROUP>
    <GROUPID>1</GROUPID>
    <GRPNAME>Admins</GRPNAME>
    - <GROUPUSERS>
    <GROUPUSER>admin</GROUPUSER>
    </GROUPUSERS>
    </GROUP>
    - <GROUP>
    <GROUPID>2</GROUPID>
    <GRPNAME>Users</GRPNAME>
    - <GROUPUSERS>
    <GROUPUSER>admin</GROUPUSER>
    </GROUPUSERS>
    </GROUP>
    </GROUPS>
    - <USERS>
    - <USER>
    <USERID>1</USERID>
    <USERNAME>admin</USERNAME>
    </USER>
    </USERS>
    </DATABASE>
    <ATTACHED_TABLES />
    </DATABASES>

    Hi Mike,
    Hopefully I can help to clarify a few things for you. An MS Access application migration essentially involves 3 steps, to be completed in the following order:
    1. Export the database and application information from your MS Access MDB file using the Exporter tool for MS Access. This tool generates two files: an XML file containing the database schema information, and a SQL script containing the application metadata. You've already completed this step.
    2. Migrate the database schema to Oracle. Using Oracle SQL Developer Migration Workbench, load the XML file generated in step 1, to capture & convert the MS Access database objects to Oracle.
    3. Migrate the application to Oracle Application Express. Using Oracle Application Express Application Migrations, create a Migration Project to retrieve the application metadata from the SQL script generated in step 1. The Migration Project should be associated with the Oracle schema containing the migrated database objects (from step 2).
    It sounds like you have carried out steps 1 and 3, but skipped step 2. I would recommend that you do the following:
    * Download the latest release of Oracle SQL Developer, version 1.2.1, from OTN - http://www.oracle.com/technology/software/products/sql/index.html. It incorporates the Migration Workbench. Review the accompanying documentation from the Help > Table of Contents menu item, specifically the chapter "Migrating Third Party Databases".
    * Create a Migration Repository, which is used by the Migration Workbench during the migration process. In order to do so, you need to create a database user for the Migration Repository. I would recommend reviewing the documentation for further information on this. The section titled "Before You Start Migrating: General Information" will assist you.
    * From the menu bar go to Migration > Capture Microsoft Access Exported XML, where you should browse to the location of the XML file generated by the Exporter tool in step 1. This captures the MS Access database schema information, and create a Captured Model of the information.
    * Right-click on the captured model, and select "Convert to Oracle Model" from its context menu. This creates a converted model, which is a representation of the structure of the destination Oracle database.
    * From the menu bar go to Tools > Preferences, to launch the Preferences dialog. On the Preferences dialog go to Migration > Generation Options, and select the "Least Privilege Schema Migration" and click OK.
    * Right-click on the Converted Model & select "Generate" from its context menu. This will generate the DDL statements to create the migrated database objects. I would recommend that you save the statements as a SQL script.
    * Create a new Oracle connection in Oracle SQL Developer, providing the connection details to the schema associated with your Oracle APEX workspace. Then run the SQL script containing the output from the "Generate" step. This will create the objects in the schema associated with your Oracle APEX workspace.
    * Log in to the Oracle APEX workspace, and I would recommend creating a new Migration Project. You should then be in a position to review the information retrieved from your MS Access application forms & reports.
    I hope this helps. Apologies for the length of the posting, but hopefully the points I've outlined will make the process a little clearer for you.
    Regards,
    Hilary

  • How to improve Query performance on large table in MS SQL Server 2008 R2

    I have a table with 20 million records. What is the best option to improve query performance on this table. Is partitioning the table into filegroups  is a best option or splitting the table into multiple smaller tables? 

    Hi bala197164,
    First, I want to inform that both to partition the table into filegroups and split the table into multiple smaller tables can improve the table query performance, and they are fit for different situation. For example, our table have one hundred columns and
    some columns are not related to this table object directly (for example, there is a table named userinfo to store user information, it has columns address_street, address_zip,address_ province columns, at this time, we can create a new table named as Address,
    and add a foreign key in userinfo table references Address table), under this situation, by splitting a large table into smaller, individual tables, queries that access only a fraction of the data can run faster because there is less data to scan. Another
    situation is our table records can be grouped easily, for example, there is a column named year to store information about product release date, at this time, we can partition the table into filegroups to improve the query performance. Usually, we perform
    both of methods together. Additionally, we can add index to table to improve the query performance. For more detail information, please refer to the following document:
    Partitioning:
    http://msdn.microsoft.com/en-us/library/ms178148.aspx
    CREATE INDEX (Transact-SQL):
    http://msdn.microsoft.com/en-us/library/ms188783.aspx
    TechNet
    Subscriber Support 
    If you are
    TechNet Subscription user and have any feedback on our support quality, please send your feedback
    here.
    Allen Li
    TechNet Community Support

  • Migrating When Tables Are In Seperate .mdb File

    I am new to migrating databases from Access to Oracle so I hope this is not too basic a question.
    In the Access world it is not uncommon to put the tables for a database in a seperate .mdb file. Then all the other database objects are in another .mdb file with linked tables pointing to the .mdb with the tables.
    So my question is assuming I have a two .mdb files as described how is the migration to App Exp done? Do I need to delete all the linked tables and then migrate both .mdb files to the same schema/workspace? Is there direct support for Access linked tables in App Exp 3.1.1 (the version I am using)? Maybe there is a best practice way to migrate Access to App Exp when the Access database is in two files as described?
    Thanks for your help in advance!!

    The approach I have taken is to delete the linked tables, and import the actual tables into the MDB then start the migration.
    I have focused on importing tables (queries/views) and data. I am rebuilding the User Interface in Apex rather than importing forms, mostly as a good opportunity to learn Apex.
    -Rob

  • What is the table for query name

    Hi All,
    I need an urgent requirement for removing duplicate technical query names from the production. Since there are few issues with the SAP given program I am customizing the SAP Program. Can any one tell me what is the table where the QUERY NAME and it's technical name can be found?
    Thanks,
    Alex.

    hi Alex,
    try RSRREPDIR, RSZCOMPDIR.
    there is one oss note all the tables.
    Table containing Work Book and query relation
    Query Detailes
    oss 792779
    Symptom
    Report ANALYZE_RSZ_TABLES is designed as a check-tool for detecting and solving different types of inconsistencies in the main query definition database tables.
    The program is recommended for BW system administrators.
    Other terms
    Query definition, query, reusable, component, variable, missing elements, missing records, missing UID, INCONSISTENCY, RSZELTDIR, RSZCOMPDIR, RSZCOMPIC, RSZGLOBV, RSZCALC, RSZSELECT, RSRREPDIR.
    Reason and Prerequisites
    ATTENTION: the described version of the program is delivered with the following Support Packages:
    SP27 for release BW 3.0B
    SP21 for release BW 3.1C
    SP13 for release BW 3.5
    All versions of this report available in systems before those Support Packages are test versions which can be used only for information purposes.
    Check prerequisites
    Checks are possible only for elements in object version 'A' (active) and 'D' (delivered).
    Checks for query elements in 'D' version are possible only in the systems which are set as content.
    Checks description
    Report performs checks in the tables containing the parts of the definitions of queries and query components: RSRREPDIR, RSZCOMPDIR, RSZCOMPIC, RSZGLOBV, RSZELTDIR and RSZELTXREF.
    1. Table RSRREPDIR
    The table RSRREPDIR is a header table of the generated reports. Consistency of query definition in this table allows to select a query in the Open Dialogs of fronted application and to call report generated for this particular query using transaction RSRT.
    The following errors can be found:
    - queries with missing definition;
    - queries with missing GENUNIID;
    - queries with technical names different than in RSZCOMPDIR;
    - non-queries in the table.
    1.1 Queries with missing definition
    The queries are available only in the table RSRREPDIR and not found in the table RSZELTDIR in the corresponding object version. Such queries (in active version) can be accessed only from RSRT transaction. An attempt to execute such query will return the short dump 'Exception condition INCONSISTENCY'. The error also happens during query generation in RSRT or during mass regeneration of the queries using RSR_GEN_DIRECT_ALL_QUERIES report or application menu of transaction RSRT. The inconsistent queries can not be repaired because of missing query definitions. The recommended solution is to delete those records in order to avoid the possible system dumps.
    1.2 Queries with missing GENUNIID
    Queries having empty GENUNIID field in the table RSRREPDIR. Such queries may be available in the frontend and in RSRT transaction. An attempt to execute such query will return the message'GENUNIID not found'. Situation requires additional investigation at SAP. Create an OSS message for BW-BEX-ET-QDEF.
    1.3 Queries with technical names different than in RSZCOMPDIR
    The check outputs the queries which have different technical names in the RSRREPDIR and RSZCOMPDIR tables. Execution of a query using the technical name given in Query Designer and stored in the table RSZCOMPDIR will return the error message 'GENUNIID not found'. The system tries to find the corresponding GENUNIID for the wrong COMPID which does not exist in the system or which belong to another query. The recommended solution is to correct the wrong COMPID in the table RSRREPDIR via corresponding procedure.
    1.4 Non-queries in the table
    The table RSRREPDIR normally contains only reports. Query elements of other types should not exist in this table and can be deleted. In case, when such records exist in the table an attempt to access them in RSRT returns the error message 'GENUNIID not found'. The recommended solution is to delete those records from the table using the corresponding procedure.
    2. Table RSZCOMPIC
    The table RSZCOMPIC contains an InfoProvider assignment for queries and other reusable query components (STR, RKF and CKF).
    The following errors can be found:
    - local elements in RSZCOMPIC;
    - components with inconsistent definition;
    - components based on non-existing InfoProviders;
    - components based on non-active InfoProviders.
    2.1 Local elements in RZSCOMPIC
    The table RSZCOMPIC contains an InfoProvider assignment for the reusable components. The local elements and also variables have no InfoProvider assignment and should not exist in this table. Those elements can be deleted via corresponding procedure.
    2.2 Components with inconsistent definition
    The reusable queries or query components existing in the table RSZCOMPIC, but not found in the table RSZELTDIR. Those reusable components may return 'Exception condition INCONSISTENCY' dump during accessing/execution. The situation may have different outcomes and has to be investigated at SAP. Create an OSS message for BW-BEX-ET-QDEF.
    2.3 Components based on non-existing InfoProviders
    Queries or query components are assigned to the InfoProviders which do not exist anymore in the system. Queries without InfoProvider are not available in Open Dialogs of frontend applications, but can be executed in RSRT. The execution will return the error message'InfoProvider not found'. The recommended solution is to delete the unnecessary components. Deletion of these queries or query components can be done directly from the list using corresponding procedure similar to RSZDELETE transaction.
    2.4 Components based on non-active InfoProviders
    Queries or query components which are assigned to the InfoProviders which do not exist in the system in the active version. Queries without active InfoProvider are not available in Open Dialogs of frontend applications. In case, an affected query is technically consistent, an attempt to execute it in transaction RSRT will return the message 'Activate the XXX InfoCube / InfoProvider again. Message #BRAIN 056'. Quite often this error is combined with other errors like missing GENUNIID in the RSRREPDIR or other inconsistencies. Each case has to be investigated in order to get the current status of this object. If the affected query is useless, it can be deleted from the system using transaction RSZDELETE.
    The check is available only for the query elements in object version 'A' (active).
    3. Table RSZCOMPDIR
    The table RSZCOMPDIR is the directory table containing the main properties of all reusable components.
    The following errors can be found:
    - duplicated technical names (COMPID);
    - components with inconsistent definition;
    - components without InfoProvider assignment;
    - components with missing OWNER.
    3.1 Duplicated technical names (COMPID)
    The check outputs queries or other reusable query components which have duplicated technical names (COMPID).
    The error does not cause any dumps in ABAP or terminations in Query Designer, but may cause several symptoms in different reporting areas:
    different queries are available in BEX Analyzer and RSRT under the same name;
    wrong query is used as Data Source for Web Template (Web Reporting, Reporting Agent, Broadcasting, MDX);
    replacement of variables does not work... etc.
    The recommended solution is to provide a new technical name for the duplicated component using corresponding procedure.
    ATTENTION: in case when there are only 2 components with the duplicated technical name, only one of those 2 components can be renamed using the corresponding procedure.
    The alternative solution for renaming the duplicated technical names is to use the ABAP report RENAME_DUPLICATE_ELEMENTS.
    3.2 Components with inconsistent definition
    Reusable query components which are not found in the element directory table RSZELTDIR are displayed. This situation may cause the short dump 'Exception condition INCONSISTENCY' during accessing the affected component in Query Designer or execution the affected query in RSRT. Further investigations are required at SAP. Create an OSS note for the SAP component BW-BEX-ET-QDEF.
    3.3 Components without InfoProvider assignment
    All reusable query component (except variables) should be assigned to a particular InfoProvider. This assignment is located in the table RSZCOMPIC. When the record is not found in this table, the affected component may become not available in Query Designer in the corresponding InfoProvider. In some cases the error message "Component XXX.. (version A) has no InfoCube assignment". Further investigations are required at SAP. Create an OSS note for the SAP component BW-BEX-ET-QDEF.
    3.4 Components with empty ONWER field
    Reusable components which have empty OWNER field in the table RSZCOMPDIR are accessible by users having $USER setting in the authorization object S_RS_COMP1 (users which are authorized to their own queries or query components). This leads to authorization concept violation.
    For error solution the field OWNER in the RSZCOMPDIR should be filled with any value. Execute the corresponding edit mode in order to fill the empty field with user 'SAP'. This will prevent the potential authorization violation for users with $USER setting and will take no effect on the users without this setting.
    4. Table RSZELTXREF
    The table RSZELTXREF contains all links and dependencies between the query elements within a query or query component.
    The following errors can be found:
    - missing elements (INCONSISTENCY dump);
    - not supported relations between query elements;
    - extended RSZELTXREF check.
    4.1 Missing elements
    Missing elements are those query elements which exist as the dependant objects (field TELTUID) in the table RSZELTXREF, but not available in the element directory table RSZELTDIR in corresponding object version. In case, when such elements are used in any query or other query components (STR, CKF or RKF), this may lead to ABAP short dump with 'Exception condition INCONSISTENCY' error message in query run-time or design-time. Other known symptoms of this error is, that structures, calculated key figures or restricted key figures are not available in an Info Provider in Query Designer during design-time.
    The missing elements which are in use in other queries or query components, can not be automatically repaired or deleted without components where those elements are used. In most cases the manual repair operations directly in the DB tables are required. Create an OSS message for SAP component BW-BEX-ET-QDEF for further investigations and creation of a repair plan.
    The missing elements which are not in use in any query or query components, can be deleted from the system via corresponding delete procedure. This deletion will not affect any existing query or query component.
    ATTENTION: if missing element is variable, it can be repaired in some cases automatically using the corresponding repair procedure. See table RSZGLOBV check 5.1. 'Variables with inconsistent definition' for details.
    4.2 Not supported relations between query elements
    Some relations between query elements which are not supported and can cause dumps in ABAP or terminations in Query Designer (for example link STR <--> VAR). Such cases have to be additionally investigated at SAP. Create an OSS message for SAP component BW-BEX-ET-QDEF.
    4.3 Extended RSZELTXREF check
    The extended RSZELTXREF check outputs 2 situations which, in combination with other conditions in the system, may be responsible for slow performance of all operations which involve select from the table RSZELTXREF and resolving the relations between query elements (query load, query generation, expanding of a variable list for corresponding InfoObject, expanding of a list of reusable components in Query Designer,... etc.):
    - records with empty INFOCUBE field
    - records which are not used in any query or query component
    Records with empty INFOCUBE field
    The current algorithm of resolving of relations between the query elements uses an optimization which allows to reduce the amount of data selected from the table RSZELTXREF during such operations are query load, query generate, expand a list of reusable components (STR, CKF, RKF) and so on. All relations between query elements within one reusable component based on one InfoProvider 'N' are also located within the same InfoProvider. The system has to select only records where the INFOCUBE field contain the same InfoProvider 'N' and in addition to this all other records where the INFOCUBE field is empty. This is necessary, because in all BW releases below 3.x the INFOCUBE field was not in the RSZELTXREF table and all components created before 3.x release have this field empty. Selection of records with empty INFOCUBE is required in order to ensure the consistency of processed query.
    When the number of records with empty INFOCUBE is quite large (50.000 - 1 mln records), any simple operation which require resolving of the relations may take a long time, because those records are always being selected, loaded to Query Designer and processed in the design-time.
    Records which are not used in any query or query component
    The program makes a virtual attempt to reconstruct the table RSZELTXREF via resolving the relations between all reusable components existing in the system. All records which are not used in any query or query components are considered as non-used records. Usually these are fragments of old queries or other components which are not deleted due to former errors in the query delete algorithm.
    The current version of the program contain only information about those 2 issues. See the OSS note 823804 for additional information.
    ATTENTION: the extended RSZELTXREF check is recommended when all critical problems with reusable components are resolved and the system clean-up is done (no useless records in the tables, no useless non-executable queries or other affected query component available).
    Starting from SP28 for BW 30B, SP22 for BW 31C and SP14 for BW 3.5 the Extended RSZELTXREF check detects and fixes the following situations:
    records used in existing queries or query components with empty INFOCUBE field;
    records used in existing queries or query components with wrong INFOCUBE assignment;
    records with or without INFOCUBE assignment which are not used in any query or query component.
    For further check details read the OSS note 859086.
    5. Table RSZGLOBV
    The table RSZGLOBV contains the definitions and technical properties of the variables.
    The following errors can be found:
    - variables with inconsistent definition;
    - variables with missing or incorrect properties;
    5.1 Variables with inconsistent definition. Variable not found in RSZELTDIR/RSZCOMPDIR tables.
    The variable existing in the table RSZGLOBV, but not existing in the tables RSZELTDIR or RSZCOMPDIR have inconsistent definition. These situation may return 2 different error messages. When a variable is missing in RSZELTDIR table (or in both together), an attempt to expand a list of variable under a corresponding InfoProvider or a list of text/formula variables will return a message 'Inconsistency in loading...'. All variables which are created for corresponding InfoProvider, text/formula variable are not available. When a variable is missing in the RSZCOMPDIR table only the error message is 'Missing UID XXXXXX... in RSZCOMPDIR! You may continue to work, but this component is not loaded' in Query Designer.
    In both cases the variables can be repaired via the corresponding procedure provided in the program under the technical name (COMPID) corresponding to the name in VNAM field in the table RSZGLOBV with the text 'REPAIRED BY SAP'.
    As an alternative solution, when the affected variables which are not used in any query or query component can be deleted directly from the RSZGLOBV table. Both solutions will fix the reported symptoms.
    ATTENTION: it is recommended to open a repaired variable in Variable Wizard of Query Designer and to adjust the definition of this variable, when it is necessary.
    ATTENTION: deletion of the affected variables missing in the table RSZCOMPDIR is not possible using transaction RSZDELETE. An attempt to delete such variable will return the error message 'Component not found'.
    5.2 Variables with missing or incorrect properties
    Several errors can be found within this check. The variables of different type have their own sets of properties. Missing or incorrect properties may cause different error message during execution of a query where such variables are in use. In the case of the affect variables with processing type 'replacement' , the replacement may not work because of the problem.
    Each case has to be investigated at SAP. Create an OSS message for SAP component BW-BEX-ET-QDEF.
    6. Table RSZELTDIR
    The table RSZELTDIR is the main directory table containing all query elements available in the system.
    ATTENTION: the RSZELTDIR check may take a long running time depending upon the table size.
    The following errors can be found:
    - local elements not in use;
    - reusable elements not in RSZCOMPDIR table;
    - reusable elements not in RSZCOMPIC table;
    - structure (STR) without structure members;
    - selections or RKF without definition in RSZSELECT table;
    - formulas or CKF without definition in RSZCALC table;
    - variables (VAR) without definition in RSZGLOBV table;
    - queries (REP) without entries in RSRREPDIR table.
    6.1 Local elements not in use
    Local elements (field REUSABLE = false) which are not used as dependant objects in the table RSZELTXREF. These elements are useless and not accessible from Query Designer. Usually these are fragments of the definitions of old queries accumulated in system because of different problems with save/delete procedures which are not accessible by the end users. The recommended solution is to delete those elements using the corresponding delete procedure.
    6.2 Reusable elements not in RSZCOMPDIR table
    Reusable elements (field REUSABLE = true) must have a corresponding entry in the table RSZCOMPDIR which contains the definition and properties of this reusable component. An attempt to load such component in Query Designer may cause the error message 'Missing UID XXXXXX... in RSZCOMPDIR! You may continue to work, but this component is not loaded'. Additional investigations are requires at SAP. Create an OSS message for BW-BEX-ET-QDEF.
    ATTENTION: Deletion of such affected components is also not possible using transaction RSZDELETE. An attempt to delete will return the message 'Component not found'.
    6.3 Reusable elements not in RSZCOMPIC table
    Reusable elements (field REUSABLE = true), except variables (DEFTP = 'VAR'), must have a corresponding entry in the table RSZCOMPIC which contains an InfoProvider assignment for reusable components. When a reusable component has no InfoProvider assignment it may be not available in Query Designer during design-time. Additional investigations are required at SAP. Create an OSS message for BW-BEX-ET-QDEF. In case the affected component is useless, it can be also deleted from the system using transaction RSZDELETE.
    6.4 Structures (STR) without structure members
    Reusable and non-reusable structures (DEFTP = 'STR') should have dependant elements (structure members). When these structure members are not found a query containing this structure returns the error message 'Element structure not correct' during generation or execution in RSRT or BEx analyzer. The program outputs a query technical name where such structures are used or the technical name of an InfoProvider if the affected structure is reusable and not used in any query. In this case it can be accessed from any query created in the same InfoProvider in Query Designer. The solution is to open the affected structure in using the latest available version of Query Designer and to create the required structure members in order to avoid the error message.
    In case, when the affecter structure is local (non-reusable) and is not used in any query, this structure is not accessible by frontend users and can be deleted from the system by corresponding procedure provided in the program.
    6.5 Local selection of RKFs without records in RSZSELECT table
    Local selections and reusable Restricted Key Figure (DEFTP = 'SEL') usually should have the corresponding records in the DB table RSZSELECT. The program outputs all selections found in the system which have no corresponding records in the RSZSELECT table.
    Usually this issue has no impact on the existing queries and produces no error messages. There are 3 possible types of selections within a query:
    Normal selection - this selection represents a characteristic in Row, Columns or Free Characteristics area, Conditions or Exceptions. This situation produces no error messages, but the selection is not taken into account by OLAP.
    Dummy structure member - structure member type selection can be defined using Query Designer. Such structure member produces no selection and can be used only as place holder within a query. This situation produces no error messages during generation/execution of a query containing a structure with those dummy structure members.
    Cell selection - this type of selection is usually used as Cell selection and can be defined using Cell Editor in Query Designer. This situation produces no error messages, but the selection is not taken into account by OLAP.
    If it is necessary, the selection definition can adjusted using the latest available version of Query Designer. The affected local selections can be accessed from the queries presented in the WHERE-USED (INFOCUBE/QUERY). The Restricted Key Figures are available in Query Designer from any query created on the corresponding InfoProvider.
    In case, when a local selection is not used in any query or query components the recommended solution is to delete this selection using the corresponding delete procedure.
    6.6 Local formulas of CKFs without records in RSZCALC table
    Local formulas (DEFTP = 'FML') or Calculated Key Figures (DEFTP = 'CKF') should contain definition of the calculations in the table RSZCALC. When such definition is not found in the table RSZCALC the queries or query components which include those affected objects can not be generated or executed by OLAP. An attempt to generate such query returns the error message 'The (sub) formula XXX... is not available'.
    The definitions of the affected formulas or Calculated Key Figures can be adjusted using the latest available version of Query Designer. The adjustment of a local formula is possible from the corresponding query listed presented in the program. The Calculated Key Figures are available in Query Designer from any query created on the corresponding InfoProvider.
    In case, when a local formula is not used in any query or query components the recommended solution is to delete this formula using the corresponding delete procedure.
    6.7 Variables without records in RSZGLOBV table
    Variables (DEFTP = 'VAR') should exist in the table RSZGLOBV. The table RSZGLOBV contains all processing properties and definition of the variables. Query where such variables are used can not be executed without problems.
    The repair procedure is not possible, because of missing definition. In case, when such variable is not used in any query, the recommended solution is to delete it from the system in order to avoid potential problems. If the affected variable is already used in other queries or query components, create an OSS message for SAP component BW-BEX-ET-QDEF. Further investigations and possible repair plan have to be created at SAP.
    6.8 Queries without records in RSRREPDIR table
    Queries (DEFTP = 'REP') should exist in the table RSRREPDIR. The table RSRREPDIR is a header table of generated reports and also a part of the database view V_REP_JOIN which provides data for the BEx Open/Save Dialogs.
    A query which does not exist in the table RSRREPDIR is not accessible via RSRT transaction (error message 'GENUNIID not found') and not displayed in the Open/Save Dialogs of fronted applications.
    The recommended solution is to delete such queries using the corresponding procedure provided in the program and similar to RSZDELETE.
    In some cases the repair procedure is also possible. The success of the repair procedure depends upon the consistency of the affected query, the existence of a valid InfoProvider for this query and some other factors. For repair attempt create an OSS message for the SAP component BW-BEX-ET-QDEF.
    hope this helps.

  • Detect in memory record link to table

    Hello,
    I recently was given an old project that now runs on .NET v3.5 with LINQ to SQL. I found that in the business logic layer, the previous authors frequently attempt to join in-memory "array of class" to SQL table directly, result in extremely slow
    query as some of our customers has grow the database big with 10+ years of data.
    I'm able to either push the entire logic to pure table join or pure in-memory join to workaround this, but want to know that is there any tools available that can help me check the whole project and pick these "array of class"  to SQL table
    queries out to fix.
    Thank you.

    Hello,
    Personally, I do know there would be such a tool could be so smart to check if the query is a in memory join one. If these queries are similar with below one:
    var result = (from od in ods
    join o in db.Orders on od.OrderID equals o.OrderID
    where od.OrderDetailID == 1
    select o).ToList();
    My idea is to search the whole project by the key word “from” and check these queries if there are local array object. If the project is huge, this might take some time. And if you find such a tool, it is suggested that you could share it to this forum which
    would be helpful to others.
    Regards.
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • More on the pivot table processing in coherence

    hello, all:
    I posted a question regarding how to create a pivot table in coherence (coherence and pivot table
    Now I am on a project that my mgr wanted me to query a coherence cache and return a subset in "pivot" structure.
    Suppose I send a request from the client with these info: String[] rows, String[] columns, String[] data. Each of them represent rows area, columns area and data area as in a Excel table. The aggregation is limited to sum for now.
    I managed to create some code like this:
    public Map<Object, Object> sum(Filter filter, String properties, String[] targets){
              EntryAggregator[] entryAggregators = new EntryAggregator[targets.length];
              for(int idex = 0;idex<targets.length;idex++){
                   entryAggregators[idex] = new DoubleSum(targets[idex]);
              MultiExtractor me = new MultiExtractor(properties);
              EntryAggregator ca = CompositeAggregator.createInstance(entryAggregators);
              GroupAggregator ga = GroupAggregator.createInstance(me,ca);
              return aggregate(filter, ga);
         }here properties represent rows: "getX,getY,getZ" ; targets represent data to aggreated on: targets[] {"getA","getB"}
    There are two relevant questions:
    1. I am not able to put the columns info into the code;
    2. the return type above is Map<Object, Object> , printing map looks like
    +{[Parts, Appliance, Trash compactor],[214.5, 1.0]}...+
    with 3 rows (X,Y,Z) in the first segment, and aggreated 2 values (A,B) in the 2nd segment.
    how can I exact these values from a map structure (it seems the key/value are map themselves), and design a "pivot" structure to host them?
    I hope I've made myself clear.
    Thanks,
    Johnny

    Hi Johnny,
    Your question intrigued me so I thought I would do a bit of digging into how you might replicate a pivot table using aggregators. Well, it has taken me a few days and as it is quit a long subject I wrote it up on my blog rather than post it all in the forum http://thegridman.com/coherence/oracle-coherence-pivot-table-queries/
    You were on the right track with the GroupAggregator but there is a bit more to do to allow all the different combinations of rows, columns and values as well as filtering.
    I hope what I have written up is clear enough, just ask if you have more question.
    JK

  • How to implement Oracle user/role security with Access front end?

    Hi,
    We have successfully migrated our Access database tables to Oracle 10g using SQL developer. We've recreated all the users and roles(i.e., access groups) in Oracle and granted rights to tables.
    In the Access front end database, in the Database window we have saved linked Oracle tables which replaced the Access tables. The forms, reports, queries run fine with the linked Oracle tables. All the linked table use one ODBC DSN to the Oracle database with the same Oracle user id.
    We need to be able to authenticate users into the Oracle database and RE-link the tables based on their own unique user id. By during so we can allow users to use the Oracle standard user id/role and system privileges to control select, update, ect. rights to the database.
    I've been able to use the VB code within Access to logon into the database with a unique id, but I have not been able to find out how to RE-link the tables to the unique user id using VB. There should be some way to relink tables dynamically, based on users login into the Access front end.
    I don't know a great deal about Access projects, but I do know with SQL server allows login into your Access project and link tables dynamically.
    Can someone give me some assistance or point me in the right direction?
    Thanks in advance,
    Larry

    We had one of our programmers here come up with a VB code solution for re-linking table within Access. However the relinking takes 3-4 minutes for 100+ tables.
    In an effort to help you understand the situation better, I will attempt to elaborate on the problem:
    We have an Access 2003 application which currently has a front end using Access(forms, reports, queries, & VB code) and a MS Access 2003 backend.
    We have migrated the backend tables to Oracle. However, we still have a need to maintain the front end in Access, since we have over 60 forms, 40 reports, 200+ queries in Access. Its easy to understand, we have a significant investment in the front end(Obviously, the plan is to migrate the front end also at some future date).
    In order to utilized the existing front end, we have to validate and modify the current front end connections to the new Oracle backend. One of the features of Access is that you can "link" tables and save the link for runtime. Each Access table can have its own link which is a separate ODBC/JET connection. As such, each separate link has its own userid/database information.
    The other issue with using the Access front-end is that Access utilizes a workgroup file to implement user and group security. The workgroup file contains all the users and which groups the users belong to in Access. Then within Access, you allow users access to object(tables, queries, ect) by their userid and or group. When users open an Access database with Access security enabled, they are required to log into Access. The login is authenticated by the workgroup file. Once, logged into Access, users have rights to Access objects based on their rights granted to their userid and groups they belong. The problem here is that when you remove the linked Access tables and replace them with linked Oracle tables, Access has knowledge about Oracle table rights granted to users; nor would you expect it to.
    The dilema is the disconnect between Access and the fact Oracle utilizes a similar but much more sophisticated security model. It creates users and roles(which are similar to Access groups), and again this is independent of Access security.
    Our solution was to still use the Access workgroup file security along with the Oracle security model. By using the Access userid and then creating a similar Oracle userid with similar table rights granted in Access, you could apply security within Access and also with the Oracle database.
    For example, a user BOB logs into Access via the workgroup file, using VB code, Access then establishes a Oracle connection logining into Oracle using the same unique userid BOB into Oracle.
    After connecting and validating user BOB into Oracle, then the Access tables are relinked to Oracle using the user BOB userid and table rights.
    This Oracle userid has been granted table rights specific for this userid.This allows the user BOB to use the Access application and still be authenticated into the Oracle database.
    The problem with this solution is that the relinking of the saved Access tables takes 3-7 minutes for about 100+ tables. This is not acceptable for users each time they log into the application.
    Our current alternative is to use one Oracle userid to login each user, and use Access form restrictions/security to allow/prevent users from updating/viewing data. Obviously, this is not the optimal solution in respect to security, but it at least allows us to control access to the data(via the forms) by using one logon required for each user, and quick startup time for the application.
    I understand SQL server does a better job in integration, but we use Oracle which is what I am trying to work with.
    Larry

  • Express White Paper

    Thanks to all those who responded requesting the Express white paper. I
    received an overwhelming response. I was expecting a dozen or so
    requests - I received over 80. Apparently there is strong demand for
    lessons learned about working with Express.
    The paper is in-progress. Everyone that requested it will get it when
    it is ready, hopefully before end of September. BTW, my paper on
    Express and the Object/Relational Problem will be published by Dr.
    Dobb's Journal about that time also - the publisher tells me that the
    November issue will be on the newsstands by end of September. The DDJ
    article is a review of the basics of Express, what it does, and how
    you develop with it. It also includes our early experiences with it
    (article was written end of April and reflects almost three month's
    experience with Express at that time). The article also goes briefly
    over our concept for a rapid process specific to Express. The white
    paper will have much more to say on the topic.
    Several people thanked me for my generosity in offering a free white
    paper and sharing our experiences with the Forte' community. There is
    nothing generous about the offer: it is unabashed self-promotion in the
    finest tradition of American crass commercialism. We're a consulting
    company. We sell our knowledge and experience. If, after you get the
    white paper, you would like to retain us on a consulting assignment we
    would be very grateful, and you will have a chance to pay us back for
    our generosity. If not, maybe you can reciprocate and share your
    experiences.
    Now to the subject of this posting: why am I posting this now? Well,
    for one thing, I received several responses that said something
    like: " we've tried Express and we were disappointed with ...", or "we've
    been using it and have been frustrated with ...", or "we've evaluated it
    and we had difficulties with ...". I started writing reply notes to each
    of the individuals who expressed those negative experiences, but when I
    reviewed what I wrote, it sounded like a Dear Abby column, with the replies
    sounding like: Dear Disappointed, or Dear Frustrated, or Dear With
    Difficulties. I decided I'll just post one note for all those who've
    had negative experiences, or who are just starting to use/evaluate Express
    and are likely to have similar experiences. Hence this. I also felt that
    I should give people somewhat of an overview of what's coming in the
    white paper while they're waiting to get the finished product.
    Perhaps initial difficulties with Express is a problem of unrealistic
    expectations. I always try to remember Mick Jagger's words. Mick, as
    everyone knows, is one of the great software minds of the 20th century:
    "You can't always get what you want ...". You must determine if you're
    getting what you need.
    Seriously, I have been working on the object/relational "impedance
    mismatch problem" for close to ten years now (since 1987 when I
    developed an Ada/SQL binding for the US Department of Defense). I have seen
    many solutions, and have developed several myself for C,C++,Ada and
    for Oracle, Sybase, Informix, and Ingress. I find Express to be one
    of the most elegant solutions to that thorny problem. If you look at it from
    that point of view alone, it's very hard to fail to be impressed. If you're
    expecting Express (or PowerBuilder 5, or any other solution) to be yet another
    Silver bullet to slay the development monster then you'll be disappointed.
    Software development is hard, will continue to be hard, and will continue
    to get more complex. Anything that can help us eliminate or reduce what
    Frederick Brooks calls "accidental complexity", and design around "essential
    complexity", will help. Forte' and Express definitely do that. Paul
    Butterworth's paper on "Managing the New Complexities of Application
    Development", shows how Forte' has solved many of the development/deployment
    problems. If you haven't read it, I highly recommend it. If you have, I would
    recommend a re-read if you've forgotten why you chose Forte' to begin with, or
    if you yourself did not participate in making that choice, The Express user's
    manual, "Using Forte' Express", shows how Express extends Forte' to reduce
    the complexity of developing RDBMS-based systems.
    To get an appreciation for what Express does for you, try a simple
    experiment : spec out a GUI/RDBMS application, say the order entry application
    that comes with Express as a tutorial. Do it without Express. Then do it with
    Express. Try to make the application as complete as possible - it must
    implement all your business rules and have all the behaviors that you desire.
    Relax a bit about look and feel. Also Remember to keep the experiment fair.
    As part of your application development come up with a framework and an
    architecture that the next application will use. Your non-Express application
    also must be as extensible and modifiable as Express allows an Express
    project. Record the development time of both. If you can beat Express in
    development time, then you're a Forte' development Guru and people should be
    beating a path to your door.
    Lest anyone think I am a cheerleader for Express, I want to mention that
    I have some very strong disagreements with several aspects of the
    Express architecture. One major problem I find with it is conceptual.
    The Express relational encapsulation has added a great deal of accidental
    complexity, i.e complexity that is not inherently there because
    of the nature of the problem. It arises because of design or implementation
    choices. Express represents each database table with three classes (there is
    actually six classes per table, three of which are just derived place holders
    to contain customizations, so we'll ignore them for this discussion). For a
    table EMP, Express produces three base classes: an EMPClass, an EMPQuery
    class, and EMPMgr class. The EMPClass is quite understandable. It
    encapsulates the table's data. The EMPMgr class is somewhat understandable,
    it encapsulates operations that manage the table's data as it crosses the
    interfaces. But why do we need one class per table? A manager should manage
    several things, not one thing. That leads us to EMPQuery, the encapsulation
    that I have most difficulty with: creating a query class for each table. That
    is definitely the wrong abstraction.
    If you consider that, in general, a SQL query is multi-table:
    select t1.col1, t2.col2, t3.col3, ...
    from t1, t2, t3, ..
    where <expressions on t1.col1, t2.col2, ...>
    order by <expressions on t1.col1, t2.col2, ...>
    you'll see that the abstraction here is a query tree across many tables,
    many columns, and a large variety of expressions - single and multi-table. To
    attempt to encapsulate that in objects that are basically single table objects
    will produce a great deal of accidental complexity. The design choice of one
    query class per table makes writing one-table queries simple, but writing
    multi-table queries awkward.
    The Express architecture would be much simpler if there is a QueryTree
    class for all tables. Better yet, leave the representation of queries as
    text strings - ANSI or Forte' SQL on the client side, and DBMS-specific on the
    server side. A great deal of complexity in doing query customizations will
    be reduced. You will lose some type checking that the current design has, but
    hey, you can't always get what you want. When you have several hundred tables
    in your database and Express generates six classes to per table, you'll see
    that the number of classes generated as excessive. When you try to design a
    general query modification scheme you'll realize how awkward multi-table joins
    are to do via the Express BusinessQuery class. Last week I was developing a
    general design for row-level security, the query structure drove me crazy,
    I ended up catching the generated SQLText and inserting the security
    constraints.
    Now back to the Dear Abby column: If you're unhappy because of performance
    issues, try to isolate the reason for the poor performance. This is not easy
    in 3-tier applications. Don't be too quick to blame the bad performance on
    Express. Do you have a non-Express benchmark application that does the
    same thing and outperforms Express? Don't be too quick to blame Forte'
    either. Do you have a non-Forte' benchmark, that does the same things
    and outperforms Forte'? The operative words here are "does the same
    things". A VB application that issues a SQL Select is not a benchmark.
    Forte' allows you to instrument applications to study performance
    bottlenecks. Find out where your hot spots are and try to do some design
    work. If the Express architecture gets in the way, it's time for feedback
    to Express developers.
    Performance issues, particularly in 3-tier client/server systems are
    multi-faceted and complex. There are many interactions of database
    issues, interaction of the database with TOOL language issues, locking,
    caching, timing of asynchronous events, shared objects, distributed objects,
    remote references, memory allocation/deallocation, message traffic,
    copying across partitions, etc. etc. that have to be considered. There
    was an interesting discussion just a few days ago on multi-threading
    on the client side, and blocking in DBMS APIs. Issues like that can
    keep you bogged down for days. I have worked on several performance efforts
    on triage tuning teams and swat re-design teams, where several hundred man
    hours were dedicated to performance and tuning of c/s systems. Big and
    complex topic. What I would advice about performance is what Tom Gilb says:
    "(1) don't worry about it, and (2) don't worry about it yet" - assuming of
    course that you have a rational design, and a sound framework. Many sins of
    design are committed in the name of performance. Anyway, enough
    of the harangue about premature considerations of performance. Bottom
    line is : once you get your functionality, instrument, measure, and tune. If
    your architecture was sound, you won't have to re-design for performance, you
    would've designed it in.
    On our project the system is so large we are subsumed with rapid process
    issues: how can we get this monster finished on time? without having to
    expand the team to several times its size, and without having to spend more
    than we can afford? The upcoming white paper's focus will be on the rapid
    process. Probably at a later date, we'll do another paper on performance
    issues with Express.
    Another reason you may be unhappy with Express is if you perceive that
    it is the wrong tool for your application - but was chosen by
    corporate mandate. If your application does not involve an RDBMS (say
    real-time process control), then Express is obviously not for you. It may
    also appear that Express is not suitable for your application if your usage
    of the RDBMS is marginal, but your application logic is quite complex (in our
    case the application has many AI aspects to it, a rules-based database, and
    many interconnected patterns of rules, and rich behaviors). If you find
    you're spending too much time doing things outside Express, fighting
    Express, or doing way too many customizations, then Express may
    not have been the right choice for your application.
    Don't think, however, that Express is only for those applications that
    maintain relational base tables. You can use a relational database to
    store tables other than base tables (state transition tables, dialog
    support tables, views, and other kinds of virtual tables). To make use
    of Express's powerful application generating capabilities you can use
    tables created for the sole purpose of of supporting an Express
    application model. The table is in essence, a state transition
    diagram. The Express application model creates rows in this
    virtual table while the dialog is in-progress. You can use insert and
    update triggers in your SQL engine to do the real thing to your base
    tables. This trick is among some I'll detail in the white paper.
    Another reason some people may be unhappy with Express may be methodology
    tension between those who use behavior-driven methodologies (Booch, Jacobson,
    Wirfs-Brock), and those who favor data-driven methodologies (OMT, Coad). If
    you're in the first camp, you'll probably feel that the modeling done via
    Express is not adequate. You'd probably say "that's not an object model!
    that's an ERD". You would be half right - the Express business model shows
    only containment and association relationships. It does not document "uses"
    relationships, so it really can't be considered a full object-model. Granted;
    but once you make that realization, your reaction should be one of joy, not
    sadness. This is a brilliant reduction in the amount of modeling that needs
    to be done since most MIS systems are dominated by their data-model, not their
    behavior model (See Arthur Riel's Design Heuristics) . Behavior-based methodologies,
    with their documentation of use-cases and class behavior will tend to be analysis
    overkill for most MIS projects. For some OOA/OOD practitioners, going back to a
    data-centered process may be unpalatable. For those folks my advice would be to try to
    look at the business model/application models as meta-models. Take the
    generated classes and produce a full object model if you wish. Document your
    domain classes in your favorite CASE tool. By all means document
    domain-pertinent behavior and use-cases, they will help you test. But do
    appreciate the productivity gain produced by the reduction of modeling load
    that Express data-centered approach gives you. Your detailed
    behavior-based, use-case model may be a luxury you can't afford.
    If the methodology clash manifests itself politically in your
    organization, where you have the OO purists pooh-pooh a data centered
    approach, then you have my sympathies. My best advice is to cool it on the
    methodology religion front. If you have a product to deliver, you can't
    afford it. Also keep in mind that even if your modeling work is reduced by
    adopting a data-centered Express process, you'll still have ample
    opportunities to fully utilize your OOD expertise when it comes time to add
    functionality or improve performance of the entire application as a whole.
    There will still be processes where Express may not be expressive enough. Those
    processes whose behavior is so rich and intricate that you cannot find a
    data-based trick to model them with, you'd have to do outside Express. These
    should be rare and the exception not the rule in MIS systems, however.
    Does that exhaust the list of reasons of why people may be
    disappointed in Express? Probably not. Undoubtedly Express reduces your
    degrees of freedom, and constrains your choices, but many times "jail
    liberates". More reasons? I've heard some complaints about repository
    corruption problems. I'm not aware that we've had those, or that it is
    something due to Express. I'll check with our Forte' system manager. If we
    have, they must not have been show stoppers, and our system manager must
    have dealt with them quickly enough that the developers did not notice much.
    Until you get the full paper in a few weeks, I'll leave you with some
    thoughts about Express, and OO development in general:
    1. Learn about the concept of "Good enough" in software
    engineering. Here are some sources:
    - Ed Yourdon: Read Ed Yourdon's article in the last issue of Byte,
    titled "When Good Enough is Best". One of Yourdon's tips in the
    article: "It's the Process, Stupid!"
    Don't take "good enough" to mean that development with Express
    requires you to lower your expectations, or lower your
    standards. You must tune the concept of "good enough" to your
    acceptable standards.
    - Arthur Riel: Read Arthur Riel's great book "Object-Oriented Design
    Heuristics". Riel shows that there are many problems with no optimal
    solutions. This is particularly true in those systems that
    are not purely object oriented. Systems that interface with
    non-object oriented "legacy" systems, which is what Express
    is. Also, Riel's discussion of behavior-based vs data-based
    methodologies is very illuminating.
    2. Don't obsess about look and feel. That's where Express is most
    constraining. If you have unique look and feel requirements,
    and look and feel is paramount to you, save yourself some pain and
    choose another tool, or sing along with Mick: you can't always get
    you want ...
    3. Be clear about what rapid development really means. An excellent
    resource is the book by Steve McConnell of Microsoft: "Rapid
    Development - Taming Wild Software Schedules". A thick book, but the
    chapters on best practices, and the tens of case studies are great. The
    book shows clearly the differences between evolutionary
    delivery, and staged delivery. It shows the differences between
    evolutionary prototyping, throwaway prototyping, user-interface
    prototyping, and demonstration prototyping and the appropriate uses
    and risks of each. In our white paper we advocate a life cycle
    approach that is basically evolutionary prototyping, with evolutionary
    delivery, and occasional use of throwaway prototypes. We don't advocate
    using Express for demonstration prototyping.
    4. Realize that Express is maturing along with the product you're
    developing. If you don't have deep philosophicalobjections to the
    Express framework and architecture, then most of
    the concerns with Express would be temporary details that will be
    smoothed as Express, and Forte', mature. How long did we wait for
    Windows to mature? Let's be fair to the Express developers.
    5. The main keys to success in Express are not rocket science (I
    worry now about having hyped up people's expectations myself). The
    major keys to success revolve around management issues, not
    technical issues: expectations management, process management,
    and customizations management.
    The full paper includes the design and implementation of a Customizations
    Management System that allows you to plan customizations needed and to
    inventory customizations completed. It automates the process of
    extracting the customizations completed from the repository and stores
    them in a relational database. A customizations browser then allows
    management to plan and prioritize the implementation of customizations. It
    allows developers to study the completed customizations and to reuse code,
    design, or concepts to implement further customizations. Managing
    customizations is absolutely essential for success in Express. The paper
    will also detail a rapid process that is "Express friendly".
    I'm glad there was such a big response to the white paper offer. Now I have
    to sit down and write it!
    Nabil Hijazi Optimum Solutions, Inc.
    [email protected] 201 Elden Street
    Phone: (703) 435-3530 #501
    Fax: (703) 435-9212 Herndon, Va 22070
    ================================================
    You can't always get what you want.
    But if you try sometime, you might find,
    you get what you need. Mick Jagger.
    ------------------------------------------------

    [email protected] wrote:
    >
    A few comments on Nabil Hijazi's observations...
    Nabil Hijazi writes...
    One major problem I find with it is conceptual.The Express relational
    encapsulation has added a great deal of accidental complexity, i.e complexity
    that is not inherently there because of the nature of the problem. It arises
    because of design or implementation choices.
    Paul Krinsky comments...
    Anyone who has used NeXT's Enterprise Object Framework (EOF) will be at home
    with Express's architecture, it is very similar. NeXT has been around for a
    while and have gone through a lot. They originally started with DBKit to solve
    the persistence problem. Basically it wrappered the database libraries. EOF was
    created when it became clear that the DBKit approach wouldn't work. EOF has
    EO's (Enterprise Objects), EOQuery, EOController, etc. that do pretty much what
    BusinessClass, BusinessQuery and BusinessMgr do. I'm not sure if Forte hired
    people with NeXT experience, but it would be interesting to find out if both
    companies came up with the same architecture independently. What are the
    chances?
    Nabil Hijazi writes...
    The design choice of one query class per table makes writing one-table queries
    simple, but writing multi-table queries awkward.
    Paul Krinsky comments...
    I don't think BusinessQuery is too bad once you get used to it. Multi-table
    queries are pretty easy if you use the foreign attributes Express provides to
    build connected queries. One feature I miss from EOF is the EOFault. An EOFault
    stands in for an object to reduce the overhead of retrieving everything an
    object has a pointer to. For example, a retrieve on customer that contains an
    array of orders would bring in EOFaults to stand in for the orders. When one of
    the orders was referenced, EOF would produce a fault (hence the name) and go
    and get the required record. Of course you could force EOF to bring the real
    data and not use EOfaults if you wanted (if chance were high that you would
    need it). This feature saved a lot of memory and increased the speed of
    retrieval while still providing transparent access from the viewpoint of the
    developer. Another cool feature was uniquing. EOF kept track of the EOs it
    retrieved for a client. So if two windows both retrieved Customer X, EOF would
    realize this and point the 2nd window at the copy already in memory. This
    avoided having multiple copies of the same object in memory and allowed
    provided everyone with the most current changes.
    Nabil Hijazi writes...
    The Express architecture would be much simpler if there is a QueryTree
    class for all tables. Better yet, leave the representation of queries as text
    strings - ANSI or Forte' SQL on the client side, and DBMS-specific on the
    server side. A great deal of complexity in doing query customizations will be
    reduced. You will lose some type checking that the current design has, but hey,
    you can't always get what you want. When you have several hundred tables in
    your database and Express generates six classes to per table, you'll see that
    the number of classes generated as excessive. When you try to design a general
    query modification scheme you'll realize how awkward multi-table joins are to
    do via the Express BusinessQuery class. Last week I was developing a general
    design for row-level security, the query structure drove me crazy, I ended up
    catching the generated SQLText and inserting the security constraints.
    Paul Krinsky comments...
    I like the fact that Express manages the mapping to the database. I can change
    the underlying database schema and all my queries still work. When the DBAs
    inform me that I'm not following their naming standard (remove all vowels
    except for 207 "standard" abbreviations that somehow got blessed then compress
    to 8 characters using a bit compression algorithm that NASA would be proud of -
    am I ranting?) it lets me conform without having to deal with it except in the
    business model. It's nice to have a layer of abstraction.
    I'm not a big fan of having all the generated classes either. I think it's a
    necessary evil because of TOOL. NeXT uses Objective-C which is much more
    dynamic in nature (more in common with Smalltalk than C). Their business model
    can be defined on the fly and changed at runtime. It's pretty powerful but you
    always have the speed vs. size tradeoff. The BusinessQuery is a nice way to
    send only the what you need to the server in a format that isn't too difficult
    to translate to SQL but not so close to SQL that you couldn't rip out the
    backend and use the same interface to communicate with something other than a
    relational database.
    With any tool you have to understand it's strengths and weaknesses. Express is
    a 1.0 product. Given that I think they have done a great job. The biggest
    request I have is that Express moves away from being so focused on UI and
    Database access and focus more on the BusinessClasses. For example, why are the
    Validate and NewObject methods not on the BusinessClass? I understand their
    importance in the Window classes but they should really delegate most of the
    work to the BusinessClass. Otherwise you end up with most of the logic in the
    UI and a 2-tier application. One of the first things we did is extend the
    Window classes to delegate validation, etc. to the classes they display.Paul,
    This a very good point. After reviewing all the customizations we have done on
    our Express project, (BTW, I work with Nabil) I found that we have not done any
    business service customizations except for database row level security. We could
    have easily moved validation to the business classes. Actually, Express gives you examples
    for this. They recommend customizing the insert and update methods to apply validation.
    You could simply add your own validate method on the business class and have the insert,
    update, or the window call it. This is actually much more object oriented than coding
    validation into the window classes (for the oo purest out there!).
    Robert Crisafulli
    AMISYS Managed Care Solutions Inc.
    (301) 838-7540
    >
    I look forward to reading the white paper on Express. I would encourage anyone
    else to post similar documents. If anyone is interested, I can dig up some
    stuff I wrote on EOF's architecture. It's a good source for enhancement
    requests if nothing else! If anyone has used other persistence frameworks I
    think the group would benefit from their experiences.
    Paul Krinsky
    Price Waterhouse LLC
    Management Consulting Group

Maybe you are looking for

  • Tomcat3.3, JSP, getOutputStream() has already been called

    In Tomcat 3.3a, I get an IllegalStateException.... getOutputStream() has already been called... error when running a JSP page that renders an image. <img src="image.jsp?image=name.gif"> I want to use JSP to keep everything JSP...and it works fine in

  • Apple TV does not connect to my iTunes Library

    Apple TV has worked perfectly for the past couple of years but over the past couple of months the same message keeps appearing "could not connect to "my" Library". I have checked the following: iTunes is up to date Home sharing is turned 'on' on comp

  • Has the "quit mail to empty trash" bug been resolved in Lion?

    This long-standing bug seems to persist in Lion. I haven't tested the old work-around which was to securely empty the trash. Any ideas on whether this will be resolved?

  • Can't find serial number on PSE 13

    I bought PSE 13 from Costco for use on my iMac. I can't find the serial number. Booklet says number should start with 1057. I've looked on back of box, on cd, on booklet. No 1057 number. There is an eighteen digit number above the bar code but it sta

  • Netlet Exception

    I've installed Sun One Portal Server 6.0 and I'm getting an exception when I include the default Netlet channel in my desktop. A small window will appear saying that I should click the continue button once the window finishes loading, but the window