Selective repaint() and Graphics2D transform?

Hi all,
I am programming a graphic 2D simulation consisting of moving circles in the plane. I am trying to go for efficient repaint() invocations by repainting only those areas that need refreshing, i.e., the previous and new location (bounding box, to be exact) of each circle. This is similar to what is demonstrated somewhere in the Java Tutorial, where a small red square is dragged by the mouse and repainted efficiently. So far so good.
However, I would like to support transforming the view, to enable zooming and panning (as well as auto-fitting) in the simulation window (or panel or whatever). Transforming is typically also straightforward - just concatenate the desired transform onto the Graphics2D object in my paintComponent() override and that's it.
The typical flow in Java is to issue a repaint() somewhere in the application code (e.g., mouse listener, or in my case - when updating the simulation, panning, or zooming). This request is later addressed by a Swing thread in a call to paintComponent() which also passes the Graphics2D object on which the actual drawing and transforming is performed.
Now to the thing that puzzles me: What coordinates should I pass to repaint()? At that moment I do not possess the Graphics2D object, so I don't know the transform from user coordinates (in the graphics context) to the component's coordinates. Do I have to somehow query the current transform assigned to the control, add my pan/zoom transform to it, and then manually transform the coordinates of my circles before feeding them to my repaint() calls? This feels inelegant and inefficient to me: Basically all transformation will be calculated twice: Once by me for the repaint calls, and again by paintComponent() when actually rendering the circles. Perhaps I could save the redundant calculations by keeping
the manually transformed coordinates (or transformed copies of my Shapes), and then draw them in paintComponent() without applying the transform to the Graphics2D object.
These solutions don't look right to me. Does anybody have a better idea? It seems to me like a fairly common scenario: Efficient painting of a 2D animation supporting view transformation (e.g. zoom/pan). There must already exist a known "correct" way to do this!
Hopefully...
Noam

