WEBI Report Error After Adding 2 New Servers to BOE

There were two new servers added to the existing BO enterprise application. Both these servers have the Web Intelligence job server and Web Intelligence report server services running on them. Eversince these servers have been added we have been encountering the following error
Creation Time: 1/11/2009 11:40 PM
Start Time: 1/11/2009 11:40 PM
End Time: 1/11/2009 11:40 PM
Server Used: LXW0D38C.Web_IntelligenceJobServer
Error Message: 0: (CS) :DBDriver failed to load : D:\Program Files\Business Objects\BusinessObjects Enterprise 11.5\win32_x86\dataAccess\connectionServer\dbd_oci8.dll (The specified module could not be found. ) An internal error occurred while calling the 'processDPCommands' API. (Error: WIS 30270) BOException caught:RESULT=80004005;WHAT=RefreshBatch failed
The job server mentioned in error message may not necessarily be job server created on the new servers. In the above example the server listed with the job server running on it has BOE installed on the C drive
I do want to point out that when I turn off the job servers and report servers on the newly installed machines this problem goes away
I am assuming that an old job server may assign a task the the new webi intelligence report server to execute a query and the problem shows up
Am I possibly missing a setting in the WEB Intelligence report server?
Is there something that can be done to fix the issue?
We are currently at BOXIR2 SP3.6 which is installed on Windows 2000 Server with SP4
Thank You
Shariq

Alan,
I used remote desktop to access each of the servers and I am able connect to the oracle databases that the BOW accesses from both SQLPLUS as well as ODBC. I also opened up designer and was able to successfully connect to each of the universes
I have placed the -trace option on the WEB Intelligence Report servers and going to try to find what kind of output this newly installed BOE software generates
Can you think of anything else?
Thank You
Shariq

