Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ERROR_DURING_INSERT

Former Member
0 Likes
1,168

Hi all,

On saving data in the infotype 0022, i need to insert data into infotype 7404. I am using BADi HRPAD00INFTY.

In AFTER_INPUT method, i am calling FM RH_INSERT_INFTY.

For this i am getting exception 2, ie ERROR_DURING_INSERT. Can anybody pls tell why i am getting this exception? Or is there any other method to insert the data into the table HRP7404.

Thanks & Regards,

Nikitha

Edited by: Nikitha P on Mar 18, 2011 3:04 PM

5 REPLIES 5
Read only

PedroGuarita
Active Contributor
0 Likes
973

In a BADI you should never use FM that do COMMIT, which is the case of RH_INSERT_INFTY. Also, in this case, the right place to do this should be in method IN_UPDATE and not AFTER_INPUT, as you may not be saving infotype 0022 in that method, just pressing ENTER for example will evoke that method.

Still, the error might be due to locks of PERNR. This will be better be achieve through dinamic actions or maybe call the FM in a new UPDATE TASK, independent to the one you are on.

Read only

Former Member
0 Likes
973

Hii Nikita,

I think it's true that error was raised because LOCK OF PERNR. Maybe you can use Dynamic Action or you can directly insert into table by using syntax INSERT INTO TABLE.

Nice to help..

Read only

Barin
Product and Topic Expert
Product and Topic Expert
0 Likes
973

You are using old function modules which internally uses bdc and that could be the reason.

Simplest solution would be following.

1. Refer to HRTMC_WRITE_POTENTIAL and write similar function for 7404.

Copy the function mentioned above and change the respective structures and tables for 7404 from 7408. Make sure while calling method "insert_infty" and "modify_infty" you pass hrtnnnn_tab = lt_hrtnnnn as changing parameter where hrt7404 is the type of lt_hrtnnnn.

this has worked for us so assume would work for you.

replying too old a thread but however the solution works.

Read only

0 Likes
973

Hi Barin,

My need is to create a IT 7404 based on info passed to a new FM.

I've followed your advise.

However, I an getting the following error when running my function module.

====================================================================

Category               ABAP Programming Error

Runtime Errors         ASSIGN_CASTING_ILLEGAL_CAST

Except.                CX_SY_ASSIGN_CAST_ILLEGAL_CAST

ABAP Program           CL_HRBAS_PLAIN_INFOTYPE_ACCESSCP

Application Component  BC-BMT-OM

Date and Time          03.07.2013 08:25:05

Short text

     Error with ASSIGN ... CASTING in program "CL_HRBAS_PLAIN_INFOTYPE_ACCESSCP".

What happened?

     Error in the ABAP Application Program

     The current ABAP program "CL_HRBAS_PLAIN_INFOTYPE_ACCESSCP" had to be

      terminated because it has

     come across a statement that unfortunately cannot be executed

Error analysis

     An exception occurred that is explained in detail below.

     The exception, which is assigned to class 'CX_SY_ASSIGN_CAST_ILLEGAL_CAST', was

      not caught in

     procedure "IF_HRBAS_PLAIN_INFOTYPE_ACCESS~INSERT" "(METHOD)", nor was it

      propagated by a RAISING clause.

     Since the caller of the procedure could not have anticipated that the

     exception would occur, the current program is terminated.

     The reason for the exception is:

 

The error occurred at a statement of the form

   ASSIGN f TO <fs> CASTING.

   ASSIGN f TO <fs> CASTING TYPE t.

or

   ASSIGN f TO <fs> CASTING LIKE f1.

or

   at table statements with the addition

   ASSIGNING <fs> CASTING.

=================================================================

Here is my FM. Maybe you can let me know what I am doing wrong.

--------------------------------------------

FUNCTION Z_HRTMC_WRITE_EDUCATION.

*"----------------------------------------------------------------------

*"*"Local Interface:

*"  IMPORTING

*"     VALUE(IV_CENTRAL_PERSON) TYPE  HROBJID

*"     VALUE(IV_INSTITUTE) TYPE  HRTMC_EDUCATION_INSTITUTE

*"     VALUE(IV_COUNTRY) TYPE  LAND1

*"     VALUE(IV_FIELD_OF_STUDY1) TYPE  HRTMC_FIELD_OF_STUDY OPTIONAL

*"     VALUE(IV_DEGREE) TYPE  HRTMC_DEGREE

*"     VALUE(IV_HIGHEST_DEGREE) TYPE  HRTMC_HIGHEST_DEGREE OPTIONAL

*"     VALUE(IV_DEGREE_LEVEL) TYPE  HRTMC_DEGREE_LEVEL OPTIONAL

*"     VALUE(IV_BEGDA) TYPE  BEGDA

*"     VALUE(IV_ENDDA) TYPE  ENDDA

*"     VALUE(IV_NO_COMMIT) TYPE  BOOLE_D OPTIONAL

