Basic GuiXT comes native with every installation of SAP. You can see this when you logon to sap.
Customize Local Layout (Button - Alt F12) -> Activate GuiXT
This version of GuiXT however only makes it possible to hide screen elements (and things like that. Condensing multiple screens into one screen, requires advanced functionality not supported in this version. You have to buy (somewhat pricey) licenses for that from Synactive Inc.
http://www.synactive.com/www_e/produkte.html
Here is an example of a script that we are currently using:
// Created on 11/17/2009 // Created by MS Parameter l_scrn set V[z_vbo2_scr] "&U[l_scrn]" // storing the value of the local parameter into a global variable if not V[z_vbo2_dcn_amt] // making Deduction Amount required set V[z_vbo2_dcn_tmp] "1" set V[z_vbo2_scr] "" return "E:Please enter the deduction amount" "-statusline" endif if not V[z_vbo2_doc_txt] // making Document Text required set V[z_vbo2_doc_tmp] "1" set V[z_vbo2_scr] "" return "E:Please enter a document text" "-statusline" endif if not V[z_vbo2_chckno] // making check number required set V[z_vbo2_doc_tmp] "1" set V[z_vbo2_scr] "" return "E:Please enter a check number" "-statusline" endif if V[z_vbo2_transpayr_chck=X] and not V[z_vbo2_tranpayr] set V[z_vbo2_doc_tmp] "1" set V[z_vbo2_scr] "" return "E: Transfer Payer is checked. Please enter an Alternate Payer" "-statusline" endif // Change Rebate Agreement Screen SAPMV13A.0401 set V[z_vbo2_agmtn] "&F[Agreement]" // read the Agreement number Enter // Information Screen SAPMSDYP.0010 Enter // Change Cust/ Group Rebate : Overview Agreement Screen SAPMV13A.0410 title "Processing VBO2 - Please Wait ..." set V[z_vbo2_rebrecpt] "&F[Rebate recipient]" // Rebate recipient for this agreement set V[z_vbo2_tranpayr] "&V[z_vbo2_tranpayr]" // Read the actual value of the variable set V[z_vbo2_transpayr_chck] "&V[z_vbo2_transpayr_chck]" // Read the value of the checkbox set V[z_vbo2_tranpayr_hold] "&V[z_vbo2_tranpayr]" // set V[z_vbo2_invoice] "&V[z_vbo2_invoice]" set V[z_vbo2_invoice] "" if V[z_vbo2_tranpayr] and V[z_vbo2_transpayr_chck=X] set V[z_rebate_recpt] "&V[z_vbo2_rebrecpt]" set V[z_alt_payer] "" else if V[z_vbo2_tranpayr] and not V[z_vbo2_transpayr_chck=X] set V[z_alt_payer] "&V[z_vbo2_tranpayr]" set V[z_rebate_recpt] "" endif endif if not V[z_vbo2_tranpayr] set V[z_vb02_tmp_cust] "&V[z_vbo2_rebrecpt]" // base case else set V[z_vb02_tmp_cust] "&V[z_vbo2_tranpayr]" // transfer case and alt payer case endif // Setting up for RFC calls // RFC to return document number and document count for non invoice related deducts set V[zeros] "0000000000" // 10 zeros for padding set V[cust_len] "&V[z_vb02_tmp_cust]" "-stringlength" // how many digits set V[cust_len] "10" - "&V[cust_len]" // Zeros required set V[z_vb02_tmp_cust] "&V[zeros](1-&[cust_len])&V[z_vb02_tmp_cust]" // Padded material number call "Z_ZGXT_rfC_REF2DOC" in.CUSTNR="&V[z_vb02_tmp_cust]" in.REFNR="&V[z_vbo2_chckno]" out.DOCNO="z_docu_num" Out.CNTNR="z_docu_count" set V[z_vbo2_docu_count] "&V[z_docu_count]" set V[z_vbo2_docu_count] "&V[z_vbo2_docu_count]" * "1" set V[z_vbo2_docu_num] "&V[z_docu_num]" // if V[z_vbo2_docu_count>1] // checks if the document number is greater than 1 // set V[z_vbo2_scr] "" // message "E: Must Process Manually" "-statusline" // enter "/nVBO2" // goto SCRIPT_END // endif if not V[z_vbo2_docu_num] // based on what comes back from function module set V[z_vbo2_scr] "" message "E: Invalid Check Number for Agreement &F[Agreement]" "-statusline" enter "/nVBO2" goto SCRIPT_END endif label VBO2_PAY Enter "/24" // Pay pushbutton vbo2 // Change Cust/ Group Rebate 1524 : Overview Conditions Cust Reb (ZO02) Screen SAPMV13A.3007 Enter "=SUCH" // Find // Selection screen Screen SAPLSSEL.1104 if F[Volume rebate group] // if this field is displayed on this screen set F[Volume rebate group] "99" Enter "/8" goto next_stmt2 endif Enter "/12" goto srch_mat2 label next_stmt2 // Information Screen SAPMSDYP.0010 // Popup window - Volume rebate group "99" not found set V[z_temp] "X" Enter if V[z_temp] set V[z_temp] "" goto MAT_SEL endif // Change Cust/ Group Rebate 1524 : Overview Conditions Cust Reb (ZO02) Screen SAPMV13A.3007 set V[i] "1" Label LOOP_START If not F[Amt.to be paid(&V[i])] goto LOOP_END endif set V[z_vbo2_field_label] "&F[HEADERLINE(&V[i])]" set V[z_vbo_str] "&V[z_vbo2_field_label]" set V[x] "&V[z_vbo2_field_label]" pattern="%POSTING_GROUP" if Q[OK] set F[Amt.to be paid(&V[i])] "&V[z_vbo2_dcn_amt]" goto LOOP_END endif set V[i] "&V[i]" + "1" goto LOOP_START Label LOOP_END Enter "/80" // clicking first page button // Change Cust/ Group Rebate 1524 : Overview Conditions Cust Reb (ZO02) Screen SAPMV13A.3007 Enter "=SUCH" // Find // Selection screen Screen SAPLSSEL.1104 set F[Volume rebate group] "99" Enter "/8" Screen SAPMV13A.3007 set V[z_vbo2_dcn_amt2] "&F[Amt.to be paid(&V[i])]" Enter "/11" OnError="Continue" // Save if V[_lasterror] set V[z_vbo2_scr] "" set V[z_vbo2_message] "&V[_lasterror]" goto SCRIPT_END endif goto skip_mat2 label srch_mat2 Label MAT_SEL set V[i] "1" // Change Cust/ Group Rebate 88 : Overview Conditions Cust Reb (ZO02) Screen SAPMV13A.3007 Enter "=SUCH" // Find // Selection screen Screen SAPLSSEL.1104 if not F[Material] set V[z_vbo2_scr] "" message "E: Posting Group / Material not found" "-statusline" enter "/nVBO2" goto SCRIPT_END endif set F[Volume rebate group] "" set F[Material] "99999" Enter "/8" label VBO2_CONT_PG // Continuing searching for Posting Group / Material Screen SAPMV13A.3007 set V[z_vbo2_field_label] "&F[HEADERLINE(&V[i])]" set V[z_vbo_str] "&V[z_vbo2_field_label]" set V[x] "&V[z_vbo2_field_label]" pattern="%CREDIT / DEBIT" if Q[OK] goto CONTINUE_PROCESS endif set F[Amt.to be paid(&V[i])] "&V[z_vbo2_dcn_amt]" goto LOOP_END2 label CONTINUE_PROCESS set V[z_vbo2_scr] "" message "E: Posting Group / Material not found" "-statusline" enter "/nVBO2" goto SCRIPT_END Label LOOP_END2 Enter "/80" // Change Cust/ Group Rebate 88 : Overview Conditions Cust Reb (ZO02) Screen SAPMV13A.3007 Enter "=SUCH" // Find // Selection screen Screen SAPLSSEL.1104 set F[Material] "99999" Enter "/8" Screen SAPMV13A.3007 set V[z_vbo2_dcn_amt2] "&F[Amt.to be paid(&V[i])]" Enter "/11" OnError="Continue" // Save VBO2 if V[_lasterror] set V[z_vbo2_scr] "" set V[z_vbo2_message] "&V[_lasterror]" goto SCRIPT_END endif // At this point, a "6.." document has been created label skip_mat2 // Partner selection Screen SAPLV09C.0120 call "Z_ZGXT_rfC_errcust" in.CUSTOMER="&V[z_vb02_invoice]" Enter // Information Screen SAPMSDYP.0010 set V[z_vbo2_dcn_pmt_tmp] "&F[MESSTXT1]" set V[z_message_type] "&V[z_vbo2_dcn_pmt_tmp](1-10)" if V[z_message_type=PartRebSet] // True = Found "99" set V[z_vbo2_dcn_pmt] "&V[z_vbo2_dcn_pmt_tmp](21-29)" else set V[z_vbo2_scr] "" message "E: Posting Group / Material not found" "-statusline" enter "/nVBO2" goto SCRIPT_END endif Enter // Goto Transaction VF01 to get VF Number Screen SAPMV13A.0401 Enter "/n" Screen SAPLSMTR_NAVIGATION.0100 set V[z_cntr] "1" label TRY_VF01_AGAIN if V[z_cntr>20] goto EXIT_TRY_VF01_AGAIN else set V[z_vbo2_fldmsge] "" endif if V[z_vbo2_tranpayr] and V[z_vbo2_transpayr_chck=X] // if it has a value goto START_VA02 else goto SKIP_VA02 endif label SKIP_VA02 Enter "/nvf01" label START_VA02 if V[z_vbo2_tranpayr] and V[z_vbo2_transpayr_chck=X] enter "/nva02" include "va02_transfer_cust.txt" // ************* z_vbo2_dcn_pmt endif Screen SAPMV60A.0102 title "Processing Document - Please Wait ..." retry on error set cell[Docs to be processed,Document,1] "&V[z_vbo2_dcn_pmt]" Enter "/11" // Save Screen SAPMV60A.0102 if V[_message] set V[z_vbo2_vf01_num_tmp] "&V[_message]" set V[z_vbo2_vf01_num] "&V[z_vbo2_vf01_num_tmp](10-18)" endif if V[z_vbo2_vf01_num=g documen] set V[z_vbo2_vf01_num] "" set V[z_cntr] "&V[z_cntr]" + "1" set V[z_vbo2_fldmsge] "yes" goto TRY_VF01_AGAIN endif label EXIT_TRY_VF01_AGAIN if V[z_vbo2_fldmsge=yes] set V[z_vbo2_fldmsge] "" set V[z_vbo2_scr] "" message "E: Process &V[z_vbo2_dcn_pmt] With Transaction VF01" "-statusline" enter "/nVBO2" goto SCRIPT_END endif set V[z_vbo2_chg_fi_count] "0" label retry_CHG_FI call "Z_ZGXT_RFC_CHG_FI_CUST_TXT" in.DOCNO="&V[z_vbo2_vf01_num]" in.DOCTXT="&V[z_vbo2_doc_txt]" out.RET="z_rfc_good" set V[z_vbo2_ret] "&V[z_rfc_good]" if not V[z_vbo2_ret=X] and V[z_vbo2_chg_fi_count<20] set V[z_vbo2_chg_fi_count] "&V[z_vbo2_chg_fi_count]" + "1" goto retry_CHG_FI endif if V[z_vbo2_ret=X] enter "/nF-32" wait="1000" else enter "/nvbo2" goto SCRIPT_END endif // Clear Customer: Header Data Screen SAPMF05A.0131 retry on error set V[z_rebate_recpt] "&V[z_vbo2_rebrecpt]" // 2nd entry set V[z_alt_payer] "&V[z_vb02_tmp_cust]" // 1st entry if V[z_vbo2_tranpayr_hold] and V[z_vbo2_transpayr_chck=X] set F[Account] "&V[z_vbo2_tranpayr_hold]" set V[z_vb02_tmp_cust] "&V[z_vbo2_tranpayr_hold]" set V[z_vbo2_tranpayr_hold] "" else if V[z_vbo2_tranpayr_hold] and not V[z_vbo2_transpayr_chck=X] set F[Account] "&V[z_vbo2_rebrecpt]" set V[z_vb02_tmp_cust] "&V[z_vbo2_tranpayr_hold]" set V[z_vbo2_tranpayr_hold_tmp] "&V[z_vbo2_tranpayr_hold]" set V[z_vbo2_tranpayr_hold] "" else set F[Account] "&V[z_vbo2_rebrecpt]" set V[z_vb02_tmp_cust] "&V[z_vbo2_rebrecpt]" endif endif set R[Document Number] "X" Enter "/16" // Open items // Clear Customer Enter selection criteria Screen SAPMF05A.0731 set F[From(1)] "&V[z_vbo2_vf01_num]" // 9 number if V[z_vbo2_tranpayr_hold_tmp] and not V[z_vbo2_transpayr_chck=X] goto ALT_PAYER else set F[From(2)] "&V[z_docu_num]" // (From Initial RFC call) "&V[z_vbo2_vf01_num]" Enter "/16" // Open items goto SKIP_ALT_PAYER endif label ALT_PAYER Enter "/7" // Other account // Clear Customer Select open items Screen SAPMF05A.0710 set F[Account] "&V[z_alt_payer]" //"&V[z_rebate_recpt]" //"&V[z_vbo2_tranpayr]" set R[Document Number] "X" Enter "/16" // Open items // Clear Customer Enter selection criteria Screen SAPMF05A.0731 set F[From(1)] "&V[z_docu_num]" //"&V[z_vbo2_dcn_amt]" Enter "/16" label SKIP_ALT_PAYER // Clear Customer Process open items Screen SAPDF05X.3100 Enter "=OMX" // Select All // Clear Customer Process open items Screen SAPDF05X.3100 Enter "=Z-" // Deactivate Items.2 // Clear Customer Process open items Screen SAPDF05X.3100 Enter "=REST" // Res.items // Clear Customer Create residual items Screen SAPDF05X.3100 set V[z_vb02_pos] "" set V[z_vb02_neg] "" set V[absrow] "1" // Absolute row number set V[relrow] "1" // Relative row number set V[idx] "1" GetTableAttribute T[SAPDF05X_TC_6106] FirstVisibleRow=FVisRow LastVisibleRow=LVisRow LastRow=LastRow if V[FVisRow=1] // First row on screen? goto new_row_f32 endif Enter "/ScrollToLine=1" Table="T[SAPDF05X_TC_6106]" // scroll to first line label new_screen_f32 Screen SAPDF05X.3100 GetTableAttribute T[SAPDF05X_TC_6106] FirstVisibleRow=FVisRow LastVisibleRow=LVisRow LastRow=LastRow set V[relrow] 1 label new_row_f32 if V[absrow>&V[LastRow]] // end of table? goto end_of_table_f32 endif if V[absrow>&V[LVisRow]] // end of screen? Enter "/ScrollToLine=&V[absrow]" Table="T[SAPDF05X_TC_6106]" goto new_screen_f32 endif label NEXT_SELECTION set V[z_f32_usdgross_&V[idx]] "&cell[SAPDF05X_TC_6106,Net amount,&V[relrow]]" // Check negative value if (V[z_f32_usdgross_&V[idx]=&V[z_vbo2_dcn_amt2]] or V[z_f32_usdgross_&V[idx]=&V[z_vbo2_rfc_pymtamt]] or V[z_f32_usdgross_&V[idx]=&V[z_vbo2_rfc_invamt]]) and not V[z_vb02_neg=yes] SetCursor cell[SAPDF05X_TC_6106,Net amount,&V[relrow]] enter "/2" set V[z_vb02_neg] "yes" goto VALUE_FOUND endif set V[z_tmp] "&V[z_vbo2_dcn_amt2]" * "-1" set V[z_tmp2] "&V[z_vbo2_rfc_pymtamt]" * "-1" set V[z_tmp3] "&V[z_vbo2_rfc_invamt]" * "-1" set V[tmp] "&cell[SAPDF05X_TC_6106,Net amount,&V[relrow]]" set V[tmp] "&V[tmp]" * "1" // Check positive value if (V[tmp=&V[z_tmp]] or V[tmp=&V[z_tmp2]] or V[tmp=&V[z_tmp3]]) and not V[z_vb02_pos=yes] // postive value setCursor cell[SAPDF05X_TC_6106,Net amount,&V[relrow]] enter "/2" set V[z_vb02_pos] "yes" goto VALUE_FOUND endif set V[z_f32_tmp] "&cell[SAPDF05X_TC_6106,Document Number,&V[relrow]]" if not V[z_f32_tmp] goto end_of_table_f32 endif set V[absrow] "&V[absrow]" + "1" set V[relrow] "&V[relrow]" + "1" set V[idx] "&V[idx]" + "1" goto new_row_f32 label end_of_table_f32 label VALUE_FOUND Screen SAPDF05X.3100 if V[z_vb02_neg=yes] and V[z_vb02_pos=yes] set cell[SAPDF05X_TC_6106,RCd,&V[relrow]] "C20" goto SELECTION_COMPLETE else set cell[SAPDF05X_TC_6106,RCd,&V[relrow]] "C20" set V[absrow] "1" set V[relrow] "1" set V[idx] "1" goto NEXT_SELECTION endif label SELECTION_COMPLETE Enter "/11" // Post // Clear Customer: Header Data Screen SAPMF05A.0131 set V[z_vbo2_msg] "&V[_message]" set V[z_vbo2_msg2] "&V[_message](10-19)" set V[z_vbo2_scr] "X" set V[z_vbo2_f32_docnum] "&V[z_vbo2_msg2]" // set V[z_vbo2_amt] "&V[z_vbo2_dcn_amt]" set V[z_vbo2_doc_txt_disp] "&V[z_vbo2_doc_txt]" set V[z_vbo2_agmtn] "&F[Agreement]" set V[z_vbo2_tranpayr_disp] "&V[z_vbo2_tranpayr_hold_tmp]" set V[z_vbo2_successful] "X" return // "S: &V[z_vbo2_msg]" "-statusline" // go back to VBO2 label SCRIPT_END
Hope this helps,
Neal