Application Development 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: 

BAPI_ALM_ORDER_MAINTAIN unable to upload long text on the last operation.

krishna_maram
Participant
0 Kudos

Hi

I am using BAPI BAPI_ALM_ORDER_MAINTAIN to create work order and try to upload operation long texts.

Everything works fine except for the long text on last operation doesnt get uploaded.

I have tried in man ways.. with no sucsess.

Has anyone faced similar problem?

Any thoughts?

Thanks,

Krishna.

2 REPLIES 2

Former Member
0 Kudos

Try this:

Make sure in the METHOD table, you have a 'SAVE' at the bottom of the table.

The Item look like this:

IT_METHODS :

REFNUMBER 000001

OBJECTTYPE

METHOD SAVE

OBJECTKEY

Or

You can use the function module save_text for updating or inserting long text .

Reward points..

Former Member
0 Kudos

Hi

check the below sample code. through this code texts are maintained using BAPI_ALM_ORDER_MAINTAIN just go to the part and observe how it is done.

FUNCTION zeam_bapi_create_notif_order.

*"----


""Local Interface:

*" IMPORTING

*" VALUE(NOTIF_TYPE) LIKE BAPI2080-NOTIF_TYPE

*" VALUE(NOTIFHEADER) LIKE BAPI2080_NOTHDRI STRUCTURE

*" BAPI2080_NOTHDRI

*" VALUE(TASK_DETERMINATION) LIKE BAPIFLAG STRUCTURE BAPIFLAG

*" OPTIONAL

*" VALUE(SENDER) LIKE BAPI_SENDER STRUCTURE BAPI_SENDER OPTIONAL

*" VALUE(EQFNR) LIKE ILOA-EQFNR

*" VALUE(STTXT) LIKE TJ30T-ESTAT

*" VALUE(ORDERID) LIKE BAPI2080_NOTHDRE-ORDERID OPTIONAL

*" VALUE(EXTERNAL_NUMBER) LIKE BAPI2080_NOTHDRE-NOTIF_NO

*" EXPORTING

*" VALUE(NOTIFHEADER_EXPORT) LIKE BAPI2080_NOTHDRE STRUCTURE

*" BAPI2080_NOTHDRE

*" VALUE(RETURN_ORDER) LIKE BAPIRET2 STRUCTURE BAPIRET2

*" TABLES

*" NOTITEM STRUCTURE BAPI2080_NOTITEMI OPTIONAL

*" NOTIFCAUS STRUCTURE BAPI2080_NOTCAUSI OPTIONAL

*" NOTIFACTV STRUCTURE BAPI2080_NOTACTVI OPTIONAL

*" NOTIFTASK STRUCTURE BAPI2080_NOTTASKI OPTIONAL

*" NOTIFPARTNR STRUCTURE BAPI2080_NOTPARTNRI OPTIONAL

*" LONGTEXTS STRUCTURE BAPI2080_NOTFULLTXTI OPTIONAL

*" KEY_RELATIONSHIPS STRUCTURE BAPI2080_NOTKEYE OPTIONAL

*" RETURN STRUCTURE BAPIRET2 OPTIONAL

*" IT_METHODS STRUCTURE BAPI_ALM_ORDER_METHOD OPTIONAL

*" IT_HEADER STRUCTURE BAPI_ALM_ORDER_HEADERS_I OPTIONAL

*" IT_HEADER_UP STRUCTURE BAPI_ALM_ORDER_HEADERS_UP OPTIONAL

*" IT_OPERATION STRUCTURE BAPI_ALM_ORDER_OPERATION OPTIONAL

*" IT_OPERATION_UP STRUCTURE BAPI_ALM_ORDER_OPERATION_UP OPTIONAL

*" IT_TEXT STRUCTURE BAPI_ALM_TEXT OPTIONAL

*" IT_TEXT_LINES STRUCTURE BAPI_ALM_TEXT_LINES OPTIONAL

*" ORDER_RETURN STRUCTURE BAPIRET2 OPTIONAL

*"----


-


*T Y P E S D E C L A R A T I O N

-


*Input Structure : -

TYPES :

BEGIN OF ty_input,

eqfnr TYPE char30, "Sort field