*"     VALUE(IV_TESTRUN) TYPE  BOOLE_D OPTIONAL

*"     VALUE(IV_NO_LOCK) TYPE  BOOLE_D OPTIONAL

*"  EXCEPTIONS

*"      NO_DATE

*"      INTERNAL_ERROR

*"----------------------------------------------------------------------

   DATA LO_MESSAGE_HANDLER      TYPE REF TO CL_HRBAS_MESSAGE_LIST.

   DATA LO_CENTRAL_PERSON       TYPE REF TO CL_HRTMC_PD_OBJECT_CP.

   DATA LO_CENTRAL_PERSON_ADMIN TYPE REF TO CL_HRBAS_PD_OBJECT_ADMIN.

   DATA LO_BO_CP                TYPE REF TO IF_HRBAS_PD_OBJECT.

   DATA LO_BO_CP_ADMIN          TYPE REF TO CL_HRBAS_PD_OBJECT_ADMIN.

   DATA LT_MESSAGES             TYPE HRBAS_MESSAGE_TAB.

   DATA LS_MESSAGE              TYPE HRBAS_MESSAGE.

   DATA LV_IS_OK                TYPE BOOLE_D.

   DATA LS_P7404                TYPE P7404.

   DATA LT_P7404                TYPE STANDARD TABLE OF P7404 WITH

DEFAULT KEY.

   DATA LT_PERFORMANCE          TYPE HRTMC_T_EDUCATION.

   DATA LV_ENTRIES              TYPE I.

   DATA LV_MAX_SCALE_VALUE      TYPE HRTMC_PERFORMANCE.

   DATA LV_NEW_ENTRY            TYPE BOOLE_D.                "VXJ1616227

   FIELD-SYMBOLS <LS_PERFORMANCE> TYPE LINE OF HRTMC_T_PERFORMANCE.

   IF IV_BEGDA IS INITIAL OR IV_ENDDA IS INITIAL.

     RAISE NO_DATE.

   ENDIF.

   CREATE OBJECT LO_MESSAGE_HANDLER.

   CALL METHOD CL_HRBAS_PD_OBJECT_ADMIN=>GET_INSTANCE

     RECEIVING

       PD_OBJECT_ADMIN = LO_BO_CP_ADMIN.

   CALL METHOD LO_BO_CP_ADMIN->GET_OBJECT_INSTANCE

     EXPORTING

       OTYPE               = 'CP'

       OBJID               = IV_CENTRAL_PERSON

       MESSAGE_HANDLER     = LO_MESSAGE_HANDLER

       PD_OBJECT_CLASSNAME = 'CL_HRTMC_PD_OBJECT_CP'

     IMPORTING

       PD_OBJECT           = LO_BO_CP

       IS_OK               = LV_IS_OK.

   IF LV_IS_OK = ABAP_FALSE.

     RAISE INTERNAL_ERROR.

   ENDIF.

   LO_CENTRAL_PERSON ?= LO_BO_CP.

   LO_CENTRAL_PERSON_ADMIN = LO_BO_CP_ADMIN.

   CALL METHOD LO_CENTRAL_PERSON->IF_HRBAS_PD_OBJECT~READ_INFTY

     EXPORTING

       INFTY           = '7404'

*     subty           = SPACE

       BEGDA           = IV_BEGDA

       ENDDA           = IV_ENDDA

*     istat           = '1'

       MESSAGE_HANDLER = LO_MESSAGE_HANDLER

*     no_auth_check   =

     IMPORTING

       IS_OK           = LV_IS_OK

       PNNNN_TAB       = LT_P7404.

   IF LV_IS_OK = ABAP_FALSE.

     RAISE INTERNAL_ERROR.

   ENDIF.

   CALL METHOD LO_CENTRAL_PERSON_ADMIN->START_TRIAL.

   IF IV_NO_LOCK IS INITIAL.                                 "VXJ1593866

     CALL METHOD LO_CENTRAL_PERSON_ADMIN->SET_EXCLUSIVE_LOCK

       EXPORTING

         OTYPE           = 'CP'

         OBJID           = IV_CENTRAL_PERSON

         MESSAGE_HANDLER = LO_MESSAGE_HANDLER

       IMPORTING

         IS_OK           = LV_IS_OK.

     IF LV_IS_OK = ABAP_FALSE.

       CALL METHOD LO_CENTRAL_PERSON_ADMIN->DISCARD_TRIAL.

                                                             "XEY1590092

       RAISE INTERNAL_ERROR.

     ENDIF.

   ENDIF"iv_no_lock IS INITIAL                            "VXJ1593866

   LV_NEW_ENTRY = ABAP_FALSE.                                "VXJ1616227

   READ TABLE LT_P7404 WITH KEY BEGDA = IV_BEGDA ENDDA =

IV_ENDDA INTO LS_P7404.

   IF SY-SUBRC <> 0.

     LV_NEW_ENTRY   = ABAP_TRUE.                             "VXJ1616227

     LS_P7404-MANDT = CL_ABAP_SYST=>GET_CLIENT( ).

     LS_P7404-PLVAR =

