Requirements implementation clarification

Hi Experts,
I would need your suggestion again. We have Trusted source as LDAP and target systems as SAP (SAP1, SAP2, SAP3). I did trusted recon to get all the users to OIM. User count in trusted source is 40K. I have few requirement,
Requirement: User has SAP accounts and I want to link these accounts to OIM users
My suggestion: Run target recon against SAP so we can link SAP accounts to OIM users.
Your suggestion: ?
Requirement: User has SAP account where many sap attributes are not filled and it needs to be populated from external system say another SAP2.
My suggestion: During target recon use post process handler to fetch/populated attribtues in SAP from SAP2 and provision back to SAP using OIM API's.
Your suggestion: ?
Requirement: If there is any change in SAP attributes during target recon with SAP1, modified attributes must be synced to SAP 2 but not to SAP3
My suggestion: Map all the attributes to OIM and use Triggers to update in target system when OIM attribute value changes.
Your suggestion: ?
Please let me know your suggestion/best practises.. Also feel free to educate me whether my suggestion/approach is correct.
Thanks a lot.

Requirement: User has SAP accounts and I want to link these accounts to OIM users
My suggestion: Run target recon against SAP so we can link SAP accounts to OIM users.
Your suggestion: Correct ..
Requirement: User has SAP account where many sap attributes are not filled and it needs to be populated from external system say another SAP2.
My suggestion: During target recon use post process handler to fetch/populated attribtues in SAP from SAP2 and provision back to SAP using OIM API's.
Your suggestion: Can you able to handle in from outside of OIM. Populate SAP2 to SAP1 directly...
another option (I haven't tried but you can attempt it ) if the set of attributes are totally different in SAP1 and SAP 2 you can run the target reconciliation against both the SAP instance. Only change would be the different IT Resource Object.
Requirement: If there is any change in SAP attributes during target recon with SAP1, modified attributes must be synced to SAP 2 but not to SAP3
My suggestion: Map all the attributes to OIM and use Triggers to update in target system when OIM attribute value changes.
Your suggestion: Are you putting every attributes on OIM User profile ? If yes then only you can use user.trigger lookup ..

Similar Messages

  • GRC AC v5.3 CUP "User Access Reviews" (UAR) requires implementation of ERM?

    Hi Experts,
    re: GRC AC v5.3 CUP "User Access Reviews" (UAR) requires implementation of ERM?
    After reading the guides and forum it is still not clear to me if ERM is absolutely required in order to use CUP "User Access Reviews". The guide mentions in ERM the Role Usage Synch job has to be run, and then that data is to be loaded into CUP. Is this step absolutely required or can we skip it.

    Gary,
      ERM is a necessity if you want to fully use UAR in CUP. I don't know why SAP did it this way but it is how it is.
    Regards,
    Alpesh

  • ListerUsers methods in 10.3.1 requires implementation, but not in 10.3

    Hello All,
    We have one security provider developed in 10.3 which is running fine.
    When we developed the same in 10.3.1, by selecting "Home> Security Realms> myrealm> Users and Groups" automatically tab "Users" appears . This shows a stack trace:
    Home > Security Realms > myrealm > Users and Groups
    Registerblatt "Users" enthält folgenden Stacktrace:
    The source of this error is:
    com.bea.portlet.adapter.scopedcontent.ActionLookupFailedException: java.lang.AssertionError: Method not implemented
    at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.executeAction(ScopedContentCommonSupport.java:697)
    at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.renderInternal(ScopedContentCommonSupport.java:266)
    at com.bea.portlet.adapter.scopedcontent.StrutsStubImpl.render(StrutsStubImpl.java:107)
    at com.bea.netuix.servlets.controls.content.NetuiContent.preRender(NetuiContent.java:292)
    at com.bea.netuix.nf.ControlLifecycle$6.visit(ControlLifecycle.java:428)
    at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:727)
    at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:739)
    Caused by: java.lang.AssertionError: Method not implemented
    at org.acme.rnd.security.SopAuthenticatorMBeanImpl.listUsers(SopAuthenticatorMBeanImpl.java:153)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    Therefore we can not create any user in Security Realm.
    The method listerUsers comes from Interface userReader whose methods were generally not implemented by the BEA consultant. It appears that, with 10.0 and 10.3.0, you do not need an implementation.
    What has been changed to 10.3.1, so that now an implementation is required?
    I put the files SopAuthenticator.xml and SopAuthenticatorMBeanImpl.java to sketch the current implementation.
    In the Users tab, it is not necessary for us to display the User and Groups of our security provider. Consequently, the methods Listusers etc could provide empty lists.
    How can this easily be implemented?
    How the SopAuthenticator.xml would have to be expanded and what class, which for example, returns the empty list, needs to be created?
    /Ed

    Adding the folder that contains jni.dll fixed this problem for me.
    I am using Ant 1.7.0. In ant_home/bin/ant.bat, there is a line that says ":runAntWithClasspath".
    The next line contains the classpath that gets sent to ANT.
    For me that line said:
    "%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar;%JAVA_HOME%\lib\tools.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
    I found jni.dll in C:\Dev\bea\wlserver_10.3\common\lib\, so I added that to my classpath by changing that line to:
    "%_JAVACMD%" %ANT_OPTS% -classpath "C:\Dev\bea\wlserver_10.3\common\lib\;%ANT_HOME%\lib\ant-launcher.jar;%JAVA_HOME%\lib\tools.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
    Hope that works for you!

  • HR Implementation - Clarification on Org. Unit & Personnel Subarea

    Hello Experts,
    We are implemenating OM in which Company is distribute into Plants(PA),which is further Diveded into Department,which is further divided into Sections,which is furter divided into Gang no.
    Company -> Plants -> Department ->Sections ->Gang No.
    Gang no is basically used for Payroll & Time Management for identifying EMployees into Groups.
    Can anyone help how we can MAP in SAP HR.
    THanks,
    Viru.

    Hi,
    Your requirement can be addressed with different structures in SAP: Enterprise structure, Organizational structure and Pay structure:
    Enterprise structure:
    Company = SAP Company code
    Plants = SAP Personnel Area
    Organizational structure:
    Department = SAP Organizational unit
    Sections = SAP Organizational unit under main unit (Department)
    Pay structure:
    Gang No. = SAP Payroll area
    Cheers

  • Required Implementation Guide for SAP Netweaver BI

    Hi,
    I need an Implementation Guide of SAP Netweaver BI.
    Thank you,
    Best Regards,
    Shailu.

    hello,
    as i said please search in SDN.
    BI 7 Blogs: Troubleshoot the SAP NetWeaver 2004s BI Frontend Installation
    Installation Info: https://websmp205.sap-ag.de/installNW70
    Troubleshoot BI 7 frontend installation: Troubleshoot the SAP NetWeaver 2004s BI Frontend Installation
    Installation & Upgrade guides: https://websmp206.sap-ag.de/instguides
    https://websmp205.sap-ag.de/~sapidb/011000358700005412792005E.pdf
    Check some more info at:
    Re: Urgent Help: Configuration Documents & Blue Print Documents for BI & BW
    BI 7 User Guide
    Regards,
    Dhanya

  • Require small clarification on scheduler

    We have a scheduler which runs for every 2min and 5hours a day. From my observation it is find that these schedular are running fine for some duration of time. But after that,the status of scheduler is running but couldn't see any log for that. Even if I make it INACTIVE and run it again it doesn't run.
    If we create a new scheduler again and if we run the new scheduler,then its working fine.
    What may the reason that the old scheduler stops running and doesn't run again even if we start it ??

    If the task is throwing an exception which is not handled and goes up the stack to the quartz scheduler class, it can block the thread.
    I would say to check the log file (also see if you have the correct loglevel) for such exceptions.
    Btw, is it a standard task ? or a custom one ?
    Octavian

  • Notification Required if goods issue aganist the cost centre

    Issue/Concern:-
              To reserve stock for a cost center & don't allow issue to another cost centre or notification should be sent to the user.
    Description:-
    Stock is reserved by creating reservation by MB21 for one cost centre e.g.1151-Production. We want to restrict this stock for the same Costcentre only.But when tried to issue stock to another cost center 11512-Maintanance,
                  System should allow for goods issue of this stock to another cost center other than Prouction but notification sent to the Prouction CostCentre user who has done the reservation while issuing.
    Kindly let me know if you require more clarifications on this.

    Yes Exactly,
                      UserA     -
    Reservation 0001--Req Date 03-04-2010Material M-Cost Centre Production
    Now the     User B    -
    Reservation 0002--Req Date 01-04-2010Material M-Cost Centre Maintanence
    Then User A has to get an email alert notification while Material M issuing to the User B.

  • Implement row-level security using Oracleu2019s Virtual Private Databases (VPD)

    Environment: Business Objects XI R2; Oracle 10g
    Functional Requirement:
    Implement row-level security using Oracleu2019s Virtual Private Databases (VPD) technology. The restriction is that the Business Objects Universe connection should use a generic/u201Capplicationu201D database user account. This will allow the organization to avoid the situation where the Business Objects password and the Oracle password need to be kept in synch.
    What do we need from the Business Objects support team?
    1.     Review the 2 attempted solutions that we have tried to implement
    2.     Propose solutions/answers to open questions for each of the attempted solutions
    3.     Propose any alternate solution that will help us implement the Function Requirement stated above
    Attempted Solution 1: Connection String uses Oracle Proxy User
    The connection string that is specified in the Universe is the following:
    app_user[end_user]/app_user_pwdarrobaDatabase.WORLD
    app_user = generic application user
    end_user = the oracle account of the end user which is set using arrobaVariable('BOUSER') app_user_pwd = password of the generic application user
    We have tried and implemented this in our test environment. However, we have some questions and concerns around how the connections are reused in a connection pool environment.
    Open Question for Solution 1:
    i. What happens when multiple proxy users try to connect on at the same time?  Business Objects shares the generic app_user connect string.  However, every user that logs on will have their own unique proxy user credentials.  Will there be any contention involved?  If so, what kind of errors can we expect?
    ii. If a user logs on using his credentials (proxy user), and business objects opens up a connection to the database using that user's credentials (as the proxy user but logging in through the generic app user). Then the user exits out --> based on our test today, it seems like the database connection remains open.  In that case, if another user logs on similarly with their credentials, will business objects simply assign the first users connection to that second user?  If so, then our security will not work.  Is there a way that Business Objects can somehow ensure that everytime we close a report, the connection is also terminated both at the BO and DB levels?
    iii. Our 3rd question is general high level -> How connection pooling works in general and how it is implemented in BO, i.e. how are new connections assigned, how are they recycled, how are they closed, etc.
    Attempted Solution 2: Using the ConnectInit parameter
    Reading through a couple of the Business Objects documents, it states that u201CUsing the ConnectInit parameter it is possible to send commands to the database when opening the session which can be used to set database specific parameters used for optimization.u201D
    Therefore, we tried to set the parameter in the Universe using several different options:
    ConnectInit = BEGIN SYSTEM.prc_logon('arrobaVARIABLE('BOUSER')'); COMMIT; END; ConnectInit = BEGIN DBMS_SESSION.SET_IDENTIFIER('arrobaVariable('BOUSER')'); COMMIT; END;
    Neither of the above iterations or any variation of that seemed to work. It seems that the variable is not being set or being u201Cexecutedu201D on the database.
    One of the Business Objects documents had stated that Patch ID 38, 977, 350 must be installed in our BO environments. We have verified that this patch has been applied on our system.
    Open Questions for Solution 2:
    How do we get the parameter ConnectInit to work? i.e. what is the proper syntax to enter and what other things do we need to check to get this to work.
    Note: Arroba word is being used instead of the symbol in order to avoid following error message:
    We are sorry but your message can not be posted since you have included an email address. Please remove the email address and re-post.

    the connectinit setting should look something like this:
    declare a date; begin vpd_setup('@VARIABLE('BOUSER')'); Commit; end;
    The vpd_setup procedure (in Oracle) should look like this:
    CREATE OR REPLACE procedure vpd_setup (p_user varchar)IS
    BEGIN
      DBMS_SESSION.set_vpd( 'SESSION_VALUES', 'USERID', p_user );
    END vpd_setup;
    Then you can retrieve the value of the context variable in your vpd functions
    and set the vpd.

  • How to implement  BADI's for the below issue

    Hi All,
    The URL is being populated correctly (without any spaces) to the follow on document (PR/PO) created in R/3 after implementing code corrections in BBP (replacing space by ‘=’ as shown below).
    When sending the PO to supplier portal, the outbound IDOC segment does not get populated properly. The text format ‘=’ is again converted to space in ECC 6.0 which was not the case with 4.5B.
    This is an upgrade issue as the function module used to format text ‘FORMAT_TEXTLINES’ is completely different in ECC 6.0. The entire code of this function module in 4.5B has been commented in ECC 6.0 and new code has been implemented which splits the text and inserts spaces while formatting as shown below.
    This issue can be resolved by implementing a customer exit or a BADI which gets called after standard SAP populates the IDOC. It requires implementing custom code to remove the unwanted spaces inserted by standard SAP for text id F07. Hence after SAP completes its processing to populate the IDOC, the text would be processed further to remove unwanted spaces before actually sending the IDOC out from SAP R/3.
    Thus this upgrade issue resolution requires R/3 development
    1.     BADI Definition:  ME_MMPUR_EINM, Method: PROCESS_TEXT
    This option is preferable.
    2.     User exit: EXIT_SAPLEINM_002
    I need your help on how to write this code in the form of BADI's.where we write and how to implement. ASAP
    thanks,
    Sridhar

    Hi All,
    The URL is being populated correctly (without any spaces) to the follow on document (PR/PO) created in R/3 after implementing code corrections in BBP (replacing space by ‘=’ as shown below).
    When sending the PO to supplier portal, the outbound IDOC segment does not get populated properly. The text format ‘=’ is again converted to space in ECC 6.0 which was not the case with 4.5B.
    This is an upgrade issue as the function module used to format text ‘FORMAT_TEXTLINES’ is completely different in ECC 6.0. The entire code of this function module in 4.5B has been commented in ECC 6.0 and new code has been implemented which splits the text and inserts spaces while formatting as shown below.
    This issue can be resolved by implementing a customer exit or a BADI which gets called after standard SAP populates the IDOC. It requires implementing custom code to remove the unwanted spaces inserted by standard SAP for text id F07. Hence after SAP completes its processing to populate the IDOC, the text would be processed further to remove unwanted spaces before actually sending the IDOC out from SAP R/3.
    Thus this upgrade issue resolution requires R/3 development
    1.     BADI Definition:  ME_MMPUR_EINM, Method: PROCESS_TEXT
    This option is preferable.
    2.     User exit: EXIT_SAPLEINM_002
    I need your help on how to write this code in the form of BADI's.where we write and how to implement. ASAP
    thanks,
    Sridhar

  • Table clarification

    Hello,
    I require some clarification concerning table usage if possible.
    I have a function called foo, that has a table declared in its tables tab. the table is: COMP like SDOKCOMPRP.
    in this fucntion i am calling sap function 'SDOK_PHIOS_FILE_PROPERTIES_GET'
    call function 'SDOK_PHIOS_FILE_PROPERTIES_GET'
    tables:
    COMPONENTS = COMP
    BAD_OBJECTS = BADOBJ.
    so does this mean, then when i call function 'SDOK_PHIOS_FILE_PROPERTIES_GET', i am sending it my copy of COMP and then function 'SDOK_PHIOS_FILE_PROPERTIES_GET' fills it up  and return it to the faller function foo ? so it is a two way assignment in that foo first assign COMP to COMPONENTS and then 'SDOK_PHIOS_FILE_PROPERTIES_GET' assigns/returns the result of COMPONENTS to COMP ?
    thanks

    Excerpt from the F1 help on Function (yepp, it is THAT easy!):
    <b>Function Module Interfaces </b>
    There are four kinds of parameters: IMPORTING, EXPORTING, CHANGING,and TABLES, which are all created in the Function Builder.
    IMPORTING parameters are pure inbound parameters. When they are called, a value is transferred and the value of the actual parameter stays the same.
    EXPORTING parameters are pure outbound parameters. The value of the actual parameter when it is called is not important and after the parameter returns from being called, the actual parameter contains the value of the formal parameter.
    CHANGING parameters are both inbound and outbound parameters. When they are called, a value is transferred and after the parameter returns from being called, the actual parameter contains the value of the formal parameter.
    TABLES parameters are like CHANGING parameters both inbound and outbound parameters, but can only be used for transferring standard tables. In this case the internal table always has a header line, from the formal parameter's viewpoint.
    There are two types of parameter passing: pass by reference and pass by value.
    Pass by reference points the formal parameter directly to the actual parameter so that changes to the formal parameter immediately affect the actual parameter.
    Pass by value creates the formal parameter either as a copy of the actual parameter when the function module is called (at IMPORTING value and CHANGING value parameters) or creates it initially on the stack (at EXPORTING value parameters). With CHANGING value and EXPORTING value parameters, the formal parameter is copied to the actual parameter when it returns from the function module call.
    Pay attention to the following when combining the four types of parameters ( IMPORTING, EXPORTING, CHANGING, and TABLES parameters) with the two types of passing (pass by reference and pass by value):
    You can use either "pass by value" or "pass by reference" with IMPORTING, EXPORTING, and CHANGING parameters, whereas you can only use "pass by reference" with TABLES parameters.
    <b>Conclusion:</b>
    If the called function module updates the table you passed, then YES the table will be changed.
    Guenther
    Message was edited by:
            Guenther Schober

  • Clarifications please

    Hi
    i require some clarifications
    1)
    The application is in servlet and jsp
    There is arequirement to report errors to system administrator
    by writing errors in a log file
    to do that in the catch block i am writing to a text file
    my doubt is if many people are accessing concurrently
    and get errors then writing to the log file concurrently may
    corrupt the log file so synchronization has to be used for the method
    writing to the log file
    is that correct on any better solution to report errors to administrator
    2)
    consider
    String str = "hey" + "hello";
    should stringbuffer be used in this
    case or does the compilier compiles with stringbuffer usage
    and we need not use stringbuffer
    3)
    when we use servlet as a controller we use getRequestDispatcher().forward()
    to transfer control to different pages
    here the problem is that the url at the top of browser
    will not have the actual url of the
    page dispalyed and we have to use request.getRequestURI()
    to get the actual url of the page displayed
    is that not a disadvantage
    regards
    Javid

    1) JavaIO is synchronized all by itself. You don't have to worry about this. (Java 1.4 changes this somewhat.)However, you should carefully consider what and how much you are logging to this text file. JavaIO is relatively slow (due to synchronization) meaning the more you log, the slower your application. In addition, have you considered things like rolling files? How large will you let your log file get? If it runs for a year (or 6 months or whatever) you could end up with a VERY large log file. This means slower access and less disk space. Consider looking at an existing log pacakge (such as log4j by the jakarta group).
    2) In general the "+" operator is slower than using a StringBuffer. For just one concatentation, i.e. "this" + "that", it doesn't matter which you use. Any more than one and you should probably use StringBuffer. For repetitive concatenation, i.e. in a for loop, you should definately use StringBuffer.
    3) I will refer you to another topic and an answer I posted there for this point: http://forum.java.sun.com/thread.jsp?thread=226695&forum=33&message=803659. In short, no this is not a disadvantage and yes this is what it's supposed to do.
    Hope this helps.

  • Implementing Firewall behind Catalyst 2950 SI Switch

    Hi,
    Current Scenario:
    2 x 3700 series routers in active-standby configuration (HSRP) . They are implementing IOS SLB and NAT.
    Behind these a 2950-24 switch. This box has only the Standard Image.
    Behind this again are a number of Windows servers requiring protection.
    Requirement:
    Implement Firewall Solution with SonicWall in order to protect a subset of these hosts.
    Questions:
    1. Can the Firewall be 'hung' off the switch and create port-based VLAN's?
    2. Would this involve sub-interfaces on the Firewall? I read in SonicWall doc. that with appropriate Firmware upgrade, it can implement sub-interfaces, but requires a 802.1q-capable switch.
    3. Leading on from 2., I believe 2950-24 cannot run 802.1q since it runs only a Standard Image(SI), according to CCO. Is this true?
    4. Any other advice appreciated.
    Thanks again.

    Hi,
    Yes you can, create two VLAN's on the switch, say 20 and 30. Assign ports for external firewall interface and routers on vlan 20. Assign ports for servers and internal interface on firewall on vlan 30.
    You should not not need sub-interfaces as the firewall will have a separate external and internal interface.
    Let me know if I have pointed you in the right direction or if I not gotten the right end of your question.

  • Clarification: Decommissioning Exchange Mailbox server after move to Office 365 will not cause problems with the remaining Exchange CAS server

    Environment: 1x Exchange 2013 Mailbox server
    1x Exchange 2013 CAS server
    All users migrated to office365. MX record pointed to Office365
    DIRSync implemented
    Clarification: All users are now using Office365. As per recommendation from Microsoft there should be 1 exchange server to be retained and the rest can be decommissioned. I tried to test the scenario by shutting down the exchange server
    with the mailbox role and leaving the exchange server with CAS role online. I tried to run Exchange Management shell on the CAS but I'm getting errors. To clarify, once I have uninstalled the Exchange server mailbox will the CAS still look for the mailbox
    server? Or do I need to decommission both Exchange servers and then install a new Exchange server with CAS role?

    Hi
    If you are looking for a hybrid coexistence with office 365 then at least one Exchange 2013 Client Access and one
    Exchange 2013 Mailbox server must be installed in the on-premises organization to run the Hybrid Configuration wizard and support Exchange 2013-based hybrid deployment functionality.
    http://technet.microsoft.com/en-us/library/hh534377(v=exchg.150).aspx
    Summary - You need to have at-least one CAS and MBX combined together in onpremise or it can even be seperate CAS and seperate MBX but microsoft recommends to have both CAS and MBX together in onpremise
    Source - 
    http://technet.microsoft.com/en-us/library/hh534377(v=exchg.150).aspx
    Remember to mark as helpful if you find my contribution useful or as an answer if it does answer your question.That will encourage me - and others - to take time out to help you Check out my latest blog posts on http://exchangequery.com Thanks Sathish
    (MVP)

  • Negative interface ("will never implement") ?

    Hi forum,
    I would like to know how you would go to ensure that a class and the classes that may extend it never implement a given interface.
    For instance, let's say that I have class that I cannot allow to be serialized.
    In this case, apart from writing null writeObject & readObject methods and declaring all members transient, is there any language construct that would allow me to specify which interface not to implement?
    Cheers,
    adsm

    Hi Joachim,
    Thank you for your answer.
    To answer your question: this is just an example. I have picked Serializable because implementing this interface has specific requirements by itself, and these requirements implementation may be "tweaked" to effectively render a class un-serializable. I was just looking for a language feature that would allow me to specify that a class and its children may never implement a given interface. I haven't found one, never heard of one and you kindly confirmed that.
    Cheers,
    adsm

  • Editable Alv: ERROR in er_data_changed- display_protocol

    I have one fields "Emp_dept" in the record of the ALV Grid which can be edited, but when I edit this field  with  enter  event it will generate a error in display protocal, I want it to save in database , I debuged the program it reflect the in internal table but failed to reflect the in change in data base, as i Just started dveelopment in abap programing i searched the whole web for this problem but couldnot sucessfull please help me in this regarrd
    Here is my code:
    I am using module pool programing and I am following abap slandered program Bcalv_edit_03.
    FUNCTION-POOL Z_EMPLOYEE.                   "MESSAGE-ID ..
    * INCLUDE LZ_EMPLOYEED...                    " Local class definition
    TABLES:ZEMPLOYEE, ZEMP_COMM.
    DATA: zemploye TYPE TABLE OF zemployee  WITH HEADER LINE,
      WA TYPE zemployee .
    DATA: ZEMP_COM TYPE TABLE OF ZEMP_COMM   WITH HEADER LINE.
      DATA : WACOMM TYPE ZEMP_COMM.
    DATA: ZEMP_ADR TYPE TABLE OF ZEMP_ADRESS  WITH HEADER LINE,
    WA_ADR TYPE ZEMP_ADRESS.
    DATA: ZEMP_EDU TYPE TABLE OF ZEMP_EDUCATION1  WITH HEADER LINE,
    WA_EDU1 TYPE ZEMP_EDUCATION1.
    DATA EMPD TYPE ZEMP_ID.
    *data empd LIKE zemployee-emp_id.
      data: O_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,
    O_GRID TYPE REF TO CL_GUI_ALV_GRID,"Grid
       i_selected_rows TYPE lvc_t_row,"Selected Rows
            w_selected_rows TYPE lvc_s_row,
       WA_LAYOUT TYPE LVC_S_LAYO,
    class lcl_event_receiver definition deferred.
    data: g_event_receiver type ref to lcl_event_receiver.
    types:BEGIN OF i_zemployee ,
        emp_id type zemployee-emp_id,
       emp_name type zemployee-emp_name,
       D_O_BIRTH TYPE ZEMPLOYEE-D_O_BIRTH,
       D_o_jOIN TYPE ZEMPLOYEE-D_o_jOIN,
       EMP_DEPT TYPE ZEMPLOYEE-EMP_DEPT,
       EMP_NO type ZEMP_COMM-EMP_NO,
       eemp_id type zemp_comm-emp_id,
       EMP_ADRESS TYPE ZEMP_ADRESS-EMP_ADRESS,
       EMP_RES_ADDR TYPE ZEMP_ADRESS-EMP_RES_ADDR,
       EMP_EDU1 TYPE ZEMP_EDUCATION1-EMP_EDU1,
      END OF i_zemployee.
       Data:
         i_tb type i_zemployee,
         emp_itb like table of i_tb.
         data:t_fcat TYPE lvc_t_fcat,
         wa_fcat TYPE lvc_s_fcat.
    DATA:
       screen  TYPE n LENGTH 4 VALUE 0100,
       screen1  TYPE n LENGTH 4 VALUE 0110,
       screen2  TYPE n LENGTH 4 VALUE 0120,
       screen3  TYPE n LENGTH 4 VALUE 0130,
        ok_code LIKE sy-ucomm.
       FORM FREE_OBJECTS .
       CALL METHOD O_GRID->FREE
         EXCEPTIONS
           CNTL_ERROR        = 1
           CNTL_SYSTEM_ERROR = 2
           OTHERS            = 3.
       IF SY-SUBRC <> 0.
         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
       ENDIF.
       FREE O_GRID.
       CALL METHOD O_DOCKING->FREE
         EXCEPTIONS
           CNTL_ERROR        = 1
           CNTL_SYSTEM_ERROR = 2
           OTHERS            = 3.
       IF SY-SUBRC <> 0.
         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
       ENDIF.
      FREE O_DOCKING.
    ENDFORM.
      form sol using emp_idd .
        data l_num(5) type n.
        l_num = emp_idd.
    * CALL FUNCTION 'NUMBER_GET_NEXT'
    *         EXPORTING
    *              nr_range_nr             = '01'
    *              object                  = 'ZEMP_AUTO'
    *         IMPORTING
    *              number                  = l_num
    *         EXCEPTIONS
    *              interval_not_found      = 1
    *              number_range_not_intern = 2
    *              object_not_found        = 3
    *              quantity_is_0           = 4
    *              quantity_is_not_1       = 5
    *              interval_overflow       = 6
    *              buffer_overflow         = 7
    *              OTHERS                  = 8.
        l_num = l_num + 1.
    EMP_IDD = L_NUM.
    endform.
      class lcl_event_receiver definition.
      public section.
         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.
    class lcl_event_receiver implementation.
       method handle_data_changed.
         data: ls_good type lvc_s_modi.
        error_in_data = space.
         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 'EMP_DEPT'.
               call method check_planetype
                      exporting
                         ps_good_planetype = 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.  ( Error line)        <-------------------------------
         endif.
       endmethod.
       method check_planetype.
         data: l_planetype type zemp_dept,
               ls_saplane type zemployee,
               ls_good_seatsocc type lvc_s_modi.
         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.
    MODIFY ZEMPLOYEE FROM TABLE emp_itb.
         select single * from zemployee into ls_saplane where
                                          emp_dept = l_planetype.
               if sy-subrc ne 0.
           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.
    endmethod.
    endclass.
    **********************************************Module output****************
    MODULE STATUS_0120 OUTPUT.
      SET PF-STATUS 'START'.
      SET TITLEBAR 'STARTT'.
    IF O_DOCKING IS INITIAL.
    *   Creating Docking Container
        data: lt_exclude type ui_functions.
           CREATE OBJECT O_DOCKING
                  EXPORTING
                    RATIO                       = '95'.
           IF SY-SUBRC EQ 0.
    *   Creating Grid
             CREATE OBJECT O_GRID
                 EXPORTING
                    I_PARENT          = O_DOCKING.
           ENDIF.
    endif.
    * Filling the fieldcatalog table
    *    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    *      EXPORTING
    *        I_STRUCTURE_NAME       = 'i_tb'
    *      CHANGING
    *        CT_FIELDCAT            = t_fcat
    *      EXCEPTIONS
    *        INCONSISTENT_INTERFACE = 1
    *        PROGRAM_ERROR          = 2
    *        OTHERS                 = 3.
       WA_LAYOUT-GRID_TITLE = 'EMPLOYEE TABLE DETAILS'.
       WA_LAYOUT-ZEBRA = 'X'.
       WA_LAYOUT-EDIT = 'X'.
    IF T_FCAT is  initial.
    *  wa_fcat-fieldname = 'EMP_ID'.
    *  wa_fcat-ref_table = 'ZEMPLOYEE'.
    *  wa_fcat-ref_field = 'EMP_ID'.
    *  wa_fcat-col_pos = 2.
    *  APPEND wa_fcat TO t_fcat.
    *  CLEAR wa_fcat.
       wa_fcat-fieldname = 'EMP_NAME'.
       wa_fcat-ref_table = 'ZEMPLOYEE'.
       wa_fcat-ref_field = 'EMP_NAME'.
       wa_fcat-col_pos = 3.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
        wa_fcat-fieldname = 'EMP_DEPT'.
       wa_fcat-ref_table = 'ZEMPLOYEE'.
       wa_fcat-ref_field = 'EMP_DEPT'.
       wa_fcat-col_pos = 4.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
          wa_fcat-fieldname = 'D_O_BIRTH'.
       wa_fcat-ref_table = 'ZEMPLOYEE'.
       wa_fcat-ref_field = 'D_O_BIRTH'.
       wa_fcat-col_pos = 5.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
       wa_fcat-fieldname = 'D_O_JOIN'.
      wa_fcat-ref_table = 'ZEMPLOYEE'.
      wa_fcat-ref_field = 'D_O_JOIN'.
      wa_fcat-col_pos = 6.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
    wa_fcat-fieldname = 'EMP_NO'.
      wa_fcat-ref_table = 'ZEMP_COMM'.
      wa_fcat-ref_field = 'EMP_NO'.
      wa_fcat-col_pos = 7.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
       wa_fcat-fieldname = 'EMP_ADRESS'.
       wa_fcat-ref_table = 'ZEMP_ADRESS'.
       wa_fcat-ref_field = 'EMP_ADRESS'.
       wa_fcat-col_pos = 7.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
       wa_fcat-fieldname = 'EMP_RES_ADDR'.
       wa_fcat-ref_table = 'ZEMP_ADRESS'.
       wa_fcat-ref_field = 'EMP_RES_ADDR'.
       wa_fcat-col_pos = 8.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
       wa_fcat-fieldname = 'EMP_EDU1'.
       wa_fcat-ref_table = 'ZEMP_EDUCATION1'.
       wa_fcat-ref_field = 'EMP_EDU1'.
       wa_fcat-col_pos = 9.
       APPEND wa_fcat TO t_fcat.
       CLEAR wa_fcat.
    ENDIF.
    * CALL METHOD o_grid->register_edit_event
    *    EXPORTING  i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    *    W_VARIANT-REPORT = SY-REPID.
    * Displaying the output
         CALL METHOD O_GRID->SET_TABLE_FOR_FIRST_DISPLAY
           EXPORTING
    *       IS_VARIANT                    = VARIANT
             I_SAVE                        = 'A'
            I_STRUCTURE_NAME       = 'i_tb'
             IS_LAYOUT                     = WA_LAYOUT
             it_toolbar_excluding  = lt_exclude
           CHANGING
           IT_OUTTAB                     =  emp_itb
             IT_FIELDCATALOG               = t_fcat
           EXCEPTIONS
             INVALID_PARAMETER_COMBINATION = 1
             PROGRAM_ERROR                 = 2
             TOO_MANY_LINES                = 3
             OTHERS                        = 4.
         IF SY-SUBRC <> 0.
           MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
    *call method cl_gui_control=>set_focus exporting control = O_GRID.
    *      call method cl_gui_cfw=>flush.
           CALL METHOD o_grid->set_ready_for_input
          EXPORTING
            I_READY_FOR_INPUT = 1.
      CALL METHOD O_GRID->REGISTER_EDIT_EVENT
         EXPORTING
           I_EVENT_ID = CL_GUI_ALV_GRID=>mc_evt_enter.
    *    EXCEPTIONS
    *      ERROR      = 1
    *      OTHERS     = 2.
    **** UPDATE zemployee FROM TABLE emp_itb.
      create object g_event_receiver.
       set handler g_event_receiver->handle_data_changed for o_grid.
    *  IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *  ENDIF.
    ENDMODULE.                 " STATUS_0120  OUTPUT
    *&      Module  USER_COMMAND_0120  INPUT
    *       text
    MODULE USER_COMMAND_0120 INPUT.
    DATA LV_UCOMM TYPE SY-UCOMM.
    *  data: ok_code like sy-ucomm .
      LV_UCOMM = SY-UCOMM.
       CASE LV_UCOMM.
      WHEN 'CANCEL' OR 'EXIT'.
           PERFORM FREE_OBJECTS.
           LEAVE PROGRAM.
         WHEN 'BACK'.
            CALL METHOD o_grid->set_frontend_fieldcatalog
             EXPORTING
               it_fieldcatalog = t_fcat[].
            if o_grid is not initial.
        CALL METHOD o_grid->refresh_table_display
           EXCEPTIONS
             finished = 1
             OTHERS   = 2.
    endif.
           PERFORM FREE_OBJECTS.
           CALL SCREEN 110.
    *      SET SCREEN '0'.
    *      LEAVE SCREEN.
       ENDCASE.
    ENDMODULE.   
    Please help me to solve this porblem..

    Hi suhas,
    my issue is not the lack of data .....
    my issue is about the error handling in data_changed event in alv oops application....am able to display the error log using display_protocol method..,.. but after displaying the error log am still able to save the changes which should not happen....the thing is we should not be able to save the changes...... am having the same issue as the following thread
    Re: CL_ALV_CHANGED_DATA_PROTOCOL - Protocol Popup is not modal
    if u still require any clarifications...pls let me know ur mail-id ill post my code to u ..
    thanks
    suresh

