[ABAP-OO] Returning vs Changing Method

Hi Experts,
we have many way to change a variable value.
for example:
me->modif_value( CHANGING field = lv_field ).
or
lv_field = me->modif_value( lv_field ). "// returning
I would like to know what is the best way to use CHANGING or RETURNING and in which case we have to use it ?
Thank your very much.
Rachid.

Hello Rachid,
newer Netweaver releases allow both a RECEIVING and CHANGING parameters. You can also introduce a parameter object and pass it as an IMPORTING parameter.
In your case I would propose to pass a pointer to your table TYPE REF TO Table_Type so you can change the table entries in the method. You could return the changed table as a value parameter without impact if it was never changed later  (check table sharing in
ABAP Keyword Documentation →  ABAP - Reference →  Processing Internal Data →  Internal Tables
As Matthew once said: There's the right way of doing things (my way)
regards,
JNN

Similar Messages

  • Returning Internal Table as Returning Parameter of Method (by Value).

    When you return an internal table as the returning parameter of a method, it is passed by value.  I understand the concept of passing by value vs. passing by reference, but exactly what this means in this case is ambiguous.
    1)  It could mean that the entire table, including data, is copied from the local table in the method into the parameter provided by the calling code.
    2)  Alternatively, it could mean that only the pointer to the table is passed by value and the data is not literally copied from one place in memory to another.  This would <b>not</b> be the same as passing by reference.  For instance, I believe this is how object references are passed by value.
    I want to know how it works, so that I know if there is an efficiency problem with returning a huge table.  The returning parameter is wonderful for getter methods, and I prefer to use it over exporting parameters, but I have some concern about passing tables as returning parameters since I don't know how this works.
    Can anyone either explain this, or at least make it clear to me whether or not there is an efficiency issue?
    Thanks, in advance,
    -Chris

    Thanks to those who tried to help me with this question, but I finally had to just figure it out on my own.  I just realized today that there is a way to find the answer using the debugger's <i>Go To->Status Display->Memory Use</i> option.  This shows how variables are stored in memory.
    The answer:
    First of all, if you set one internal table equal to another like:
      i_tab1 = i_tab2.
    or like:
      i_tab1[] = i_tab2[].
    both will simply set <i>i_tab1</i> to point to the same memory that <i>i_tab2</i> is using.  It does <b>not</b> make a copy.  Now, if you attempt to change <i>i_tab1</i>, with an <i>append</i> statement for instance, a copy of <i>i_tab2</i>'s memory is made <b>then</b>!  The requested change to <i>i_tab1</i> is then applied to the copied data.  <b>AHA!!!</b>  This means that even if you think you are copying a table, you are not really doing it until it becomes necessary due to a divergence in values.
    I specifically tested a returning parameter to see how memory is handled, and it is basically just like an '<i>=</i>' statment.  No copy of the data is performed at first.  The memory that is allocated for the local variable in the method is simply pointed to by the variable used in the calling code to recieve that value.
    What if you then change the value in the calling code after the method has finished executing?  The answer depends on the situation.  If the value that you returned from the method is still being pointed to by another variable somewhere, then a copy is made when you attempt to change the returned table in the calling code, but if there is no longer another variable pointing to this memory, you can change the table in the calling program all you want without causing a copy in memory.
    For instance, if you have a getter method that returns the value of an attribute, at first no copy will be made, but when you try to change the table in your calling code, a copy will be made then.  However, if you just fill a local table in your getter method and return that table, there will never be a copy made, because the local variable that originally pointed to that memory expired when the method completed.  That means that after the method completes, the only variable pointing to the allocated memory is the one in the calling code that recieved the returning value.
    This is fantastic!!  This behaives in a way that seems to provide maximum efficiency in most cases.  Also, the table copies are <b>never</b> a waste, since they only happen upon changing of one of the table variables that point to the common memory, and in this case you would <b>want</b> to make a copy to avoid corrupting the other variable.
    Also, even if you did return your table as an exporting parameter by reference, you would not gain any significant efficiency.  There would still be no table copy if you don't change the returned table.  Also, if you did change the returned table, you <b>would</b> still produce a table copy if there was another variable, like an attribute, still pointing to the memory that you set your exporting paramter from before.
    The only situation that I can see resulting in a needless efficiency problem is if someone used a getter method to return the value of a table attribute, then changed the returned table in the calling program, and then used a setter method to set the whole table attribute equal to the changed table.  This would be a waste, so maybe this should be accomplished in another way.
    In conclusion, there is essentially no reason to hesitate returning a whole internal table as a returning parameter from a method call, even though it is pass by value.
    Kudos to the ABAP development team for their good design!

  • Problem with image returned from getGeneratedMapImage method

    I'm a newbie as far as map viewer and Java 2D goes....
    My problem is the java.awt.Image returned from the getGeneratedMapImage method of the MapViewer API. The image format is set to FORMAT_RAW_COMPRESSED. The image returned is of poor quality with colors not being correct and lines missing. I'm painting the Image returned from this method onto my own custom JComponent by overriding the paint() method...
    public void paint( Graphics g )
    Image image = map.getGeneratedMapImage();
    if ( image != null )
    g.drawImage( image, getLocation().x, getLocation().y, Color.white, this );
    If I take the xml request sent to the application server and paste it into a "sample map request" on the map admin website (along with changing format to PNG_STREAM) my image renders exactly how I expect it to.
    Anyone have any idea what I need to do to get the java.awt.Image with format set to FORMAT_RAW_COMPRESSED to render correctly. I was hoping to get back a BufferedImage or a RenderedImage from the getGeneratedMapImage call but I'm getting back a "sun.awt.motif.X11Image".
    Will downloading the JAI (java advanced imaging) from sun help me at all?

    Joao,
    Turns out it is related to colors. I'm dynamically adding themes, linear features and line styles. I ran a test where I changed the color being specified in the line style from magenta (ff00ff) to black. When I changed the color the linear feature would show up. It was being rendered as white on a white background when I was specifying it to be magenta. I'm specifying another linear feature to be green and it is showing up in the java image as yellow. This doesn't happen when I take the generated XML from the request and display it as a PNG_STREAM.
    Any clue what is going on there?
    Jen

  • Javax.ejb.EJBException: Null primary key returned by ejbCreate method

    Hi all,
    I'm using SunOne 7.1 and I got this error when I call the create on the CMP bean.
    javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: javax.ejb.EJBException: Null primary key returned by ejbCreate method
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: javax.ejb.EJBException: Null primary key returned by ejbCreate method
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.sun.ejb.containers.EntityContainer.postCreate(EntityContainer.java:801)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at uk.co.upco.workflow.applicationAdmin.ejb.ApplicationAdminBean_854379388_ConcreteImpl_LocalHomeImpl.createNewApplication(ApplicationAdminBean_854379388_ConcreteImpl_LocalHomeImpl.java:64)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at uk.co.upco.workflow.sessionFacedeApplicationAdmin.SFApplicationAdminBean.insertNewApplicationName(SFApplicationAdminBean.java:64)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at uk.co.upco.workflow.sessionFacedeApplicationAdmin.SFApplicationAdminBean_EJBObjectImpl.insertNewApplicationName(SFApplicationAdminBean_EJBObjectImpl.java:31)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at uk.co.upco.workflow.sessionFacedeApplicationAdmin._SFApplicationAdminBean_EJBObjectImpl_Tie._invoke(Unknown Source)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.sun.corba.ee.internal.POA.GenericPOAServerSC.dispatchToServant(GenericPOAServerSC.java:569)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.sun.corba.ee.internal.POA.GenericPOAServerSC.internalDispatch(GenericPOAServerSC.java:211)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.sun.corba.ee.internal.POA.GenericPOAServerSC.dispatch(GenericPOAServerSC.java:113)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.sun.corba.ee.internal.iiop.ORB.process(ORB.java:275)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.sun.corba.ee.internal.iiop.RequestProcessor.process(RequestProcessor.java:83)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.iplanet.ias.corba.ee.internal.iiop.ServicableWrapper.service(ServicableWrapper.java:25)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at com.iplanet.ias.util.threadpool.FastThreadPool$ThreadPoolThread.run(FastThreadPool.java:283)
    [14/Aug/2004:01:15:34] WARNING ( 4044): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    cmp:
    public java.lang.Integer ejbCreateNewApplication(java.lang.String application) throws javax.ejb.CreateException {
    setApplication(application);
    return null;
    The key is auto_increment and is an integer.
    I'm usin MySQL and it is already set up as ANSI. (running as mysqld --ansi)
    Any Idea?
    Thanks in advance

    What happend when two concourrent user try to get the same key on the table? If for example I have 30 users at same time do I have lock table?
    Any way here the finest log using sunone 8. The error is the same, so I think I missing something:
    [#|2004-08-14T12:11:19.296+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.util|_ThreadID=11;|IM: preInvokeorg.apache.catalina.servlets.DefaultServlet@1acecf3|#]
    [#|2004-08-14T12:11:19.296+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.util|_ThreadID=11;|IM: postInvokeorg.apache.catalina.servlets.DefaultServlet@1acecf3|#]
    [#|2004-08-14T12:11:26.166+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: returning cached ProtectionDomain - CodeSource: ((file:/Test <no certificates>)) PrincipalSet: null|#]
    [#|2004-08-14T12:11:26.166+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: Changing Policy Context ID: oldV = null newV = Test|#]
    [#|2004-08-14T12:11:26.166+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: Access Control Decision Result: true EJBMethodPermission (Name) = SFApplicationAdmin (Action) = create,Home, (Codesource) = (file:/Test <no certificates>)|#]
    [#|2004-08-14T12:11:26.186+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: returning cached ProtectionDomain - CodeSource: ((file:/Test <no certificates>)) PrincipalSet: null|#]
    [#|2004-08-14T12:11:26.186+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: Access Control Decision Result: true EJBMethodPermission (Name) = SFApplicationAdmin (Action) = insertNewApplicationName,Remote,java.util.Hashtable (Codesource) = (file:/Test <no certificates>)|#]
    [#|2004-08-14T12:11:26.186+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.util|_ThreadID=22;|IM: preInvokeuk.co.myDomain.workflow.sessionFacedeApplicationAdmin.SFApplicationAdminBean@1fa487f|#]
    [#|2004-08-14T12:11:26.186+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: doAsPrivileged contextId(Test)|#]
    [#|2004-08-14T12:11:26.186+0100|INFO|sun-appserver-pe8.0|javax.enterprise.system.stream.out|_ThreadID=22;|
    new|#]
    [#|2004-08-14T12:11:26.186+0100|INFO|sun-appserver-pe8.0|javax.enterprise.system.stream.out|_ThreadID=22;|
    mgmt: com.sun.enterprise.naming.TransientContext:com.sun.enterprise.naming.TransientContext@ad00b2|#]
    [#|2004-08-14T12:11:26.186+0100|INFO|sun-appserver-pe8.0|javax.enterprise.system.stream.out|_ThreadID=22;|
    new|#]
    [#|2004-08-14T12:11:26.186+0100|INFO|sun-appserver-pe8.0|javax.enterprise.system.stream.out|_ThreadID=22;|
    SFApplicationAdmin: javax.naming.Reference:Reference Class Name: reference
    Type: url
    Content: ejb/SFApplicationAdmin
    |#]
    [#|2004-08-14T12:11:26.186+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: returning cached ProtectionDomain - CodeSource: ((file:/Test <no certificates>)) PrincipalSet: null|#]
    [#|2004-08-14T12:11:26.186+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.core.security|_ThreadID=22;|JACC: Access Control Decision Result: true EJBMethodPermission (Name) = ApplicationAdmin (Action) = createNewApplication,LocalHome,java.lang.String (Codesource) = (file:/Test <no certificates>)|#]
    [#|2004-08-14T12:11:26.196+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.container.ejb|_ThreadID=22;|[Pool-ApplicationAdmin]: Added PoolResizeTimerTask...|#]
    [#|2004-08-14T12:11:26.196+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.util|_ThreadID=22;|IM: preInvokeuk.co.myDomain.workflow.applicationAdmin.ejb.ApplicationAdminBean_1421299025_ConcreteImpl@7ae165|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|:Thread[Worker: 16,5,org.apache.commons.launcher.ChildMain] -->SQLPersistenceManagerFactory.getPersistenceManager().|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|Thread[Worker: 16,5,org.apache.commons.launcher.ChildMain] <->SQLPersistenceManagerFactory.getPersistenceManager() FOUND javax.transaction.Transaction: com.sun.ejb.containers.PMTransactionImpl@5.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|<--SQLPersistenceManagerFactory.getFromPool().|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|PersistenceManagerImpl cache properties: _txCacheInitialCapacity=20, _flushedCacheInitialCapacity=20, _flushedCacheLoadFactor=0.75, _weakCacheInitialCapacity=20, _weakCacheLoadFactor=0.75.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.utility|_ThreadID=22;|NullSemaphore constructor() for PersistenceManagerImpl.cacheLock.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.utility|_ThreadID=22;|NullSemaphore constructor() for PersistenceManagerImpl.fieldUpdateLock.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|<--SQLPersistenceManagerFactory.getFromPool() PM: com.sun.jdo.spi.persistence.support.sqlstore.impl.PersistenceManagerImpl@8d18c for JTA com.sun.ejb.containers.PMTransactionImpl@5.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|<->SQLPersistenceManagerFactory.getPersistenceManager() JDO Transaction:   Transaction:
    status = STATUS_NO_TRANSACTION
    Transaction Object = Transaction@16077795
    threads = 0
    .|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.transaction|_ThreadID=22;|Thread[Worker: 16,5,org.apache.commons.launcher.ChildMain] Tran[   Transaction:
    status = STATUS_NO_TRANSACTION
    Transaction Object = Transaction@16077795
    threads = 0
    ].begin:status = STATUS_NO_TRANSACTION ,txType: UNKNOWN for com.sun.jdo.spi.persistence.support.sqlstore.impl.PersistenceManagerImpl@8d18c.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.transaction|_ThreadID=22;|Thread[Worker: 16,5,org.apache.commons.launcher.ChildMain] Tran[   Transaction:
    status = STATUS_NO_TRANSACTION
    Transaction Object = Transaction@16077795
    threads = 0
    ].setStatus: STATUS_NO_TRANSACTION => STATUS_ACTIVE for com.sun.jdo.spi.persistence.support.sqlstore.impl.PersistenceManagerImpl@8d18c.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|Thread[Worker: 16,5,org.apache.commons.launcher.ChildMain] <->SQLPersistenceManagerFactory.getPersistenceManager() : com.sun.jdo.spi.persistence.support.sqlstore.impl.PersistenceManagerImpl@8d18c for JTA: com.sun.ejb.containers.PMTransactionImpl@5.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|---PersistenceManagerImpl.getCurrentWrapper() > current: null.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|---PersistenceManagerImpl.pushCurrentWrapper() > current: null  new: com.sun.jdo.spi.persistence.support.sqlstore.impl.PersistenceManagerWrapper@567117.|#]
    [#|2004-08-14T12:11:26.196+0100|FINEST|sun-appserver-pe8.0|javax.enterprise.resource.jdo.persistencemanager|_ThreadID=22;|---PersistenceManagerImpl.popCurrentWrapper() > current: com.sun.jdo.spi.persistence.support.sqlstore.impl.PersistenceManagerWrapper@567117  prev: null.|#]
    [#|2004-08-14T12:11:26.196+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.util|_ThreadID=22;|IM: postInvokeuk.co.myDomain.workflow.applicationAdmin.ejb.ApplicationAdminBean_1421299025_ConcreteImpl@7ae165|#]
    [#|2004-08-14T12:11:26.196+0100|FINE|sun-appserver-pe8.0|javax.enterprise.system.container.ejb|_ThreadID=22;|Exception in forceDestroyBean()
    java.lang.IllegalStateException: Primary key not available
         at com.sun.ejb.containers.EntityContextImpl.getPrimaryKey(EntityContextImpl.java:114)
         at com.sun.ejb.containers.EntityContainer.forceDestroyBean(EntityContainer.java:1232)
         at com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:2559)
         at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:2416)
         at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:763)
         at com.sun.ejb.containers.EJBLocalHomeInvocationHandler.invoke(EJBLocalHomeInvocationHandler.java:197)
         at $Proxy10.createNewApplication(Unknown Source)
         at uk.co.myDomain.workflow.sessionFacedeApplicationAdmin.SFApplicationAdminBean.insertNewApplicationName(SFApplicationAdminBean.java:64)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sun.enterprise.security.SecurityUtil$2.run(SecurityUtil.java:146)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sun.enterprise.security.application.EJBSecurityManager.doAsPrivileged(EJBSecurityManager.java:930)
         at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:151)
         at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:128)
         at $Proxy7.insertNewApplicationName(Unknown Source)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:117)
         at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:651)
         at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:190)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1653)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1513)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:895)
         at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:172)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:668)
         at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:375)
         at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.read(SocketOrChannelConnectionImpl.java:284)
         at com.sun.corba.ee.impl.transport.ReaderThreadImpl.doWork(ReaderThreadImpl.java:73)
         at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:382)
    |#]
    [#|2004-08-14T12:11:26.196+0100|INFO|sun-appserver-pe8.0|javax.enterprise.system.container.ejb|_ThreadID=22;|EJB5018: An exception was thrown during an ejb invocation on [ApplicationAdmin]|#]
    [#|2004-08-14T12:11:26.196+0100|INFO|sun-appserver-pe8.0|javax.enterprise.system.container.ejb|_ThreadID=22;|
    javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: java.lang.IllegalArgumentException: JDO73013: Primary Key field applicationId for bean 'ApplicationAdmin' cannot be null.
    java.lang.IllegalArgumentException: JDO73013: Primary Key field applicationId for bean 'ApplicationAdmin' cannot be null.
         at com.sun.jdo.spi.persistence.support.ejb.cmp.JDOEJB11HelperImpl.assertPrimaryKeyFieldNotNull(JDOEJB11HelperImpl.java:446)
         at uk.co.myDomain.workflow.applicationAdmin.ejb.ApplicationAdminBean_1421299025_ConcreteImpl.setApplicationId(ApplicationAdminBean_1421299025_ConcreteImpl.java:102)
         at uk.co.myDomain.workflow.applicationAdmin.ejb.ApplicationAdminBean.ejbCreateNewApplication(ApplicationAdminBean.java:93)
         at uk.co.myDomain.workflow.applicationAdmin.ejb.ApplicationAdminBean_1421299025_ConcreteImpl.ejbCreateNewApplication(ApplicationAdminBean_1421299025_ConcreteImpl.java:334)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:140)
         at com.sun.ejb.containers.EJBLocalHomeInvocationHandler.invoke(EJBLocalHomeInvocationHandler.java:168)
         at $Proxy10.createNewApplication(Unknown Source)
         at uk.co.myDomain.workflow.sessionFacedeApplicationAdmin.SFApplicationAdminBean.insertNewApplicationName(SFApplicationAdminBean.java:64)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sun.enterprise.security.SecurityUtil$2.run(SecurityUtil.java:146)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sun.enterprise.security.application.EJBSecurityManager.doAsPrivileged(EJBSecurityManager.java:930)
         at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:151)
         at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:128)
         at $Proxy7.insertNewApplicationName(Unknown Source)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:117)
         at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:651)
         at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:190)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1653)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1513)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:895)
         at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:172)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:668)
         at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:375)
         at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.read(SocketOrChannelConnectionImpl.java:284)
         at com.sun.corba.ee.impl.transport.ReaderThreadImpl.doWork(ReaderThreadImpl.java:73)
         at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:382)
    javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: java.lang.IllegalArgumentException: JDO73013: Primary Key field applicationId for bean 'ApplicationAdmin' cannot be null.
         at com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:2564)
         at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:2416)
         at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:763)
         at com.sun.ejb.containers.EJBLocalHomeInvocationHandler.invoke(EJBLocalHomeInvocationHandler.java:197)
         at $Proxy10.createNewApplication(Unknown Source)
         at uk.co.myDomain.workflow.sessionFacedeApplicationAdmin.SFApplicationAdminBean.insertNewApplicationName(SFApplicationAdminBean.java:64)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sun.enterprise.security.SecurityUtil$2.run(SecurityUtil.java:146)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sun.enterprise.security.application.EJBSecurityManager.doAsPrivileged(EJBSecurityManager.java:930)
         at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:151)
         at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:128)
         at $Proxy7.insertNewApplicationName(Unknown Source)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:117)
         at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:651)
         at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:190)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1653)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1513)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:895)
         at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:172)
         at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:668)
         at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:375)
         at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.read(SocketOrChannelConnectionImpl.java:284)
         at com.sun.corba.ee.impl.transport.ReaderThreadImpl.doWork(ReaderThreadImpl.java:73)
         at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:382)
    |#]
    Any Idea?
    Thanks in advance for any help

  • ABAP Web Dynpro Application changes in Administation Mode no longer working

    Hi Gurus,
    To apply customizing to a standard SAP Web Dynpro application we used to simply run the application in administration mode. After we changed a parameter to allow for theme application this adminstration mode no longer works. Right-Click simply acts as if you are running the application normally. We have tried to remove our parameter but this had no effect.
    How can we "fix" this error without creating a new custom configuration which will cause the URL to change?
    Thanks,
    Garth

    Hi,
    how did  you  open in administrative mode?
    to open in adminstrative mode do as follows:
    In se80 ,i.e in the menu bar:
    Web Dynpro Application->Test->Test in Administation mode.
    i hope u can see the option "Settings for surrent config" .
    you can refer the thread.
    [Re: ABAP Web Dynpro Application changes in Administation mode]
    Priya.

  • ABAP Proxy to JDBC syncronous method

    Hi Experts,
    I am very new to ABAP Proxy to JDBC syncronous method.
    I have used 4 DT, 4 MT, 2 MI, 2 MM and 1 IM.
    I have used reference from
    SYNCHRONOUS SOAP TO JDBC - END TO END WALKTHROUGH
    http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/3928. [original link is broken] [original link is broken]
    My question is in Integration Directory how many sender agrement, receiver agrement, receiver determination and interface determination should i use?
    Is my above DT , MT , MI , MM and IM is correct?
    I am not using any BPM.
    Thank you in advanced.
    regards,
    S.Saravannan

    mrsaravannan wrote:
    > My question is in Integration Directory how many sender agrement, receiver agrement, receiver determination and interface determination should i use?
    for a Sync sceanrio, you will create
    1 RD
    1 ID
    1 SA (since its a ABAP proxy call this is optional)
    1 RA
    >
    > Is my above DT , MT , MI , MM and IM is correct?
    Yes

  • Collection returned by finder methods

    Collection returned by finder methods are serialized to the clients or referenced?
    When a client access a EJB and invoke each finder method, the result back to the client is a collection (for every finder methods unless the findByPrimaryKey). This collection is serialized to the client o is accessed by the client from the container remotely?

    I guess it is serialized. The EJB works on the rmi logic.

  • WorkFlow BOR : Change Method

    Hi,
    Can I know the BOR Object for sales order which includes Change method.

    Hi Meghna,
    I think the SDN team has already provided the answer. If you require any other information then please post a new thread.
    Thanks in advance for your kind coooperation.
    Regards.
    Abhijit.

  • Text or GREP find/change method to assign tags

    Hi all
    I could use a text or GREP find/change method to  assign tags to paragraph styles (for use in FindChangeByList), would anyone be able to help please?
    Steve

    Hi Peter
    I produce a quarterly magazine for which text is supplied in Word format.
    I currently run the 'FindChangeByList' script to format body text, headings, bulleted and numbered lists, web and email address text styling and to remove/correct all extraneous characters etc.
    Once the job is printed I need to produce a tagged 'accessible' readable (eg: read out loud function in Acrobat) pdf from the file, for text to speech readers.
    I am currently using the map tags to styles function, which allows me to assign tags which in turn gives me control of the 'text reading' order.
    What I'd like to be able to do is automatically apply the Tags to syles while processing the 'FindChangeByList' script.
    Steve

  • Any flag on the grid to return any changes

    Hi,
    Is there any flag to return any changes on the gridControl.
    For example, I have a grid with the cell editable , I change some value and I want to some code to notify me there are some changes
    Thanks.
    null

    Hi,
    Since GridControl is based on JTable, you can
    regsiter a listener with the Table Model, the grid uses.
    gridControl.getModel().addTableModelListener(....).
    Hope this helps.
    Regards,
    Sathish

  • IP Profile change methods

    Seen a lot of posts asking about IP profile change methods and so here is how i believe they work. Hopefully this messgage will remain formatted as it is typed
    You will be on one and only one of the 3 methods although there are some rare exceptions such as fixed rate lines and banded rates. For banded rates due to line issues I have been informed that it can take 3 days to sort itself out if the line remains ok. Additionally for new or reset lines the bedding in period varies between 3-10 days and than can effect the profile used.
    1 88.2% method.
    This is the newest method and basically removes the concept of a profile as such as matches similar other schemes in place by other providers. Your 'profile' is set to 88.2% of your downstream sync rate (which allows for the overheads needed that are contained wiithin the traffic). Setting is I believe reasonably concurrent with a change in sync speed but that remains to be be confirmed and it could be that it may take up to 75 minutes as per currently decreases would take. IMJOLLY has confirmed that change is immediate.
    It is believed that all exchanges will be upgraded to this method eventually but that has not been confirmed. If you run a BT speedcheck it will tell you your IP profile, if it is not a nice round value ending on 0 or 5 then you are on this method already, otherwise your profile should fit one of the values in the table further down (unless your speed is greater than I cater for) It is now suspected that only CN21 enabled exchanged may be getting updated leaving the others at a even greater disadvantage.
    2 Oldest method
    Decreases in profile take up to 75 minutes to apply, increases can take up to 3 days from the time of a higher sync.
    3 Adaptive Max
    Adaptive max is available on some exhanges and is an attempt to speed up the resets for those affected without resetting it too quickly and causing more issues if there is a line issue.
    Change depends on the lowest rate that caused a decrease and the new profile that your current sync would fall within. (decreases are within 75 minutes, the table is for increases only)
    The table for the ADSL2+ rates are as follows
    0
    135
    250
    350
    500
    750
    1000
    1250
    1500
    1750
    2000
    2500
    3000
    3500
    4000
    4500
    5000
    5500
    6000
    6500
    7000
    7150
    135
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    250
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    350
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    500
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    750
    24
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    1000
    48
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    1250
    48
    24
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    1500
    72
    24
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    1750
    72
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    12
    2000
    48
    24
    12
    12
    12
    12
    12
    12
    12
    12
    12
    2500
    48
    24
    24
    12
    12
    12
    12
    12
    12
    12
    3000
    72
    24
    24
    24
    12
    12
    12
    12
    12
    3500
    72
    24
    24
    24
    12
    12
    12
    12
    4000
    72
    48
    24
    24
    24
    12
    12
    4500
    96
    48
    24
    24
    24
    24
    5000
    96
    48
    24
    24
    24
    5500
    96
    48
    24
    24
    6000
    120
    72
    48
    6500
    120
    96
    7000
    120
    7150
    Old rate is down the side and new rate along the top, the resultant value is the number of hours for a change to take place. This is the minimum time and it seems that it may take a few hours longer than expected, probably because I suspect that the process to check/reset the values only runs periodically and so you should probably allow up to 2 hours or so extra.
    If my post was helpful then please click on the Ratings star on the left-hand side If the the reply answers your question fully then please select ’Mark as Accepted Solution’

    Still not been able to get a confirmation of the upgrades (or at least mine) neither the mods here nor BT technical helpdesk have replied yet to my query on it.
    When it comes it it will I expect remove the need for a lot of people to be raising issues and calling the helpdesk.
    I am pretty sure re how adapative max is working on my line, the last few occassions have all fitted that pattern as near as I can tell exactly. Different exchanges may run the updates at different times perhaps but I suspect it is a common setting so perhaps not but for me the time starts to count from the next xx:30 time after a higher sync, lasts 12 or 24 hours and then the next xx:30 time therefater the profile gets reset.
    If my post was helpful then please click on the Ratings star on the left-hand side If the the reply answers your question fully then please select ’Mark as Accepted Solution’

  • Change ABAP Program return code

    Dear ABAP Gurus,
    I need to change internal return(message) code inside APAP program (report).
    Program starts  as the first program in a scheduled job with several programs in, and we want to have the following  programs do not start in some cases which are evaluated in the first program. Normally program ends will internal return (message) code 0000. I need to change this return code.
    Thank you very much,
    Svetlana

    Hi Svetlana,
    Can I suggest a solution that is closer to standard?
    You could schedule your job with only the first program due to run.  If it runs sucessfully, it will programatically submit a new job with the next abap program to run, and if not, it write a log (spool, or messages).
    How does that sound?
    If your first program is a standard program and you don't wish to modify it, you could schedule your job with the standard program first, followed by a custom program that could determine the sucess of the first (by checking database entries, or by reading the spool of the first program, etc.) and then it would submit the subsequent jobs (or not).
    Hope that helps.
    Brad

  • "Implicit" Binding in ABAP OO?: the ALV method grid- check_changed_data

    In this thread here:
    Where/how would you add the actual DB update to BCALV_EDIT_03?
    Uwe Schieferstein was kind enough to show that anyone can see the effect or outcome of the ALV check_changed_data method if they just add this code to the PAI of the SAP demo program BCALV_EDIT_03:
    MODULE pai INPUT.
      TRANSLATE ok_code TO UPPER CASE.
      save_ok = ok_code.
      CLEAR ok_code.
      CASE save_ok.
        WHEN 'EXIT'.
          PERFORM exit_program.
        WHEN 'SAVE'.
          CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
            EXPORTING
              I_STRUCTURE_NAME                  = 'SFLIGHT'
              I_GRID_TITLE                      =
                  'Before CHECK_DATA_CHANGED -> changes not yet retrieved'
            TABLES
              t_outtab                          = gt_outtab
            EXCEPTIONS
              OTHERS                            = 99.
          g_grid->check_changed_data( ).
          CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
            EXPORTING
              I_STRUCTURE_NAME                  = 'SFLIGHT'
              I_GRID_TITLE                      =
                  'After CHECK_DATA_CHANGED -> changes retrieved'
            TABLES
              t_outtab                          = gt_outtab
            EXCEPTIONS
              OTHERS                            = 99.
          PERFORM save_data.
        WHEN OTHERS.
    *     do nothing
      ENDCASE.
    ENDMODULE.                    "pai INPUT
    When looking at this code, the following question occurred to me:
    <b>Question: How does check_changed_data know the itab to bring the changed back to, since it is called in the PAI with no arguments.</b>
    The only answer I can see is that when the grid is first loaded in the PBO of BCALV_EDIT_03 in the usual way:
      if g_custom_container is initial.
        perform create_and_init_alv changing gt_outtab
                                             gt_fieldcat
                                             gs_layout.
      endif.
    the ABAP OO engine implicitly "binds" the back-end table gt_outtab to the ALV contol (i.e. the instance of CL_GUI_ALV_GRID that the program creates.)
    So, if you answer this question, please do one of two things:
    a) confirm that check_changed_data "knows" the correct itab to bring the data back to because the ABAP OO engine has, in fact, implicitly "bound" the control to the itab gt_outtab;
    or
    b) if this is not true, explain how check_changed_data knows what itab to bring the data back to.
    Thanks very much in advance for whatever time anyone can afford to spend on this question.
    djh

    Hello David
    I have modified my previous sample report again to +demonstrate +that the
    grid instance knows exactly which itab is displayed. Unfortunately it is already a few years ago when I attended the excellent SAP course BC412 (Dialog Programming using EnjoyControls, held by a chinese SAP employee with a beautiful Palatine dialect). Thus, I +cannot explain +the technical details (which are somehow related to the automation queue and the control framework). 
    Here are the new modifications:
    (1) Inbetween the data definitions and the local class definition I have added two parameters:
    DATA: gt_outtab TYPE TABLE OF sflight.
    PARAMETERS:
      p_byref    RADIOBUTTON GROUP rad1,  " pass itab by reference
      p_byval    RADIOBUTTON GROUP rad1.  " pass itab by value
    * LOCAL CLASS Definition
    (2) The parameters are evaluated in PBO module PBO:
    *       MODULE PBO OUTPUT                                             *
    MODULE pbo OUTPUT.
      SET PF-STATUS 'MAIN100'.
      SET TITLEBAR 'MAIN100'.
      IF g_custom_container IS INITIAL.
        IF ( p_byval = 'X' ).
          PERFORM create_and_init_alv_byval
                               CHANGING gt_outtab
                                        gt_fieldcat
                                        gs_layout.
        ELSE.  " ( p_byref = 'X' ).
          PERFORM create_and_init_alv CHANGING gt_outtab
                                               gt_fieldcat
                                               gs_layout.
        ENDIF.
      ENDIF.
    ENDMODULE.                    "pbo OUTPUT
    (3) And here is the difference between the two routines:
    *&      Form  create_and_init_alv_byval
    *       text
    *      <--P_GT_OUTTAB  text
    *      <--P_GT_FIELDCAT  text
    *      <--P_GS_LAYOUT  text
    FORM create_and_init_alv_byval
                      CHANGING
                            value(pt_outtab)  LIKE gt_outtab[]  " by value
                            pt_fieldcat TYPE lvc_t_fcat
                            ps_layout TYPE lvc_s_layo.
      PERFORM create_and_init_alv CHANGING pt_outtab
                                           pt_fieldcat
                                           ps_layout.
    ENDFORM.                    " create_and_init_alv_byval
    *&      Form  CREATE_AND_INIT_ALV
    *       text
    *      <--P_GT_OUTTAB  text
    *      <--P_GT_FIELDCAT  text
    *      <--P_GS_LAYOUT  text
    FORM create_and_init_alv
                      CHANGING
                            pt_outtab  LIKE gt_outtab[]  " by reference
                            pt_fieldcat TYPE lvc_t_fcat
                            ps_layout TYPE lvc_s_layo.
      DATA: lt_exclude TYPE ui_functions.
    Now the crucial point is that the globally visible itab gt_outtab is passed
    (a) by value to method g_grid->set_table_for_first_display (routine CREATE_AND_INIT_ALV_BYVAL)
    (b) by reference to method g_grid->set_table_for_first_display (routine CREATE_AND_INIT_ALV_BYVAL)
    If you run the report with the default (p_byref = 'X') then the report behave exactly like the original sample report.
    However, if you choose p_byval = 'X' then the reports dumps as soon as you try to change the values of the ALV list (e.g. change a planetype and hit ENTER or even sorting is sufficient).
    Why? The itab passed by value to the grid instance is not the same like gt_outtab!
    Conclusion: Do not try to fool the grid instance...
    Regards
      Uwe
    PS: The entire coding of the adjusted sample reports is shown below:
    report ZUS_SDN_BCALV_EDIT_03_SAVE_1.
    **PROGRAM bcalv_edit_03.
    * Purpose:
    * ~~~~~~~~
    * In this example the user may change values of fields
    * SEATSOCC (occupied seats) and/or PLANETYPE. The report checks
    * the input value(s) semantically and provides protocol
    * messages in case of error.
    * To check program behavior
    * ~~~~~~~~~~~~~~~~~~~~~~~~~
    * Change values of the column "occupied seats" or "Planetype" or
    * both (in the same line). Try to provocate errors.
    * Click on the check symbol or press return to initiate checking.
    * (ALV also checks input before any functions like sorting,
    * filtering or doubleclick are processed. These functions are
    * only active if the input does not contain any errors).
    * The ALV Grid Control first checks if the input is correct
    * according to DDIC-Information (Type, lenght). Then semantic
    * checks are made by the application using event handler method
    * HANDLE_DATA_CHANGED.
    * Essential steps (search for '§')
    * ~~~~~~~~~~~~~~~
    * 1.Set status of columns PLANETYPE and SEATSOCC to editable.
    * 2.Optionally restrict generic functions to 'change only'.
    *   (The user shall not be able to add new lines).
    * 3.Optionally register ENTER to raise event DATA_CHANGED.
    *   (Per default the user may check data by using the check icon).
    * 4.Define and implement event handler to handle event DATA_CHANGED.
    * 5.Loop over table MT_GOOD_CELLS to check all values that are
    *   valid due to checks according to information of the DDIC.
    * 6.Within a check cycle:
    * 6a.Get new cell value to check it using method GET_CELL_VALUE.
    *    (In this case SEATSOCC).
    * 6b.If the value is valid you may want to change values of
    *    other cells.
    * 6c.If the value is not valid create an protocol entry in
    *    the application log.
    * 6d.To access old values (which where not changed in this check cycle)
    *    use your output table GT_OUTTAB.
    * 7.Display application log if an error has occured.
    DATA: ok_code LIKE sy-ucomm,
          save_ok LIKE sy-ucomm,
          g_container TYPE scrfname VALUE 'BCALV_GRID_DEMO_0100_CONT1',
          g_grid  TYPE REF TO cl_gui_alv_grid,
          g_custom_container TYPE REF TO cl_gui_custom_container,
          gt_fieldcat TYPE lvc_t_fcat,
          gs_layout TYPE lvc_s_layo,
          g_max TYPE i VALUE 100.
    * local class to handle semantic checks
    CLASS lcl_event_receiver DEFINITION DEFERRED.
    DATA: g_event_receiver TYPE REF TO lcl_event_receiver.
    DATA: gt_outtab TYPE TABLE OF sflight.
    PARAMETERS:
      p_byref    RADIOBUTTON GROUP rad1,  " pass itab by reference
      p_byval    RADIOBUTTON GROUP rad1.  " pass itab by value
    * LOCAL CLASS Definition
    *§4.Define and implement event handler to handle event DATA_CHANGED.
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
    * This flag is set if any error occured in one of the
    * following methods:
        DATA: error_in_data TYPE c  READ-ONLY.
        METHODS:
          handle_data_changed
             FOR EVENT data_changed OF cl_gui_alv_grid
                 IMPORTING er_data_changed.
      PRIVATE SECTION.
    *** This flag is set if any error occured in one of the
    *** following methods:
    **    DATA: error_in_data TYPE c.
    * Methods to modularize event handler method HANDLE_DATA_CHANGED:
        METHODS: check_planetype
         IMPORTING
            ps_good_planetype TYPE lvc_s_modi
            pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
        METHODS: ch_new_plane_v_new_seatsocc
               IMPORTING
                  psg_plane TYPE lvc_s_modi
                  psg_socc TYPE lvc_s_modi
                  ps_saplane TYPE saplane
                  pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
        METHODS: ch_new_plane_v_old_seatsocc
               IMPORTING
                  psg_plane TYPE lvc_s_modi
                  ps_saplane TYPE saplane
                  pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
        METHODS: check_seatsocc
               IMPORTING
                  ps_good TYPE lvc_s_modi
                  pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
    * This is a suggestion how you could comment your checks in each method:
    * CHECK: fieldname(old/new value) !<comp> fieldname(old/new value)
    * IF NOT: (What to tell the user is wrong about the input)
    * Remarks:
    *  fieldname:       fieldname of table for the corresponding column
    *  (old/new value): ckeck with value of GT_OUTTAB or MT_GOOD_CELLS.
    *  !<comp>        : the value is valid if the condition <comp> holds.
    * Example:
    *  CHECK seatsocc(new) !>= seatsmax(old)
    *  IF NOT: There are not enough number of seats according to this
    *          planetype.
    ENDCLASS.                    "lcl_event_receiver DEFINITION
    CLASS lcl_event_receiver IMPLEMENTATION.
      METHOD handle_data_changed.
        DATA: ls_good TYPE lvc_s_modi.
        error_in_data = space.
    * semantic checks
    * Identify columns which were changed and check input
    * against output table gt_outtab or other new input values of one row.
    * Table er_data_changed->mt_good_cells holds all cells that
    * are valid according to checks against their DDIC data.
    * No matter in which order the input was made this table is
    * ordered by rows (row_id). For each row, the entries are
    * sorted by columns according to their order in the fieldcatalog
    * (not the defined order using field COL_POS but the order
    * given by the position of the record in the fieldcatalog).
    * The order is relevant if new inputs in several columns of
    * the same row are dependent. In this example,
    * method 'ch_new_plane_v_new_seatsocc' needs only to be called
    * once since we know that the corresponding check is already done
    * when checking column PLANETYPE (see also method 'check_seatsocc').
    *§5.Loop over table MT_GOOD_CELLS to check all values that are
    *   valid due to checks according to information of the DDIC.
        LOOP AT er_data_changed->mt_good_cells INTO ls_good.
          CASE ls_good-fieldname.
    * check if column PLANETYPE of this row was changed
            WHEN 'PLANETYPE'.
              CALL METHOD check_planetype
                EXPORTING
                  ps_good_planetype = ls_good
                  pr_data_changed   = er_data_changed.
    * check if column SEATSOCC of this row was changed
            WHEN 'SEATSOCC'.
              CALL METHOD check_seatsocc
                EXPORTING
                  ps_good         = ls_good
                  pr_data_changed = er_data_changed.
          ENDCASE.
        ENDLOOP.
    *§7.Display application log if an error has occured.
        IF error_in_data EQ 'X'.
          CALL METHOD er_data_changed->display_protocol.
        ENDIF.
      ENDMETHOD.                    "handle_data_changed
      METHOD check_planetype.
    * Overview of checks according to field PLANETYPE
    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    * a) Does the Planetype exists? (check against check table SAPLANE)
    * b) Are the number of seats (SEATSMAX) of the new planetype
    *    sufficient to fullfill requested bookings (SEATSOCC)?
    *    b1) SEATSOCC (occupied seats) also changed within
    *        this check cycle.
    *    b2) SEATSOCC has not changed within this cycle.
        DATA: l_planetype TYPE s_planetye,
              ls_saplane TYPE saplane,
              ls_good_seatsocc TYPE lvc_s_modi.
    * Get new cell value to check it.
    * (In this case: PLANETYPE).
        CALL METHOD pr_data_changed->get_cell_value
          EXPORTING
            i_row_id    = ps_good_planetype-row_id
            i_fieldname = ps_good_planetype-fieldname
          IMPORTING
            e_value     = l_planetype.
    * existence check: Does the plane exists?
        SELECT SINGLE * FROM saplane INTO ls_saplane WHERE
                                         planetype = l_planetype.
        IF sy-subrc NE 0.
    * In case of error, create a protocol entry in the application log.
    * Possible values for message type ('i_msgty'):
    *    'A': Abort (Stop sign)
    *    'E': Error (red LED)
    *    'W': Warning (yellow LED)
    *    'I': Information (green LED)
          CALL METHOD pr_data_changed->add_protocol_entry
            EXPORTING
              i_msgid     = '0K'
              i_msgno     = '000'
              i_msgty     = 'E'
              i_msgv1     = text-m03           "Flugzeugtyp
              i_msgv2     = l_planetype
              i_msgv3     = text-m05           "exitstiert nicht
              i_fieldname = ps_good_planetype-fieldname
              i_row_id    = ps_good_planetype-row_id.
          error_in_data = 'X'.
          EXIT. "plane does not exit, so we're finished here!
        ENDIF.
    * Check if other relevant fields of this row have been changed, too.
        READ TABLE pr_data_changed->mt_good_cells INTO ls_good_seatsocc
                           WITH KEY row_id    = ps_good_planetype-row_id
                                    fieldname = 'SEATSOCC'.
        IF sy-subrc = 0.
          CALL METHOD ch_new_plane_v_new_seatsocc
            EXPORTING
              psg_plane       = ps_good_planetype
              psg_socc        = ls_good_seatsocc
              ps_saplane      = ls_saplane
              pr_data_changed = pr_data_changed.
        ELSE.
          CALL METHOD ch_new_plane_v_old_seatsocc
            EXPORTING
              psg_plane       = ps_good_planetype
              ps_saplane      = ls_saplane
              pr_data_changed = pr_data_changed.
        ENDIF.
      ENDMETHOD.                           " CHECK_PLANETYPE
      METHOD ch_new_plane_v_new_seatsocc.
        DATA: l_seatsocc TYPE s_seatsocc.
    *§5a.Get new cell value to check it using method GET_CELL_VALUE.
    * (In this case SEATSOCC).
        CALL METHOD pr_data_changed->get_cell_value
          EXPORTING
            i_row_id    = psg_socc-row_id
            i_fieldname = psg_socc-fieldname
          IMPORTING
            e_value     = l_seatsocc.
    * CHECK:  SEATSMAX(of new planetype) !>= SEATSOCC(new value)
    * IF NOT: Message for wrong planetype
        IF ps_saplane-seatsmax GE l_seatsocc.
    *§5b.If the value is valid you may want to change values of
    *    other cells.
          CALL METHOD pr_data_changed->modify_cell
            EXPORTING
              i_row_id    = psg_plane-row_id
              i_fieldname = 'SEATSMAX'
              i_value     = ps_saplane-seatsmax.
        ELSE.
    *§5c.If the value is not valid create an protocol entry in
    *    the application log.
    * Possible values for message type ('i_msgty'):
    *    'A': Abort (Stop sign)
    *    'E': Error (red LED)
    *    'W': Warning (yellow LED)
    *    'I': Information (green LED)
          CALL METHOD pr_data_changed->add_protocol_entry
            EXPORTING
              i_msgid     = '0K'
              i_msgno     = '000'
              i_msgty     = 'E'
              i_msgv1     = text-m03               "Flugzeugtyp
              i_msgv2     = ps_saplane-planetype
              i_msgv3     = text-m04             "hat nicht genug Sitzplätze
              i_fieldname = psg_plane-fieldname
              i_row_id    = psg_plane-row_id.
          error_in_data = 'X'.
        ENDIF.
      ENDMETHOD.                    "ch_new_plane_v_new_seatsocc
      METHOD ch_new_plane_v_old_seatsocc.
        DATA: l_old_seatsocc TYPE s_seatsocc,
              ls_outtab TYPE sflight.
    *§5d.To access old values (which where not changed in this check cycle)
    *    use your output table GT_OUTTAB.
        READ TABLE gt_outtab INTO ls_outtab INDEX psg_plane-row_id.
        l_old_seatsocc = ls_outtab-seatsocc.
    * CHECK:  SEATSMAX(of new planetype) !>= SEATSOCC(old value)
    * IF NOT: Message for wrong planetype
        IF ps_saplane-seatsmax GE l_old_seatsocc.
    * ok->field seatsmax can be changed
          CALL METHOD pr_data_changed->modify_cell
            EXPORTING
              i_row_id    = psg_plane-row_id
              i_fieldname = 'SEATSMAX'
              i_value     = ps_saplane-seatsmax.
        ELSE.
          CALL METHOD pr_data_changed->add_protocol_entry
            EXPORTING
              i_msgid     = '0K'
              i_msgno     = '000'
              i_msgty     = 'E'
              i_msgv1     = text-m03                "Flugzeugtyp
              i_msgv2     = ps_saplane-planetype
              i_msgv3     = text-m04             "hat nicht genug Sitzplätze
              i_fieldname = psg_plane-fieldname
              i_row_id    = psg_plane-row_id.
          error_in_data = 'X'.
        ENDIF.
      ENDMETHOD.                    "ch_new_plane_v_old_seatsocc
    *&      Form  CHECK_SEATSOCC
    *       text
    *      -->P_LS_GOOD  text
    *      -->P_ER_DATA_CHANGED  text
      METHOD check_seatsocc.
        DATA: l_seatsocc TYPE s_seatsocc,
              l_old_seatsmax TYPE s_seatsmax,
              ls_outtab TYPE sflight,
              ls_good TYPE lvc_s_modi.
    * Check if the planetype has changed, too.
        READ TABLE pr_data_changed->mt_good_cells INTO ls_good
                           WITH KEY row_id    = ps_good-row_id
                                    fieldname = 'PLANETYPE'.
        IF sy-subrc EQ 0.
    * remark: the check
    *   seatsocc (new value) <= seatsmax (new value)
    * was already handled by form 'ch_new_plane_v_new_seatsocc'.
    * so we are finished here.
          EXIT.
        ENDIF.
    * CHECK: seatsocc (new value) <= seatsmax (old value)
    * IF NOT: Message that SEATSOCC is to high.
    * get new cell value of SEATSOCC.
        CALL METHOD pr_data_changed->get_cell_value
          EXPORTING
            i_row_id    = ps_good-row_id
            i_fieldname = ps_good-fieldname
          IMPORTING
            e_value     = l_seatsocc.
    * get old cell value of SEATSMAX
        READ TABLE gt_outtab INTO ls_outtab INDEX ps_good-row_id.
        l_old_seatsmax = ls_outtab-seatsmax.
        IF l_seatsocc > l_old_seatsmax.
          CALL METHOD pr_data_changed->add_protocol_entry
            EXPORTING
              i_msgid     = '0K'
              i_msgno     = '000'
              i_msgty     = 'E'
              i_msgv1     = text-m01  "Die Anzahl der belegten Plätze
              i_msgv2     = text-m02 "übersteigt die Kapazität des Flugzeugs
              i_msgv3     = ls_outtab-planetype
              i_fieldname = ps_good-fieldname
              i_row_id    = ps_good-row_id.
          error_in_data = 'X'.
        ENDIF.
      ENDMETHOD.                           " CHECK_SEATSOCC
    ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
    *       MAIN                                                          *
    END-OF-SELECTION.
      CALL SCREEN 100.
    *       MODULE PBO OUTPUT                                             *
    MODULE pbo OUTPUT.
      SET PF-STATUS 'MAIN100'.
      SET TITLEBAR 'MAIN100'.
      IF g_custom_container IS INITIAL.
        IF ( p_byval = 'X' ).
          PERFORM create_and_init_alv_byval
                               CHANGING gt_outtab
                                        gt_fieldcat
                                        gs_layout.
        ELSE.  " ( p_byref = 'X' ).
          PERFORM create_and_init_alv CHANGING gt_outtab
                                               gt_fieldcat
                                               gs_layout.
        ENDIF.
      ENDIF.
    ENDMODULE.                    "pbo OUTPUT
    *       MODULE PAI INPUT                                              *
    MODULE pai INPUT.
      TRANSLATE ok_code TO UPPER CASE.
      save_ok = ok_code.
      CLEAR ok_code.
      CASE save_ok.
        WHEN 'EXIT'.
          PERFORM exit_program.
        WHEN 'SAVE'.
          CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
            EXPORTING
              i_structure_name                  = 'SFLIGHT'
              i_grid_title                      =
                  'Before CHECK_DATA_CHANGED -> changes not yet retrieved'
            TABLES
              t_outtab                          = gt_outtab
            EXCEPTIONS
              OTHERS                            = 99.
          g_grid->check_changed_data( ).
          CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
            EXPORTING
              i_structure_name                  = 'SFLIGHT'
              i_grid_title                      =
                  'After CHECK_DATA_CHANGED -> changes retrieved'
            TABLES
              t_outtab                          = gt_outtab
            EXCEPTIONS
              OTHERS                            = 99.
          PERFORM save_data.
        WHEN OTHERS.
    *     do nothing
      ENDCASE.
    ENDMODULE.                    "pai INPUT
    *&      Form  SAVE_DATA
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM save_data .
      IF ( g_event_receiver->error_in_data = 'X' ).
        MESSAGE 'Error in data -> saving not possible' TYPE 'S'.
      ELSE.
        MESSAGE 'Data saved' TYPE 'S'.  " simulates DB update
      ENDIF.
    ENDFORM.                    " SAVE_DATA
    *       FORM EXIT_PROGRAM                                             *
    FORM exit_program.
      LEAVE PROGRAM.
    ENDFORM.                    "exit_program
    *&      Form  BUILD_FIELDCAT
    *       text
    *      <--P_GT_FIELDCAT  text
    FORM build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat.
      DATA ls_fcat TYPE lvc_s_fcat.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name = 'SFLIGHT'
        CHANGING
          ct_fieldcat      = pt_fieldcat.
      LOOP AT pt_fieldcat INTO ls_fcat.
        IF    ls_fcat-fieldname EQ 'PLANETYPE'
           OR ls_fcat-fieldname EQ 'SEATSOCC'.
    *§1.Set status of columns PLANETYPE and SEATSOCC to editable.
          ls_fcat-edit = 'X'.
    * Field 'checktable' is set to avoid shortdumps that are caused
    * by inconsistend data in check tables. You may comment this out
    * when the test data of the flight model is consistent in your system.
          ls_fcat-checktable = '!'.  "do not check foreign keys
          MODIFY pt_fieldcat FROM ls_fcat.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "build_fieldcat
    *&      Form  create_and_init_alv_byval
    *       text
    *      <--P_GT_OUTTAB  text
    *      <--P_GT_FIELDCAT  text
    *      <--P_GS_LAYOUT  text
    FORM create_and_init_alv_byval
                      CHANGING
                            value(pt_outtab)  LIKE gt_outtab[]  " by value
                            pt_fieldcat TYPE lvc_t_fcat
                            ps_layout TYPE lvc_s_layo.
      PERFORM create_and_init_alv CHANGING pt_outtab
                                           pt_fieldcat
                                           ps_layout.
    ENDFORM.                    " create_and_init_alv_byval
    *&      Form  CREATE_AND_INIT_ALV
    *       text
    *      <--P_GT_OUTTAB  text
    *      <--P_GT_FIELDCAT  text
    *      <--P_GS_LAYOUT  text
    FORM create_and_init_alv
                      CHANGING
                            pt_outtab  LIKE gt_outtab[]  " by reference
                            pt_fieldcat TYPE lvc_t_fcat
                            ps_layout TYPE lvc_s_layo.
      DATA: lt_exclude TYPE ui_functions.
      CREATE OBJECT g_custom_container
             EXPORTING container_name = g_container.
      CREATE OBJECT g_grid
             EXPORTING i_parent = g_custom_container.
    * Build fieldcat and set columns PLANETYPE and SEATSOCC
    * edit enabled.
      PERFORM build_fieldcat CHANGING pt_fieldcat.
    *§2.Optionally restrict generic functions to 'change only'.
    *   (The user shall not be able to add new lines).
      PERFORM exclude_tb_functions CHANGING lt_exclude.
      SELECT * FROM sflight INTO TABLE pt_outtab UP TO g_max ROWS.
      CALL METHOD g_grid->set_table_for_first_display
        EXPORTING
          is_layout            = ps_layout
          it_toolbar_excluding = lt_exclude
        CHANGING
          it_fieldcatalog      = pt_fieldcat
          it_outtab            = pt_outtab.
    * set editable cells to ready for input
      CALL METHOD g_grid->set_ready_for_input
        EXPORTING
          i_ready_for_input = 1.
    *§3.Optionally register ENTER to raise event DATA_CHANGED.
    *   (Per default the user may check data by using the check icon).
      CALL METHOD g_grid->register_edit_event
        EXPORTING
          i_event_id = cl_gui_alv_grid=>mc_evt_enter.
      CREATE OBJECT g_event_receiver.
      SET HANDLER g_event_receiver->handle_data_changed FOR g_grid.
    ENDFORM.                               "CREATE_AND_INIT_ALV
    *&      Form  EXCLUDE_TB_FUNCTIONS
    *       text
    *      <--P_LT_EXCLUDE  text
    FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
    * Only allow to change data not to create new entries (exclude
    * generic functions).
      DATA ls_exclude TYPE ui_func.
      ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
      APPEND ls_exclude TO pt_exclude.
      ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
      APPEND ls_exclude TO pt_exclude.
      ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
      APPEND ls_exclude TO pt_exclude.
      ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
      APPEND ls_exclude TO pt_exclude.
      ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
      APPEND ls_exclude TO pt_exclude.
    ENDFORM.                               " EXCLUDE_TB_FUNCTIONS

  • System copy for ABAP+JAVA system using SAPINST method

    Dear support,
    We have recently upgraded to ECC 6.0 system and we have been still doing system copy by using backup and restore method. I know its<b> wrong</b>.
    which involves below steps , this old methos works fine for ABAP engine and evreything looks ok.But java engine will not work.
    So we need to use SAPINST method as described in note 785848 and system copy guide available on OSS. But i am really not able to understand sequence
    for tasks to be carried out in this SAPINST method.
    <b>Can anybody list few sequence along with step by step procedure as i mentioned below for old system copy procedure.</b>
    Is it really difficult to make that for <b>SAPINST</b>  as everybody says refer to standard guide and note ?
    Anybody if possible can make the same way as i did below , i think it would rather be small as far as my understanding after reading those docs.
    Simple old system copy procedure works for ABAP is as:
    Run the following command on source system.
    a. Login as <sid>adm
    b. svrmgrl
    c. connect internal
    d. alter database backup controlfile to trace;
    e. exit;
    f. Above command will generate a .trc file in /oracle/P01/saptrance/usertrace directory.
    g. Copy the text from CREATE CONTROLFILE until the ( and paste it in to any new .sql or controlfile.sql file.
    h. Copy the controlfile.sql to target system.
    i. Edit the file and replace the entire source SID to target SID.
    j. Edit the reuse database command with the set database command
    Copy the aft generated during the backup file from the source system to target system. (/oracle/<SID>/sapbackup)
    a. Change all the source <SID> to target <SID>.
    b. Only don't change the backup volume name it must be target system <SID>.
    c. Copy the above aft file name line from the source back<SID>.log to target<SID>.log file.
    5. Shutdown the target server instance.
    6. From this onwards all the command on the target system only.
    a. Login as <SID>adm
    b. run the SAPDBA
    c. select J (Restore/Recovery)
    d. select B (Full restore and recovery)
    e. select A (Select backup of type)
    f. Select the offline backup which you want to restore.
    g. It will take some time to restore.
    h. Once the database is restored login as <SID>adm and run the
    i. svrmgrl
    j. connect internal;
    k. startup nomount (if the database is already mounted shutdown it using the shutdown command)
    l. run the following command
    m. @controlfile.sql (file name of the control file contains the CREATE CONTROLFILE statement)
    n. After the run the above command it should give the "Statement Processed)
    o. alter database open resetlogs.
    I am really looking forward to see anybody take some time out to prepare this kind of step by step procedure.
    It would be of greate help for all of us for performing system copy with sapinst method.
    Looking forward for your support.
    Best Regards,
    AjitR

    Hi,
    As per the guide you need to do source system Technical Preparations, in that running the export preparation is also one. You need to run this first before you start the export, if and only if export will successful if preparation is successful.
    Yes you need to create the export directory to take the export copy of source system, it may be any where in your server. It should be having 6 to 8 GB free space.No need to create the export directory in target system, after export is completed in the source system you copy the export directory to the target system.
    <b>Target system</b>
    Yes you need to take the back up file system and delete all the contents of the directory.
    Yes it can be considered as fresh system installation but copy of source system.
    Yes the process follows after you giving the export directory path .
    Next screen you will get the database drop and recreate screen chouse the drop and recreate method
    Next J2EE user name and password
    Next DDIC password
    Next you have to give kernel and oracle client dvd path
    Next Parameter checking screen here if you are selected database drop and recreate you have to revise the oracle database system option
    If you are selecting review next screen is database advance option you have to select the advanced option
    Next you have to select following option to recreate
    1 Sapdata directory mapping
    2 Database instance file system
    3 Create database parameter
    4 Create tablespace
    Next screen sapdata directory creating
    Next screen you can just click next no need to change any setting
    Next table creation
    Next screen specify oracle instance directories
    Next again parameter checking and last this is last screen
    Next will be the execution screen
    Reward points if usefull

  • ABAP OO Doubt - validate call method.

    Hi experts
    I'm beginer in ABAP OO and i created this code :
    output-cep = ch_adrc_struc-post_code1.
                 TRY.
                     CREATE OBJECT lr_cep.
                   CATCH cx_ai_system_fault .
                 ENDTRY.
                 TRY.
                     CALL METHOD lr_cep->si_servico_cep_out
                       EXPORTING
                         output = output
                       IMPORTING
                         input  = input.
                   CATCH cx_ai_system_fault .
                 ENDTRY.
    My doubt is : How to know the call method worked?
    In call function i use = if sy-subrc = 0 for check the return but can i use it after call method ?
    thanks a lot.

    there is an importing which is used to get back data.
    once you process input then you can decide whether method worked or not.

Maybe you are looking for

  • How to assign bean value to a local variable in JSP using struts.

    Hi everybody! I've a problem that puzzled me on how to assign a bean value to a local variable like String in JSP using struts. we can have someting like this to display the value <bean:write name="detailService" property="status" />or <bean:define i

  • Export SQL query from link or button

    I want to list several 'canned' SQL queries on one page as buttons or links; and have the result of selection be an immediate extract/download to excel of the data. How can I best do this? I suppose I could create separate hidden regions with their o

  • XML confirmation message back to XI

    Is there a standard XML layout which I could send back to XI which can confirm the status of "acceptance" or "failure" of a transmission? From my third party application I would like to send an error message back to XI and have it update the message

  • BEGIN failed--compilation aborted at ./adclone.pl line 40.

    I've a problem with adclone.pl? [oravis@ebs bin]$ ./adclone.pl perl: warning: Setting locale failed. perl: warning: Please check that your locale settings:   LANGUAGE = (unset),   LC_ALL = (unset),   LC_CTYPE = "UTF-8",   LANG = "en_US.UTF-8"     are

  • Where do i find the security code if box is lost?

    i currently broke my iPhone...does anyone know how i can share two iTunes accounts?!