Posted: Sat Nov 17, 2007 6:32 pm Post subject: Report basic status of an SAP systems
ABAP code and UNIX script to report basic status of an SAP system or systems; primarily a concatenated version of SM04, SM13, SM50, ST03, and others
Using/installing the monitoring tool
1 The file show_sap.txt has the source code for the function module. I've
called it Z_SHOW_STATUS but it could be anything else.
When defining the function module (SE37), remember to set the
RFC supported flag.
There are no import or export parameters, but there is a table that is
used to return the information. The Table parameter is INFO, and I have
used a ref structure of ABAPTEXT.
Remember to activate the function after uploading the code.
2 The program to call the fucntion from UNIX is the one supplied with
the rfcsdk kit, called startrfc. It needs to be compiled with the
appropriate switches for your operating system.
3 Execute the compiled program with the appropriate switches for
host name, instance, client, username, password. You also need to
add the switches for calling the function.
where host is the host name,
00 is the instance number
user is the username
password is the password
client is the client
Z_SHOW_STATUS is the function module
INFO is the name of the table parameter
72 is it's wisth (in bytes)
w=- means print the contents to standard output.
Unix SH script
Code:
#!/bin/ksh
oss_host="sapserv6"
sleep_time=60
tmp_file="/tmp/sap_status.txt"
typeset -L15 aa
typeset -L25 dd
typeset -R6 tt
function extract_info {
if (( counter == 0 )); then
let all_users=0
let all_modes=0
let all_freeD=0
let all_ofD=0
let all_freeB=0
let all_ofB=0
let all_stop=0
let all_long=0
let all_err=0
let all_dumps=0
let all_batch=0
let all_dialog=0
let all_total=0
fi
inst[counter]=$(head -n 1 $tmp_file$node|cut -d " " -f 3)
at[counter]=$(head -n 1 $tmp_file$node|cut -d " " -f 8)
host[counter]=$node
users[counter]=$(grep Users $tmp_file$node|awk '{print $3}')
modes[counter]=$(grep Modes $tmp_file$node|awk '{print $3}')
freeD[counter]=$(grep 'Free D' $tmp_file$node|\
awk '{print $4, $5, $6 }')
freeB[counter]=$(grep 'Free B' $tmp_file$node|\
awk '{print $4, $5, $6 }')
stop[counter]=$(grep Stopped $tmp_file$node|awk '{print $4}')
long[counter]=$(grep Long $tmp_file$node|awk '{print $5}')
err[counter]=$(grep Errors $tmp_file$node|awk '{print $6}')
update[counter]=$(grep Update $tmp_file$node|\
awk '{print $4}')
if grep 'Last short' $tmp_file$node >/dev/null;then
dumps[counter]=0
else
dumps[counter]=$(grep 'Short dumps' $tmp_file$node|\
awk '{print $5, $7}')
fi
batch[counter]=$(grep 'Batch step' $tmp_file$node|\
awk '{print $7,"(" $9 " ms)"}')
dialog[counter]=$(grep 'Dialog step' $tmp_file$node|\
awk '{print $7,"(" $9 " ms)"}')
total[counter]=$(grep 'Total step' $tmp_file$node|\
awk '{print $7,"(" $9 " ms)"}')
brback[counter]=$(grep 'Last brbac' $tmp_file$node|\
awk '{print $6}')
brarch[counter]=$(grep 'Last brarc' $tmp_file$node|\
awk '{print $6}')
archspace[counter]=$(grep 'Archive space' $tmp_file$node|\
awk '{print $5}')
let all_users=all_users+users[counter]
let all_modes=all_modes+modes[counter]
let all_freeD=all_freeD+$(print ${freeD[counter]}|\
awk '{print $1}')
let all_freeB=all_freeB+$(print ${freeB[counter]}|\
awk '{print $1}')
let all_stop=all_stop+stop[counter]
let all_long=all_long+long[counter]
let all_err=all_err+$(print ${err[counter]}|\
awk '{print $1}')
let all_dumps=all_dumps+$(print ${dumps[counter]}|\
awk '{print $1}')
let all_batch=all_batch+$(print ${batch[counter]}|\
awk '{print $1}')
let all_dialog=all_dialog+$(print ${dialog[counter]}|\
awk '{print $1}')
let all_total=all_total+$(print ${total[counter]}|\
awk '{print $1}')
let counter=counter+1
}
###### start here
#
let last_ping=00
while (( 1 == 1 )); do
let counter=0
node=iipa01
if /ops/show_sap.exe -3 -h $node -s 00 -T INFO,72,w=$tmp_file$node; then
extract_info
fi
node=iipa02
if /ops/show_sap.exe -3 -h $node -s 00 -T INFO,72,w=$tmp_file$node; then
extract_info
fi
node=iipa03
if /ops/show_sap.exe -3 -h $node -s 00 -c 000 -T
INFO,72,w=$tmp_file$node; then
extract_info
fi
##
clear
let i=0
dd="Status at"
tt="Totals"
print -n "$dd"
while (( $i < $counter ));
do
aa=${at[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Instance"
tt=""
print -n "$dd"
while (( $i < $counter ));
do
aa=${inst[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Host"
tt=""
print -n "$dd"
while (( $i < $counter ));
do
aa=${host[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Users"
tt=$all_users
print -n "$dd"
while (( $i < $counter ));
do
aa=${users[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Modes"
tt=$all_modes
print -n "$dd"
while (( $i < $counter ));
do
aa=${modes[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Free DIA"
tt=$all_freeD
print -n "$dd"
while (( $i < $counter ));
do
aa=${freeD[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Free BTC"
tt=$all_freeB
print -n "$dd"
while (( $i < $counter ));
do
aa=${freeB[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Stopped processes"
tt=$all_stop
print -n "$dd"
while (( $i < $counter ));
do
aa=${stop[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Long running processes"
tt=$all_long
print -n "$dd"
while (( $i < $counter ));
do
aa=${long[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Errors with updates"
tt=$all_err
print -n "$dd"
while (( $i < $counter ));
do
aa=${err[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Update status"
tt=""
print -n "$dd"
while (( $i < $counter ));
do
aa=${update[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Short dumps today"
tt=$all_dumps
print -n "$dd"
while (( $i < $counter ));
do
aa=${dumps[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Batch steps today"
tt=$all_batch
print -n "$dd"
while (( $i < $counter ));
do
aa=${batch[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Dialog steps today"
tt=$all_dialog
print -n "$dd"
while (( $i < $counter ));
do
aa=${dialog[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Total steps today"
tt=$all_total
print -n "$dd"
while (( $i < $counter ));
do
aa=${total[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Last brbackup"
tt=""
print -n "$dd"
while (( $i < $counter ));
do
aa=${brback[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Last brarchive"
tt=""
print -n "$dd"
while (( $i < $counter ));
do
aa=${brarch[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
##
let i=0
dd="Archive space"
tt=""
print -n "$dd"
while (( $i < $counter ));
do
aa=${archspace[$i]}
print -n "$aa"
let i=$i+1
done
print "$tt"
##
print -n "Waiting for $sleep_time seconds"
let i=1
while (( $i <= $sleep_time));do
let mod=$i%10
if (( 0 == $mod ));then
print -n "x"
else
print -n "."
fi
sleep 1
let i=$i+1
done
#sleep $sleep_time
done
ABAP function
Code:
FUNCTION Z_SHOW_STATUS.
*"----------------------------------------------------------------------
*"*"Local interface:
*" TABLES
*" INFO STRUCTURE ABAPTEXT
*"----------------------------------------------------------------------
TABLES: VBHDR,SNAP_BEG,SNAPT, SDBAH.
data:
th_opcode(1) type x,
VB_GET_INFO LIKE TH_OPCODE VALUE 17,
VBSINFO(20),
VBINFO LIKE VBINFO.
DATA: AVAILABLE LIKE SALGENP-INT1,
TEXT LIKE SALGENP-TEXT,
VALUE LIKE SALCOM-VALUE,
PROBLEMS.
DATA: DAYS_DIFF TYPE I.
DATA: TODAY LIKE SY-DATUM, YESTERDAY LIKE SY-DATUM.
DATA: BEGIN OF BACKUP_TAB OCCURS 10.
include structure sdbah.
data: end of backup_tab.
DATA: BEGIN OF ARCHIVE_TAB OCCURS 10.
include structure sdbah.
data: end of archive_tab.
DATA: BEGIN OF SUMMARY OCCURS 10.
INCLUDE STRUCTURE SAPWLSUMRY.
DATA: END OF SUMMARY.
data: begin of fcc,
id(2), ll(3), errid like snapt-errid,
end of fcc.
field-symbols: <f>.
data: begin of usr_tabl occurs 10.
include structure uinfo.
data: end of usr_tabl.
data: begin of wp_tabl occurs 10.
include structure wpinfo.
data: end of wp_tabl.
DATA: VB_COUNTER TYPE I,
DIA_JOBS TYPE I,
BTC_JOBS TYPE I,
RECS TYPE I,
LONG_RUNNING TYPE I,
STOPPED TYPE I,
FREE_DIA TYPE I,
FREE_BTC TYPE I,
TOTAL_RESPTI TYPE I,
TOTAL_QUEUETI TYPE I,
LAST_TIME LIKE SY-UZEIT,
MAX_TIME LIKE SY-UZEIT,
AVE_RESPTI TYPE I,
AVE_QUEUETI TYPE I,
TOTAL_COUNT TYPE I.
DATA:
workdate like sy-datum,
WORKTIME LIKE SY-UZEIT,
WORKRC LIKE SDBAH-RC.
DATA: OPCODE TYPE X,
SUM_USR LIKE SY-INDEX,
SUM_MODE LIKE SY-INDEX,
WITH_CPU TYPE X VALUE 0,
TH_VB_RC LIKE SY-INDEX,
vb_notexecuted like th_vb_rc value 255,
vb_autosysexec like th_vb_rc value 254,
vb_autodiaexec like th_vb_rc value 253,
vb_run_v2 like th_vb_rc value 252,
vb_delete like th_vb_rc value 251,
vb_restart_v1 like th_vb_rc value 250,
vb_restart_v2 like th_vb_rc value 249,
vb_autodelete like th_vb_rc value 248,
vb_executed like th_vb_rc value 247,
vb_run_v1 like th_vb_rc value 246,
vb_v2_ok like th_vb_rc value 245,
vb_ok like th_vb_rc value 0,
vb_v1_ok like th_vb_rc value 1,
vb_hdr_insert like th_vb_rc value 2,
vb_hdr_read like th_vb_rc value 3,
vb_dump like th_vb_rc value 4,
vb_commit like th_vb_rc value 5,
vb_modul_read like th_vb_rc value 6,
vb_modul_update like th_vb_rc value 7,
vb_no_memory like th_vb_rc value 8,
vb_sap_exit like th_vb_rc value 9,
vb_no_dynp_memory like th_vb_rc value 10,
vb_bad_mode like th_vb_rc value 11,
vb_run_stopped like th_vb_rc value 12,
vb_del_stopped like th_vb_rc value 13,
vb_wrong_parameter like th_vb_rc value 14,
VB_NO_PARAMETER LIKE TH_VB_RC VALUE 15,
VB_DEADLOCK LIKE TH_VB_RC VALUE 16,
VB_NO_SERVER LIKE TH_VB_RC VALUE 17,
VB_NO_SERVER_LIST LIKE TH_VB_RC VALUE 18.
DEFINE SHOW_DATE.
DAYS_DIFF = TODAY - WORKDATE.
IF WORKRC <> 0.
MOVE '- failed (' TO OUTPUT_LINE+42.
IF WORKDATE = TODAY.
MOVE 'today)' TO OUTPUT_LINE+52.
ELSE.
IF WORKDATE = YESTERDAY.
MOVE 'yesterday)' TO OUTPUT_LINE+52.
ELSE.
WRITE DAYS_DIFF TO OUTPUT_LINE+52(2).
WRITE 'days ago)' TO OUTPUT_LINE+54.
ENDIF.
ENDIF.
ELSE.
MOVE '- OK (' TO OUTPUT_LINE+42.
IF WORKDATE = TODAY.
MOVE 'today)' TO OUTPUT_LINE+48.
ELSE.
IF WORKDATE = YESTERDAY.
MOVE 'yesterday)' TO OUTPUT_LINE+48.
ELSE.
WRITE DAYS_DIFF TO OUTPUT_LINE+48(2).
WRITE 'days ago)' TO OUTPUT_LINE+50.
ENDIF.
ENDIF.
ENDIF.
END-OF-DEFINITION.
IF SY-DBSYS(6) = 'ORACLE'.
PERFORM LOG_ALERT(RSORADBA) USING PROBLEMS
VALUE
TEXT
AVAILABLE.
CALL FUNCTION 'DB_ORA_BACKUP_TAB'
* importing
* tabcnt = tabcnt
TABLES
BACKUP_TAB = BACKUP_TAB.
SELECT * FROM SDBAH INTO TABLE ARCHIVE_TAB
WHERE FUNCT IN
('sve','cpy','ssv','svd','cpd','ssd','dsv','dcp','cps','cds',
'SVE','CPY','SSV','SVD','CPD','SSD','DSV','DCP','CPS','CDS')
ORDER BY BEG DESCENDING.
ENDIF.
VB_COUNTER = 0.
SELECT * INTO VBHDR FROM VBHDR.
case vbhdr-vbrc.
when vb_ok.
when vb_v1_ok.
when vb_v2_ok.
when vb_run_v1.
when vb_executed.
when vb_restart_v2.
when vb_restart_v1.
when vb_run_v2.
when vb_autodiaexec.
when vb_autosysexec.
when vb_notexecuted.
when others.
VB_COUNTER = VB_COUNTER + 1.
endcase.
ENDSELECT.
opcode = 2.
call 'ThUsrInfo' id 'OPCODE' field opcode
id 'TAB' field usr_tabl-*sys*.
SUM_USR = -1. "us
SUM_MODE = -1. "us
loop at usr_tabl.
sum_usr = sum_usr + 1.
sum_mode = sum_mode + usr_tabl-extmodi.
endloop.
free wp_tabl.
IF SY-BATCH = 'X'.
FREE_BTC = 1. "us
ELSE.
FREE_DIA = 1. "us
ENDIF.
opcode = 1.
call 'ThWpInfo' id 'OPCODE' field opcode id 'TAB' field
wp_tabl-*sys* id 'CPU' field with_cpu.
LOOP AT WP_TABL.
IF WP_TABL-WP_ITYPE = 1.
DIA_JOBS = DIA_JOBS + 1.
ENDIF.
IF WP_TABL-WP_ITYPE = 4.
BTC_JOBS = BTC_JOBS + 1.
ENDIF.
IF WP_TABL-WP_ISTATUS = 2.
IF WP_TABL-WP_ITYPE = 1.
FREE_DIA = FREE_DIA + 1.
ELSEIF WP_TABL-WP_ITYPE = 4.
FREE_BTC = FREE_BTC + 1.
ENDIF.
ENDIF.
IF WP_TABL-WP_ISTATUS = 8.
STOPPED = STOPPED + 1.
ENDIF.
IF ( WP_TABL-WP_ELTIME > 600 ) AND
( wp_tabl-wp_itype <> 4 ) and
( wp_tabl-wp_iwait <> 9 ) .
LONG_RUNNING = LONG_RUNNING + 1.
ENDIF.
ENDLOOP.
RECS = 0.
select * from snap_beg
WHERE SEQNO = '000' AND DATUM = SY-DATUM
ORDER BY DATUM UZEIT.
RECS = RECS + 1.
ENDSELECT.
FCC = SNAP_BEG-FLIST.
IF FCC-LL CO '0123456789'.
ASSIGN FCC-ERRID(FCC-LL) TO <F>.
SNAPT-ERRID = <F>.
ELSE.
SNAPT-ERRID = '?????'.
ENDIF.
CALL FUNCTION 'SAPWL_GET_SUMMARY_STATISTIC'
* destination destination
EXPORTING
PERIODTYPE = 'D'
HOSTID = SY-HOST
STARTDATE = SY-DATUM
TABLES
SUMMARY = SUMMARY.
call 'ThVBCall'
id 'OPCODE' field vb_get_info
id 'VBINFO' field vbinfo.
if sy-subrc = 0.
if vbinfo-vb_active = 1.
VBSINFO = 'OK'.
else.
if vbinfo-autostop = 1.
VBSINFO = 'Deactivated by system'.
else.
VBSINFO = 'Deactivated by user'.
endif.
endif.
ENDIF.
* data fname(60) value '/tmp/sap_status.txt'.
DATA:OUTPUT_LINE(100).
* open dataset fname for output in text mode.
MOVE 'SAP system ' TO OUTPUT_LINE.
MOVE SY-SYSID TO OUTPUT_LINE+12.
MOVE 'status as at ' TO OUTPUT_LINE+16.
WRITE SY-DATUM TO OUTPUT_LINE+30(10).
WRITE SY-UZEIT TO OUTPUT_LINE+41(9).
CONDENSE OUTPUT_LINE.
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Users' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE: SUM_USR TO OUTPUT_LINE+31(3).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Modes' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE SUM_MODE TO OUTPUT_LINE+31(3).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Free DIA' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE FREE_DIA TO OUTPUT_LINE+31(3).
MOVE 'of ' TO OUTPUT_LINE+34.
MOVE DIA_JOBS TO OUTPUT_LINE+37(3).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Free BTC' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE FREE_BTC TO OUTPUT_LINE+31(3).
MOVE 'of ' TO OUTPUT_LINE+34.
MOVE BTC_JOBS TO OUTPUT_LINE+37(3).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Stopped processes' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE STOPPED TO OUTPUT_LINE+31(3).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Long running processes' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE LONG_RUNNING TO OUTPUT_LINE+31(3).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Errors with update records' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE VB_COUNTER TO OUTPUT_LINE+31(3).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
MOVE 'Update status' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE VBSINFO TO OUTPUT_LINE+31.
APPEND OUTPUT_LINE TO INFO.
IF RECS > 0.
MOVE 'Short dumps today' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE RECS TO OUTPUT_LINE+31(3).
MOVE 'latest:' TO OUTPUT_LINE+34.
WRITE SNAP_BEG-UZEIT TO OUTPUT_LINE+42(8).
MOVE SNAP_BEG-UNAME TO OUTPUT_LINE+51(12).
MOVE SNAPT-ERRID TO OUTPUT_LINE+64(20).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
ELSE.
MOVE 'Last short dump today' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
MOVE '(none)' TO OUTPUT_LINE+31(6).
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
ENDIF.
LOOP AT SUMMARY.
TOTAL_COUNT = TOTAL_COUNT + SUMMARY-COUNT.
TOTAL_RESPTI = TOTAL_RESPTI + SUMMARY-RESPTI.
TOTAL_QUEUETI = TOTAL_QUEUETI + SUMMARY-QUEUETI.
IF SUMMARY-LASTRECTI > MAX_TIME.
MAX_TIME = SUMMARY-LASTRECTI.
ENDIF.
IF SUMMARY-TASKTYPE = 'DIALOG' OR SUMMARY-TASKTYPE = 'BCKGRD'.
LAST_TIME = SUMMARY-LASTRECTI.
IF SUMMARY-TASKTYPE = 'DIALOG'.
MOVE 'Dialog steps as at ' TO OUTPUT_LINE.
WRITE LAST_TIME TO OUTPUT_LINE+19(8).
ELSE.
MOVE 'Batch steps as at ' TO OUTPUT_LINE.
WRITE LAST_TIME TO OUTPUT_LINE+18(8).
ENDIF.
MOVE ':' TO OUTPUT_LINE+29.
MOVE SUMMARY-COUNT TO OUTPUT_LINE+31(6).
MOVE '(ave ' TO OUTPUT_LINE+38.
AVE_RESPTI = SUMMARY-RESPTI / SUMMARY-COUNT.
AVE_QUEUETI = SUMMARY-QUEUETI / SUMMARY-COUNT.
MOVE AVE_RESPTI TO OUTPUT_LINE+44(5).
MOVE 'ms, ave wait' TO OUTPUT_LINE+49.
MOVE AVE_QUEUETI TO OUTPUT_LINE+62(4).
MOVE 'ms)' TO OUTPUT_LINE+66.
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
ENDIF.
ENDLOOP.
MOVE 'Total steps as at ' TO OUTPUT_LINE.
WRITE MAX_TIME TO OUTPUT_LINE+18(8).
MOVE ':' TO OUTPUT_LINE+29.
MOVE TOTAL_COUNT TO OUTPUT_LINE+31(6).
MOVE '(ave ' TO OUTPUT_LINE+38.
AVE_RESPTI = TOTAL_RESPTI / TOTAL_COUNT.
AVE_QUEUETI = TOTAL_QUEUETI / TOTAL_COUNT.
MOVE AVE_RESPTI TO OUTPUT_LINE+44(5).
MOVE 'ms, ave wait' TO OUTPUT_LINE+49.
MOVE AVE_QUEUETI TO OUTPUT_LINE+62(4).
MOVE 'ms)' TO OUTPUT_LINE+66.
* transfer output_line to fname.
APPEND OUTPUT_LINE TO INFO.
IF SY-DBSYS(6) = 'ORACLE'.
READ TABLE BACKUP_TAB INDEX 1.
MOVE 'Last brbackup' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
WORKRC = BACKUP_TAB-RC.
WORKDATE = BACKUP_TAB-BEG(8).
WORKTIME = BACKUP_TAB-BEG+8(6).
WRITE WORKDATE TO OUTPUT_LINE+31(10).
SHOW_DATE.
APPEND OUTPUT_LINE TO INFO.
READ TABLE ARCHIVE_TAB INDEX 1.
MOVE 'Last brarchive' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
WORKRC = ARCHIVE_TAB-RC.
WORKDATE = ARCHIVE_TAB-BEG(8).
WORKTIME = ARCHIVE_TAB-BEG+8(6).
WRITE WORKDATE TO OUTPUT_LINE+31(10).
SHOW_DATE.
APPEND OUTPUT_LINE TO INFO.
WRITE 'Archive space available' TO OUTPUT_LINE.
MOVE ':' TO OUTPUT_LINE+29.
WRITE AVAILABLE TO OUTPUT_LINE+31(10).
APPEND OUTPUT_LINE TO INFO.
ENDIF.
* close dataset fname.
ENDFUNCTION.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.