Maybe you are looking for

  • Installation ended prematurely because of an error.

    Hi There, could need a bit of insight. I am trying to update my XI 3.1 installl with SP2.3. SP2 installed ok but installing FP1, 2, or 3 fails with the error message in the subject line. Sometimes the install does not even start. After running the ex

  • What does this error mean in idoc_apapter

    Hi, Im getting this error while doing a flat file to an idoc scenario. <SAP:Code area="IDOC_ADAPTER">ATTRIBUTE_WRONG_INTF</SAP:Code> <SAP:Stack>Unable to interpret IDoc interface MI_ZPURCHASEORDER01_Inb</SAP:Stack> Can anyone explain me what to do. T

  • Laserwriter Pro 630, Mountain Lion, and Macbook Pro

    Hi, I have a very old Laserwriter Pro 630 that I use for simple inexpensive proofing. On my old system (G4 Tower w/Leopard), it was connected via an ethernet hub. I'm now the proud owner of a Macbook Pro Retina (with no ethernet port), and I can't fi

  • Aperture crashes when using the Crop Tool

    I have tried using Aperture in 32 and 64 bit modes. I have the same problem in both when using the Crop Tool. Immediately after I hit "RETURN" key to finalize the crop I have chosen, the VIEW screen goes blank and the SPINNING BEACH BALL appears. I g

  • Connecting ABAP tool with Portal..

    Hi All, I have one requirement where i have to connect ABAP tool, that is developed in WebDynpro ABAP. Now i am connecting that with Url iview, that is working fine. But my problem arises when i have to pass userid and his pwd to that iview. That ivi