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

BDC PROGRAM WITH OUT USING A FM?

Former Member
0 Likes
655

Hi Experts,

I need wirte a BDC program for tcode PA30.

i did the screen recording part using tcode-shdb.

i need to use field i recorded as input fields.

Now the main part is how to write code? with out using a class/method?

class/method which i earlier used is class : CL_GUI_FRONTEND_SERVICES.

method: gui_upload.

am not using ny flat file/xml file to upload?

are there any function modules which i can use?

and how to write code with out using FM?

if any can solve my issue would be very helpful...plz provide code...which would be more helpful.

Thanks in Adv.

Krrish.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
576

Hi,

If you don't want to upload any data using FM's, then what data is passed to PA30 ?

In such cases you can have a Z table created and store the information you wanted to upload , write a select and

do the call transaction.

Regards,

Srini.

4 REPLIES 4
Read only

Former Member
0 Likes
576

class/method:

CALL METHOD cl_gui_frontend_services=>gui_upload

  • EXPORTING

  • FILENAME = SPACE

  • FILETYPE = 'ASC'

  • HAS_FIELD_SEPARATOR = SPACE

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = SPACE

  • CODEPAGE = SPACE

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • VIRUS_SCAN_PROFILE =

  • IMPORTING

  • FILELENGTH =

  • HEADER =

CHANGING

data_tab =

  • EXCEPTIONS

  • FILE_OPEN_ERROR = 1

  • FILE_READ_ERROR = 2

  • NO_BATCH = 3

  • GUI_REFUSE_FILETRANSFER = 4

  • INVALID_TYPE = 5

  • NO_AUTHORITY = 6

  • UNKNOWN_ERROR = 7

  • BAD_DATA_FORMAT = 8

  • HEADER_NOT_ALLOWED = 9

  • SEPARATOR_NOT_ALLOWED = 10

  • HEADER_TOO_LONG = 11

  • UNKNOWN_DP_ERROR = 12

  • ACCESS_DENIED = 13

  • DP_OUT_OF_MEMORY = 14

  • DISK_FULL = 15

  • DP_TIMEOUT = 16

  • NOT_SUPPORTED_BY_GUI = 17

  • ERROR_NO_GUI = 18

  • others = 19

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

Read only

madhu_vadlamani
Active Contributor
0 Likes
576

Hi,

Go through this link. While selecting the file use this class.There are number of Wiki are available in SCN. Please go through this.

http://wiki.sdn.sap.com/wiki/display/Snippets/WorkingWithFiles. Tell if more help need on this. Close thread if your thread is answered.

The above wiki provided by Xinpeng Lin.

Regards,

Madhu

Read only

Former Member
0 Likes
576

Hi,

If you are migrating employee data, I would suggest you to do it through PA40 transaction rather PA30. systematic screen validations it will go through. If you dont want to use any FM and wanted to do using recording pls find the below code which will update the employee data through PA40 with call transaction method.

********************************************************************************

  • SELECTION SCREEN

********************************************************************************

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_plan TYPE ibipparms-path OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK b1.

TYPES: BEGIN OF ty_error,

pernr TYPE persno, " Personnel number

rel_obj_id(12), " Related Object ID

msg(200) TYPE c, " To store Message

END OF ty_error.

DATA: i_tplan TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE,

i_intern TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE,

i_error TYPE ty_error OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF w_pa000,

pernr TYPE persno,

begda TYPE begda,

END OF w_pa000.

DATA: wa_plan LIKE i_plan,

wa_messtab TYPE bdcmsgcoll, " Messages

wa_error TYPE ty_error. " Errors

DATA: it_pa000 LIKE STANDARD TABLE OF w_pa000 WITH HEADER LINE,

it_pa002 LIKE STANDARD TABLE OF w_pa000 WITH HEADER LINE,

it_pa001 LIKE STANDARD TABLE OF w_pa000 WITH HEADER LINE.