Similar Messages

  • EVDRE error after adding new member - AFTER installing SQL 2008 R2 SP1 CU2

    Hi guys.
    We're seeing the same error as detailed in Link:[Re: EVDRE error AFTER expanding on a newly added member, sometimes....;
    Basically, any new members that are added appear in the SQL tables, but throw out "EVDRE has encountered a problem..." when trying to use them.
    Generally, this problem clear up if we leave the member overnight (although why this should be, I have no idea - the system does nothing extra overnight).
    We have tried processing the cube, full processing of the application and even a server reboot, all to no avail.
    However, the generally accepted fix for this is to upgrade SQL 2008 R2 to SP1 CU2 (SQL 10.50.2772)
    This system was patched to that level before BPC was ever installed, precisely to avoid this problem.
    This is not the first time that we have seen this behaviour.
    I have experienced it in one other environment, which I keep meaning to rebuild.
    These installations are in completely different environments.  The only similarities are that they both use Windows Server 2008 R2 and SQL 2008 R2.
    The issue only started to appear in this second environment today (we have 3 other environments with the same software version that do not have the problem).
    It had been assumed before today that the first problematic environment might need a rebuild due to this issue being caused by some other factor.
    However, this is now far too coincidental to be the case.
    Has anyone seen similar issues even after patching to v10.50.2772, or does anyone have any suggestions at all.
    I could really do with a quick win on this one.
    Thanks

    Hi,
    i've had the same issue in the same days. I confirm that the issue appear after adding any member and it's clear overnight.
    My system is different:
    Windows Server 2008 NT 6.0 <X64> (Build 6002: Service Pack 2) Enterprise Edition
    and Microsoft SQL Server 2008 Enterprise Edition (SP1) - 10.0.2841.0 (X64)
    The issue appears in the last months.
    It's occurs only on specific machine (always the same client), in the same moment other machines can open the same input schedule and expand without problem.
    I've noted also that when I cancel the added member the issue disappear, the same behaviour with APShell.
    I have the same configuration on development and test environment, same version of O.S. and SQL server, but there I don't have problem. The only difference is that these two environments are single server (application and DB server on the same machine) Instead, the production environment is multiserver (2 application server + DB server).
    Maybe there is a service that take a long time for sincronization (it's triggered in the night?).
    Could you verify if on some machine the evdre works fine and and that when you delete the  added member evdre starts to work?
    Kind regards
    Roberto
    Edited by: Roberto Vidotti on Dec 19, 2011 6:01 PM

  • Error in Adding new vritual machine server to HaA cluster ???

    Hi
    when i adding new Server to my cluster i see this error
    Check prerequisites to add server (192.168.20.253) to server pool (karkas) succeed
    2009-11-29 12:16:33     Check prerequisites to add server (192.168.20.253) to server pool (karkas) succeed
    2009-11-29 12:16:46     During adding servers ([192.168.20.253]) to server pool (karkas), Cluster setup failed: (OVM-1011 OVM Manager communication with 192.168.20.254 for operation HA Setup for Oracle VM Agent 2.2.0 failed: errcode=50006, errmsg=Do 'clusterm_init_root_sr' on servers ('192.168.20.253') failed. )
    but when edited again see solved problem but not HA feature work correctly(when shutdown server pool virtual machine is goes down )
    i test is with nfs server but not work i user iscsci target on RHEL5 for create iscsi server
    i see ha work correctly same az this
    2009-11-29 12:25:44     Check prerequisites to add server (192.168.20.253) to server pool (karkas) succeed
    2009-11-29 12:25:50     Check prerequisites to add server (192.168.20.253) to server pool (karkas) succeed
    Select     Server Pool Name     Status     High Availability Status     Servers     Users     Logs
    Select     karkas     Active     Enabled     Total: 2     Total: 1     View Logs
    and no error in /var/log/ovs/*.log
    but when add new server i see in status "error in adding server "" and when edited again see server add and active state
    1-i have no ocfs2 partition on my machine use iscsi initiator
    2-all server use root cluster id /var/ovs/mount/disk_id
    3-all permission set for everybody and 777
    any idea for solve this problem
    thanks

    hi
    and very thanks for your reply
    every this work good
    [root@OVS2-253-32 ~]# service o2cb online
    Starting O2CB cluster ocfs2: OK
    [root@OVS2-253-32 ~]# service o2cb start
    Starting O2CB cluster ocfs2: OK
    [root@OVS2-253-32 ~]#
    but see :
         During adding servers ([192.168.20.253]) to server pool (jojo), Cluster setup failed: (OVM-1011 OVM Manager communication with 192.168.20.254 for operation HA Setup for Oracle VM Agent 2.2.0 failed: errcode=50006, errmsg=Do 'clusterm_init_root_sr' on servers ('192.168.20.253') failed. )
    Select     Server Host/IP     Server Name     Server Type     Status     Server Location     Server Pool Name     Logs
    Select     192.168.20.254     254     Server Pool Master,Utility Server,Virtual Machine Server     Active          jojo     View Logs
    Select     192.168.20.253     253     Virtual Machine Server     Error          jojo     View Logs
    but edit this server work fine. i use doc in step by step configure and no error occur in configuration but still see this error on adding new server and HA can't works correctly (only when i power off virtual quest machine after 15 second this server goes up and live migration not work correctly )when i shutting down one virtual machine server guest still wait for powering up this server
    ocfs2 kernel module load correctly
    cat /var/log/ovs-agent/ovs_root.log
    StackTrace:
    File "/opt/ovs-agent-2.3/OVSXCluster.py", line 115, in clusterm_init_root_sr
    sr.initialize()
    File "/opt/ovs-agent-2.3/_storage/OVSFileSR.py", line 127, in initialize
    self.sp.mount(mp)
    File "/opt/ovs-agent-2.3/_storage/plugins/OVSFileSP.py", line 209, in mount
    fs_spec = self.get_fs_spec()
    File "/opt/ovs-agent-2.3/_storage/plugins/OVSFileSP.py", line 184, in get_fs_spec
    tgt_dev = get_dev_spec(self.fs_uuid, self.fs_spec)
    File "/opt/ovs-agent-2.3/_storage/plugins/OVSFileSP.py", line 82, in get_dev_spec
    raise Exception("No device found: dev_uuid=%s" % dev_uuid)
    are you have any idea for solve this problem ???
    very thanks

  • Time Capsule gives MobileMe/Apple ID password error after adding Express

    I have a 1st Gen Time Capsule at the top of my network plugged into my cable modem.  I just purchased one of the new Airport Expresses to extned my network.
    I plugged the Airport Express in and used the iOS "Airport Utility" app to set it up.  The utility (both on the the iOS and on my Mac) show the new Airport Express with a green light and connected.  However, my Time Capsule now has a warning error with an orange light.
    On the iOS device, it says "Unrecognized Apple ID or password--An Apple ID or password is incorrect.  Enter the correct Apple ID and password and try again."  Of course, on the iOS, there's no way to enter it, so I went to the Mac's Airport Utility (I have both 5.6 and 6.0, but I used 5.6).  On the Mac's Airport Utility, the error says that the MobileMe member name or password is incorrect.  (Note, wireless continues to work--I just have the error).
    Since the Mac's utility asks to correct the MobileMe username/password, I type those in and let it update.  I know that I am typing the correct username/password, but the error continues to occur.  I could click "ignore this issue" on the iOS Airport Utility and all lights so green, but the issue shouldn't be there to begin with.  I'd like to figure out what is causing the error.  Is there another location that I should be entering the information?
    I do have a separate Apple ID, but it's asking for my MobileMe credentials (which migrated over to iCloud).
    It's bizarre that the NEW device has no errors and my wireless is still working.  But the original Time Capsule which was working fine with no errors, now has an error after adding the new device.

    Crazy, but attempting to fix the information in Airport Utility 6.0 worked fine--but it wouldn't work in AU 5.6.
    It does seem odd that I couldn't attempt to fix the username/password issue from within the iOS app to begin with.  It told me what the error was, but didn't seem to give me a place to edit the information.

  • This sign appeared in my account: "Your payment method was declined. Update your biiling info'. After adding new information about my others cards I see the same sign. Can't understand what the problem is and what should I do. Need help!!!

    This sign appeared in my account: "Your payment method was declined. Update your biiling info'. After adding new information about my others cards I see the same sign. Can't understand what the problem is and what should I do. Everything used to be good before.
    Do anyone know what I supposed to do in that situation?
    Really need help!
    Thanks in advance.

    Contact iTunes Customer Service and request assistance
    Use this Link  >  Apple  Support  iTunes Store  Contact

  • Error after clicking New Segment in Segmentation Wizard

    I can use Segmentation Wizard when connected with my login (administrator role).
    When using another login for the Lead Generation people (lead role), I do get an error after clicking New Segment.
    Maybe the role needs a specific privilege so that the user can use the Segmentation Wizard ?
    Txs. for any help.
    Antonio

    Antonio, I would recommend that you contact CRM On Demand customer care in reference to this issue.

  • EDIT method doesn't work after adding new row

    I would like to start editing after adding new row into TableView.
    I copied example from Oracle website: [Using JavaFX UI Controls - 13 Table View|http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJAGDAHE]. Then I put additional button for adding new row and define action for the button.
        final Button addButton = new Button("Add");
        addButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent arg0) {
                Person p = new Person("", "", "");
                table.getItems().add(p);               
                table.getSelectionModel().select(p);
                table.edit(table.getSelectionModel().getSelectedIndex(), table.getColumns().get(2));
        });In result I can see selected new row but the table doesn't start edditing in the third column.
    I have similar method for editing existing rows and it works properly.
        final Button editButton = new Button("Edit");
        editButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent arg0) {
                table.edit(table.getSelectionModel().getSelectedIndex(), table.getColumns().get(2));
        });Could you help me what I do wrong?

    Try wrapping the setCaretPosition(...) method in a SwingUtilities.invokeLater(...)
    caret=outputArea.getDocument().getText(0,outputArea.getDocument().getLength()).length();Should be:
    caret = outputArea.getDocument().getLength();

  • Refresh Webi reports automatically after BI data loads ?

    Hello,
    We are about to install BOE X.1 on top of BI 701.
    The idea would be that the users would perform their WebI daily reporting, but obviously only after SAP BI night batch scheduling is finished, and the BI infoproviders filled.
    I've read that BOE ofers you the ability to refresh the reports upfront.
    We were wondering if there is a way to easily implement this logical dependance : to refresh the Webi Report only after the end of BI data loads.
    There is off course, the possibility to use an external scheduler, but we have checked the licencing and it's quite expensive.
    Is there another way to do so ?
    Many thanks for your attention.
    Best Regards.
    Raoul

    Hi Alan,
    Thank you very much for your quick answer.
    I would like to make sure that I understand you since I'm not very familliar with BOE :
    First , we create an event in the CMC and connect it to a file location
    Then we schedule the document and add the file event : do you mean schedule the webi report  ?
    Finally create the file  as part of the Bex query refresh process : how exactly do we do that, in the BI process chains ?
    Thank you very in advance for your help.
    Best Regards.
    Raoul

  • Can't get around this error after adding second dataset...A scope is required for all aggregates used outside of a data region unless the report contains exactly one dataset

    I added a dataset to an existing report and broke an aggregation.  In the old (i.e. single dataset) report, this expression below worked fine.  I wanted to get a distinct count of the vst_ext_id field when my educated field was like "VTE1*"
    = CountDistinct(IIF(Fields!educated.Value like "VTE1*", Fields!vst_ext_id.Value, Nothing))
    After adding a new dataset, this no longer works and I get the error " A scope is required for all aggregates used outside of a data region unless the report contains exactly one dataset".  Having done some research online, I found that I
    needed to specify my dataset explicitly and I thought this new expression might work, but still no success...
    = CountDistinct(IIF(Fields!educated.Value,"DataSet1" like "VTE12*", Fields!vst_ext_id.Value,"DataSet1", Nothing))
    Am I missing something?  Based on online responses, this explicit dataset naming convention seems to help most people, but it isn't working for me. 
    Thanks in advance!
    Brian

    I found the answer.  Apparently, my expression syntax was off.  This expression does the trick...
    = CountDistinct(IIF(Fields!educated.Value like "VTE12*", Fields!vst_ext_id.Value,Nothing),"DataSet1")
    I just happened upon this particular syntax searching online.  I was trying to specify the dataset name after each .value, but I never got that to work.   This is the only time I have found this particular syntax online. 

  • Webi Report Error: INF

    Hi All
    I am having an issue with one of the WEBI report. As soon as I open the report it pops up a box with header HTTP Status 500 - Internal error and error in the box is (Error: INF). On data refresh it gives the same error after couple of minutes, but if I edit the report and refresh the data (from edit report page) it gets the report contents. There are other reports which are based on the same universe and work fine.
    Any idea/direction is much appreciated.
    Best regards,

    Hi,
    Adapt is actually a tracking system used to track code changes (enhancements, bugs etc.) so that number can be thought of like an incident number.  So you won't see that in your error message.  The Adapt I referenced was not reproducible in FP3.5. 
    It is indeed possible that you are seeing a different problem (sometimes the same error message is given for different problems).  So one last thing I could suggest before you close this off would be that you can raise this to technical support and depending on the exact issue (does it require connectivity to your database etc.) they may be able to test the report internally to confirm it's fixed in 3.5.  However, given that you don't want to patch since you are moving to a new version anyway, that would probably be a waste of time for all parties involved.
    Sorry for the confusion with the Adapt etc.
    Thanks,
    John

  • Web Reporting Error

    Hello Gurus,
               I am new to web reporting and I followed this link
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/749a4622-0a01-0010-36bf-b6b30a2a3a22
    and I was getting this error:
    Service cannot be reached
    What has happened?
    URL http://premiersap:8000/sap/bw/BEx call was terminated because the corresponding service is not available.
    Note
    The termination occurred in system PRD with error code 403 and for the reason Forbidden.
    The selected virtual host was 0 .
    What can I do?
    Please select a valid URL.
    If you do not yet have a user ID, contact your system administrator.
    ErrorCode:ICF-NF-http-c:000-u:SAPSYS-l:E-i:premiersap_PRD_00-v:0-s:403-r:Forbidden
    HTTP 403 - Forbidden
    Can anyone help me to solve this problem?
    Any help appreciated with points.
    Thanks in advace
    pavan

    Hi Pavan,
    Please check the How to guide "How to enable web functionality after bw installation" which is having step by step procedure to enable web reporting.
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/994a06ed-0c01-0010-878b-e796a9060209
    www.sdn.sap.com/irj/sdn/howtoguides
    Hope this helps.
    Regards
    Ganesh
    *Assign points if this helps

  • Reporting Error After Upgrading to SCCM 2012 R2

    After upgrading from SCCM 2012 SP1 CU2 to SCCM 2012 R2, some users receive an error whenever they open a report.  This occurs in both the SCCM console and the SSRS web site.  What's odd is not all users receive the error.  In fact, for two
    users with the exact same permissions, running the console on the same computer, 1 gets the error and the other doesn't.  Anybody else see this or have any ideas to troubleshoot or fix it?  I'm thinking this may relate to the fix for permissions
    in reporting included in R2.
    The error message from the console is:Microsoft.Reporting.WinForms.ReportServerException
    The DefaultValue expression for the report parameter ‘UserSIDs’ contains an error: The user name or password is incorrect.
    (rsRuntimeErrorInExpression)
    Stack Trace:
    at Microsoft.Reporting.WinForms.ServerReportSoapProxy.OnSoapException(SoapException e)
    at Microsoft.Reporting.WinForms.Internal.Soap.ReportingServices2005.Execution.RSExecutionConnection.ProxyMethodInvocation.Execute[TReturn](RSExecutionConnection connection, ProxyMethod`1 initialMethod, ProxyMethod`1 retryMethod)
    at Microsoft.Reporting.WinForms.Internal.Soap.ReportingServices2005.Execution.RSExecutionConnection.LoadReport(String Report, String HistoryID)
    at Microsoft.Reporting.WinForms.ServerReport.EnsureExecutionSession()
    at Microsoft.Reporting.WinForms.ServerReport.SetParameters(IEnumerable`1 parameters)
    at Microsoft.ConfigurationManagement.AdminConsole.SrsReporting.ReportViewerWindowsForms.SetParameterValues_DoWork(Object sender, DoWorkEventArgs e)
    The following error is logged in the SSRS logs:
    processing!ReportServer_0-1!12d0!10/31/2013-15:28:48:: e ERROR: Throwing Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: , Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Exception of type 'Microsoft.ReportingServices.ReportProcessing.ReportProcessingException' was thrown.;

    I just wanted to share my last upgrade experience with you, in case, someone is running into the same problem:
    I've just upgraded to SCCM 2012 R2 CU4 (from CU3).
    Guess what? It broke the Reporting, error message as above!
    So I've put the computeraccount of my SCCM/SSRS server (SSRS service is running under local system account) into the WAA group, reboot - but it didn't help. Tried also the Pre-Win2000-Compat-group. Didn't help. A colleague was not experiencing the problem.
    Hmmm. So what is different between our accounts?
    The difference found: My account's userPrincipalName was set to the same as the sAMAccountName, but missing a domain. The account was obviously created by a bad script.
    Solution 1: Delete the userPrincipalName attribute, or
    Solution 2: Make the userPrincipalName complete by adding a valid domain, i.e. [email protected]: In the Active Directory Users and Computers mmc, User Properties, Account tab, select a domain for the "User logon name".
    The problem seems to be only for user accounts, that are in a different domain than the SCCM server's account, i.e. server in example.com, user account in sub.example.com. Always multi-domain problems...
    Thorsten Lau - IT-Lösungen http://blog.system-center.de

  • Your message wasn't delivered because of security policies message after adding new company to our network

    After adding a new acquistion company to our network the company is now receiving a undeliverable error message when trying to email Parent Company.  The acquistion company is still hosting there own email.  Emails do come
    through sometime though.  Odd thing is the part where it says "The following organization rejected your msessage because of relay.  The server that is asking for relay has nothing to do with Exchange and is a webserver.
    Your message wasn't delivered because of security
    policies. Microsoft Exchange will not try to redeliver this message for you.
    Please provide the following diagnostic text to your system administrator.
    The following organization rejected your message: XXXXX08WEB02.
    Sent by Microsoft Exchange Server 2007
    Diagnostic information for administrators:
    Generating server: exch-srv.xxx.local
    xxxx08WEB02 #550 5.7.1 Unable to relay for
    Original message headers:
    Received: from exch-srv.bb.local ([10.36.x.x]) by exch-srv.xx.local
    ([10.36.10.9]) with mapi; Fri, 21 Mar 2014 06:24:26 -0600
    Date: Fri, 21 Mar 2014 06:24:24 -0600
    Subject: Fwd: BLASER
    Thread-Topic: BLASER
    Thread-Index: Ac9FAH8o48EjJULkQCyOFAKdwwLLcQ==
    Message-ID: <[email protected]<mailto:[email protected]>>
    References: <[email protected]<mailto:[email protected]>>
    Accept-Language: en-US
    Content-Language: en-US
    X-MS-Has-Attach:
    X-MS-TNEF-Correlator:
    acceptlanguage: en-US
    Content-Type: multipart/alternative;
    boundary="_000_2E7BF3C7D4A34BBE8DA45714401F4470xxxxxxcom_"
    MIME-Version: 1.0
     

    Hi,
    Let’s try the following resolution:
    Exchange 2007 server>EMC>server configuration>Hub Transport>Receive connector>properties>Network> add your new company server IP address in the tab “receive mail from remote servers that have these IP addresses”.
    For more information, you can refer to the following article:
    http://blogs.technet.com/b/exchange/archive/2006/12/28/3397620.aspx
    If you have any question, please feel free to let me know.
    Thanks,
    Angela Shi
    TechNet Community Support

  • TableSorter errors when adding new data

    so here is the deal:
    I am using the TableSorter.java helper class with DefaultTableModel
    from: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
    It works great when the data is static and I get it for the first time. however, occationally, when adding new data I get a NullPointerException error.
    in use:
    DefaultTableModel.addRow()
    DefaultTableModel.removeRow() and
    DefaultTableModel.insertRow() methods.
    Error:
    java.lang.ArrayIndexOutOfBoundsException: 5
         at com.shared.model.TableSorter.modelIndex(TableSorter.java:294)
         at com.shared.model.TableSorter.getValueAt(TableSorter.java:340)
         at javax.swing.JTable.getValueAt(Unknown Source)
         at javax.swing.JTable.prepareRenderer(Unknown Source)...
    code problem I:
        public Object getValueAt(int row, int column)
            return tableModel.getValueAt(modelIndex(row), column);
        }code problem II:
        public int modelIndex(int viewIndex)
                 return getViewToModel()[viewIndex].modelIndex;     
        }TableSroter class:
    package com.shared.model;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.List;
    import javax.swing.*;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.*;
    * TableSorter is a decorator for TableModels; adding sorting
    * functionality to a supplied TableModel. TableSorter does
    * not store or copy the data in its TableModel; instead it maintains
    * a map from the row indexes of the view to the row indexes of the
    * model. As requests are made of the sorter (like getValueAt(row, col))
    * they are passed to the underlying model after the row numbers
    * have been translated via the internal mapping array. This way,
    * the TableSorter appears to hold another copy of the table
    * with the rows in a different order.
    * <p/>
    * TableSorter registers itself as a listener to the underlying model,
    * just as the JTable itself would. Events recieved from the model
    * are examined, sometimes manipulated (typically widened), and then
    * passed on to the TableSorter's listeners (typically the JTable).
    * If a change to the model has invalidated the order of TableSorter's
    * rows, a note of this is made and the sorter will resort the
    * rows the next time a value is requested.
    * <p/>
    * When the tableHeader property is set, either by using the
    * setTableHeader() method or the two argument constructor, the
    * table header may be used as a complete UI for TableSorter.
    * The default renderer of the tableHeader is decorated with a renderer
    * that indicates the sorting status of each column. In addition,
    * a mouse listener is installed with the following behavior:
    * <ul>
    * <li>
    * Mouse-click: Clears the sorting status of all other columns
    * and advances the sorting status of that column through three
    * values: {NOT_SORTED, ASCENDING, DESCENDING} (then back to
    * NOT_SORTED again).
    * <li>
    * SHIFT-mouse-click: Clears the sorting status of all other columns
    * and cycles the sorting status of the column through the same
    * three values, in the opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
    * <li>
    * CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except
    * that the changes to the column do not cancel the statuses of columns
    * that are already sorting - giving a way to initiate a compound
    * sort.
    * </ul>
    * <p/>
    * This is a long overdue rewrite of a class of the same name that
    * first appeared in the swing table demos in 1997.
    * @author Philip Milne
    * @author Brendon McLean
    * @author Dan van Enckevort
    * @author Parwinder Sekhon
    * @version 2.0 02/27/04
    public class TableSorter extends AbstractTableModel
        protected TableModel tableModel;
        public static final int DESCENDING = -1;
        public static final int NOT_SORTED = 0;
        public static final int ASCENDING = 1;
        private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
        public static final Comparator COMPARABLE_COMAPRATOR = new Comparator()
            public int compare(Object o1, Object o2)
                return ((Comparable) o1).compareTo(o2);
        public static final Comparator LEXICAL_COMPARATOR = new Comparator()
            public int compare(Object o1, Object o2)
                return o1.toString().compareTo(o2.toString());
        private Row[] viewToModel;
        private int[] modelToView;
        private JTableHeader tableHeader;
        private MouseListener mouseListener;
        private TableModelListener tableModelListener;
        private Map columnComparators = new HashMap();
        private List sortingColumns = new ArrayList();
        public TableSorter()
            this.mouseListener = new MouseHandler();
            this.tableModelListener = new TableModelHandler();
        public TableSorter(TableModel tableModel)
            this();
            setTableModel(tableModel);
        public TableSorter(TableModel tableModel, JTableHeader tableHeader)
            this();
            setTableHeader(tableHeader);
            setTableModel(tableModel);
        private void clearSortingState()
            viewToModel = null;
            modelToView = null;
        public TableModel getTableModel()
            return tableModel;
        public void setTableModel(TableModel tableModel)
            if (this.tableModel != null)
                this.tableModel.removeTableModelListener(tableModelListener);
            this.tableModel = tableModel;
            if (this.tableModel != null)
                this.tableModel.addTableModelListener(tableModelListener);
            clearSortingState();
            fireTableStructureChanged();
        public JTableHeader getTableHeader()
            return tableHeader;
        public void setTableHeader(JTableHeader tableHeader)
            if (this.tableHeader != null)
                this.tableHeader.removeMouseListener(mouseListener);
                TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
                if (defaultRenderer instanceof SortableHeaderRenderer)
                    this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
            this.tableHeader = tableHeader;
            if (this.tableHeader != null)
                this.tableHeader.addMouseListener(mouseListener);
                this.tableHeader.setDefaultRenderer
                        new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer())
        public boolean isSorting()
            return sortingColumns.size() != 0;
        private Directive getDirective(int column)
            for (int i = 0; i < sortingColumns.size(); i++)
                Directive directive = (Directive)sortingColumns.get(i);
                if (directive.column == column)
                    return directive;
            return EMPTY_DIRECTIVE;
        public int getSortingStatus(int column)
            return getDirective(column).direction;
        private void sortingStatusChanged()
            clearSortingState();
            fireTableDataChanged();
            if (tableHeader != null)
                tableHeader.repaint();
        public void setSortingStatus(int column, int status)
            Directive directive = getDirective(column);
            if (directive != EMPTY_DIRECTIVE)
                sortingColumns.remove(directive);
            if (status != NOT_SORTED)
                sortingColumns.add(new Directive(column, status));
            sortingStatusChanged();
        protected Icon getHeaderRendererIcon(int column, int size)
            Directive directive = getDirective(column);
            if (directive == EMPTY_DIRECTIVE)
                return null;
            return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
        private void cancelSorting()
            sortingColumns.clear();
            sortingStatusChanged();
        public void setColumnComparator(Class type, Comparator comparator)
            if (comparator == null)
                columnComparators.remove(type);
            else
                columnComparators.put(type, comparator);
        protected Comparator getComparator(int column)
            Class columnType = tableModel.getColumnClass(column);
            Comparator comparator = (Comparator) columnComparators.get(columnType);
            if (comparator != null)
                return comparator;
            if (Comparable.class.isAssignableFrom(columnType))
                return COMPARABLE_COMAPRATOR;
            return LEXICAL_COMPARATOR;
        private Row[] getViewToModel()
            if (viewToModel == null)
                int tableModelRowCount = tableModel.getRowCount();
                viewToModel = new Row[tableModelRowCount];
                for (int row = 0; row < tableModelRowCount; row++)
                    viewToModel[row] = new Row(row);
                if (isSorting())
                    Arrays.sort(viewToModel);
            return viewToModel;
        public int modelIndex(int viewIndex)
                 return getViewToModel()[viewIndex].modelIndex;     
        private int[] getModelToView()
            if (modelToView == null)
                int n = getViewToModel().length;
                modelToView = new int[n];
                for (int i = 0; i < n; i++)
                    modelToView[modelIndex(i)] = i;
            return modelToView;
        // TableModel interface methods
        public int getRowCount()
            return (tableModel == null) ? 0 : tableModel.getRowCount();
        public int getColumnCount()
            return (tableModel == null) ? 0 : tableModel.getColumnCount();
        public String getColumnName(int column)
            return tableModel.getColumnName(column);
        public Class getColumnClass(int column)
            return tableModel.getColumnClass(column);
        public boolean isCellEditable(int row, int column)
            return tableModel.isCellEditable(modelIndex(row), column);
        public Object getValueAt(int row, int column)
            return tableModel.getValueAt(modelIndex(row), column);
        public void setValueAt(Object aValue, int row, int column)
            tableModel.setValueAt(aValue, modelIndex(row), column);
        // Helper classes
        private class Row implements Comparable
            private int modelIndex;
            public Row(int index)
                this.modelIndex = index;
            public int compareTo(Object o)
                int row1 = modelIndex;
                int row2 = ((Row) o).modelIndex;
                for (Iterator it = sortingColumns.iterator(); it.hasNext();)
                    Directive directive = (Directive) it.next();
                    int column = directive.column;
                    Object o1 = tableModel.getValueAt(row1, column);
                    Object o2 = tableModel.getValueAt(row2, column);
                    int comparison = 0;
                    // Define null less than everything, except null.
                    if (o1 == null && o2 == null)
                        comparison = 0;
                    } else if (o1 == null)
                        comparison = -1;
                    } else if (o2 == null)
                        comparison = 1;
                    } else {
                        comparison = getComparator(column).compare(o1, o2);
                    if (comparison != 0)
                        return directive.direction == DESCENDING ? -comparison : comparison;
                return 0;
        private class TableModelHandler implements TableModelListener
            public void tableChanged(TableModelEvent e)
                // If we're not sorting by anything, just pass the event along.            
                if (!isSorting())
                    clearSortingState();
                    fireTableChanged(e);
                    return;
                // If the table structure has changed, cancel the sorting; the            
                // sorting columns may have been either moved or deleted from            
                // the model.
                if (e.getFirstRow() == TableModelEvent.HEADER_ROW)
                    cancelSorting();
                    fireTableChanged(e);
                    return;
                // We can map a cell event through to the view without widening            
                // when the following conditions apply:
                // a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
                // b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
                // c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and,
                // d) a reverse lookup will not trigger a sort (modelToView != null)
                // Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
                // The last check, for (modelToView != null) is to see if modelToView
                // is already allocated. If we don't do this check; sorting can become
                // a performance bottleneck for applications where cells 
                // change rapidly in different parts of the table. If cells
                // change alternately in the sorting column and then outside of            
                // it this class can end up re-sorting on alternate cell updates -
                // which can be a performance problem for large tables. The last
                // clause avoids this problem.
                int column = e.getColumn();
                if (e.getFirstRow() == e.getLastRow()
                        && column != TableModelEvent.ALL_COLUMNS
                        && getSortingStatus(column) == NOT_SORTED
                        && modelToView != null)
                    int viewIndex = getModelToView()[e.getFirstRow()];
                    fireTableChanged(new TableModelEvent(TableSorter.this,
                                                         viewIndex, viewIndex,
                                                         column, e.getType()));
                    return;
                // Something has happened to the data that may have invalidated the row order.
                clearSortingState();
                fireTableDataChanged();
                return;
        private class MouseHandler extends MouseAdapter
            public void mouseClicked(MouseEvent e)
                JTableHeader h = (JTableHeader) e.getSource();
                TableColumnModel columnModel = h.getColumnModel();
                int viewColumn = columnModel.getColumnIndexAtX(e.getX());
                int column = columnModel.getColumn(viewColumn).getModelIndex();
                if (column != -1)
                    int status = getSortingStatus(column);
                    if (!e.isControlDown())
                        cancelSorting();
                    // Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
                    // {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
                    status = status + (e.isShiftDown() ? -1 : 1);
                    status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
                    setSortingStatus(column, status);
        private static class Arrow implements Icon
            private boolean descending;
            private int size;
            private int priority;
            public Arrow(boolean descending, int size, int priority)
                this.descending = descending;
                this.size = size;
                this.priority = priority;
            public void paintIcon(Component c, Graphics g, int x, int y)
                Color color = c == null ? Color.GRAY : c.getBackground();            
                // In a compound sort, make each succesive triangle 20%
                // smaller than the previous one.
                int dx = (int)(size/2*Math.pow(0.8, priority));
                int dy = descending ? dx : -dx;
                // Align icon (roughly) with font baseline.
                y = y + 5*size/6 + (descending ? -dy : 0);
                int shift = descending ? 1 : -1;
                g.translate(x, y);
                // Right diagonal.
                g.setColor(color.darker());
                g.drawLine(dx / 2, dy, 0, 0);
                g.drawLine(dx / 2, dy + shift, 0, shift);
                // Left diagonal.
                g.setColor(color.brighter());
                g.drawLine(dx / 2, dy, dx, 0);
                g.drawLine(dx / 2, dy + shift, dx, shift);
                // Horizontal line.
                if (descending) {
                    g.setColor(color.darker().darker());
                } else {
                    g.setColor(color.brighter().brighter());
                g.drawLine(dx, 0, 0, 0);
                g.setColor(color);
                g.translate(-x, -y);
            public int getIconWidth()
                return size;
            public int getIconHeight()
                return size;
        private class SortableHeaderRenderer implements TableCellRenderer
            private TableCellRenderer tableCellRenderer;
            public SortableHeaderRenderer(TableCellRenderer tableCellRenderer)
                this.tableCellRenderer = tableCellRenderer;
            public Component getTableCellRendererComponent(JTable table,
                                                           Object value,
                                                           boolean isSelected,
                                                           boolean hasFocus,
                                                           int row,
                                                           int column)
                Component c = tableCellRenderer.getTableCellRendererComponent(table,
                        value, isSelected, hasFocus, row, column);
                if (c instanceof JLabel) {
                    JLabel l = (JLabel) c;
                    l.setHorizontalTextPosition(JLabel.LEFT);
                    int modelColumn = table.convertColumnIndexToModel(column);
                    l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
                return c;
        private static class Directive
            private int column;
            private int direction;
            public Directive(int column, int direction)
                this.column = column;
                this.direction = direction;
    }any input will be appreciated.
    thanks
    Peter

    The code you posted doesn't help us at all. Its just a duplicate of the code from the tutorial. The custom code is what you have written. For example do you update the TableModel from the Event Thread? Do you update the SortModel or the DefaultTableModel? If you actually provide your test code and somebody has already downloaded the sort classes, then maybe they will test your code against the classes. But I doubt if people will download the sort classes and create a test program just to see if they can duplicate your results (at least I know I'm not about to).

  • Scheduling webi report error

    Hi Guys,
    How u all? Guys I need help from your side, While refreshing Webi report in 3.1, getting error:
    A database error occured. The database error text is: Failed to execute MDX query. Reason: Inconsistent input parameter (parameter: <unknown>, value <unknown>). (WIS 10901).
    Kindly help me.
    Thanks,

    Hi,
    This error is very common when the report is based on BW query.
    1. try to schedule the reports and when selecting the prompt values click on refresh the prompt data which will pull the new data values from BW, many times it happens that we take the by default value when refreshing which may have a space etc.
    if the above condition doesn't work try
    2. I would recommend to refresh the universe structure and map the objects i.e. pull the objects again in the reports
    or
    last option would be to enable MDX and SOFA logs to get more details: (Instrucitons on capturing the MDX statement from the Webi Server can be found in SAP Notes 1260004, 1380517 or 1235111.)
    Thanks,
    aKs

Maybe you are looking for

  • Process Order accepts Confirmation & GR from BAPI even after Confirmed

    No matter what i try the formatting and CRLF go for a toss in this text. Hi PPPI Gurus, I am a beginner in this area and request your help. We are implementing a project where the process order Confirmation in SAP ECC 5.0 in SAP PPPI module is done u

  • How to add a VO in vector ,Using Vectors and VO

    Actully I have to add a Patch in a working live application it is somthing like this: it having an VO as ProductVO product_vo=new ProductVO(); this Product VO having all produt i.e. item code here entries. Vector vectMasterProductName=new Vector(); S

  • Photoshop CS6 wont use my graphics card.

    When I try to use the Oil Paint filter tool I receive an error claiming that an "uknown graphics processor error" had occured. I then checked under my preferences and Photoshop is not using the correct graphics card. Is there a way for me to fix this

  • Appcrash itunes when opening pictures (need help)

    every time i open my ipod -pictures itunes crashes.. any ideas? tried reinstalling, resetting, deauthorized and re authorizing itunes. the problem only affects pictures. i have a ipod touch bought it yesterday, problem details below (in norwegian) Na

  • Bug : Image Scaling and Centering

    I was wondering if this was a bug with flex or if I was doing something totally wrong. The amount of code in this is extremely low, so , I was guessing that there was nothing wrong from my part. <?xml version="1.0" encoding="utf-8"?> <mx:Application