qmart TYPE char2, "Notification number

qmtxt TYPE char40, "Short text

sttxt TYPE char40, "User Status

tplnr TYPE char30, "Fucntional Location

equnr TYPE char18, "Equipment number

qmgrp TYPE char8, "Code group

qmcod TYPE char4, "code

ingrp TYPE char3, "Planner Group

iwerk TYPE char4, "Maintenance plant

gewrk TYPE char8,

swerk TYPE char4, "Plant

parvw TYPE char2, "Partner Fucntion

parnr TYPE char12, "Partner number

qmnam TYPE char12, "Reported by

qmdat TYPE char10, "Notification date

strmn TYPE char10, "Required start date

priok TYPE char1, "Priority

ltrmn TYPE char10, "Required End Date

fegrp TYPE char08, "Code Group - Problem

fecod TYPE char4, "

fetxt TYPE char40, "Notification Item Short Text

urgrp TYPE char8, "Code Group - Causes

urcod TYPE char4, "Cause Code

urtxt TYPE char20, "Leave name

auart TYPE char4, "Sales Document Type

priok_order TYPE char1, "priority

ilart TYPE char03, "

END OF ty_input,

*Type declaration for User status

BEGIN OF type_tj30t,

estat TYPE tj30t-estat,

txt04 TYPE tj30t-txt04,

END OF type_tj30t,

*Type declaration for zit1_planview

BEGIN OF ty_check_eqfnr,

eqfnr TYPE zit1_planview-eqfnr,

aufnr TYPE zit1_planview-aufnr,

qmnum TYPE zit1_planview-qmnum,

END OF ty_check_eqfnr,

*Types for system status validation

BEGIN OF ty_istat, "for system status validation

istat TYPE tj02t-istat,

txt04 TYPE tj02t-txt04,

END OF ty_istat,

*Types for system Value

BEGIN OF ty_sys, "for system status type

system(4) TYPE c,

END OF ty_sys,

*Bdc data

tt_bdcdata TYPE STANDARD TABLE OF bdcdata. "BDC Data

-


D A T A D E C L A R A T I O N S *

-


DATA : it_order_methods

TYPE STANDARD TABLE OF bapi_alm_order_method, " Order Method Table

it_order_text TYPE STANDARD TABLE OF bapi_alm_text, " Order Text Table

it_bdcdata TYPE STANDARD TABLE OF bdcdata, "BDC Structure

it_messtab TYPE bdcmsgcoll OCCURS 0 WITH HEADER LINE,"#EC *

"BDC Messages

it_num TYPE STANDARD TABLE OF bapi_alm_numbers,

it_return_text TYPE STANDARD TABLE OF bapiret2, "Return

it_tj30t TYPE STANDARD TABLE OF type_tj30t, "User Status

it_tj30t_ord TYPE STANDARD TABLE OF type_tj30t, "User Status for Order

it_jsto TYPE STANDARD TABLE OF jsto,

it_jstat TYPE STANDARD TABLE OF jstat,

it_i_line TYPE STANDARD TABLE OF bapi2080_notfulltxti,"Lines of Text

it_istat TYPE STANDARD TABLE OF ty_istat, "for system status

it_sys TYPE STANDARD TABLE OF ty_sys.

-


R E T U R N T A B L E S *

-


DATA : it_ret4 LIKE STANDARD TABLE OF bapiret2.

DATA : it_ret1 LIKE return.

DATA : it_ret2 LIKE STANDARD TABLE OF bapiret2.

DATA : it_ret3 LIKE STANDARD TABLE OF bapiret2.

DATA : wa_ret1 TYPE bapiret2.

-


W O R K A R E A D E C L A R A T I O N S *

-


DATA : wa_input TYPE ty_input,

wa_order_methods TYPE bapi_alm_order_method ,

wa_order_text TYPE bapi_alm_text,

wa_operation TYPE bapi_alm_order_operation,

wa_tj30t TYPE type_tj30t,

wa_tj30t_ord TYPE type_tj30t,

wa_longtexts TYPE bapi2080_notfulltxti,

wa_jsto TYPE jsto,

wa_jstat TYPE jstat,

wa_w_line TYPE bapi2080_notfulltxti,