DATA: g_mode LIKE ctu_params-dismode VALUE 'N',

g_file TYPE ibipparms-path.

  • ALV field catalog

DATA : i_fieldcat TYPE slis_t_fieldcat_alv.

  • Batchinputdata of single transaction

DATA: i_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.

  • messages of call transaction

DATA: i_messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

  • error session opened (' ' or 'X')

  • Table to hold the return messages

DATA: BEGIN OF i_errmsg OCCURS 10.

INCLUDE STRUCTURE bapiret2.

DATA: END OF i_errmsg.

  • ALV List header table

DATA : i_header1 TYPE slis_t_listheader.

  • ALV List header table

DATA : i_header TYPE slis_listheader.

***ALV Events

DATA: is_layout TYPE slis_layout_alv.

DATA : it_event TYPE slis_alv_event.

DATA : it_event1 TYPE slis_t_event.

  • To get the F4 help for file

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_plan.

PERFORM get_filename.

************************************************************************************

    • START OF SELECTION

************************************************************************************

START-OF-SELECTION.

  • Initialise data

PERFORM initialise_events.

  • Retrieve data from Excel file

PERFORM retreive_data.

  • Populate final data into an internal table

PERFORM populate_data.

  • Process the excel file data to create a record for IT0007

PERFORM process_data.

************************************************************************************

    • END OF SELECTION

************************************************************************************

END-OF-SELECTION.

PERFORM final_output.

&----


*& Form GET_FILENAME

&----


FORM get_filename .

*Function module used for F4 help

CALL FUNCTION 'F4_FILENAME'

EXPORTING

program_name = syst-cprog

dynpro_number = syst-dynnr

IMPORTING

file_name = p_plan.

ENDFORM. " GET_FILENAME

&----


*& Form INITIALISE_EVENTS

&----


FORM initialise_events .

i_header-typ = 'H'.

  • i_header-key = 'R'.

i_header-info = 'BDC Interface for PA Infotypes 0000,0001,0002'.

APPEND i_header TO i_header1.

CLEAR i_header.

i_header-typ = 'S'.

i_header-info = 'Hiring, Org.Assignment, Personnel Data'.

APPEND i_header TO i_header1.

CLEAR i_header.

***Events and form name

it_event-name = 'TOP_OF_PAGE'.

it_event-form = 'TOP_OF_PAGE'.

APPEND it_event TO it_event1.

ENDFORM. " INITIALISE_EVENTS

&----


*& Form RETREIVE_DATA

&----


FORM retreive_data .

PERFORM upload_data.

ENDFORM. " RETREIVE_DATA

&----


*& Form UPLOAD_DATA

&----


FORM upload_data .

  • FM to upload data from excel sheet to internal table

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'

EXPORTING

filename = p_plan

i_begin_col = g_colbeg

i_begin_row = g_rowbeg

i_end_col = g_colend

i_end_row = g_rowend

TABLES

intern = i_tplan

EXCEPTIONS

inconsistent_parameters = 1

upload_ole = 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.

ENDFORM. " UPLOAD_DATA

&----


*& Form POPULATE_DATA

&----


FORM populate_data .

  • processing the internal table generated from the function module

  • Passing data from Excel file to internal table

CLEAR: g_cnt_processed,

g_cnt_err_processed,

i_intern,

i_plan.

LOOP AT i_tplan.

AT NEW row.

CLEAR i_plan.

ENDAT.

CASE i_tplan-col.

  • Begin Date

WHEN '0001'.

i_plan-pernr = i_tplan-value.

  • End Date

WHEN '0002'.

i_plan-begda = i_tplan-value.

WHEN '0003'.

i_plan-massg = i_tplan-value.

  • Sign

WHEN '0004'.

i_plan-plans = i_tplan-value.

WHEN '0005'.

i_plan-werks = i_tplan-value.

WHEN '0006'.

i_plan-persg = i_tplan-value.

WHEN '0007'.

