1.1.0.21.97: Filter performance

I like the new filtering options for objects in the Connection pane, but the simple filter option (ie object name like hr_personal_pay_method_api) is taking much longer than the "same" filter in 1.0. Just counting in my head, but in 1.0 it took 1 second and in 1.1.0.21.97 it took around 20 seconds.
If I type the object name in upper case and remember to set the Case Sensitive check box then it drops down to around a second in 1.1.0.21.97.
I can accept that the new filtering allows filtering to mixed case or lower case only object names, but wouldn't it be logical for the filtering default to match the default way the database handles object names (which automatically converts to uppercase if you don't enclose in double quotes).
I know I am being lazy (not wanting to use the Caps Lock or hold down the shift key while I type in my object name), but it wasn't until putting this post together that I realised I could get the performance to improve by using uppercase and Case Sensitive. Presumably if I can miss how to speed up filtering, others can too.
As an alternative to how the filter works at the moment (the Case Sensitive check box), what about having a drop down that has something like:
"Uppercase Only" (equivalent to 1.0 and will only find uppercase object names)
"Case Sensitive" (as 1.1.0.21.97 with Case Sensitive check box selected)
"Case Insensitive" (as 1.1.0.21.97 with Case Sensitive check box not selected)
As for the default for the drop down - the ideal would be having a preference that allows you to define your preferred default option.

I have just checked and SQL Developer already appears to be doing the upper() like upper() for case insensitive queries. This switches off indexes and has has a significant impact on the time taken to filter objects in databases with lots of objects. We are an Oracle eBusiness Suite site and have approximately 250,000 objects.
I almost never need to query mixed case objects and I never realised in 11 months of using v1.0 that it was not possible to query mixed case objects.
What I am suggesting is that a minor change to the filter interface would have a performance improvement in the default case (querying objects that are named in uppercase), which would be especially noticeable in databases with lots of objects (such as Oracle eBusiness Suite).