wa_check_aufnr TYPE ty_check_eqfnr,

wa_update TYPE zit1_planview,

wa_tj02t TYPE tj02t,

wa_sys TYPE ty_sys,

Order data

wa_order_header TYPE bapi_alm_order_headers_i,

v_datum TYPE char10,

v_date(10) TYPE c,

wa_messtab TYPE bdcmsgcoll,

v_messg TYPE string, "#EC *

v_ord_no TYPE aufnr,

v_objectkey TYPE aufnr,

v_refnum(6) TYPE c,

v_first_flag(1) TYPE c, "#EC *

v_objkey(90) TYPE c,

v_notif_no(12) TYPE c,

v_object_num(22) TYPE c,

v_objnr_ord(22) TYPE c,

v_asttx_order(40) TYPE c,

v_sttxt_order(04) TYPE c,

v_n(1) TYPE c VALUE 'N',

v_l(1) TYPE c VALUE 'L',

v_check_eqfnr(1) TYPE c,

v_notif_num(12) TYPE c,

Long text data

l_length TYPE i, "For length of string

v_temp_length TYPE i, "For Temp length.

v_longtext TYPE string,

v_lines TYPE i,

v_str TYPE string.

-


C O N S T A N T S D E C L A R A T I O N

-


CONSTANTS : c_refnum(6) TYPE c VALUE '000001',

c_text(4) TYPE c VALUE 'TEXT',

c_create(6) TYPE c VALUE 'CREATE',

c_save(4) TYPE c VALUE 'SAVE',

c_change(6) TYPE c VALUE 'CHANGE',

c_operation(9) TYPE c VALUE 'OPERATION',

c_x(1) TYPE c VALUE 'X',

c_zit_not(7) TYPE c VALUE 'ZIT_NOT',

c_zit(3) TYPE c VALUE 'ZIT',

c_12mp3(5) TYPE c VALUE '12MP3'.

-


Check with Sort field if notification and order have already been

Created

CLEAR : wa_check_aufnr.

SELECT SINGLE

eqfnr

aufnr

qmnum

FROM zit1_planview

INTO wa_check_aufnr

WHERE eqfnr = eqfnr.

*Raise flag if nottification already exists.

CLEAR : v_notif_num, v_check_eqfnr.

IF sy-subrc EQ 0 .

IF wa_check_aufnr-aufnr EQ space.

v_check_eqfnr = 'X'.

v_notif_num = wa_check_aufnr-qmnum.

ENDIF.

ENDIF.

*Checking the user status for notification

REFRESH : it_tj30t.

SELECT estat

txt04

FROM tj30t

INTO TABLE it_tj30t

WHERE stsma = c_zit_not.

*Checking the user status for order

REFRESH : it_tj30t_ord.

SELECT estat

txt04

FROM tj30t

INTO TABLE it_tj30t_ord

WHERE stsma = c_zit.

IF sy-subrc EQ 0.

SORT it_tj30t_ord BY estat.

ENDIF.

*Getting header information for order

CLEAR : wa_order_header, wa_input.

LOOP AT it_header INTO wa_order_header.

wa_input-auart = wa_order_header-order_type.

wa_input-priok_order = wa_order_header-priority.

wa_input-ilart = wa_order_header-pmacttype.

ENDLOOP.

Getting sttxt information for Order

CLEAR : v_sttxt_order.

LOOP AT notiftask . "#EC *

v_sttxt_order = notiftask-refobjectkey .

wa_sys-system = v_sttxt_order .

APPEND wa_sys TO it_sys.

ENDLOOP.

*---for system status

IF NOT it_sys IS INITIAL.

SELECT istat

txt04

FROM tj02t

INTO TABLE it_istat

FOR ALL ENTRIES IN it_sys

WHERE txt04 = it_sys-system.

ENDIF.

Getting asttx information for order

CLEAR : v_asttx_order. "#EC *

LOOP AT notitem.

v_asttx_order = notitem-refobjectkey.

ENDLOOP.

*Notification header population

wa_input-qmart = notif_type.

wa_input-qmtxt = notifheader-short_text.

wa_input-tplnr = notifheader-funct_loc.

wa_input-equnr = notifheader-equipment.

wa_input-qmgrp = notifheader-code_group.

