Substituting for NULL parameters with NVL kills my performance!

We're having a frustrating time over here with XML Publisher. Wouldn't you know the users ask for too much with all the parameters they never use anyway?
We have some queries with multiple parameters that are optional, and when we substitute for them like so in the WHERE clause:
WHERE table.column = NVL (:parameter,table.column)
... it absolutely kills our performance. The more parameters we add like this to the query, the worse things get.
Strange thing is that when we run this exact same query through a client tool like SQL Developer, it returns all the rows in a matter of seconds.
I can't believe I actually miss a feature in Oracle Reports (Lexical Parameters) and wish it would be implemented in XML Publisher. Is there anything out there like that, or has anyone else encountered and surmounted this problem using what we have now?

Unfortunately, it's a really complex report that wouldn't do well to go in a simple example. I'm joining 18 tables and views in a query that would probably exceed the maximum number of characters allowed in a forum post.
The bottom line is that even when a parameter is entered, use of the NVL in the WHERE clause disables the index that we want to use, and we have to deal with a full table scan nested inside 15 or so other joins. Taking the NVL out and making the parameter required drops the run time to about five seconds.
Here's a kicker I'm sure you'll enjoy noodling over: we use XML Publisher 5.6.2 in Production, but we recently set up BI Publisher 10.1.3.2 on a test box and attached it to the production database.
When this same report was executed in BIP 10 on that test box, we saw tremendously improved performance - in the neighbourhood of 30 seconds or so. It almost seemed like BIP 10 was evaluating the NVL function (and who knows what else?) before letting the database's optimizer have a go at it, whereas XMLP 5 was just handing the whole thing over from the start.
Does that make sense?