LO_CENTRAL_PERSON->IF_HRBAS_UNIVERSAL_OBJECT~A_PLVAR.

     LS_P7404-OTYPE =

LO_CENTRAL_PERSON->IF_HRBAS_UNIVERSAL_OBJECT~A_OTYPE.

     LS_P7404-OBJID =

LO_CENTRAL_PERSON->IF_HRBAS_PD_OBJECT~A_OBJID.

     LS_P7404-SUBTY = ''.

     LS_P7404-ISTAT = '1'.

     LS_P7404-BEGDA = IV_BEGDA.

     LS_P7404-ENDDA = IV_ENDDA.

     LS_P7404-VARYF = 'E'.

     LS_P7404-SEQNR = '0'.

     LS_P7404-INFTY = '7404'.

   ENDIF.

   LS_P7404-INSTITUTE       = IV_INSTITUTE.

   LS_P7404-COUNTRY         = IV_COUNTRY.

   LS_P7404-FIELD_OF_STUDY1 = IV_FIELD_OF_STUDY1.

   LS_P7404-DEGREE          = IV_DEGREE.

   LS_P7404-START_DATE      = IV_BEGDA.

   LS_P7404-END_DATE        = IV_ENDDA.

   LS_P7404-HIGHEST_DEGREE  = IV_HIGHEST_DEGREE.

   LS_P7404-DEGREE_LEVEL    = IV_DEGREE_LEVEL.

   IF LV_NEW_ENTRY = ABAP_TRUE.                              "VXJ1616227

     CALL METHOD LO_CENTRAL_PERSON->IF_HRBAS_PD_OBJECT~INSERT_INFTY

       EXPORTING

         MESSAGE_HANDLER = LO_MESSAGE_HANDLER

*       update_mode     =

       IMPORTING

         IS_OK           = LV_IS_OK

       CHANGING

         PNNNN           = LS_P7404.

     IF LV_IS_OK = ABAP_FALSE.

       CALL METHOD LO_CENTRAL_PERSON_ADMIN->DISCARD_TRIAL.

                                                             "XEY1590092

*              RAISE INTERNAL_ERROR.

     ENDIF.

   ELSE.

     CALL METHOD LO_CENTRAL_PERSON->IF_HRBAS_PD_OBJECT~MODIFY_INFTY

       EXPORTING

*       old_key         =

         MESSAGE_HANDLER = LO_MESSAGE_HANDLER

*       no_auth_check   =

*       update_mode     =

       IMPORTING

         IS_OK           = LV_IS_OK

       CHANGING

         PNNNN           = LS_P7404.

     IF LV_IS_OK = ABAP_FALSE.

       CALL METHOD LO_CENTRAL_PERSON_ADMIN->DISCARD_TRIAL.

                                                             "XEY1590092

*              RAISE INTERNAL_ERROR.

     ENDIF.

   ENDIF.

   IF IV_TESTRUN IS INITIAL.

     CALL METHOD LO_CENTRAL_PERSON_ADMIN->APPROVE_TRIAL.

     CALL METHOD LO_CENTRAL_PERSON_ADMIN->FLUSH

       EXPORTING

         NO_COMMIT = IV_NO_COMMIT.

   ELSE.

     CALL METHOD LO_CENTRAL_PERSON_ADMIN->DISCARD_TRIAL.

   ENDIF.

   CHECK IV_NO_LOCK   IS INITIAL.                            "VXJ1593866

   CHECK IV_NO_COMMIT IS INITIAL.                            "VXJ1593866

   CALL METHOD LO_CENTRAL_PERSON_ADMIN->REMOVE_EXCLUSIVE_LOCK

     EXPORTING

*     plvar            =

       OTYPE            = 'CP'

       OBJID            = IV_CENTRAL_PERSON

*     universal_object =

*     pd_object        =

     .

ENDFUNCTION.

----------------------------------------------------------------------------


Thks in advance, Chris

Read only

Former Member
0 Likes
973

Hey guys,

The solution is as follows

in the above mentioned code snippet

   IF LV_NEW_ENTRY = ABAP_TRUE.                              "VXJ1616227

     CALL METHOD LO_CENTRAL_PERSON->IF_HRBAS_PD_OBJECT~INSERT_INFTY

       EXPORTING

         MESSAGE_HANDLER = LO_MESSAGE_HANDLER

*       update_mode     =

       IMPORTING

         IS_OK           = LV_IS_OK

       CHANGING

         PNNNN           = LS_P7404.

     IF LV_IS_OK = ABAP_FALSE.


pass the HRTNNNN changing parameter as well

the data type reference for this should be HRT7404 / 7405 / 7403


This will resolve the run time error and the info type records are successfully loaded into the database

also the same should be done for method call MODIFY_INFTY


Thanks,

Kumaresan S