SAP otomasyonu
sap komutu, SAP GUI for Windows'u SAP GUI Scripting üzerinden yönetir: oturum açar, işlem kodları (transaction) başlatır, alanları doldurur, düğmelere basar, tabloları ve mesajları okur; bunların hepsini bileşenlerin kimlikleriyle (id) yapar. SAP ekranlarına resimle veya konumla tıklamaktan çok daha güvenilirdir.
Başlamadan önce
SAP GUI Scripting iki yerde izinli olmalıdır:
- SAP sisteminde (SAP Basis ekibiniz):
sapgui/user_scripting = TRUEprofil parametresi (RZ11 işlemi). Çoğu zaman yalnızca robot için ayrılmış hesap için açılır. - Ajan makinesinde: SAP GUI seçenekleri → Accessibility & Scripting → Scripting → Enable scripting; Notify when a script attaches to SAP GUI ve Notify when a script opens a connection seçeneklerini kapatın, aksi halde biri tıklayana kadar bekleyen bir açılır pencere çıkar.
Ajan makinesinde SAP GUI for Windows (SAP Logon) kurulu olmalıdır. Botream hiçbir SAP bileşeni içermez.
İlk görev
set --name:sapUser --type:credential --vault:"SAP" --credential:"RPA_USER"
sap --action:logon --connection:"PRD - Production" --client:100 --credential:$sapUser$ --language:EN
sap --action:starttransaction --transaction:VA03
sap --action:settext --id:wnd[0]/usr/ctxtVBAK-VBELN --value:$orderNo$
sap --action:sendkey --key:Enter
sap --action:getstatusbar --failonerror:true --output:status
sap --action:gettext --id:wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV45A:4021/txtVBKD-BSTKD --output:poNumber
sap --action:logoff
logon, çalışmıyorsa SAP Logon'u başlatır, bağlantıyı SAP Logon'da listelendiği açıklamasıyla açar ve istemci (client), bir kimlik bilgisinin kullanıcı adı ile parolası ve dil ile oturum açar. Kullanıcı başka bir yerde zaten oturum açmışsa--multiplelogonkarar verir:continue(varsayılan),endothersveyafail.attach, zaten açık olan bir oturumu (elle veya çoklu oturum açma/SSO ile açılmış) kullanır: ilk bağlantıyı veya açıklaması--connectionile eşleşeni (joker karakterler:PRD*) ve onun ilk penceresini ya da--sessionindexile seçileni.- Diğer tüm eylemler
--sessionile adlandırılan oturumda (varsayılanSAP) çalışır; böylece bir görev aynı anda iki sistemde çalışabilir. logonile açılan bir oturum, çalıştırma bittiğinde (hata sonrasında da) kapatılır. Bağlanılan (attach) bir oturum açık kalır.
Bileşen kimlikleri
Bileşenler wnd[0]/usr/ctxtVBAK-AUART (ana pencere, kullanıcı alanı, değer yardımlı bir metin alanı) veya wnd[0]/tbar[1]/btn[8] (Execute düğmesi) gibi scripting kimlikleriyle adreslenir. Bunları şöyle edinin:
- düzenleyicide: Id yanındaki Capture ekranı karartır; SAP penceresindeki alana, düğmeye veya tabloya tıklayın, kimliği doldurulur;
- veya SAP'nin kendi betik kaydedicisiyle (SAP GUI → Customize Local Layout → Script Recording and Playback): yaptıklarınızı kaydedin ve kimlikleri betikten kopyalayın.
/app/con[0]/ses[0]/ile başlayan kimlikler de olur; oturum kısmı atılır.
Açılır pencereler wnd[1], wnd[2]… olur. Görünmeyebilecek bir pencere üzerinde işlem yapmadan önce exists kullanın.
Eylemler
| Eylem | Ne yapar |
|---|---|
starttransaction --transaction |
Bir işlem başlatır, ör. VA01 (/n gerekmez). |
settext --id --value, gettext --id |
Bir alanı yazar veya okur. |
press --id |
Bir düğmeye, araç çubuğu düğmesine veya menü öğesine basar. |
select --id |
Bir radyo düğmesini, sekmeyi veya menü öğesini seçer. |
setcheckbox --id --value:true|false |
Bir onay kutusunu işaretler veya temizler. |
setcombo --id --value |
Bir açılır listeden anahtarına veya metnine göre öğe seçer. |
sendkey --key [--window] |
Enter, F1–F12, Shift+F1…, Ctrl+F1…, Back, Exit, Cancel, Save, Execute veya SAP'nin tuş numarası; wnd[0]'da veya bir açılır pencerede. |
setfocus --id |
İmleci bir alana koyar (ör. F4'ten önce). |
doubleclick --id [--row --column] |
Bir bileşene veya bir ALV ızgarasının hücresine çift tıklar. |
selectrows --id --rows |
Bir ALV ızgarasının veya tablo kontrolünün satırlarını seçer ("0,2,5" veya bir liste; 0 ilk satırdır). |
exists --id |
Bileşen ekrandaysa true. |
getproperty --id --property |
Bir scripting özelliği: Text, Tooltip, Changeable, Type, Name… |
gettable --id [--maxrows] |
Bir ALV ızgarasını veya tablo kontrolünü, sütun başlıklarını ad olarak kullanan bir data table olarak tüm satırlarıyla okur (gerekirse kaydırır). |
getstatusbar [--failonerror] |
Alttaki mesaj: Type (S, W, E, A, I) ve Text içeren bir record; --failonerror:true ile bir hata mesajı komutu başarısız kılar, böylece bir catch ele alabilir. |
windowtitle [--window] |
Pencerenin veya bir açılır pencerenin başlığı. |
logoff |
Oturumu kapatır (bağlanılan bir oturum yalnızca bırakılır). |
Bir rapor okuma
sap --action:starttransaction --transaction:VA05
sap --action:settext --id:wnd[0]/usr/ctxtVBCOM-KUNDE --value:$customer$
sap --action:press --id:wnd[0]/tbar[1]/btn[8]
sap --action:gettable --id:wnd[0]/usr/cntlGRID1/shellcont/shell --output:orders
loop --type:datatable --table:$orders$ --variable:row
log --message:"$row.Sales Document$: $row.Net Value$"
endloop
Sütun başlıkları data table'ın sütun adları olur; iki kez geçen bir başlık bir numara alır (Date 2).
İyi uygulamalar
- Robot için, ihtiyaç duyduğu rollere sahip ve parolası bir kasada tutulan özel bir SAP kullanıcısı kullanın.
- Kaydettikten sonra durum çubuğunu denetleyin (
getstatusbar --failonerror:true) ve hataları bircatchiçinde ele alın. - Ajan makinesindeki SAP GUI pencere boyutunu ve temasını sabit tutun; kimlikler bunlarla değişmez, ancak tablo kontrolleri sığabildiği kadar satır gösterir.
- Bir ekran kullanıcılar arasında farklıysa (varyantlar, kişisel ayarlar), robot kullanıcısı için bunları bir kez elle ayarlayın.