You can drag the frame sides/bottom to see what happens to the clip and transform of the graphics context of the white panel. The clip seems to be in white panel coordinates and the transform translation values are relative to the parent component.
Each parent component passes its graphics context on to its children to use to paint themselves.
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class GraphicsTest extends JPanel {
    public GraphicsTest() {
        setBackground(Color.white);
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        inspect(g2);
        Shape clip = g2.getClip();
        Rectangle r = clip.getBounds();
        g2.setPaint(Color.red);
        g2.drawRect(r.x, r.y, r.width-1, r.height-1);
    public Dimension getPreferredSize() {
        return new Dimension(360, 300);
    private void inspect(Graphics2D g2) {
        Shape clip = g2.getClip();
        Rectangle r = clip.getBounds();
        System.out.printf("clip = [%d, %d, %d, %d]%n",
                           r.x, r.y, r.width, r.height);
        //    [  m00  m01  m02  ]
        //    [  m10  m11  m12  ]
        //    [   0    0    1   ]
        AffineTransform at = g2.getTransform();
        double[] matrix = new double[6];
        at.getMatrix(matrix);  // { m00 m10 m01 m11 m02 m12 }
        int[] loRow = { 0, 0, 1 };
        for(int i = 0; i < 2; i++) {
            System.out.print("[ ");
            for(int j = i; j < matrix.length; j += 2) {
                System.out.printf("%5.1f ", matrix[j]);
            System.out.print("]\n");
        System.out.print("[ ");
        for(int i = 0; i < loRow.length; i++) {
            System.out.printf("%3d   ", loRow);
System.out.print("]\n");
System.out.println("---------------------");
private JScrollPane getContent() {
// Show the graphic component at a smaller size
// so we can investigate space issues.
JPanel panel = new JPanel(new GridBagLayout());
panel.add(this, new GridBagConstraints());
return new JScrollPane(panel);
public static void main(String[] args) {
GraphicsTest test = new GraphicsTest();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(test.getContent());
f.setSize(500,500);
f.setLocation(100,100);
f.setVisible(true);

Similar Messages

  • In oracle rac, If user query a select query and in processing data is fetched but in the duration of fetching the particular node is evicted then how failover to another node internally?

    In oracle rac, If user query a select query and in processing data is fetched but in the duration of fetching the particular node is evicted then how failover to another node internally?

    The query is re-issued as a flashback query and the client process can continue to fetch from the cursor. This is described in the Net Services Administrators Guide, the section on Transparent Application Failover.

  • Diff b/w select endselect and select into table............

    what is the difference b/w
    Select
    Endselect
    and select into table....
    Akshitha..

    Hi,
      When ever u want to append data into the workarea then use select ... endselect. When u r appending data into the internal table then use select. Also when u use select single then also use only select.
    Eg: Using only Select
    data : begin of itab occurs 0,
    lifnr like lfa1-lifnr,
    end of itab.
    select single lifnr from lfa1 into itab.
    data itab like lfa1 occurs 0 with header line.
    select * from lfa1 into table itab.
    Eg: Using Select .. endselect.
    data : itab like lfa1 occurs 0,
    wa like lfa1.
    select * from lfa1 into wa.
    append wa to itab.
    endselect.
    Regards

  • Select all and deselect all in table control

    Hi experts,
        I want to make the select all and deselect all options in my table control.
    But i can't able to do that one. Kindly suggest me how to do that one.
    one more thing, if i select some rows in the table control, and press save it should be saved in some other table. how can i implement that one.
    Waiting for ur reply.
    Regards...
    Arun.

    Hi Arun,
    In the context node that you bind to the table, set the cardinality as 0..n and selection as 0..n. In the UI element Table, set the property selectionMode as 'multi'. Then a toggle button for select/deselect all will appear automatically in your table. You can see it in the top left corner.
    For your second question, after selecting the elemets and pressing 'save', in your event handler, do a get_selected_elements( ) on your node. This will return you a set of context elements. Loop through each element and do a get_static_attributes to get the rows. Then you can append these rows to another internal table and bind it to the context. Bind your second table to this node. If the two tables are in different views, the context nodes need to be present in the component controller and mapped to the views.
    Hope this helps.
    Regards
    Nithya

  • Could you please tell me why as a Brit resident in Japan therefore having a billing address that is Japanese is forced to only get service from the Japanese online store? Is there not some way of allowing me to select movies and music to buy and download

    Could you please tell me why as a Brit resident in Japan therefore having a billing address that is Japanese is forced to only get service from the Japanese online store? Is there not some way of allowing me to select movies and music to buy and download from other stores. Why do am i forced to try to nread Japanese when I have selected English as my language. The price for Downloads is no different and even if it was I am happy to pay. This also applies to Movie rental which is crazy and extremely restrictive. I a supposed GLOBAL community why does Apple do this.

    You can buy ONLY from the itunes store of your country of residence (As proven by valid billing address of credit card) and ONLY while inside the borders of that country.
    These are the terms of the itunes store.

  • After download and installation of PS PE12 I have problems starting the programm. After selecting video and new project nothing happens, only the colorbar below new project is showing

    New computer.
    After download and installation of PS PE12
    I have problems starting the programm, double clicking on the icon.
    After selecting video and new project nothing happens, only the colorbar below new project is showing, nothing happens.
    (expected was to activate the program and the sarting the PE12)
    PSE12 runs fine
    System:
    WIN8.1 / i7 /16GB RAM

    New computer.
    After download and installation of PS PE12
    I have problems starting the programm, double clicking on the icon.
    After selecting video and new project nothing happens, only the colorbar below new project is showing, nothing happens.
    (expected was to activate the program and the sarting the PE12)
    PSE12 runs fine
    System:
    WIN8.1 / i7 /16GB RAM

  • Bind Variable in SELECT statement and get the value  in PL/SQL block

    Hi All,
    I would like  pass bind variable in SELECT statement and get the value of the column in Dynamic SQL
    Please seee below
    I want to get the below value
    Expected result:
    select  distinct empno ,pr.dept   from emp pr, dept ps where   ps.dept like '%IT'  and pr.empno =100
    100, HR
    select  distinct ename ,pr.dept   from emp pr, dept ps where   ps.dept like '%IT'  and pr.empno =100
    TEST, HR
    select  distinct loc ,pr.dept   from emp pr, dept ps where   ps.dept like '%IT'  and pr.empno =100
    NYC, HR
    Using the below block I am getting column names only not the value of the column. I need to pass that value(TEST,NYC..) into l_col_val variable
    Please suggest
    ----- TABLE LIST
    CREATE TABLE EMP(
    EMPNO NUMBER,
    ENAME VARCHAR2(255),
    DEPT VARCHAR2(255),
    LOC    VARCHAR2(255)
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (100,'TEST','HR','NYC');
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (200,'TEST1','IT','NYC');
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (300,'TEST2','MR','NYC');
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (400,'TEST3','HR','DTR');
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (500,'TEST4','HR','DAL');
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (600,'TEST5','IT','ATL');
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (700,'TEST6','IT','BOS');
    INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (800,'TEST7','HR','NYC');
    COMMIT;
    CREATE TABLE COLUMNAMES(
    COLUMNAME VARCHAR2(255)
    INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('EMPNO');
    INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('ENAME');
    INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('DEPT');
    INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('LOC');
    COMMIT;
    CREATE TABLE DEPT(
    DEPT VARCHAR2(255),
    DNAME VARCHAR2(255)
    INSERT INTO DEPT(DEPT,DNAME) VALUES ('IT','INFORMATION TECH');
    INSERT INTO DEPT(DEPT,DNAME) VALUES ('HR','HUMAN RESOURCE');
    INSERT INTO DEPT(DEPT,DNAME) VALUES ('MR','MARKETING');
    INSERT INTO DEPT(DEPT,DNAME) VALUES ('IT','INFORMATION TECH');
    COMMIT;
    PL/SQL BLOCK
    DECLARE
      TYPE EMPCurTyp  IS REF CURSOR;
      v_EMP_cursor    EMPCurTyp;
      l_col_val           EMP.ENAME%type;
      l_ENAME_val       EMP.ENAME%type;
    l_col_ddl varchar2(4000);
    l_col_name varchar2(60);
    l_tab_name varchar2(60);
    l_empno number ;
    b_l_col_name VARCHAR2(255);
    b_l_empno NUMBER;
    begin
    for rec00 in (
    select EMPNO aa from  EMP
    loop
    l_empno := rec00.aa;
    for rec in (select COLUMNAME as column_name  from  columnames
    loop
    l_col_name := rec.column_name;
    begin
      l_col_val :=null;
       l_col_ddl := 'select  distinct :b_l_col_name ,pr.dept ' ||'  from emp pr, dept ps where   ps.dept like ''%IT'' '||' and pr.empno =:b_l_empno';
       dbms_output.put_line('DDL ...'||l_col_ddl);
       OPEN v_EMP_cursor FOR l_col_ddl USING l_col_name, l_empno;
    LOOP
        l_col_val :=null;
        FETCH v_EMP_cursor INTO l_col_val,l_ename_val;
        EXIT WHEN v_EMP_cursor%NOTFOUND;
          dbms_output.put_line('l_col_name='||l_col_name ||'  empno ='||l_empno);
       END LOOP;
    CLOSE v_EMP_cursor;
    END;
    END LOOP;
    END LOOP;
    END;

    user1758353 wrote:
    Thanks Billy, Would you be able to suggest any other faster method to load the data into table. Thanks,
    As Mark responded - it all depends on the actual data to load, structure and source/origin. On my busiest database, I am loading on average 30,000 rows every second from data in external files.
    However, the data structures are just that - structured. Logical.
    Having a data structure with 100's of fields (columns in a SQL table), raise all kinds of questions about how sane that structure is, and what impact it will have on a physical data model implementation.
    There is a gross misunderstanding by many when it comes to performance and scalability. The prime factor that determines performance is not how well you code, what tools/language you use, the h/w your c ode runs on, or anything like that. The prime factor that determines perform is the design of the data model - as it determines the complexity/ease to use the data model, and the amount of I/O (the slowest of all db operations) needed to effectively use the data model.

  • Report with select list and link to call another report

    Hi,
    I am trying to do 2 reports (REPORT1 and REPORT2).
    The first is a summary report (REPORT1).
    This report will display sales figures for the year. Now, I need to have a select list in the result set that will have 2 options, depending on which option is chosen, I want to call REPORT2 with the select list as a parameter. How can I do this ?
    Let me try to explain what I did.
    I created REPORT1 on Page 100
    SELECT YEAR, sum(YTD_SALES), APEX_ITEM.SELECT_LIST(1,'DEPARTMENT','Department;DEPARTMENT,Division;DIVISION') Drilldown FROM SALES_ANALYSIS WHERE YEAR > 2000
    GROUP BY YEAR ORDER BY YEAR
    I created 2 hidden items namely P100_YEAR and P100_DRILLDOWN
    I also made the column YEAR as a link and specified both P100_YEAR and P100_DRILLDOWN as parameters to be passed.
    Next, I created REPORT2
    SELECT YEAR, DECODE(:P100_DRILLDOWN, 'Department', department, 'Division', Division) dept_div, sum(YTD_SALES) ytd_sales
    FROM SALES_ANALYSIS
    WHERE YEAR = :P100_YEAR
    When I run Report 1, it's fine, when I choose either Department or Division from the Select List and click on the link to call Report 2, report 2 is displayed, but the value being passed for P100_DRILLDOWN is not correct and as a result, I am unable to get correct results for Report 2
    Am I missing something ? Are there any alternate ways to do what I'm doing ?
    Thanks,
    Ashok

    Hi Ashok,
    The link definition will not know the value selected in the list as it is constructed only when the page is being rendered. You would need to create some javascript to handle this. I've done that here: [http://apex.oracle.com/pls/otn/f?p=267:182]
    The link on the EMPNO column has been defined in the HTML Expression setting for the column instead of the Link section. The HTML Expression that I have used is:
    &lt;a href="#" onclick="javascript:doDrilldown('#EMPNO#',this);"&gt;#EMPNO#&lt;/a&gt;And, in the page's HTML Header setting, I have added in:
    &lt;script type="text/javascript"&gt;
    function doDrilldown(empno,group)
    var g;
    var p = group.parentNode;
    while (p.tagName != "TR")
      p = p.parentNode;
    var x = p.getElementsByTagName("SELECT");
    if (x.length &gt; 0)
      g = x[0].value;
    var url = "f?p=&APP_ID.:183:&SESSION.::::P183_EMPNO,P183_GROUP:" + empno + "," + g;
    document.location.href = url;
    &lt;/script&gt;When a link is clicked, the doDrilldown function is called passing in the EMPNO value and the "this" object (which identifies the object triggering the call). The function starts from that object and goes up in the HTML tag tree to the nearest TR tag (the row tag that the link is on) and then finds the first SELECT list item on the row and gets its value. It then constructs a URL using this and the EMPNO value and performs a redirect to the second page (page 183 in this example).
    Andy

  • Need to have pop up window in selection screen and capture the user action.

    Hello Friends,
                         I have a requirement, that need to show a pop up window after execution, and to get the action from user using a Push button.
    I create a selection screen and a sub screen as window.
    After user execute from the selection screen, I am popping up this window.
    Window contains some input values to be entered and push button to identify the user action.
    I try to capture the user action using sy-ucomm, but it does not hold any value when user press the button.
    How to overcome this issue.
    Here is the definition of the window.
    Pop Up Window for getting values
    SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW TITLE title .
    PARAMETER : p_vdate LIKE t9aa01-validfrom,
                p_dcggt LIKE t9aa01-hkont,
                p_dcgst1 LIKE t9aa01-hkont,
                p_dcgst2 LIKE t9aa01-hkont,
                p_na LIKE t9aa01-hkont.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 20.
    SELECTION-SCREEN PUSHBUTTON 2(10) text-001 USER-COMMAND SVE.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF SCREEN 500.
    Cheers,
    Senthil
    Edited by: Senthil on Jan 7, 2008 11:03 AM

    Hi,
    Try using the below code.
           data : w_var type string.
           CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
             EXPORTING
              DEFAULTOPTION        = 'Y'
               textline1            = 'test '
             TEXTLINE2            = ' '
               titel                = 'check'
             START_COLUMN         = 25
             START_ROW            = 6
             CANCEL_DISPLAY       = 'X'
            IMPORTING
              ANSWER               = w_var.
                     if w_var = 'J'.
                     else.
                     endif.
    Comments : J indicates Yes and N indicates No
    Regards,
    Jeswanth

  • HT4972 I have a second generation iPad and can't clear the items in my update list. Is there a way to do this. I select them and it just says iS05 required

    I have a second generation iPad and can't clear the items in my update list. Is there a way to do this. I select them and it just says iS05 required

    There is no way to clear the update notifications - unless you delete the apps completely from the iPad and from iTunes on your computer.
    Obviously you want to continue to use the apps, so you either have to update the iPad and get the newer versions - or just ignore the update notifications. They will not go away.

  • How do I scroll down to see list of selected audiobooks and albums to sync with my iPhone in iTunes 11?

    I am running Windows 7 and using iTunes 11. I have an iPhone 4.
    In the past I have been able to sync selected albums and audiobooks with my iPhone using iTunes with no problems, but today when I tried to add an audiobook from my computer to my iPhone, I could not see it (or the audiobooks previously added to my iPhone) listed as a choice under Books --> Sync Audiiobooks --> Selected Audiobooks.
    I connected my iPhone to my laptop via USB. iTunes 11 comes up. My iPhone syncs automatically.
    I click the iPhone device in the sidebar and the list of choices (Summary, Info, Apps, Tones, Music, Movies, TV Shows, Books, and Photos) appears across the top of the main part of iTunes to the right of the sidebar.
    When I click on Music from this list of choices, I have selected Sync Music and Selected playlists, artists, albums, and genres.
    Under this I see my list of Playlists and the ones I have checked. I also see my list of Artists and the ones I have checked.
    Under these two items, I see the words Genres and Albums, but I cannot scroll down to see them (not even to see the ones I have previously selected to be synched with my iPhone).
    When I click on Books I see that Sync Audiobooks is checked and Selected audiobooks is selected, but I cannot see the list of audiobooks from which I can choose the ones I want to add to my iPhone and I cannot see the audiobooks that I previously selected and that are currently on my iPhone. I see the words Audiobooks and Parts, but I cannot scroll below these words to see the list of audiobooks that are on my laptop.
    Any help in resolving these issues would be greatly appreciated.
    Thanks.
    Eddie

    http://www.technipages.com/iphone-ipad-ipod-touch-enable-disable-shuffle-mode.ht ml
    I think you've tried that though.
    I had similar issue a few months ago - I think it didn't work unless I did it when the music was actually playing in the now playing section.

  • I'm having problems (1)selecting onscreen text, (2) having problems resizing menu boxes and selecting menues with the cursor. I'm not able to select menus and move them. I'm not sure how to correct this.

    I'm having problems (1) selecting onscreen text, (2) resizing menu boxes and selecting menues with the cursor. I'm not able to select menus and move them. I'm not sure how to correct this.

    1) This is because of software version 1.1. See this
    thread for some options as to how to go back to 1.0,
    which will correct the problem...
    http://discussions.apple.com/thread.jspa?threadID=3754
    59&tstart=0
    2) This tends to happen after videos. Give the iPod a
    minute or two to readjust. It should now be more
    accurate.
    3) This?
    iPod shows a folder icon with exclamation
    point
    4) Restore the iPod
    5) Try these...
    iPod Only Shows An Apple Logo and Will Not Start
    Up
    iPod Only Shows An Apple Logo
    I think 3,4, and 5 are related. Try the options I
    posted for each one.
    btabz
    I just noticed that one of the restore methods you posted was to put it into Disk Mode First rather than just use the resstore straight off, I Have tried that and seems to have solved the problem, If it has thank you. previously I have only tried just restoring it skipping this extra step. Hope my iPod stays healthy, if it doesnt its a warrenty job me thinks any way thanks again

  • I am getting the message "the disc you inserted was not readable by this computer" when I plug in a verizon air card into my macbook air.  It also does not show up as a device on my desktop.  However, I select "ignore" and am still able to connect.

    Whenever I insert my verizon air card into my MBA, I get the message "the disc you inserted was not readable by the computer", with the option to either ignore or eject.  I select ignore, and am able to connect to the internet, but don't know why this happens.  Also, the air card is not showing up as a peripheral on my desk top.  Any ideas why this might be happening and how to fix it?

    When I unplugged (power) and plugged in again to restart it, yes, I heard it spin and click. Not since then though. I assumed it went to sleep and since the computers don't recognize it they won't wake it.
    If I need to replace it can the data on it be recovered?

  • When playing music on my iPhone 4 using earphones when out for a run, I select shuffle and only 3 or 4 songs play then the music stops as if I have set only 3 songs to play. How do I correct this??

    When I am out for a run using earphone and a running APP I set my iphone 4 to shuffle songs but suddenly only 3-4 or 5-6 songs play and then they stop as if I set something to only play a certain number of songs from my playlist, its really irritating as I have to stop and press shuffle again, it happens with all my playlists and never mid song. This is a sudden issue as before I would just select shuffle and run and the music kept playing until I stopped it. Have I set something in error?? have looked at settings in General and in music and I am not sure what to do? any ideas??

    Just realised this happens without earphones and without using the running app. My iphone will only play 2 songs when I select shuffle in any playlist, driving me mad!

  • Select list and date picker on one line  -  is this a bug?

    I'm using: Application Express 3.2.0.00.27
    Is the following a bug? If so, how do I get it reported so it will be fixed in a future release of APEX? If not, how do I do it so it ends up the way I want?
    1. create blank page
    2. create html region
    3. create "select list" item (Begin On New Line - Yes, ...Field - Yes, ColSpan - 1, Row Span - 1)
    4. create date picker item (Begin On New Line - No, ...Field - No, ColSpan - 1, Row Span - 1)
    There will be other items displayed in more columns above what I just had you create above. I want the select list and the date picker to display next to each other on same line, so I placed date picker item on same line in same field as select list item.
    HOWEVER... the date picker ends up displayed under the select list item (kind of), instead of next to it on the same line.
    Here's what I get:
    ...................... [Select List Field] Date Picker Label
    Select List Label
    ...................... [Date Picker Field]
    Here's what I want:
    Select List Label [Select List Field] Date Picker Label [Date Picker Field]
    Thanks,
    Steve
    Edited by: sskelton on Aug 3, 2009 11:01 AM
    Edited by: sskelton on Aug 3, 2009 11:02 AM

    Hi Steve,
    I'm not sure if it's the official way, but you could add a post here: Enhancement Request Thread : Post 3.1 - that's what I've been doing :D
    Andy

Maybe you are looking for

  • Usertable error after adding a udf

    I have a UI add-on that assigns values ​​to a UDT by usertable object of the DI API, the problem is generated after adding a UDF from SAP menu and try to assign a value from the DI. The error is Invalida Field Name My question is, is necessary to wai

  • Changes in a Purchase Order?

    Hi Experts, Could anyone tell me as to how I can get the texts in T166T to appear on my form? When I check the "Header" and "item" changes in the transaction ME23N, I am able to figure out that CDHDR and CDPOS maintains the changes. But I want the ch

  • Script for effects in PE6, thumbnail do not appear in pannel

    Hello.  In the past, I had create script in Photoshop and copy it to Elements 6, without any problem. I was making another script, and now I am not able to see the thumbnail in the pannel of the effects, even if I close and open PE6, close and open m

  • Asynchronous request-response feature

    The asynchronous request-response feature works only with HTTP,we can't use it with the HTTPS or JMS transport. why??

  • Tables for creating a new sales order with reference to another

    Hi Experts   In ABAP, how can identify that  I'm creating a new sales order with reference to another in the userexit read_document??, In which tables is this information??. Thanks Regards