06-06-2008 3:59 AM
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.
06-06-2008 4:02 AM
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..
06-06-2008 4:07 AM
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.