Similar Messages

  • Expression Filter Performance Issues / Misuse?

    I'm currently evaluating the Expression Filter functionality for a new requirement. The basic idea of the requirement is that I have a logging table that I want to get "interesting" records from. The way I want to set it up is to exclude known, "uninteresting", records or record patterns.
    So as far as an implementation I was considering a table of expressions that contained expression filter entries for the "uninteresting" records and checking this against my logging table using the EVALUATE operator and looking for a 0 result.
    In my testing I wanted to return results where the EVALUTE operator is equal to 1 to see if my expressions are correct. In doing this I was experiencing significant performance issues. For example my test filter matches 72 rows out of 61657 possible entries. It took Oracle almost 10 minutes to evaluate this expression. I tried it with and without an Expression Filter index with no noticeable change in execution time. The test case and query is provided below.
    Is this the right use case for Expression Filter? Am I misunderstanding how it works? What am I doing wrong?
    Test Case:
    Version
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0      Production
    TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    Objects & Query:
    CREATE TABLE expressions( white_list VARCHAR2(200));
    CREATE TABLE data
    AS
    SELECT OBJECT_ID
         , OWNER
         , OBJECT_NAME
         , CREATED
         , LAST_DDL_TIME
    FROM   DBA_OBJECTS
    BEGIN
      -- Create the empty Attribute Set --
      DBMS_EXPFIL.CREATE_ATTRIBUTE_SET('exptype');
      -- Define elementary attributes of EXF$TABLE_ALIAS type --
      DBMS_EXPFIL.ADD_ELEMENTARY_ATTRIBUTE('exptype','data',
                                            EXF$TABLE_ALIAS('test_user.data'));
    END;
    BEGIN
      DBMS_EXPFIL.ASSIGN_ATTRIBUTE_SET('exptype','expressions','white_list');
    END;
    INSERT INTO expressions(white_list) VALUES('data.owner=''TEST_USER'' AND data.created BETWEEN TO_DATE(''08/03/2010'',''MM/DD/YYYY'') AND TO_DATE(''08/05/2010'',''MM/DD/YYYY'')');
    exec dbms_stats.gather_table_stats(USER,'EXPRESSIONS');
    exec dbms_stats.gather_table_stats(USER,'DATA');
    CREATE INDEX expIndex ON Expressions (white_list) INDEXTYPE IS EXFSYS.EXPFILTER
      PARAMETERS ('STOREATTRS (data.owner,data.object_name,data.created)
                   INDEXATTRS (data.owner,data.object_name,data.created)');
    SELECT /*+ gather_plan_statistics */ data.* FROM data, expressions WHERE EVALUATE(white_list,exptype.getVarchar(data.rowid)) = 1;
    DROP TABLE expressions PURGE;
    BEGIN
            DBMS_EXPFIL.DROP_ATTRIBUTE_SET(attr_set => 'exptype');
    END;
    DROP TABLE data PURGE;

    Hi,
    If you are already using the queries and are stable enough then rather than modifying query you can try other options to improve the query performance like data compression of the cube, creation of aggregates, placing cube on BIA or creating cache for the query.
    Best Regards,
    Prashant Vankudre.

  • Improving TableRowSorter Filter Performance

    Hi, I currently have a TableModel with over 17300 rows of data, which has a TableRowSorter attached to provide sorting and filtering on the JTable. Everything works fine except that filtering the table takes to long, even on a Wndow Vista machine with an Intel Core 2 Duo (3.6ghz processor)
    Is there any known way to improve the filtering performance on TableRowSorter? It should be noted however, that Sorting with the same data does not take as long (at times). It is also much slower when all the necessary bells and whistles or rendering are included.
    Here is an example piece of code:
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    public class Trial extends JFrame {
        public JTable table;
        public DefaultTableModel model;
        public TableRowSorter sorter;
        public JTextField filterField;
        public Trial() {
            super("Filter Test");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            Vector<String> cols = new Vector<String>();
                cols.addElement("Column 1");
                cols.addElement("Column 2");
                cols.addElement("Column 3");
                cols.addElement("Column 4");
                cols.addElement("Column 5");
                cols.addElement("Column 6");
            Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
            for(int i = 0; i < 20000; i++) {
                Vector<Object> row = new Vector<Object>();
                    row.addElement("Column 1 Data " + (i+1) );
                    row.addElement("Some Data " + (i+1) );
                    row.addElement("Column 3 Data " + (i+1) );
                    row.addElement("Even More Data " + (i+1) );
                    row.addElement("Column 5 Data " + (i+1) );
                    row.addElement("Please No More Data " + (i+1) );
                rows.addElement( row );
            model = new DefaultTableModel(rows, cols);
            table = new JTable( model );
            table.setRowSorter( new TableRowSorter(model) );
            JScrollPane scr = new JScrollPane(table);
            filterField = new JTextField(20);
            filterField.addCaretListener( new CaretListener() {
                public void caretUpdate(CaretEvent e) {
                    if(table.getRowSorter() == null) return;
                    setCursor( Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR) );
                    String text = filterField.getText();
                    ((DefaultRowSorter)table.getRowSorter()).setRowFilter(RowFilter.regexFilter(".*" + text + ".*"));
                    setCursor( Cursor.getDefaultCursor() );
            JPanel filterPanel = new JPanel( new FlowLayout(FlowLayout.LEFT) );
                filterPanel.add( new JLabel("Filter: ") );
                filterPanel.add( filterField );
            getContentPane().add( filterPanel, BorderLayout.NORTH );
            getContentPane().add( scr, BorderLayout.CENTER);
            pack();
            setLocationRelativeTo(null);
            try {
                 setExtendedState(MAXIMIZED_BOTH);
            } catch(Exception e) {}
            setVisible(true);
        public static void main(String[] args) {
            new Trial();
    }Any ideas as to how performance (or percieved performance) can be improved would gladly be apprieciated.
    ICE

    I came to the conclusion that trying to improve the sort performance of TableRowSorter was almost an impossibilty. So I changed my approach from improvement of the actual sorting code to user perception of the process. And Hello, IndicatorRowSorter. This code will display a small window with the String "Searching" and an icon to indicate progress whiles filtering the table and disposes it onces filtering is complete.
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    import javax.swing.table.*;
    * Provides valuable user feedback for the table filtering operation.
    Executes the sorting algorithm on a different thread so as not to block the EDT
    public class IndicatorRowSorter extends TableRowSorter {
        JTable table;
        JWindow sortProgressWin;
        public IndicatorRowSorter() {
            createSortProgressWindow();
        public IndicatorRowSorter(JTable table) {
            super( table.getModel() );
            this.table = table;
            createSortProgressWindow();
        public void createSortProgressWindow() {
            JLabel progressIndicator = new JLabel("Searching...",
                   new ImageIcon("resources/images/loadArrow.gif"), JLabel.LEFT );
                progressIndicator.setBackground(Color.white);
                progressIndicator.setOpaque(true);
                progressIndicator.setBorder( BorderFactory.createEmptyBorder(2,2,2,2) );
            sortProgressWin = new JWindow();
            sortProgressWin.getContentPane().add(progressIndicator);
            sortProgressWin.pack();
            sortProgressWin.setLocationRelativeTo(table);
        public void sort() {
            sortProgressWin.setVisible(true);
            Thread t = new Thread( new Runnable() {
                public void run() {
                    try {
                        IndicatorRowSorter.super.sort();                   
                        sortProgressWin.setVisible(false);
                    } catch(Exception e) {}
            t.start();
    }I got the idea from looking at some of the example from JDNC Incubator project down at java.net. Atleast with this solution, the crappy performance still remains, but the user percieves this as serious data manipulation.
    To get yourself a nice load progress icon, go down over to www.ajaxload.info. You can then replace the reference to the image used in the code above.
    To use it, just a single line of code is required.
    table.setRowSorter( new IndicatorRowSorter(table) );You can test this out with the Trial example posted above.
    ICE

  • Inlist Iterator or Filter - Performance issue or bug?

    Hi,
    Case1:
    SQL Statement
    SELECT
    /*+
    FIRST_ROWS
    FROM
    "/BI0/PMAT_PLANT"
    WHERE
    "PLANT" = :A0 AND "MAT_PLANT" = :A1 AND ( "OBJVERS" = :A2 AND "CHANGED" = :A3 OR "OBJVERS" = :A4
    AND "CHANGED" = :A5 ) AND ROWNUM <= :A6#
    Execution Plan
    SELECT STATEMENT ( Estimated Costs = 5 , Estimated #Rows = 1 )
    5 COUNT STOPKEY
    5 INLIST ITERATOR
    5 TABLE ACCESS BY INDEX ROWID /BI0/PMAT_PLANT
    INDEX RANGE SCAN /BI0/PMAT_PLANT~Z0
    -> Runtime: > 1000s (!!!!!)
    Case 2:
    SQL Statement
    SELECT
    /*+
    FIRST_ROWS
    FROM
    "/BI0/PMAT_PLANT"
    WHERE
    "PLANT" = :A0 AND "MAT_PLANT" = :A1 AND "OBJVERS" BETWEEN :A2 AND :A3 AND "CHANGED" BETWEEN :A4 AND :A5 <= :A6#
    Execution Plan
    SELECT STATEMENT ( Estimated Costs = 5 , Estimated #Rows = 1 )
    5 COUNT STOPKEY
    5 FILTER
    5 TABLE ACCESS BY INDEX ROWID /BI0/PMAT_PLANT
    INDEX RANGE SCAN /BI0/PMAT_PLANT~Z0
    -> Runtime: < 1s (!!!!!)
    What do I miss? Any hint?
    THX in advance...
    Paul
    P.S. Oracle 9.2.0.3

    The max. number of returned rows is 2 in both cases.That's presumably because of the ROWNUM. The two queries ask different questions, so the database expects them - potentially - to return different results, and would probably do so without the STOPKEY .
    Primary key: PLANT, MAT_PLANT, OBJVERS
    And OBJVERS is only "A" or "M".irrelevant (applies in both cases)
    And the optimizer calculates costs of 5 for each statement.Optimizer costs have no objective value, so this doesn't mean anything
    So the very high runtime in one case is very interesting.No, it's obvious. Look at the queries you posted. The first query says:
    return me every row where a particular value of OBVERS is matched with a particular value of CHANGED or another particular value of OBVERS is matched with another particular value of CHANGED
    whereas the second query says
    return me every row where OBVERS has one of a range of values and CHANGED has one of a range of values.
    It's precisely because OBVERS has so few values that you have to do so much work in the first query. Basically your're checking all the orws that match on PLANT and MAT_PLANT. The second query just needs to weed out the rows where CHANGED is in a particular range of values.
    Of course, the execution plans are dependent on which values you put into the variables. For instance, this query:
    SELECT  * FROM
    "/BI0/PMAT_PLANT"
    WHERE "PLANT" =  1 AND "MAT_PLANT" = 2
    AND ( "OBJVERS" = 'A' AND "CHANGED" = '01/01/02'
    OR "OBJVERS" = 'M' AND "CHANGED" = '02/01/02')
    AND ROWNUM <= 2is not the same as
    SELECT  * FROM
    "/BI0/PMAT_PLANT"
    WHERE "PLANT" =  1 AND "MAT_PLANT" = 2
    AND ( "OBJVERS" = 'M' AND "CHANGED" = '01/01/02'
    OR "OBJVERS" = 'M' AND "CHANGED" = '02/01/02')
    AND ROWNUM <= 2but it is the same as
    SELECT  * FROM
    "/BI0/PMAT_PLANT"
    WHERE "PLANT" =  1 AND "MAT_PLANT" = 2
    AND ("CHANGED" = '01/01/02' OR "CHANGED" = '02/01/02')
    AND ROWNUM <= 2Capice?
    Cheers, APC

  • Vector vs bitmap, gradient/transparency/filter performance questions on ios

    so i understand vector artwork is all done by cpu and drawn every frame and bitmaps can be loaded directly from ram using the gpu but when you have simple objects such a masks and static lines, is it more efficient to use vector graphics for a mask? or should it be a bitmap?   what about a line, since it is just a graphic made using a equation rather then wasting resources on a large picture?
    also when movieclips have filters on them such as bluring, it seems like it overlays multiple transparent copies of the image onto the selected movieclip. Does the cpu then have to multiply each colour of the transparent images to arive at the final blur? when i cache this as a bitmap and the edges are feathered/transparent does the gpu multiply the transparercies at the edges? or is it still the cpu that handles it?
    I also wanted to know how stressing gradients are on the cpu/gpu, as a bitmap i assume it is treated the same as any other image but as a vector is it more costley on the cpu to have it up on the stage than an image?
    if there is any tips for graphics on mobile devices i would love to hear them.

    so i understand vector artwork is all done by cpu and drawn every frame and bitmaps can be loaded directly from ram using the gpu but when you have simple objects such a masks and static lines, is it more efficient to use vector graphics for a mask? or should it be a bitmap?   what about a line, since it is just a graphic made using a equation rather then wasting resources on a large picture?
    also when movieclips have filters on them such as bluring, it seems like it overlays multiple transparent copies of the image onto the selected movieclip. Does the cpu then have to multiply each colour of the transparent images to arive at the final blur? when i cache this as a bitmap and the edges are feathered/transparent does the gpu multiply the transparercies at the edges? or is it still the cpu that handles it?
    I also wanted to know how stressing gradients are on the cpu/gpu, as a bitmap i assume it is treated the same as any other image but as a vector is it more costley on the cpu to have it up on the stage than an image?
    if there is any tips for graphics on mobile devices i would love to hear them.

  • Why is the grain filter so slow?

    The "Add Grain" filter performs so poorly that I'm wondering if it was written in the 90s and never touched again. On a very short composition with a few other adjustment layers, doing a RAM preview takes about 20 seconds. If I enable the adjustment layer that has the grain filter, each frame takes like 3 or 4 seconds and the whole composition takes about 3 minutes to render. This is on an i7 3930k with 32 GB of RAM which flies on anything else. Looking at the task manager, when it's rendering it doesn't even get to 10% CPU, so I'm guessing it's a very poorly coded filter, unless it's using only the GPU, but when anything uses the GPU I can feel its fan revving up, and it's not the case here. This is with CS6 by the way.

    How hard can it be to optimize the same filter to utilize all the CPU power, or at least most of it?
    It would take a complete rewriting of the underlying operation of AE. AE processes a pixel at a time and performs mathematical calculations on each pixel in the frame and combines those calculations with each pixel in the frame of the next layer. It does this a frame at a time.
    If you have a 2K frame with 10 layers then that's 20K of data that needs to be processed. If it's temporal effects that are looking a frame a head and a frame back then you're stuck with 20 K of data calculations a frame at a time added to the additional 20 K of data from the next or last frame. That's not very much work for 16 CPU's to do. It's why AE doesn't run at 100% when some 3D apps can. Totally different math threads.
    The third party solutions for grain that work better still have these limitations, but they have just come up with faster or better ways to make the same calculations that are more efficient.
    Asking AE to use 100% of the processor power and 100% of the memory is like asking a 10 inch water main to stay completely full when you've only got a gallon of water in the system and you can only access it through a 1/2 inch pipe.
    I'm not making excuses, just trying to explain how AE works. Can Adobe make it better? Sure, for the most part they have with every release that I"ve used in the last 20 years. If you have a good knowledge of how AE processes the pixels then it will help you make workflow and production decisions that make your work more efficient and profitable. It's all part of being a pro.
    BTW, Flame, Inferno, all of the other big compositing apps have the same limitation. Only when rendering something more than pixel math does the system start to max out... Try AE with a particle system like Particular and 20,000,000 particles and you'll see CPU and Memory use go up.

  • How does the Filter Operator "Contains" work on the Interactive Reports?

    version 4.0.2.00.07
    Hello,
    I'm creating Tool Tip definitions for the Operators in the Filter on the Interactive Reports. I was looking for a definition for the 'Contains' operator and from what I've found this operator is used to do a text search and it returns a relevance score for every row selected.
    I've also read that in order for that score to be determined that the column(s) need to be indexed with a CONTEXT index. Non of the columns in the tables are indexed with a CONTEXT index, however, when I put a value in the Expression box for a column I get a record returned.
    If I run the same query in PL/SQL Developer like:
    SELECT <column>
    FROM <table>
    WHERE contains(<column>,<search text>,1) > 0;I get an error that the column is not indexed, so how does it work in APEX?
    Thanks,
    Joe

    Joe R wrote:
    I'm creating Tool Tip definitions for the Operators in the Filter on the Interactive Reports. I was looking for a definition for the 'Contains' operator and from what I've found this operator is used to do a text search and it returns a relevance score for every row selected.The IR "Contains" filter is not the same as the Oracle Text <tt>contains</tt> operator.
    The IR "Contains" filter performs a simple string comparison on all of the column values returned. It does not make use of any Oracle Text indexes on the underlying data.
    Despite < a href="https://forums.oracle.com/forums/thread.jspa?messageID=2434666">vague promises of enhancement</a>, no Oracle Text support has yet been included in Interactive Reports.

  • Adjustment Brush Settings and Masks performance slow + jittery

    Are there any tweaks to solve these issues? Takes about 2 seconds to actuate. I know this doesn't seem slow, but when doing hundreds of images it sure puts a bottleneck in the workflow.
    Graduated Filter performance not great but acceptable.
    Windows XP Pro SP3
    ACR 5
    Nvidia GeForce 7600 GS 256 mg memory updated drivers
    Thanks,
    Dennis

    Is this the for the first local adjustment of an image, or only after there are a bunch of existing local adjustments?

  • Filtering performance

    Hi!
    I would like to filter data acquired at 100 Hz with Labview 7.1.
    If I use the default filter box (configuration : 2nd order butterworh filter with a band pass of [5 Hz - 30 Hz] ),
    the filtering process seems to be done at a frequency lower than 100 Hz.
    If I use the IIR module, the VI performance are improved but it does not reach 100 Hz.
    What are the performance of the filtering box?
    Thx

    It is not clear exactly what filter performance you are looking for. If your data is sampled at 100 Hz, then the Nyquist criterion specifies that any signal components above 50 Hz cannot be accurately represented. In fact if there are components above 50 Hz in the signal fed to the data acquisition device, the sampled signal is irretrievably corrupted. Also make sure that your filter knows what the sample rate was. If your data is of type waveform, the timing data is included. If your data is an array of values, you must specify the sample period or frequency. How you do that depends on which filter VI you are using.
    Lynn

  • Reuse_alv_grid_display TITLE problem after refresh

    All,
    I have a alv report using fm reuse_alv_grid_display. While calling initially this fm i am passing the grid tile in I_GRID_TITLE parameter. its displaying in grid, then after user click on the app toolbar button , i am doing some filteration , then coming back to grid the TITLE is missing in display
    Any Info .  below is the code snipet
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
         i_callback_program             = sy-repid
         i_callback_pf_status_set       = 'F_PF_STATUS_SET'
         i_callback_user_command        = gc_user_com
         i_grid_title                   = gv_gtitle "<< passing initially
    then in User_command i am filering some values on the basis of button clicked (Button placed in app toolbar)
    FORM f_user_command USING p_ucomm    LIKE sy-ucomm
                              p_selfield TYPE slis_selfield .
        WHEN '&EXP'.
          perform f_expand.
          p_selfield-refresh = 'X'.  "<<<----- refresh the grid
      code for f_expand
    form f_expand.
        CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'  " Getting current layout
          IMPORTING
            es_layout      = ls_layout
            et_filter      = lt_filter
            es_grid_scroll = ls_grid_scroll
            es_print       = ls_print
          EXCEPTIONS
            OTHERS         = 1.
    " Here doing some filteration. ie append some values to IT_FILTER table for enabling then filter
        perform f_set_fltr_val_exp using lt_filter[].
        ls_layout-colwidth_optimize = gc_x.
        read table gt_sfieldcat into gv_fieldcat
                          with key fieldname = 'REGIO'.
        if sy-subrc eq 0.
          gv_fieldcat-no_out = ' '.
          modify gt_sfieldcat from gv_fieldcat index sy-tabix.
        endif.
    * Set the grid title to include the parameters and the report type
      CONCATENATE text-027 p_bukrs text-028 p_perio
                  text-029 p_gjahr
             INTO gv_gtitle SEPARATED BY space.
        CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_SET'
          EXPORTING
            is_layout      = ls_layout
            it_fieldcat    = gt_sfieldcat
            it_sort        = gt_sort
            it_filter      = lt_filter
            is_grid_scroll = ls_grid_scroll
            is_print       = ls_print
          EXCEPTIONS
            OTHERS         = 0.
    endform.                    " F_expand

    Hi All,
    Thanks for your replies.  I have done all that has been said.  My problem is that when the user double clicks on the ALV without pressing the sort button in the ALV display, the index provided in the user-command subroutine is the same as the index of the record in the internal table.  But, when the user sorts dynamically when the ALV is displayed and then double clicks, the index of the record provided by ALV is different from the index of that record in the internal table.
    For example, when the ALV grid is shown a record is in the 1st row, and when the user double clicks now, the index of this record provided is 1 which is same as the index in the internal table.
    But, after the user sorts in the display, if this record moves to the 5th row, the index provided by ALV will become 5, but, actually the index in the internal table is still 1.
    Hope I have clarified my problem.
    Thanks,
    Sridhar

  • Help: BAPI_SLSTRANSACT_CREATEMULTI

    good morning,
    sorry for my english, i try to explain, well!!!
    I have a little problem with bapi
    "BAPI_SLSTRANSACT_CREATEMULTI".
    I call bapi in the abap program as any other function module, when i execute program, nothing happens: no message, no return code, no document (also with BAPI_TRANSACTION_COMMIT).
    which kind of data is required for table INPUT_FIELDS?
    which is the error? 
    Help!!
    Best regards.
    Ale
    Message was edited by: alessandra la monica

    Hi Ale,
       While I try to get my main programme for you, you can check out the following function module which I have used within the earlier function module that I sent to you. Pay attention to those interface parameters for which you get an error.
    function zbapi_busprocessnd_create.
    ""Local interface:
    *"  IMPORTING
    *"     VALUE(I_SERVICE_OS) TYPE  CRMT_SRV_OSSET_COMT OPTIONAL
    *"  TABLES
    *"      HEADER STRUCTURE  BAPIBUS20001_HEADER_INS
    *"      ITEM STRUCTURE  BAPIBUS20001_ITEM OPTIONAL
    *"      ACTIVITY STRUCTURE  BAPIBUS20001_ACTIVITY_INS OPTIONAL
    *"      SALES STRUCTURE  BAPIBUS20001_SALES OPTIONAL
    *"      PARTNER STRUCTURE  BAPIBUS20001_PARTNER_INS OPTIONAL
    *"      ORGANISATION STRUCTURE  BAPIBUS20001_ORGMAN_INS OPTIONAL
    *"      SHIPPING STRUCTURE  BAPIBUS20001_SHIPPING OPTIONAL
    *"      APPOINTMENT STRUCTURE  BAPIBUS20001_APPOINTMENT_INS OPTIONAL
    *"      TEXT STRUCTURE  BAPIBUS20001_TEXT_INS OPTIONAL
    *"      STATUS STRUCTURE  BAPIBUS20001_STATUS_INS OPTIONAL
    *"      INPUT_FIELDS STRUCTURE  BAPIBUS20001_INPUT_FIELDS OPTIONAL
    *"      CREATED_PROCESS STRUCTURE  BAPIBUS20001_HEADER_INS OPTIONAL
    *"      RETURN STRUCTURE  BAPIRET2 OPTIONAL
    *"      LEAD STRUCTURE  BAPIBUS20001_LEAD OPTIONAL
    *"      OPPORTUNITY STRUCTURE  BAPIBUS20001_OPPORTUNITY OPTIONAL
    *"      PRODUCT STRUCTURE  BAPIBUS20001_PRODUCT OPTIONAL
    *"      SCHEDULELINE STRUCTURE  BAPIBUS20001_SCHEDLIN OPTIONAL
    *"      CUSTOMER_HEAD STRUCTURE  BAPIBUS20001_CUSTOMER_H OPTIONAL
    *"      CUSTOMER_ITEM STRUCTURE  BAPIBUS20001_CUSTOMER_I OPTIONAL
    *"      PRICING STRUCTURE  BAPIBUS20001_PRICING OPTIONAL
    *"      PRICING_ITEM STRUCTURE  BAPIBUS20001_PRICING_I OPTIONAL
    *"      CONDITION_CREATE STRUCTURE  BAPIBUS20001_CONDITION_CREATE
    *"       OPTIONAL
    *"      BILLING STRUCTURE  BAPIBUS20001_BILLING OPTIONAL
    *"      CONFIG_CFG STRUCTURE  BAPIBUS20001_CONFIG_CFG OPTIONAL
    *"      CONFIG_BLB STRUCTURE  BAPIBUS20001_CONFIG_BLB OPTIONAL
    *"      CONFIG_INS STRUCTURE  BAPIBUS20001_CONFIG_INS OPTIONAL
    *"      CONFIG_PRT STRUCTURE  BAPIBUS20001_CONFIG_PRT OPTIONAL
    *"      CONFIG_VAL STRUCTURE  BAPIBUS20001_CONFIG_VAL OPTIONAL
    *"      CONFIG_VK STRUCTURE  BAPIBUS20001_CONFIG_VK OPTIONAL
    *"      CONFIG_REF STRUCTURE  BAPIBUS20001_CONFIG_REF OPTIONAL
    *"      ADDRESS STRUCTURE  BAPIADDR3 OPTIONAL
    *"      BILLPLAN STRUCTURE  BAPIBUS20001_BILLPLAN OPTIONAL
    *"      BILLPLAN_DATE STRUCTURE  BAPIBUS20001_BILLPLAN_DATE OPTIONAL
    *"      EXTENSIONIN STRUCTURE  BAPIPAREX OPTIONAL
    *"      DOCUMENT_FLOW STRUCTURE  BAPIBUS20001_DOC_FLOW_INS OPTIONAL
    *"      BATCH STRUCTURE  BAPIBUS20001_BATCH OPTIONAL
    *"      PRICING_AGR_CRM STRUCTURE  BAPIBUS20001_PRICE_AGR_CRM OPTIONAL
    *"      FINPROD_ITEM STRUCTURE  BAPIBUS20001_FINPROD_ITEM OPTIONAL
    *"      CANCEL STRUCTURE  BAPIBUS20001_CANCEL OPTIONAL
    *"      CANCEL_IR STRUCTURE  BAPIBUS20001_CANCEL_IR OPTIONAL
    *"      PRODUCT_LIST STRUCTURE  BAPIBUS20001_PRODUCT_LIST OPTIONAL
    *"      PRODUCTS STRUCTURE  BAPIBUS20001_PRODUCTS OPTIONAL
    *"      OBJECTS STRUCTURE  BAPIBUS20001_OBJECTS OPTIONAL
    *"      PAYPLAN STRUCTURE  BAPIBUS20001_PAYPLAN OPTIONAL
    *"      PAYPLAN_DATE STRUCTURE  BAPIBUS20001_PAYPLAN_DATE OPTIONAL
    *"      CONFIG_FILTER_CFG STRUCTURE  BAPIBUS20001_CONFIG_FILTER_CFG
    *"       OPTIONAL
    *"      CONFIG_FILTER_INS STRUCTURE  BAPIBUS20001_CONFIG_FILTER_INS
    *"       OPTIONAL
    *"      CONFIG_FILTER_PRT STRUCTURE  BAPIBUS20001_CONFIG_FILTER_PRT
    *"       OPTIONAL
    *"      CONFIG_FILTER_VAL STRUCTURE  BAPIBUS20001_CONFIG_FILTER_VAL
    *"       OPTIONAL
    *"      ACTIVITY_I STRUCTURE  BAPIBUS20001_ACTIVITY_I OPTIONAL
      data: lt_orderadm_h_com  type crmt_orderadm_h_comt,
            ls_orderadm_h_com  like line of lt_orderadm_h_com,
            lt_activity_h_com  type crmt_activity_h_comt,
            lt_activity_i_com  type crmt_activity_i_comt,
            lt_partner_com     type crmt_partner_comt,
            lt_orgman_com      type crmt_orgman_comt,
            lt_appointment_com type crmt_appointment_comt,
            lt_text_com        type crmt_text_comt,
            lt_status_com      type crmt_status_comt,
            lt_service_os_com  type crmt_srv_osset_comt,
            lt_input_fields    type crmt_input_field_tab,
            ls_created_process like line of created_process,
            lt_order_guids     type crmt_object_guid_tab.
      data: lt_opport_h_com    type crmt_opport_h_comt,
            lt_lead_h_com      type crmt_lead_h_comt,
            lt_orderadm_i_com  type crmt_orderadm_i_comt,
            ls_orderadm_i_com  like line of lt_orderadm_i_com,
            lt_product_i_com   type crmt_product_i_comt,
            lt_schedlin_i_com  type crmt_schedlin_i_comt,
            lt_sales_com       type crmt_sales_comt,
            lt_shipping_com    type crmt_shipping_comt,
            lt_customer_h_com  type crmt_customer_h_comt,
            lt_customer_i_com  type crmt_customer_i_comt,
            lt_pricing_com     type crmt_pricing_comt,
            lt_billing_com     type crmt_billing_comt,
            lt_config_com      type crmt_config_comt,
            lt_pricing_i_com   type crmt_pricing_i_comt,
            lt_pridoc_com      type crmt_pridoc_comt,
            lt_billplan_com    type crmt_billplan_comt,
            lt_doc_flow_com    type crmt_doc_flow_comt.
      data: ls_process_settings type  bapibus20001_procsettings.
    dummy table to fill interface of mapping routine
      data: lt_condition_change type table of bapibus20001_condition_change,
            lt_condition_delete type table of bapibus20001_condition_delete.
    // Update
      data: lt_header_save type table of bapibus20001_guid_dis,
            ls_header_save like line of lt_header_save,
            lt_saved_objects type table of bapibus20001_object_id,
            ls_saved_object  like line of lt_saved_objects.
    // Container of BAPI dialog status before this function group starts
      data: lv_bapi_no_dialog type crmt_boolean.
    // BAPI update
      data: lt_batch_com type crmt_batch_comt,
            lt_pricing_agr_crm_com type crmt_price_agreements_crm_comt,
            lt_finprod_i_com type crmt_finprod_i_comt,
            lt_cancel_com type crmt_cancel_comt,
            lt_cancel_ir_com type crmt_cancel_ir_comt,
            lt_ordprp_i_com type crmt_ordprp_i_comt,
            lt_ordprp_i_d_com type crmt_ordprp_i_d_comt,
            lt_ordprp_objl_i_d_com type crmt_ordprp_objl_i_d_comt,
            lt_payplan_com type crmt_payplan_comt,
            lt_payplan_d_com type crmt_payplan_d_comt,
            lt_config_filter_com type crmt_config_filter_comt.
    *---- surpress dialog
      perform set_no_dialog changing lv_bapi_no_dialog.
      perform map_into_orderadm_h_com_ins tables   header
                                                   return
                                          changing lt_orderadm_h_com.
    Item
      perform map_into_orderadm_i_com tables   item
                                               return
                                      changing lt_orderadm_i_com.
      perform map_into_partner_com_ins tables   partner
                                       changing lt_partner_com.
      perform map_into_orgman         tables organisation input_fields
                                      changing lt_orgman_com.
      perform map_into_text_com_ins   tables   text
                                               return
                                      changing lt_text_com.
    perform map_into_service_os_com_ins tables LT_service_os
                                       changing lt_service_os_com.
    opportunity
      perform map_into_opport_h_com   tables   opportunity
                                               return
                                      changing lt_opport_h_com.
    lead
      perform map_into_lead_h_com     tables   lead
                                               return
                                      changing lt_lead_h_com.
    product
      perform map_into_product_i_com  tables   product
                                               return
                                      changing lt_product_i_com.
    scheduleline
      perform map_into_schedlin_i_com tables   scheduleline
                                      changing lt_schedlin_i_com.
    customer_head
      perform map_into_customer_h     tables   customer_head
                                      changing lt_customer_h_com.
    customer_item
      perform map_into_customer_i     tables   customer_item
                                      changing lt_customer_i_com.
    pricing
      perform map_into_pricing        tables   pricing
                                               return
                                      changing lt_pricing_com.
    pricing_item
      perform map_into_pricing_i      tables   pricing_item
                                               return
                                      changing lt_pricing_i_com.
    billing
      perform map_into_billing        tables   billing
                                      changing lt_billing_com.
    config
      perform map_into_config         tables   config_cfg
                                               config_blb
                                               config_ins
                                               config_prt
                                               config_val
                                               config_vk
                                               config_ref
                                               return
                                      changing lt_config_com.
    config filter
      perform map_into_config_filter   tables config_filter_cfg
                                              config_filter_ins
                                              config_filter_prt
                                              config_filter_val
                                              return
                                       changing lt_config_filter_com.
    pricing conditions
      perform map_into_pridoc         tables   condition_create
                                               lt_condition_change
                                               lt_condition_delete
                                               return
                                      changing lt_pridoc_com.
    billplan
      perform map_into_billplan       tables   billplan
                                               billplan_date
                                               return
                                      changing lt_billplan_com.
    appointment
      perform map_into_appointment
              tables return appointment changing lt_appointment_com.
    document flow
      perform map_into_docflow
              tables document_flow changing lt_doc_flow_com.
      inserttable activity     gs_activity_h_com  lt_activity_h_com.
      inserttable status       gs_status_com      lt_status_com.
      inserttable sales        gs_sales_com       lt_sales_com.
      inserttable shipping     gs_shipping_com    lt_shipping_com.
      perform map_into_input_fields tables input_fields
                                  changing lt_input_fields.
    batch
      perform map_into_batch
              tables batch
                   changing lt_batch_com.
    pricing agreements
      perform map_into_pricing_agr_crm
              tables pricing_agr_crm
                     return
                  changing lt_pricing_agr_crm_com.
    finprod item
      perform map_into_finprod_i_com
              tables finprod_item
              changing lt_finprod_i_com.
    cancel
      perform map_into_cancel
              tables cancel
                     cancel_ir
              changing lt_cancel_com
                       lt_cancel_ir_com.
    ordprp ( partner range product )
      perform map_into_ordprp
              tables product_list
                     products
                     objects
              changing lt_ordprp_i_com
                       lt_ordprp_i_d_com
                       lt_ordprp_objl_i_d_com.
    payplan
      perform map_into_payplan
              tables payplan
                     payplan_date
              changing lt_payplan_com
                       lt_payplan_d_com.
    activity i
      perform map_into_activity_i tables activity_i return extensionin
              changing lt_activity_i_com.
      call function 'CRM_ORDER_MAINTAIN'
        exporting
          it_lead_h               = lt_lead_h_com
          it_opport_h             = lt_opport_h_com
          it_activity_h           = lt_activity_h_com
          it_activity_i           = lt_activity_i_com
          it_sales                = lt_sales_com
          it_pricing              = lt_pricing_com
          it_pricing_i            = lt_pricing_i_com
          it_orgman               = lt_orgman_com
          it_shipping             = lt_shipping_com
          it_product_i            = lt_product_i_com
          it_batch                = lt_batch_com
          it_finprod_i            = lt_finprod_i_com
          it_config               = lt_config_com
          it_payplan              = lt_payplan_com
          it_payplan_d            = lt_payplan_d_com
          it_customer_h           = lt_customer_h_com
          it_customer_i           = lt_customer_i_com
          it_appointment          = lt_appointment_com
          it_text                 = lt_text_com
          it_schedlin_i           = lt_schedlin_i_com
          it_partner              = lt_partner_com
        it_service_os           = lt_service_os_com
          it_service_os           = i_service_os
          it_cancel               = lt_cancel_com
          it_cancel_ir            = lt_cancel_ir_com
          it_status               = lt_status_com
          it_billplan             = lt_billplan_com
          it_billing              = lt_billing_com
          it_ordprp_i             = lt_ordprp_i_com
          it_ordprp_i_d           = lt_ordprp_i_d_com
          it_ordprp_objl_i_d      = lt_ordprp_objl_i_d_com
          it_price_agreements_crm = lt_pricing_agr_crm_com
          it_config_filter        = lt_config_filter_com
          it_pridoc               = lt_pridoc_com
        changing
          ct_orderadm_h           = lt_orderadm_h_com
          ct_orderadm_i           = lt_orderadm_i_com
          ct_doc_flow             = lt_doc_flow_com
          ct_input_fields         = lt_input_fields
          cv_log_handle           = gv_loghandle
        exceptions
          error_occurred          = 1
          document_locked         = 2
          no_change_allowed       = 3
          no_authority            = 4
          others                  = 5.
      if sy-subrc ne 0.
        perform set_bapireturn2 tables return
          using gc_msgtype-abort syst-msgid syst-msgno
                syst-msgv1 syst-msgv2 syst-msgv3 syst-msgv4
                space 0 space space space.
      endif.
    *---- get created processes
      loop at lt_orderadm_h_com into ls_orderadm_h_com
        where not guid is initial.
        move-corresponding ls_orderadm_h_com to ls_created_process.
        append ls_created_process to created_process.
        insert ls_orderadm_h_com-guid into table lt_order_guids.
      endloop.
      call function 'BAPI_BUSPROCESSND_PROCSETTINGS'
        importing
          process_settings_out = ls_process_settings.
    *---- get application log
      perform get_appl_log tables return
        using  gv_loghandle ls_process_settings-msglevel lt_order_guids.
    *---- Restore BAPI dialog flag
      perform set_dialog_from_flag using lv_bapi_no_dialog.
    *---- Clear object buffers on event ROLLBACK
      perform busprocessnd_init on rollback.
    *---- Save transaction immediately on demand
      if ls_process_settings-save eq true.
        loop at created_process into ls_created_process.
          ls_header_save-guid = ls_created_process-guid.
          append ls_header_save to lt_header_save.
        endloop.
        call function 'BAPI_BUSPROCESSND_SAVE'
          tables
            objects_to_save = lt_header_save
            saved_objects   = lt_saved_objects
            return          = return.
        loop at lt_saved_objects into ls_saved_object.
          ls_created_process-object_id = ls_saved_object-object_id.
          modify created_process from ls_created_process
                 transporting object_id
                 where guid eq ls_saved_object-guid.
        endloop.
      endif.
    endfunction.
    regards,
    Madhavan

  • Buggy AutoFilter plug-in?

    Hey guys- I'm trying to apply an AutoFilter plug-in to one of my software instruments in Logic (Filter -->AutoFilter) -- I'm using the "Constant Rise Four Bars" preset option, which I really love.
    So here's where my issue is: I'm trying to have the rate at which the Auto-Filter renews itself at every 8 bars...but when I play it through it consistently renews at the 5th bar! Which is totally messing up the climax of my song.
    I've even tried adjusting the rate to every 4 bars, but when I play it through it renews right away at the 2nd bar, THEN renews every 4 bars thereafter.
    This is incredibly frustrating because the rate at which I need the AutoFilter to renew really makes a difference on how my song builds -- I can't have the filtered sound peak too early nor too late. I need it to peak right when I need it to!
    Is anybody else having problems with this AutoFilter plug-in or other similar plug-ins within Logic? Is there a setting I need to adjust within Logic that might make the Filter perform more accurately? Any help would be GREATLY appreciated.
    Thanks!

    To me, what you are describing sounds like an issue with the phase of the LFO.  The LFO is running 8 bars, but if your audio sits on bars 5-12 the LFO will start over when the project reaches bar 9 (ran for 8 bars).  In the context of the audio that's bar 5.  Make sense?  In the above scenario, adjusting the phase to 0 makes it match the audio. If I were to move everything earlier 1 bar (audio starts on 4) the phase would be 45.
    Here's the catch (& possible bug?):  If you are starting the playhead anywhere within the cycle (as if you hadn't adjusted the phase), the LFO value is what it would be if phase was set to 180 until it 'catches' a reset - I think the reset can be either of the potential LFO phases (phase @ 180 or phase @ 45 in this case).  The upshot of this is if you are testing with a cycle, you don't know until the second pass where the phase of the LFO actually is, or you need to start playback a few (trial & error to see) bars back.
    The retrigger & threshold might help dial things out, but I don't know about that.
    worst case you can turn off the LFO cutoff mod and just automate the cutoff by hand.

  • Question about the "goback" opterations in ALV GRID control.

    Hi everyone,
      I have a little situation here:
        in my ALV ,I deactive some of the standard toolbar functions  and  add one button of mine
    on the toolbar.  I leave 3 standard toolbar functions: insert a row ,delete a row and  go back.
    after I used standard toolbar functions to insert/delete a row, I can use the function "go back" and
    It really goes back to the previous status. But after I used my own button(the function is insert a
    row too) to insert a row, I can never go back to the previous status by pressing the button "go back".
    I want to know why and how can I make my own button able to go back.
    thanks for your help.

    see example
    Button  > : displays the next N records                            *
    Button  < : displays the previous N records                       *
    Button I< : displays the first page                                     *
    Button >I : displays the last page                                      *
    When the buttons Sort up, sort down, Filter, Delete Filter are      *
    pressed, N record are still displayed                  
    FORM f_read_data USING u_ucomm TYPE syucomm.
      STATICS :
        l_1   TYPE sytabix,
        l_2   TYPE sytabix.
      DATA l_max TYPE sytabix.             " Internal table size
      DESCRIBE TABLE gt_mara_ftr LINES l_max.
      CASE u_ucomm.
        WHEN c_first_page.                 " 1st page
          l_1 = 1.
        WHEN c_prev_page.                  " Previous page
          SUBTRACT p_max FROM l_1.
          IF l_1 < 1.
            l_1 = 1.
          ENDIF.
        WHEN c_next_page.                  " Next page
          IF l_1 IS INITIAL.
            l_1 = 1.
          ELSE.
            ADD p_max TO l_1.
          ENDIF.
          IF l_1 > l_max.
            l_1 = l_max.
          ENDIF.
        WHEN c_last_page.                  " Last page
          l_1 = l_max - p_max + 1.
          IF l_1 < 1.
            l_1 = 1.
          ENDIF.
      ENDCASE.
      l_2 = l_1 + p_max - 1.
      IF l_2 > l_max.
        l_2 = l_max.
      ENDIF.
      REFRESH gt_mara.
      IF l_max > 0.
        APPEND LINES OF gt_mara_ftr FROM l_1
                                      TO l_2
                                      TO gt_mara.
      ENDIF.
    ENDFORM.                               " F_READ_DATA
    FORM user_command USING u_ucomm     TYPE syucomm
                            us_selfield TYPE slis_selfield.     "#EC CALLED
      CASE u_ucomm.
        WHEN c_first_page OR c_next_page OR
        c_prev_page OR c_last_page.        " Page F, P, N, L
          PERFORM f_read_data USING u_ucomm.             " Update gt_mara
          us_selfield-refresh = 'X'.
        WHEN '&OUP' OR '&ODN'.             " Sort
          PERFORM f_sort_big_table.
          PERFORM f_read_data USING c_first_page.
          us_selfield-refresh = 'X'.
        WHEN '&ILT'.                       " Filter
          PERFORM f_filter_data.
          PERFORM f_read_data USING c_first_page.
          us_selfield-refresh = 'X'.
        WHEN '&ILD'.                       " Delete filter
          gt_mara_ftr[] = gt_mara_all[].
          PERFORM f_read_data USING c_first_page.
          us_selfield-refresh = 'X'.
      ENDCASE.
    ENDFORM.                               " USER_COMMAND

  • Printing to Xerox 4150 fails

    Printing to th XEROX workcenter is not possible due tot "filter" prblems.
    The fliter fails.
    Couls anyone give me a clue on how tot solve the problem.
    My Xerox drivers are updated already.
    Kind regards!

    Looking at the log, the Xerox rep might be correct about permissions. As the log shows the psto7750ps is a filter located in the Mac HD/Library/Printers/Xerox/PDEs folder and for this managed account is failing. So check the permissions on this PDEs folder and the file to ensure all users have Read & Write. Even if Everyone is listed with R/W, it may help to add the managed account to the list.
    As a test you could create another queue to this AD printer but set the Print Using to Generic PostScript. This printer will not use the psto7750ps filter so if it works then you know it has something to do with this filter. I would then print the same file from the local account and check that this filter is also being called and is not erroring.
    Note that depending on what function this filter performs it may not always be called unless something special is selected in the print menu. This would usually be the case for plugins located in the PDE folder (which stands for Print Dialog Extension) but since this is a filter (but in the PDE folder?) then it may be called every time its queue is used.
    PaHu

  • Lowpass filtering an array of waveforms with different cutoff frequencie​s

    I'm trying to take an array of waveforms and have seperate filter settings for each individual waveform. For example, I want to have a 2 hz cutoff frequency on my thermocouple inputs and a 100 hz cutoff frequency on a strain gage input.
    When I try to accomplish this using the Butterworth filter (as shown in the image) I get weird results. The VI seems to be setup to only handle 1 waveform at a time. If I set the init/cont to F for init, the beginning of each waveform segment is reset to 0 which wrecks the data files. If I set the init/cont to "T" for continuous, the data is completely wrecked because the waveforms are interferring with each other.  Clearly this VI is not setup for muliple instances (for use in a for loop).
    There are the Waveform filters, but I seem to only be able to use 1 cutoff frequency for the entire set of waveforms.
    In the subVI image below, I input an array of waveforms into a for loop with the settings collection for each channel (element in the waveform array). I pass the cutoff frequency to the butterworth filter with the Y data array from the segment of the waveform.  Waveform data is supplied continuously (I need a live data filter).
    Thanks for your input.
    Attachments:
    Filter applied to multiple waveforms.png ‏17 KB

    You are correct (about the true/false on the cont/init input).  Not sure I follow what the help is saying to do...
    Is there anyway to verify the number of instanced "Filter Duplicates" are running? I'm still having a lot of issues with my implimentation and I'm wondering if I'm not initializing everything correctly.  I've even added a button that should push a new re-initialization.  I'm trying to have an interface that allows the user to turn off and on the filter while data is be aquired.  Here is some of my code that I'm using to try and accomplish that, but after I've enabled the filter on multiple waveforms and hit my "re-initialize" button I still get bizarre data artifacts (like spikes) that would not be indicative of data on the other side of a low pass filter.  Thanks for any additional feedback.
    I've modified your Filter Duplicate to have an "Enable" feature so that the waveforms that I do not want any filtering of are just passed through.
    I've tried to re-create the functionality of your Test multi-filter VI Server, but with the added boolean option to not have the filter performed:
    So when "True" is on init/cont input the VI is re-open by VI server and the true signal propagates to the Filter Duplicate Asynchronous call.  Here is a snippit from my main window call:
    Lastly, here is the noisy data I'm dealing with:
    Here is the data after I apply a 5Hz filter to each one:
    Clearly data from one is being imposed on the other.  Hitting my "re-initialize" button to send a "true" signal through doesn't fix it.  How can I verify that my filters are working independently as desired?
    Thanks!

Maybe you are looking for