i_plan-persk = i_tplan-value.

WHEN '0008'.

i_plan-anrex = i_tplan-value.

WHEN '0009'.

i_plan-nachn = i_tplan-value.

WHEN '0010'.

i_plan-vorna = i_tplan-value.

WHEN '0011'.

i_plan-gesch = i_tplan-value.

WHEN '0012'.

i_plan-gbdat = i_tplan-value.

WHEN '0013'.

i_plan-fatxt = i_tplan-value.

WHEN '0014'.

i_plan-famdt = i_tplan-value.

WHEN '0015'.

i_plan-gblnd = i_tplan-value.

WHEN '0016'.

i_plan-anzkd = i_tplan-value.

WHEN '0017'.

i_plan-natio = i_tplan-value.

WHEN '0018'.

i_plan-btrtl = i_tplan-value.

WHEN '0019'.

i_plan-gsber = i_tplan-value.

WHEN '0020'.

i_plan-abkrs = i_tplan-value.

ENDCASE.

  • Appending the internal table tb_data, tb_chng

AT END OF row.

APPEND i_plan.

IF i_plan IS INITIAL.

g_cnt_err_processed = g_cnt_err_processed + 1.

ENDIF.

ENDAT.

ENDLOOP.

  • To get the total number of records processed

DESCRIBE TABLE i_plan LINES g_lines.

g_cnt_processed = g_cnt_err_processed + g_lines.

CLEAR g_lines.

ENDFORM. " POPULATE_DATA

&----


*& Form PROCESS_DATA

&----


FORM process_data .

CLEAR wa_error.

REFRESH i_bdcdata.

  • Check if the employee numbers from the template has already been hired

SELECT pernr

begda

FROM pa0000

INTO TABLE it_pa000

FOR ALL ENTRIES IN i_plan

WHERE pernr = i_plan-pernr

AND massn = 'ZA'.

IF sy-subrc = 0.

SORT it_pa000 BY pernr.

  • Check if employee has a corresponding infotype 0001 record

SELECT pernr

begda

FROM pa0001

INTO TABLE it_pa001

FOR ALL ENTRIES IN it_pa000

WHERE pernr = it_pa000-pernr AND

begda = it_pa000-begda.

IF sy-subrc = 0.

SORT it_pa001 BY pernr.

  • Check if employee has a corresponding infotype 0002 record

SELECT pernr

begda

FROM pa0001

INTO TABLE it_pa002

FOR ALL ENTRIES IN it_pa001

WHERE pernr = it_pa001-pernr AND

begda = it_pa001-begda.

IF sy-subrc = 0.

SORT it_pa002 BY pernr.

ENDIF.

ENDIF.

ENDIF.

LOOP AT i_plan.

REFRESH i_bdcdata.

***your recording to be pasted here***

PERFORM bdc_field USING 'BDC_CURSOR'

'P0006-BEGDA'.

PERFORM call_transaction.

APPEND wa_error TO i_error.

REFRESH: i_bdcdata, i_messtab.

CLEAR: wa_error, i_error.

ENDLOOP.

ENDFORM. " PROCESS_DATA

&----


*& Form BDC_DYNPRO

&----


FORM bdc_dynpro USING program dynpro.

CLEAR i_bdcdata.

i_bdcdata-program = program.

i_bdcdata-dynpro = dynpro.

i_bdcdata-dynbegin = 'X'.

APPEND i_bdcdata.

ENDFORM. "BDC_DYNPRO

&----


*& Form BDC_FIELD

&----


FORM bdc_field USING fnam fval.

  • IF fval <> nodata.

CLEAR i_bdcdata.

i_bdcdata-fnam = fnam.

i_bdcdata-fval = fval.

APPEND i_bdcdata.

  • ENDIF.

ENDFORM. "bdc_field

&----


*& Form ERROR_RECORD_DATA

&----


FORM error_record_data .

CLEAR: g_lines,

wa_messtab,

g_msg.

