2011 Mar 18 2:03 PM
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
2011 Mar 18 2:16 PM
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.
2011 Mar 19 5:26 AM
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..
2012 Jan 02 1:05 PM
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.
2013 Jul 03 9:34 AM
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
2014 Aug 27 4:51 PM
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