wa_input-qmcod = notifheader-coding.

wa_input-iwerk = notifheader-planplant. "1200

wa_input-gewrk = c_12mp3. "12MP3

wa_input-swerk = notifheader-planplant. "1200

wa_input-qmnam = notifheader-reportedby.

*Date Formatting

CLEAR :v_date.

MOVE notifheader-notif_date TO v_datum.

WRITE v_datum TO v_date.

CONCATENATE v_date+4(2)

v_date+6(2)

v_date+0(4) INTO v_date SEPARATED BY '/'.

wa_input-qmdat = v_date.

*Desstdate

CLEAR :v_date.

MOVE notifheader-desstdate TO v_datum.

WRITE v_datum TO v_date.

CONCATENATE v_date+4(2)

v_date+6(2)

v_date+0(4) INTO v_date SEPARATED BY '/'.

wa_input-strmn = v_date.

Priority

wa_input-priok = notifheader-priority.

*Desenddate

CLEAR :v_date.

MOVE notifheader-desenddate TO v_datum.

WRITE v_datum TO v_date.

CONCATENATE v_date+4(2)

v_date+6(2)

v_date+0(4) INTO v_date SEPARATED BY '/'.

wa_input-ltrmn = v_date.

wa_input-fegrp = notitem-d_codegrp.

wa_input-fecod = notitem-d_code.

wa_input-eqfnr = eqfnr.

wa_input-fetxt = notitem-descript.

wa_input-urgrp = notifcaus-cause_codegrp.

wa_input-urcod = notifcaus-cause_code.

wa_input-urtxt = notifcaus-causetext.

*Notification creatiion using IW21.

IF v_check_eqfnr EQ space.

PERFORM bdc_dynpro USING 'SAPLIQS0'

'0100'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO00-QMART'

wa_input-qmart

CHANGING it_bdcdata[].

PERFORM bdc_dynpro USING 'SAPLIQS0' '7200'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'=COAE'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-QMTXT'

wa_input-qmtxt

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO1-TPLNR'

wa_input-tplnr

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO1-EQUNR'

wa_input-equnr

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-QMGRP'

wa_input-qmgrp

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-QMCOD'

wa_input-qmcod

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-IWERK'

wa_input-iwerk

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO00-GEWRK'

wa_input-gewrk

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO00-SWERK'

wa_input-swerk

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-QMNAM'

wa_input-qmnam

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-QMDAT'

wa_input-qmdat

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-STRMN'

wa_input-strmn

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-PRIOK'

wa_input-priok

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMEL-LTRMN'

wa_input-ltrmn

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMFE-FEGRP'

wa_input-fegrp

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMFE-FECOD'

wa_input-fecod

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMFE-FETXT'

wa_input-fetxt

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMUR-URCOD'

wa_input-urcod

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMUR-URGRP'

wa_input-urgrp

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'VIQMUR-URTXT'

wa_input-urtxt

CHANGING it_bdcdata[].

*Code added For sort field.

PERFORM bdc_field USING 'BDC_OKCODE'

'=10\TAB06'

CHANGING it_bdcdata[].

PERFORM bdc_dynpro USING 'SAPLIQS0'

'7200'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'=COAE'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'ILOA-EQFNR'

eqfnr

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'=COAE'

CHANGING it_bdcdata[].

*End of Code Addition

PERFORM bdc_dynpro USING 'SAPLIQS0'

'8030'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'=WEIT'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO00-AUART'

wa_input-auart

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO00-GEWRK'

wa_input-gewrk

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'RIWO00-SWERK'

wa_input-swerk

CHANGING it_bdcdata[].

PERFORM bdc_dynpro USING 'SAPLCOIH'

'3000'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'=BU'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'CAUFVD-ILART'

wa_input-ilart

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'CAUFVD-PRIOK'

wa_input-priok_order

CHANGING it_bdcdata[].

CALL TRANSACTION 'IW21' USING it_bdcdata

MODE v_n

UPDATE v_l

MESSAGES INTO it_messtab.

READ TABLE it_messtab INTO wa_messtab WITH KEY msgid = 'IW'

msgtyp = 'S'.

*To continue only if the read is success.

IF sy-subrc EQ 0.

