public SAPEvent SendMessage(SAPEvent message, TimeSpan timeout) { if (!isConnected) { throw new Exception("Pipe not connected to SAP bridge"); } if (string.IsNullOrEmpty(message.messageid)) { throw new ArgumentException("message id is mandatory", "messageid"); } if (replyqueue.ContainsKey(message.messageid)) { throw new Exception("Already waiting on message with id " + message.messageid); } var e = new replyqueueitem(message); lock (replyqueue) { replyqueue.Add(message.messageid, e); } Log.Debug("Sending: " + message.messageid + " " + message.action); pipeclient.PushMessage(message); if (timeout == TimeSpan.Zero) { e.reset.WaitOne(); } else { e.reset.WaitOne(timeout); } Log.Debug("Received reply: " + message.messageid + " " + message.action); if (e.reply != null && e.reply.error != null && !string.IsNullOrEmpty(e.reply.error.ToString())) { throw new Exception(e.reply.error.ToString()); } return(e.reply); }
private void Pipeclient_ServerMessage(NamedPipeConnection <SAPEvent, SAPEvent> connection, SAPEvent message) { try { if (replyqueue.ContainsKey(message.messageid)) { if (System.Threading.Monitor.TryEnter(replyqueue, 1000)) { try { var e = replyqueue[message.messageid]; e.reply = message; if (e.reset != null) { e.reset.Set(); } replyqueue.Remove(message.messageid); return; } finally { System.Threading.Monitor.Exit(replyqueue); } } } } catch (Exception ex) { Log.Error(ex.ToString()); } try { if (message.action == "recorderevent") { var data = message.Get <SAPRecordingEvent>(); if (data != null) { Log.Debug(message.action + " " + data.ActionName + " " + data.Id); } else { Log.Debug(message.action); } var r = new RecordEvent(); r.SupportInput = false; r.SupportSelect = false; r.ClickHandled = true; if (data.Action == "InvokeMethod") { var skipMethods = PluginConfig.recording_skip_methods.ToLower().Split(','); if (skipMethods.Contains(data.ActionName.ToLower())) { return; } var a = new InvokeMethod(); a.Path = data.Id; a.ActionName = data.ActionName; a.SystemName = data.SystemName; if (data.Parameters != null) { a.Parameters = data.Parameters; for (var i = 0; i < data.Parameters.Length; i++) { var name = "param" + i.ToString(); } } a.loadImageAsync(data.Id, data.SystemName, data.ActionName, data.StatusBarText); r.a = new GetElementResult(a); } if (data.Action == "SetProperty") { var skipMethods = PluginConfig.recording_skip_properties.ToLower().Split(','); if (skipMethods.Contains(data.ActionName.ToLower())) { return; } var a = new SetProperty(); a.Path = data.Id; a.ActionName = data.ActionName; a.SystemName = data.SystemName; if (data.Parameters != null) { a.Parameters = data.Parameters; for (var i = 0; i < data.Parameters.Length; i++) { var name = "param" + i.ToString(); } } a.loadImageAsync(data.Id, data.SystemName, data.StatusBarText); r.a = new GetElementResult(a); } if (r != null) { Plugin.Instance.RaiseUserAction(r); } } else if (message.action == "mousedown") { LastEventElement = message.Get <SAPEventElement>(); LastElement = new SAPElement(null, LastEventElement); // Log.Output("SAP " + message.action + " " + LastElement.id); } else if (message.action == "mousemove") { LastEventElement = message.Get <SAPEventElement>(); LastElement = new SAPElement(null, LastEventElement); // Log.Output("SAP " + message.action + " " + LastElement.id + " " + LastElement.Path); } else { // Log.Output("SAP " + message.action); } } catch (Exception ex) { Log.Error(ex.ToString()); } }
public replyqueueitem(SAPEvent message) { this.message = message; reset = new System.Threading.AutoResetEvent(false); }
public void SendMessage(SAPEvent message) { pipeclient.PushMessage(message); }
protected override void Execute(CodeActivityContext context) { string host = Host.Get(context); string username = Username.Get(context); string password = Password.Get(context); string client = Client.Get(context); string language = Language.Get(context); string systemname = SystemName.Get(context); if (!SAPhook.Instance.isConnected) { throw new Exception("OpenRPA is not connected to the SAP bridge"); } SAPhook.Instance.RefreshConnections(); bool dologin = true; SAPSession _session = null; if (SAPhook.Instance.Sessions != null) { foreach (var session in SAPhook.Instance.Sessions) { if (session.Info.SystemName.ToLower() == systemname.ToLower()) { _session = session; dologin = false; break; } } } if (dologin) { var data = new SAPLoginEvent(host, username, password, client, language, systemname); var message = new SAPEvent("login"); message.Set(data); _ = SAPhook.Instance.SendMessage(message, TimeSpan.FromMinutes(10)); } if (_session == null) { if (!SAPhook.Instance.isConnected) { throw new Exception("OpenRPA is not connected to the SAP bridge"); } SAPhook.Instance.RefreshConnections(); if (SAPhook.Instance.Sessions != null) { foreach (var session in SAPhook.Instance.Sessions) { if (session.Info.SystemName.ToLower() == systemname.ToLower()) { _session = session; break; } } } } // SAPhook.Instance.InvokeMethod(systemname, "wnd[0]", "resizeWorkingPane", new object[] { 300,200,false}, TimeSpan.FromSeconds(PluginConfig.bridge_timeout_seconds)); Interaction.AppActivate(_session.ActiveWindow.Text); //SAPhook.Instance.InvokeMethod(systemname, "wnd[0]", "iconify", null, TimeSpan.FromSeconds(PluginConfig.bridge_timeout_seconds)); //SAPhook.Instance.InvokeMethod(systemname, "wnd[0]", "iconify", null, TimeSpan.FromSeconds(PluginConfig.bridge_timeout_seconds)); // SAPhook.Instance.InvokeMethod(systemname, "wnd[0]", "maximize", null, TimeSpan.FromSeconds(PluginConfig.bridge_timeout_seconds)); //session.findById("wnd[0]").iconify //session.findById("wnd[0]").maximize }
private void Pipeclient_ServerMessage(NamedPipeConnection <SAPEvent, SAPEvent> connection, SAPEvent message) { try { if (replyqueue.ContainsKey(message.messageid)) { lock (replyqueue) { var e = replyqueue[message.messageid]; e.reply = message; if (e.reset != null) { e.reset.Set(); } replyqueue.Remove(message.messageid); return; } } } catch (Exception ex) { Log.Error(ex.ToString()); } try { if (message.action == "recorderevent") { var data = message.Get <SAPRecordingEvent>(); if (data != null) { Log.Debug(message.action + " " + data.ActionName + " " + data.Id); } else { Log.Debug(message.action); } var r = new RecordEvent(); r.SupportInput = false; r.SupportSelect = false; r.ClickHandled = true; if (data.Action == "InvokeMethod") { var a = new InvokeMethod(); a.Path = data.Id; a.ActionName = data.ActionName; a.SystemName = data.SystemName; if (data.Parameters != null) { a.Parameters = data.Parameters; for (var i = 0; i < data.Parameters.Length; i++) { var name = "param" + i.ToString(); } } r.a = new GetElementResult(a); } if (data.Action == "SetProperty") { var a = new SetProperty(); a.Path = data.Id; a.ActionName = data.ActionName; a.SystemName = data.SystemName; if (data.Parameters != null) { a.Parameters = data.Parameters; for (var i = 0; i < data.Parameters.Length; i++) { var name = "param" + i.ToString(); } } r.a = new GetElementResult(a); } if (r != null) { Plugin.Instance.RaiseUserAction(r); } } else if (message.action == "mousedown") { LastEventElement = message.Get <SAPEventElement>(); LastElement = new SAPElement(null, LastEventElement); Log.Output("SAP " + message.action + " " + LastElement.id); } else if (message.action == "mousemove") { LastEventElement = message.Get <SAPEventElement>(); LastElement = new SAPElement(null, LastEventElement); Log.Output("SAP " + message.action + " " + LastElement.id); } else { Log.Output("SAP " + message.action); } } catch (Exception ex) { Log.Error(ex.ToString()); } }