Similar Messages

  • How do I check for null parameters in  Process Validations?

    I am trying to create a Unit Test that validates that a record has been inserted into a table. However I am having problems when dealing with null parameters.
    I created a simple table and insert procedure:
    create table TEST_TAB (
    A varchar2 (30) not null,
    B varchar2 (30));
    create or replace procedure TEST_TAB_INS (P_A in varchar2, P_B in varchar2) is
    begin
    insert into TEST_TAB values (P_A, P_B);
    end;
    Then I created a Unit Test with two implementations:
    The first executes TEST_TAB_INS ('One', 'Two')
    The second executes TEST_TAB_INS ('One', null)
    I attached the following Query Returning Rows Process Validation to both implementations:
    select *
    from TEST_TAB
    where A = '{P_A}'
    and (B = '{P_B}' or '{P_B}' is null)
    This should allow for the case where P_B is null. However the second test fails with a "Query check returned no rows" error.
    I've tried altering the test to use nvl, but get the same results:
    select *
    from TEST_TAB
    where A = '{P_A}'
    and (B = '{P_B}' or nvl ('{P_B}', 'XXXX') = 'XXXX')
    However, the following test succeeds:
    select *
    from TEST_TAB
    where A = '{P_A}'
    and (B = '{P_B}' or nvl ('{P_B}', 'XXXX') = '{P_B}')
    Which suggests that null parameters are not being treated as nulls in Process Validations

    I've found a way to solve this. By changing the test to:
    select *
    from TEST_TAB
    where A = '{P_A}'
    and (B = '{P_B}' or '{P_B}' = 'NULL')
    I am able to get both to get both implementations to succeed.
    Edited by: AJMiller on Dec 28, 2012 4:24 AM

  • How to create report with status killed and cancel ?

    Hi Guys,
    From the report query filter, i only able to pull a certain status of job ? anyone know how to pull the report for the job with status killed and cancel ?
    regards,
    Chris

    Hi Mano,
    You are in the filter editor for job definitions (Definitions > Job definitions). Job definitions do not have a status (they simply define what to do, optionally when).
    Go to "Monitoring > Jobs" (First item in the first group), you can also click on the button in the tool bar. See screenshots below on my English system:
    Regards,
    HP

  • XMLGEN: Produce XML dump of a table WITH tags for null column values

    I am new to generating XML so bear with me....
    We have a customer who needs an XML extract of data, including tags for any column that is null.
    I created a simple test case below using DBMS_XMLGEN.getXML. The first row (A1) has no null values and thus tags for columns A, BEE and CEE are produced. The second row (A2) has null in column BEE and thus tags for only columns A and CEE are produced.
    Is there a way to force a tag for null column BEE in the second row?
    create table foo (A varchar2(10), BEE number, CEE date);
    insert into foo values ('A1',1,sysdate);
    insert into foo values ('A2',null,sysdate);
    SELECT DBMS_XMLGEN.getXML('SELECT * FROM foo') FROM dual;
    <ROWSET>
    <ROW>
    <A>A1</A>
    <BEE>1</BEE>
    <CEE>27-SEP-12</CEE>
    </ROW>
    <ROW>
    <A>A2</A>
    <CEE>27-SEP-12</CEE>
    </ROW>
    </ROWSET>

    What's the database version? (SELECT * FROM v$version)
    Could you use this instead :
    SQL> select xmlserialize(document
      2           xmlelement("ROWSET",
      3             xmlagg(
      4               xmlelement("ROW",
      5                 xmlelement("A", a)
      6               , xmlelement("BEE", bee)
      7               , xmlelement("CEE", cee)
      8               )
      9             )
    10           )
    11         -- for display purpose only :
    12         as clob indent
    13         )
    14  from foo
    15  ;
    XMLSERIALIZE(DOCUMENTXMLELEMEN
    <ROWSET>
      <ROW>
        <A>A1</A>
        <BEE>1</BEE>
        <CEE>2012-09-27</CEE>
      </ROW>
      <ROW>
        <A>A2</A>
        <BEE/>
        <CEE>2012-09-27</CEE>
      </ROW>
    </ROWSET>
    Or,
    SQL> select xmlserialize(document
      2           xmlquery(
      3             '(#ora:view_on_null empty #)
      4             {
      5               <ROWSET>{fn:collection("oradb:/DEV/FOO")}</ROWSET>
      6             }'
      7             returning content
      8           )
      9           as clob indent
    10         )
    11  from dual;
    XMLSERIALIZE(DOCUMENTXMLQUERY(
    <ROWSET>
      <ROW>
        <A>A1</A>
        <BEE>1</BEE>
        <CEE>2012-09-27</CEE>
      </ROW>
      <ROW>
        <A>A2</A>
        <BEE/>
        <CEE>2012-09-27</CEE>
      </ROW>
    </ROWSET>
    (where "DEV" is my test schema)
    If you want to stick with DBMS_XMLGEN, you're gonna have to use PL/SQL and setNullHandling procedure.
    Edited by: odie_63 on 27 sept. 2012 17:14

  • With CSS, what font does Ubuntu Firefox substitute for Palatino?

    Hello,
    I am using the following declaration in my CSS:
    .serif {
    font-family : Palatino;
    I do not have Palatino installed on Ubuntu. I like the font that Ubuntu Firefox is substiuting for Palatino. How do I find out the name of the font that is being substituted for Palatino?
    Regards,
    PhaseMaster

    You can right-click text with that font and use "Inspect Element" to open the Inspector (Firefox/Tools > Web Developer) and check the font on the Fonts tab.
    *https://developer.mozilla.org/Tools/Page_Inspector

  • I want parameters with f4 help for program names in value request

    I want parameters with f4 help for program names in value request
    points will be awarded if  useful

    lv_name1 TYPE name1,        "Vendor Name
    CALL FUNCTION 'POPUP_TO_SEARCH_VALUE'
        EXPORTING
          textline1   = 'Vendor Name'(f09)
          titel       = 'Enter'(f17)
          valuelength = 35
        IMPORTING
          value       = lv_name1.
    try this out ..

  • Searching for NULL with a FindPanel?

    Can I search for null values in my dataset using the FindPanel
    InfoBus control?
    From what I can gather, it actually puts together a primitive
    kind of where clause that I can trick to a certain extent (eg
    entering a criteria of "ANY (value, value,...)" to simulate an IN
    clause - because it will prepend the criteria with an equals
    sign), BUT I can't get it to find NULL values, which requires the
    IS NULL operator.
    Lachlan
    null

    We've found a workaround, which is ugly, but works.
    In the FindPanel, to successfully search for nulls, you can enter
    a combination of two conditions joined with an OR operator. For
    example, to search for members in the ACME_MEMBERS table with a
    null MID_INITIAL, I could enter the condition:
    = 'XXX' OR MID_INITIAL is null
    and then the WHERE clause will be:
    WHERE MID_INITIAL = 'XXX' OR MID_INITIAL is null
    which will find the rows I'm looking for.
    BUT, this is REALLY ugly, and there should be a better way.
    If anyone knows of a better way, please let me know.
    Lachlan
    Lachlan Williams (guest) wrote:
    : I am assuming that the FindPanel will call the associated
    : DataItem's setQueryCondition and then actually execute the
    query
    : for me, all happening when I press the Find button.
    : I can't see where in this paradigm there is an opportunity to
    : alter the where clause.
    : So to rephrase my original question: how can I explicitly test
    : for null values using the existing functionality of the
    FindPanel
    : control? (ie how do I get the IS NULL operator into the where
    : clause?).
    : Thanks,
    : Lachlan
    : JDeveloper Team (guest) wrote:
    : : Hi
    : : The FindPanel relies on RowSetInfo 's setQueryCondition. you
    : can
    : : try to directly use this method to set the query condition.
    : : regards
    : : Lachlan Williams (guest) wrote:
    : : : Can I search for null values in my dataset using the
    : FindPanel
    : : : InfoBus control?
    : : : From what I can gather, it actually puts together a
    primitive
    : : : kind of where clause that I can trick to a certain extent
    (eg
    : : : entering a criteria of "ANY (value, value,...)" to simulate
    : an
    : : IN
    : : : clause - because it will prepend the criteria with an
    equals
    : : : sign), BUT I can't get it to find NULL values, which
    requires
    : : the
    : : : IS NULL operator.
    : : : Lachlan
    null

  • Keyboard with large bright characters could be cheap substitute for backlit keyboard

    A non-backlit keyboard with large, high-contrast characters could be a cheap substitute for a backlit keyboard. Most Chromebooks have tiny characters with less than maximum contrast. It would cost no more to give them legible keyboards that could be used in poor light. The first image shows a Chromebook keyboard (not an Acer) compared with the same with large-letter stickers applied. After I applied the stickers, I could type 40% faster in good light and twice as fast in poor light. (Note: I have average vision.)                        Next is the Acer C720 Chromebook keyboard. It has better contrast and slightly larger characters than most of the new inexpensive Chromebooks, but it's still difficult to type on in poor light.             A keyboard made with the design below would be clear enough to be used in a dark room by the light from the screen.   

    That's a REALLY good reason, bigbear.  I get it, and thanks for explaining.  I certainly was not trying to imply that there is some kind of 'issue' with adding a more visible keyboard.  It is certainly NOT a violation of anything to plug in an external keyboard.  That is probably the best solution that you have available at this time.  But if you are suggesting replacing the internal keyboard on your laptop with a 3rd party keyboard, that could become a problem.  First, as you described, it is not a task for the faint of heart.  You'd have to find a keyboard that FITS in your laptop, and they are certainly not all the same.  And as you also describe, the disassembly and reassembly process for a laptop can be quite complex.  If you cause damage in the process, that would NOT be covered by your warranty.  We call that 'Customer Induced Damage' and it just isn't covered.  It's an 'at your own risk' situation.  Adding stickers to the key caps is also not a problem for your warranty, unless of course the attempted removal of the stickers causes you to pop some of the keys off and you can't get them re-attached.  That again is considered CID.
    Having said all that, as I indicated earlier in this thread, the idea for bigger, better marked key labels has been submitted to our design team for consideration.  MY vision certainly isn't perfect either, so I do understand where you are coming from.  Thanks for raising the issue again.

  • SQL 2012 and later will fail to publish a database for any tables with a default constraint that references a user defined function.

    Script will create database, 3 database objects and publish. 
    The error is due to the generation script to create the conflict tables that is not stripping out default constraints that reference a UDF. 
    As you can see below, the failure is on the generation script for the conflict table.
    The conflict table should be a bucket table that shouldn’t enforce data integrity. 
    See how the default constraints for the columns someint and somestring were stripped out of the generation logic however the default constraint that utilizes a UDF persist and uses the same object name that was used on the production table (The
    bold line) , this occurs if I explicitly name the constraint or let the system generate the name for me like in the example posted. 
      The only way I could see getting around this right now is to drop all default constraints in the system that uses a UDF, publish then add the constraints back which is vulnerable to invalid data and a lot of moving
    steps.  This all worked with SQL 2000, 2005, 2008, 2008r2, it’s stopped working in SQL 2012 and continues to not work in SQL 2014. 
    Error messages:
    Message: There is already an object named 'DF__repTable__id__117F9D94' in the database.
    Could not create constraint. See previous errors.
    Command Text: CREATE TABLE [dbo].[MSmerge_conflict_MergeRepFailurePublication_repTable](
            [id] [varchar](8) NULL CONSTRAINT [DF__repTable__id__117F9D94]  DEFAULT ([dbo].[repUDF]()),
            [somedata] [varchar](64) NULL,
            [rowguid] [uniqueidentifier] ROWGUIDCOL  NULL,
            [someint] [int] NULL,
            [somestring] [varchar](64) NULL
    Parameters:
    Stack:    at Microsoft.SqlServer.Replication.AgentCore.ReMapSqlException(SqlException e, SqlCommand command)
       at Microsoft.SqlServer.Replication.AgentCore.AgentExecuteNonQuery(SqlCommand command, Int32 queryTimeout)
       at Microsoft.SqlServer.Replication.AgentCore.ExecuteDiscardResults(CommandSetupDelegate commandSetupDelegate, Int32 queryTimeout)
       at Microsoft.SqlServer.Replication.Snapshot.YukonMergeConflictTableScriptingManager.ApplyBaseConflictTableScriptToPublisherIfNeeded(String strConflictScriptPath)
       at Microsoft.SqlServer.Replication.Snapshot.BaseMergeConflictTableScriptingManager.DoConflictTableScriptingTransaction(SqlConnection connection)
       at Microsoft.SqlServer.Replication.RetryableSqlServerTransactionManager.ExecuteTransaction(Boolean bLeaveTransactionOpen)
       at Microsoft.SqlServer.Replication.Snapshot.BaseMergeConflictTableScriptingManager.DoConflictTableScripting()
       at Microsoft.SqlServer.Replication.Snapshot.MergeSmoScriptingManager.GenerateTableArticleCftScript(Scripter scripter, BaseArticleWrapper articleWrapper, Table smoTable)
       at Microsoft.SqlServer.Replication.Snapshot.MergeSmoScriptingManager.GenerateTableArticleScripts(ArticleScriptingBundle articleScriptingBundle)
       at Microsoft.SqlServer.Replication.Snapshot.MergeSmoScriptingManager.GenerateArticleScripts(ArticleScriptingBundle articleScriptingBundle)
       at Microsoft.SqlServer.Replication.Snapshot.SmoScriptingManager.GenerateObjectScripts(ArticleScriptingBundle articleScriptingBundle)
       at Microsoft.SqlServer.Replication.Snapshot.SmoScriptingManager.DoScripting()
       at Microsoft.SqlServer.Replication.Snapshot.SqlServerSnapshotProvider.DoScripting()
       at Microsoft.SqlServer.Replication.Snapshot.MergeSnapshotProvider.DoScripting()
       at Microsoft.SqlServer.Replication.Snapshot.SqlServerSnapshotProvider.GenerateSnapshot()
       at Microsoft.SqlServer.Replication.SnapshotGenerationAgent.InternalRun()
       at Microsoft.SqlServer.Replication.AgentCore.Run() (Source: MSSQLServer, Error number: 2714)
    Get help: http://help/2714
    Server COL-PCANINOW540\SQL2012, Level 16, State 0, Procedure , Line 1
    Could not create constraint. See previous errors. (Source: MSSQLServer, Error number: 1750)
    Get help: http://help/1750
    Server COL-PCANINOW540\SQL2012, Level 16, State 0, Procedure , Line 1
    Could not create constraint. See previous errors. (Source: MSSQLServer, Error number: 1750)
    Get help: http://help/1750
    Pauly C
    USE [master]
    GO
    CREATE DATABASE [MergeRepFailure]
    ALTER DATABASE [MergeRepFailure] SET COMPATIBILITY_LEVEL = 110
    GO
    USE [MergeRepFailure]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create view
    [dbo].[repView] as select right(newid(),8) as id
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE FUNCTION [dbo].[repUDF]()
    RETURNS varchar(8)
    BEGIN
    declare @val varchar(8)
    select top 1 @val = id from [repView]
    return @val
    END
    GO
    create table repTable
    id varchar(8) default([dbo].[repUDF]()),
    somedata varchar(64) null,
    rowguid uniqueidentifier ROWGUIDCOL default(newid()),
    someint int default(1),
    somestring varchar(64) default('somestringvalue')
    GO
    insert into reptable (somedata) values ('whatever1')
    insert into reptable (somedata) values ('whatever2')
    go
    /*test to make sure function is working*/
    select * from reptable
    GO
    /*Publish database*/
    use [MergeRepFailure]
    exec sp_replicationdboption @dbname = N'MergeRepFailure', @optname = N'merge publish', @value = N'true'
    GO
    declare @Descrip nvarchar(128)
    select @Descrip = 'Merge publication of database ''MergeRepFailure'' from Publisher ''' + @@servername +'''.'
    print @Descrip
    -- Adding the merge publication
    use [MergeRepFailure]
    exec sp_addmergepublication @publication = N'MergeRepFailurePublication', @description = N'@Descrip',
    @sync_mode = N'native', @retention = 14, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true',
    @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21,
    @ftp_subdirectory = N'ftp', @ftp_login = N'anonymous', @allow_subscription_copy = N'false', @add_to_active_directory = N'false',
    @dynamic_filters = N'false', @conflict_retention = 14, @keep_partition_changes = N'false', @allow_synctoalternate = N'false',
    @max_concurrent_merge = 0, @max_concurrent_dynamic_snapshots = 0, @use_partition_groups = null, @publication_compatibility_level = N'100RTM',
    @replicate_ddl = 1, @allow_subscriber_initiated_snapshot = N'false', @allow_web_synchronization = N'false', @allow_partition_realignment = N'true',
    @retention_period_unit = N'days', @conflict_logging = N'both', @automatic_reinitialization_policy = 0
    GO
    exec sp_addpublication_snapshot @publication = N'MergeRepFailurePublication', @frequency_type = 4, @frequency_interval = 14, @frequency_relative_interval = 1,
    @frequency_recurrence_factor = 0, @frequency_subday = 1, @frequency_subday_interval = 5, @active_start_time_of_day = 500, @active_end_time_of_day = 235959,
    @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 1
    use [MergeRepFailure]
    exec sp_addmergearticle @publication = N'MergeRepFailurePublication', @article = N'repTable', @source_owner = N'dbo', @source_object = N'repTable', @type = N'table',
    @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000010C034FD1, @identityrangemanagementoption = N'manual',
    @destination_owner = N'dbo', @force_reinit_subscription = 1, @column_tracking = N'false', @subset_filterclause = null, @vertical_partition = N'false',
    @verify_resolver_signature = 1, @allow_interactive_resolver = N'false', @fast_multicol_updateproc = N'true', @check_permissions = 0, @subscriber_upload_options = 0,
    @delete_tracking = N'true', @compensate_for_errors = N'false', @stream_blob_columns = N'false', @partition_options = 0
    GO
    use [MergeRepFailure]
    exec sp_addmergearticle @publication = N'MergeRepFailurePublication', @article = N'repView', @source_owner = N'dbo', @source_object = N'repView',
    @type = N'view schema only', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001,
    @destination_owner = N'dbo', @destination_object = N'repView', @force_reinit_subscription = 1
    GO
    use [MergeRepFailure]
    exec sp_addmergearticle @publication = N'MergeRepFailurePublication', @article = N'repUDF', @source_owner = N'dbo', @source_object = N'repUDF',
    @type = N'func schema only', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001,
    @destination_owner = N'dbo', @destination_object = N'repUDF', @force_reinit_subscription = 1
    GO

    More information, after running a profile trace the following 2 statements, the column with the default on a UDF returns a row while the other default does not.  This might be the cause of this bug.  Is the same logic to generate the object on
    the subscriber used to generate the conflict table?  
    exec sp_executesql N'
    select so.name, schema_name(so.schema_id)
    from sys.sql_dependencies d
    inner join sys.objects so
    on d.referenced_major_id = so.object_id
    where so.type in (''FN'', ''FS'', ''FT'', ''TF'', ''IF'')
    and d.class in (0,1)
    and d.referenced_major_id <> object_id(@base_table, ''U'')
    and d.object_id = object_id(@constraint, ''D'')',N'@base_table nvarchar(517),@constraint nvarchar(517)',@base_table=N'[dbo].[repTable]',@constraint=N'[dbo].[DF__repTable__id__117F9D94]'
    exec sp_executesql N'
    select so.name, schema_name(so.schema_id)
    from sys.sql_dependencies d
    inner join sys.objects so
    on d.referenced_major_id = so.object_id
    where so.type in (''FN'', ''FS'', ''FT'', ''TF'', ''IF'')
    and d.class in (0,1)
    and d.referenced_major_id <> object_id(@base_table, ''U'')
    and d.object_id = object_id(@constraint, ''D'')',N'@base_table nvarchar(517),@constraint nvarchar(517)',@base_table=N'[dbo].[repTable]',@constraint=N'[dbo].[DF__repTable__somein__1367E606]'
    Pauly C

  • The type Set is not generic; it cannot be parameterized with arguments K ?

    When I use Hashtable or HashMap to get the keySet, it shows the error of "The type Set is not generic; it cannot be parameterized with arguments <K>".
    The following is my code:
    Hashtable table = new Hashtable();
    table.put("A", new Integer(1));
    table.put("B", new Integer(2));
    Iterator its = table.keySet().iterator(); // <<<<<<<<<<<<<< this line shows the error "The type Set is not generic; it cannot be parameterized with arguments <K>"
    How can I solve it? Please help me! I have no idea on it. It works fine in 1.4.
    Best regards,
    Eric

    The original is my codes, please help!
    public static List findDlicApp(Date startDate, Date endDate, Connection con) {
              String SQL = getSQL("app.sql");
              String where = getSQL("app.sql.where");
              boolean hasWhere = false;
              if (startDate != null) {
                   SQL = SQL + " where d.create_date >= to_date('" + DMSUtil.convertDateToString(startDate) + "', 'yyyy-MM-dd')";
                   hasWhere = true;
              if (endDate != null) {
                   if (hasWhere) {
                        SQL = SQL + " and to_date(to_char(d.create_date, 'yyyy-mm-dd'), 'yyyy-mm-dd') <= to_date('" + DMSUtil.convertDateToString(endDate) + "', 'yyyy-MM-dd')";
                   } else {
                        SQL = SQL + " where to_date(to_char(d.create_date, 'yyyy-mm-dd'), 'yyyy-mm-dd') <= to_date('" + DMSUtil.convertDateToString(endDate) + "', 'yyyy-MM-dd')";
                   hasWhere = true;
              if (hasWhere) {          
                   SQL = SQL + " and " + where;
              } else {
                   SQL = SQL + " where " + where;
              SQL = SQL + " " + getSQL("app.sql.order");
              //System.out.println(SQL);
              //Connection con =  getParaDMConnection("findDlicApp");
              HashMap<String, DlicApp> dlicDocs = new HashMap<String, DlicApp>();
              List result = new ArrayList();
              try {
                   Statement stmt = con.createStatement();
                   ResultSet rs = stmt.executeQuery(SQL);
                   long lastDocID = 0;
                   boolean hasStartDate = false;
                   while(rs.next()) {
                        long docID = rs.getLong("docID");
                        String docName = rs.getString("docName");
                        String refNo = rs.getString("refNo");
                        java.util.Date createDate = rs.getDate("createDate");
                        String creator = rs.getString("creator");
                        String profileType = rs.getString("profileType");
                        String assunto = rs.getString("assunto");
                        String fromEntity = rs.getString("fromEntity");     
                        String location = getLocation(docID, con);
                        long fieldID = rs.getLong("fieldID");
                        String fieldValue = rs.getString("fValue");
                        DlicApp doc = null;
                        if (dlicDocs.containsKey(String.valueOf(docID))) {
                             doc = (DlicApp)dlicDocs.get(String.valueOf(docID));
                        } else {
                             doc = new DlicApp();
                        doc.setId(docID);
                        doc.setDocName(docName);
                        doc.setReferenceNo(refNo);
                        doc.setCreateDate(createDate);
                        doc.setCreator(creator);
                        doc.setProfileType(profileType);
                        doc.setAssunto(assunto);
                        doc.setFrom(fromEntity);
                        //if (doc.getStartDate() == null) {                    
                        //     doc.setStartDate(createDate);
                        doc.setLocation(location);
                        if (fieldValue != null) {                    
                             if (fieldID == 1114) {
                                  doc.setChineseName(fieldValue);
                             if (fieldID == 1115) {
                                  doc.setPortugueseName(fieldValue);
                             if (fieldID == 1116) {
                                  doc.setApplicationCategory(fieldValue);
                             if (fieldID == 1118) {
                                  doc.setStatus(fieldValue);
                             if (fieldID == 1119) {
                                  Date d = DMSUtil.parseDate(fieldValue, "yyyy-MM-dd");
                                  doc.setStartDate(d);
                                  hasStartDate = true;
                             if (fieldID == 1120) {
                                  Date d = DMSUtil.parseDate(fieldValue, "yyyy-MM-dd");
                                  if (!StringUtils.isEmpty(fieldValue)) {
                                       //System.out.println(docName + ":" + fieldValue + ">>>>>>>>>findDlicApp>>>>>>>>>>>>>>>>>>APP END DATE: " + d);
                                       doc.setEndDate(d);
                        if (docID != lastDocID) {                    
                             doc.setRelatedDocs(findRelatedDoc(docID, con));
                             lastDocID = docID;
                        dlicDocs.put(String.valueOf(docID), doc);
                   stmt.close();
                   rs.close();
                   Iterator<String> its = dlicDocs.keySet().iterator();
                   while(its.hasNext()) {
                        String id = (String)its.next();
                        DlicApp a = (DlicApp)dlicDocs.get(id);
                        a.setRelatedDocs(findRelatedDoc(a.getId(), con));
                        dlicDocs.put(id, a);
                   result.addAll(dlicDocs.values());
                   // take out start date is not in the given period
                   int n = 0;
                   while(true) {
                        if (n < result.size()) {
                             DlicApp a = (DlicApp)result.get(n);               
                             Date sd = a.getStartDate();
                             if (!isWithin(sd, startDate, endDate)) {
                                  result.remove(n);
                             } else {
                                  n++;
                        } else {
                             break;
              } catch(Exception e) {
                   e.printStackTrace();
              if (result.size() > 0) {
                   Collections.sort(result, new DmsDocComparator());
              return result;
         }Edited by: EJP on 13/01/2011 14:41: added code tags for you. Please use them next time.

  • Maintain workflow substitute for other user

    Hi,
    one of our users went on holiday and forgot to maintain a workflow substitute in his workplace. Now I as admin are forwarding his items manually to other users. Does anyone know a way for me as admin to set a substitute for him?
    Best regards.

    Function module RH_SUBSTITUTES_LIST does this, a common little program is
    REPORT  zwf_substitute.
    PARAMETERS: p_user LIKE usr02-bname MATCHCODE OBJECT user_comp OBLIGATORY.
    START-OF-SELECTION.
      CALL FUNCTION 'RH_SUBSTITUTES_LIST'
       EXPORTING
         us_type                  = 'US'
         us_id                    = p_user
         maintainance_flag        = 'X'
       EXCEPTIONS
         no_active_wf_plvar       = 1
         otype_not_valid          = 2
         object_not_valid         = 3.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    With a report you can assign a transaction code and control authorization to the transaction code instead of having people executing function modules or reports directly in production.
    <i>Message was edited by Kjetil Kilhavn:</i>
    Sorry about the rather unreadable code, but I don't know what's the problem with the CODE tag.

  • Check for null and empty - Arraylist

    Hello all,
    Can anyone tell me the best procedure to check for null and empty for an arraylist in a jsp using JSTL. I'm trying something like this;
    <c:if test="${!empty sampleList}">
    </c:if>
    Help is greatly appreciated.
    Thanks,
    Greeshma...

    A null check might not be you best option.  If your requirement is you must have both the date and time component supplied in order to populate EventDate, then I would use a Script Functoid that takes data and time as parameters.
    In the C# method, first check if either is an empty string, if so return an empty string.
    If not, TryParse the data, if successful, return a valid data string for EventDate.  If not, error or return empty string, whichever satsifies the requirement.

  • Substitute for filters in SAP BusinessObjects Dashboards

    Dear all,
    I am working on a dashboard application built on SAP Business Objects Dashboards 4.1.
    When I deployed the application to an iPad, I realized that the filters present in the application are not supported by iPad.
    Thus, is there any mobile-compatible component in SAP BO Dashboards which I can use in place of filrters for filtering the result during runtime?
    Any help is highly appreciated.
    Thanks And Regards,
    Nalin Dwivedi

    In combo box, all I can do is select some values from one or more rows or cells in the excel and paste it to some other destination within excel. But my whole dashboard is query-based i.e. I have created query and my charts are getting the data directly from database during runtime. Thus, the query prompt selectors I have used are directly manipulating the data coming from the database.
    Since query prompt selector are not supported in mobile mode, I need a substitute for it.
    Combo box is not able to help till now because the values of combo box can not manipulate the data coming from database. Moreover, I am not sure if I have used the combo box properly.
    If there is any way by which it can be done with using mobile-compatible components, then please suggest me about it.
    Thanks in advance.
    Regards,
    Nalin

  • Check for null or empty in the functoid

    I want to check for null and empty values on input source node. If there exists a null or empty in the input source node, I should not pass that to output destination node. Does the
    following attachment work? I want to check for null or empty in the date and time and then concatenate them to send to output. If any of them is null or empty, the other should not fail. In the Not Equal Functoid I am checking for blank, but how to check for
    null?

    A null check might not be you best option.  If your requirement is you must have both the date and time component supplied in order to populate EventDate, then I would use a Script Functoid that takes data and time as parameters.
    In the C# method, first check if either is an empty string, if so return an empty string.
    If not, TryParse the data, if successful, return a valid data string for EventDate.  If not, error or return empty string, whichever satsifies the requirement.

  • ORA-01400 - not null column with default value and item with authorization

    I've searched - I would think someone has run into this. APEX 3.0.0.00.20 - I've created a simple form on a table. One of the column is a not null column with a default value. I have a select list on that item, but it has security on it - authorization scheme. So, it checks the user and if that user isn't of the right role, it will not even display that item. However, APEX appears to still send in the column in its sql! So, the default value is useless, it sends in null each time. Even if I set the default at the Item level, I get null. Argg. That's got to be a bug...
    In debug, I do not see the item listed at all. It's not used. That's fine - but why is it trying to insert the value? I would think it would leave it off??? I think because the item is associated with a database column. But, getting around this is ugly. Having to create a hidden item for each one, and then check to see if I need to take the list value... horrible. Any way to get around this???

    I should add - I guess I can always put my own custom process in to replace the DML. Just seems like a simple thing - if the value doesn't appear on the debug, isn't set with any default value... don't include it in the DML.

Maybe you are looking for

  • Kodak Gallery (ofoto) and iPhoto 6

    I am using iPhoto 6 on a relatively new imac with 3gigs RAM. My wife wants only to be able to use her photos in the way she used to on the PC, and we can't get the photo upload to work at Kodak Gallery, which is where she has years of photos already

  • Alpha Channel on the Web?

    I know this is a shot in the dark, but are there any QuickTime codecs which would allow for an alpha channel on embedded web content? I want to put a QuickTime movie (a keyed out Narrator) onto a large webpage background image. Suggestions? Thanks!

  • Duplicate Entries in Internal Tables

    Hallo Friends, It Would be nice if some one let me know, if there is a way in ABAP to select the duplicates records in an internal tables. Lets say I have two internal tabels, itabA have following structure: BNAME  |          WORKAREA   |   ROLES abc

  • Help, please.  Console logging strange error repeatedly

    Hello, I am very low on hard drive space suddenly, and it was suggested that I check the console log. Sure enough, there is an error repeating over and over. I'm not sure if fixing this will solve the hard drive space problem, but I'd still like to f

  • Doubt in Interactive form

    Hi, I have created interactive adobe form in webdynpro for ABAP. When i execute the application it is showing PDF in browser. But i could not able to input any value in it. For example, i want to input the name and when we click on submit it should s