1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
/*
Origin VBS Script:
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/nfpl9"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtFKKL1-GPART").text = "12345"
session.findById("wnd[0]/usr/cmbFKKL1-LSTYP").key = "OPEN"
session.findById("wnd[0]/usr/cmbFKKL1-LSTYP").setFocus
session.findById("wnd[0]/tbar[0]/btn[0]").press
And how this would be written as Rust:
*/
use sap_scripting::*;
fn main() -> crate::Result<()> {
// Initialise the environment.
let com_instance = SAPComInstance::new().expect("Couldn't get COM instance");
let wrapper = com_instance.sap_wrapper().expect("Couldn't get SAP wrapper");
let engine = wrapper.scripting_engine().expect("Couldn't get GuiApplication instance");
let connection = match sap_scripting::GuiApplication_Impl::children(&engine)?.element_at(0)? {
SAPComponent::GuiConnection(conn) => conn,
_ => panic!("expected connection, but got something else!"),
};
eprintln!("Got connection");
let session = match sap_scripting::GuiConnection_Impl::children(&connection)?.element_at(0)? {
SAPComponent::GuiSession(session) => session,
_ => panic!("expected session, but got something else!"),
};
if let SAPComponent::GuiMainWindow(wnd) = session.find_by_id("wnd[0]".to_owned())? {
wnd.maximize().unwrap();
if let SAPComponent::GuiOkCodeField(tbox_comp) =
session.find_by_id("wnd[0]/tbar[0]/okcd".to_owned())?
{
tbox_comp.set_text("/nfpl9".to_owned()).unwrap();
wnd.send_v_key(0).unwrap();
} else {
panic!("no ok code field!");
}
} else {
panic!("no window!");
}
Ok(())
}