*Building Messages from IW21 Transaction

CALL FUNCTION 'MESSAGE_TEXT_BUILD'

EXPORTING

msgid = wa_messtab-msgid

msgnr = wa_messtab-msgnr

msgv1 = wa_messtab-msgv1

msgv2 = wa_messtab-msgv2

IMPORTING

message_text_output = v_messg.

To Get Return Values

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

type = sy-msgty

cl = sy-msgid

number = sy-msgno

par1 = sy-msgv1

par2 = sy-msgv2

par3 = sy-msgv3

par4 = sy-msgv4

IMPORTING

return = it_ret1.

CLEAR : v_ord_no,v_notif_no.

Passing Order numberinto V_ord_no

v_ord_no = wa_messtab-msgv1.

Conversion Exit for AUFNR

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = v_ord_no

IMPORTING

output = v_ord_no.

Passing Notif number v_notif_no

v_notif_no = wa_messtab-msgv2.

Conversion Exit for QMNUM

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = v_notif_no

IMPORTING

output = v_notif_no.

IF v_ord_no IS NOT INITIAL AND

v_notif_no IS NOT INITIAL.

CLEAR : wa_update.

wa_update-eqfnr = eqfnr.

wa_update-aufnr = v_ord_no.

wa_update-qmnum = v_notif_no.

INSERT into zit1_planview values wa_update.

COMMIT WORK.

ENDIF.

*Notification long text updation

LOOP AT longtexts INTO wa_longtexts.

v_longtext = wa_longtexts-text_line.

*Counting total number of characters in line item field

l_length = STRLEN( v_longtext ).

DO .

IF l_length LE 132.

wa_w_line-text_line = v_longtext.

wa_w_line-objtype = 'QMEL'.

APPEND wa_w_line TO it_i_line .

CLEAR wa_w_line.

EXIT.

ENDIF.

*If the text line is GT 132 chars,

*then start offsetting the texts and append

*then to the internal table so that each text line contains ONLY 132

*chars

wa_w_line-text_line = v_longtext.

*Appending the internal table of type tdline.

APPEND wa_w_line TO it_i_line .

CLEAR : wa_w_line, v_temp_length.

*Temp Variable set for remaining characters

v_temp_length = l_length - 132.

l_length = v_temp_length.

*Equating the length to l_length

*Performing offset for next set of characters

v_longtext = v_longtext+132(v_temp_length).

ENDDO.

ENDLOOP.

Conversion Exit for QMNUM

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = v_notif_no

IMPORTING

output = v_notif_no.

*Bapi to add notification long text

CALL FUNCTION 'BAPI_ALM_NOTIF_DATA_ADD'

EXPORTING

number = v_notif_no

IMPORTING

notifheader_export = notifheader_export

TABLES

notfulltxt = it_i_line

notifpartnr = notifpartnr

return = it_ret2.

IF sy-subrc NE 0 .

Do nothing

ENDIF.

*Getting Object number of the Order

CLEAR : v_object_num.

v_object_num = notifheader_export-object_no.

Save the long text

CALL FUNCTION 'BAPI_ALM_NOTIF_SAVE' "#EC *

EXPORTING

number = v_notif_no

TABLES

return = it_ret3."return.

IF sy-subrc NE 0.

Do nothing

*Commit

ELSE.

PERFORM bapi_commit.

ENDIF.

*User status of Notification :

CLEAR : wa_tj30t.

READ TABLE it_tj30t INTO wa_tj30t WITH KEY txt04 = sttxt."#EC *

IF sy-subrc EQ 0.

User Status

CALL FUNCTION 'STATUS_CHANGE_EXTERN'

EXPORTING

client = sy-mandt

objnr = v_object_num

user_status = wa_tj30t-estat

set_chgkz = c_x

EXCEPTIONS

object_not_found = 1

status_inconsistent = 2

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

ELSE.

*Bapi Transaction Commit for User status.

PERFORM bapi_commit.

ENDIF.

ENDIF.

Creation of order using bapi_alm_order_maintain

Converison routine to get object key

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = v_ord_no

IMPORTING

output = v_objectkey.

v_refnum = c_refnum.

CONCATENATE v_objectkey '0010'