DESCRIBE TABLE i_messtab LINES g_lines.

READ TABLE i_messtab INTO wa_messtab INDEX g_lines.

IF sy-subrc = 0.

CLEAR g_msg.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

id = wa_messtab-msgid

lang = sy-langu

no = wa_messtab-msgnr

v1 = wa_messtab-msgv1

v2 = wa_messtab-msgv2

v3 = wa_messtab-msgv3

v4 = wa_messtab-msgv4

IMPORTING

msg = g_msg

EXCEPTIONS

not_found = 1

OTHERS = 2.

  • IF wa_messtab-msgtyp = 'E'.

IF wa_messtab-msgtyp = 'S' AND wa_messtab-msgnr = '102' AND wa_messtab-msgid = 'PG'.

wa_error-pernr = i_plan-pernr.

wa_error-rel_obj_id = 'S'.

wa_error-msg = 'Personnel Number Created Successfully'.

ELSE.

wa_error-pernr = i_plan-pernr.

wa_error-rel_obj_id = 'E'.

wa_error-msg = g_msg.

ENDIF.

  • APPEND wa_error TO i_error.

  • CLEAR i_error.

ENDIF.

ENDFORM. " ERROR_RECORD_DATA

&----


*& Form FINAL_OUTPUT

&----


FORM final_output .

CLEAR g_lines.

SORT i_error.

*************added*********************************************

loop at i_error into wa_error.

if wa_error-MSG eq 'No batch input data for screen MP000600 2000'.

wa_error-rel_obj_id = 'S'.

wa_error-MSG = 'Record Created Successfully'.

modify i_error from wa_error.

endif.

endloop.

loop at i_error into wa_error.

if wa_error-rel_obj_id = 'S'.

g_cnt_success = g_cnt_success + 1. " Append success count

elseif wa_error-rel_obj_id = 'E'.

g_cnt_failure = g_cnt_failure + 1. " Append error count

endif.

endloop.

***Field catalog

PERFORM field_cat.

***Assigning Program name

g_repid = sy-repid.

SORT i_error.

***Display Output

  • IF NOT it_final[] IS INITIAL.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = g_repid

  • i_callback_user_command = 'USER_COMMAND'

  • i_callback_pf_status_set = 'PF_STATUS_SET'

i_save = 'A'

it_events = it_event1

is_layout = is_layout

it_fieldcat = i_fieldcat[]

TABLES

t_outtab = i_error[].

  • ELSE.

  • MESSAGE i015(zv_msg) WITH 'No Data Found for this selection'.

  • LEAVE LIST-PROCESSING.

  • ENDIF.

ENDFORM. " FINAL_OUTPUT

&----


*& Form top_of_page

&----


  • text

----


FORM top_of_page.

***FM for Displaying Heading

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

it_list_commentary = i_header1[]

i_logo = 'ENJOYSAP_LOGO'.

ENDFORM. "top_of_page

&----


*& Form FIELD_CAT

&----


FORM field_cat .

ENDFORM. " FIELD_CAT

&----


*& Form CALL_TRANSACTION

&----


*

FORM call_transaction .

CALL TRANSACTION 'PA40' USING i_bdcdata

MODE g_mode

UPDATE 'S'

MESSAGES INTO i_messtab.

  • If call transaction successful

IF sy-subrc = 0.

  • g_cnt_success = g_cnt_success + 1. " Append success count "changed

PERFORM error_record_data. " Populate all data

  • If call transaction not successful

ELSE.

PERFORM error_record_data. " Populate all table

  • g_cnt_failure = g_cnt_failure + 1. " Append error count "changed

ENDIF.

ENDFORM. " CALL_TRANSACTION

Read only

Former Member
0 Likes
577

Hi,

If you don't want to upload any data using FM's, then what data is passed to PA30 ?

In such cases you can have a Z table created and store the information you wanted to upload , write a select and

do the call transaction.

Regards,

Srini.