INTO wa_order_methods-objectkey.

v_objkey = wa_order_methods-objectkey.

*Sort operation table by activity

SORT it_operation BY activity.

*For operations tab.

LOOP AT it_operation INTO wa_operation.

AT FIRST.

v_first_flag = c_x.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_operation.

wa_order_methods-method = c_change.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

CONTINUE.

ENDAT.

v_first_flag = space.

*Incrementing the ref num.

v_refnum = v_refnum + 1.

CONCATENATE v_objectkey wa_operation-activity

INTO wa_order_methods-objectkey.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_operation.

wa_order_methods-method = c_create.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

ENDLOOP.

*For operations tab

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'

TABLES

it_methods = it_order_methods

it_operation = it_operation

it_operation_up = it_operation_up

return = it_ret4 "return

et_numbers = it_num.

IF sy-subrc EQ 0.

*Commit

PERFORM bapi_commit.

ENDIF.

REFRESH : it_order_methods.

v_refnum = c_refnum.

*For text tab.

LOOP AT it_operation INTO wa_operation.

AT FIRST.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_text.

wa_order_methods-objectkey = v_objkey.

wa_order_methods-method = c_create.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = c_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

CONTINUE.

ENDAT.

v_first_flag = space.

v_refnum = v_refnum + 1.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_text.

wa_order_methods-objectkey = v_objkey.

wa_order_methods-method = c_create.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

ENDLOOP.

DESCRIBE TABLE it_text_lines LINES v_lines.

*For order text

LOOP AT it_operation INTO wa_operation.

wa_order_text-orderid = v_objectkey.

wa_order_text-activity = wa_operation-activity.

wa_order_text-textstart = '1'.

wa_order_text-textend = v_lines.

APPEND wa_order_text TO it_order_text .

CLEAR wa_order_text.

ENDLOOP.

*To upload text into order

IF NOT it_text_lines[] IS INITIAL.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'

TABLES

it_methods = it_order_methods

it_text = it_order_text

it_text_lines = it_text_lines

return = it_return_text.

IF sy-subrc NE 0.

Do Nothing

ELSE.

Commit

PERFORM bapi_commit.

ENDIF.

ENDIF.

*User status for Order

*Conversion Exit for Order number

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = v_ord_no

IMPORTING

output = v_ord_no.

CLEAR : v_objnr_ord.

SELECT SINGLE

objnr

INTO v_objnr_ord

FROM aufk

WHERE aufnr = v_ord_no.

IF sy-subrc EQ 0.

CLEAR : wa_tj30t_ord.

READ TABLE "EC *

it_tj30t_ord

INTO wa_tj30t_ord

WITH KEY txt04 = v_asttx_order.

IF sy-subrc EQ 0.

User Status

CALL FUNCTION 'STATUS_CHANGE_EXTERN'

EXPORTING

client = sy-mandt

objnr = v_objnr_ord

user_status = wa_tj30t_ord-estat

set_chgkz = c_x

EXCEPTIONS

object_not_found = 1

status_inconsistent = 2

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

ELSE.

*Bapi Transaction Commit for User status.

PERFORM bapi_commit.

ENDIF.

ENDIF.

System status

TRANSLATE v_sttxt_order TO UPPER CASE.

SELECT SINGLE * FROM tj02t INTO wa_tj02t WHERE txt04 = v_sttxt_order."#EC *

CONCATENATE 'OR' v_ord_no INTO v_str.

v_objnr_ord = v_str.

IF sy-subrc = 0.

CALL FUNCTION 'STATUS_CHANGE_INTERN'

EXPORTING

client = sy-mandt

objnr = v_objnr_ord

set_chgkz = wa_jsto-chgkz

TABLES

status = it_jstat

EXCEPTIONS

object_not_found = 1

status_inconsistent = 2

status_not_allowed = 3

OTHERS = 4.

IF sy-subrc EQ 0.

PERFORM bapi_commit.

ENDIF.

ENDIF.

ENDIF.

ELSE.

*To capture the return messages when notification & order creation Fail

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

type = sy-msgty

cl = sy-msgid

number = sy-msgno

par1 = sy-msgv1

par2 = sy-msgv2

par3 = sy-msgv3

par4 = sy-msgv4

IMPORTING

return = it_ret1.

ENDIF.

ELSE . " v_check_eqfnr NE space.

If the Order number has been created with errors.

PERFORM bdc_dynpro USING 'SAPLCOIH' '0105'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'AUFPAR-PM_AUFART'

wa_input-auart

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'CAUFVD-PRIOK'

wa_input-priok_order

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'AFIH-QMNUM'

v_notif_num

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'CAUFVD-IWERK'

wa_input-iwerk

CHANGING it_bdcdata[].

PERFORM bdc_dynpro USING 'SAPLCOIH' '3000'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'CAUFVD-ILART'

wa_input-ilart

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'CAUFVD-EQUNR'

wa_input-equnr

CHANGING it_bdcdata[].

PERFORM bdc_dynpro USING 'SAPLCOIH' '3000'

CHANGING it_bdcdata[].

PERFORM bdc_field USING 'BDC_OKCODE'

'=BU'

CHANGING it_bdcdata[].

CALL TRANSACTION 'IW34' USING it_bdcdata

MODE v_n

UPDATE v_l

MESSAGES INTO it_messtab.

READ TABLE it_messtab INTO wa_messtab WITH KEY msgid = 'IW'

msgtyp = 'S'.

*To continue only if the read is success.

IF sy-subrc EQ 0.

*Building Messages from IW21 Transaction

CALL FUNCTION 'MESSAGE_TEXT_BUILD'

EXPORTING

msgid = wa_messtab-msgid

msgnr = wa_messtab-msgnr

msgv1 = wa_messtab-msgv1

msgv2 = wa_messtab-msgv2

IMPORTING

message_text_output = v_messg.

Passing Order numberinto V_ord_no

v_ord_no = wa_messtab-msgv1.

Updating Z-Table with Order number.

IF v_ord_no IS NOT INITIAL AND

v_notif_no IS NOT INITIAL.

CLEAR : wa_update.

wa_update-eqfnr = eqfnr.

wa_update-aufnr = v_ord_no.

wa_update-qmnum = v_notif_no.

INSERT into zit1_planview values wa_update.

COMMIT WORK.

ENDIF.

Creation of order using bapi_alm_order_maintain

Converison routine to get object key

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = v_ord_no

IMPORTING

output = v_objectkey.

v_refnum = c_refnum.

CONCATENATE v_objectkey '0010'

INTO wa_order_methods-objectkey.

v_objkey = wa_order_methods-objectkey.

*Sort operation table by activity

SORT it_operation BY activity.

*For operations tab.

LOOP AT it_operation INTO wa_operation.

AT FIRST.

v_first_flag = c_x.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_operation.

wa_order_methods-method = c_change.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

CONTINUE.

ENDAT.

v_first_flag = space.

*Incrementing the user status.

v_refnum = v_refnum + 1.

CONCATENATE v_objectkey wa_operation-activity

INTO wa_order_methods-objectkey.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_operation.

wa_order_methods-method = c_create.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

ENDLOOP.

*For operations tab

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'

TABLES

it_methods = it_order_methods

it_operation = it_operation

it_operation_up = it_operation_up

return = return

et_numbers = it_num.

IF sy-subrc EQ 0.

*Commit

PERFORM bapi_commit.

ENDIF.

REFRESH : it_order_methods.

v_refnum = c_refnum.

*For text tab.

LOOP AT it_operation INTO wa_operation.

AT FIRST.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_text.

wa_order_methods-objectkey = v_objkey.

wa_order_methods-method = c_create.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = c_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

CONTINUE.

ENDAT.

v_first_flag = space.

v_refnum = v_refnum + 1.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-objecttype = c_text.

wa_order_methods-objectkey = v_objkey.

wa_order_methods-method = c_create.

APPEND wa_order_methods TO it_order_methods.

CLEAR wa_order_methods.

wa_order_methods-refnumber = v_refnum.

wa_order_methods-method = c_save.

APPEND wa_order_methods TO it_order_methods.

ENDLOOP.

*For order text

LOOP AT it_operation INTO wa_operation.

wa_order_text-orderid = v_objectkey.

wa_order_text-activity = wa_operation-activity.

wa_order_text-textstart = '1'.

wa_order_text-textend = '1' . "v_lines.

APPEND wa_order_text TO it_order_text .

CLEAR wa_order_text.

ENDLOOP.

*To upload text into order

IF NOT it_text_lines[] IS INITIAL.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN' "EC *

TABLES

it_methods = it_order_methods

it_text = it_order_text

it_text_lines = it_text_lines

return = it_return_text.

IF sy-subrc EQ 0.

*Commit

PERFORM bapi_commit.

ENDIF.

ENDIF.

*User status for Order

*Conversion Exit for Order number

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = v_ord_no

IMPORTING

output = v_ord_no.

CLEAR : v_objnr_ord.

SELECT SINGLE

objnr

INTO v_objnr_ord

FROM aufk

WHERE aufnr = v_ord_no.

IF sy-subrc EQ 0.

CLEAR : wa_tj30t_ord.

READ TABLE "EC *

it_tj30t_ord

INTO wa_tj30t_ord

WITH KEY txt04 = v_asttx_order."EC *

IF sy-subrc EQ 0.

User Status

CALL FUNCTION 'STATUS_CHANGE_EXTERN'

EXPORTING

client = sy-mandt

objnr = v_objnr_ord

user_status = wa_tj30t_ord-estat

set_chgkz = c_x

EXCEPTIONS

object_not_found = 1

status_inconsistent = 2

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

ELSE.

*Bapi Transaction Commit for User status.

PERFORM bapi_commit.

ENDIF.

ENDIF.

System status

REFRESH : it_jsto[].

SELECT * FROM jsto INTO TABLE it_jsto WHERE objnr = v_objnr_ord.

IF sy-subrc = 0.

SORT it_jsto BY objnr.

CLEAR : wa_jsto.

READ TABLE it_jsto

INTO wa_jsto WITH KEY objnr = v_objnr_ord

BINARY SEARCH.

IF sy-subrc = 0.

CLEAR: wa_jstat,it_jstat.

If the release status is 'REL'

IF v_sttxt_order = 'REL'.

This is for RELEASE(I0002) status

wa_jstat-stat = 'I0002'.

wa_jstat-inact = space.

APPEND wa_jstat TO it_jstat.

ELSE .

wa_jstat-stat = 'I0003'.

wa_jstat-inact = space.

APPEND wa_jstat TO it_jstat.

ENDIF.

CALL FUNCTION 'STATUS_CHANGE_INTERN'

EXPORTING

client = sy-mandt

objnr = v_objnr_ord

set_chgkz = wa_jsto-chgkz

TABLES

status = it_jstat

EXCEPTIONS

object_not_found = 1

status_inconsistent = 2

status_not_allowed = 3

OTHERS = 4.

IF sy-subrc EQ 0.

PERFORM bapi_commit.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ELSE .

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

type = sy-msgty

cl = sy-msgid

number = sy-msgno

par1 = sy-msgv1

par2 = sy-msgv2

par3 = sy-msgv3

par4 = sy-msgv4

IMPORTING

return = it_ret1.

ENDIF. " IW34

ENDIF.

*Error Messages Handling

IF it_ret1-type = 'E'.

APPEND it_ret1 TO return.

ELSE .

CLEAR : wa_ret1.

READ TABLE it_ret2 INTO wa_ret1 WITH KEY type = 'E'.

IF sy-subrc EQ 0.

APPEND wa_ret1 TO return.

ELSE .

CLEAR : wa_ret1.

READ TABLE it_ret3 INTO wa_ret1 WITH KEY type = 'E'.

IF sy-subrc EQ 0.

APPEND wa_ret1 TO return.

ELSE .

CLEAR : wa_ret1.

READ TABLE it_ret4 INTO wa_ret1 WITH KEY type = 'E'.

IF sy-subrc EQ 0.

APPEND wa_ret1 TO return.

ELSE .

CLEAR : wa_ret1.

READ TABLE it_return_text INTO wa_ret1 WITH KEY type = 'E'.

IF sy-subrc EQ 0.

APPEND wa_ret1 TO return.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

*Success Message Handling.

IF it_ret1-type = 'S'.

APPEND it_ret1 TO return.

ENDIF.

ENDIF.