add ui
This commit is contained in:
1 parent
b207468416
commit
3a0976680e
51 files changed
+227
-1781
No files matched your search
@@ -0,0 +1,128 @@
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using SAPFEWSELib;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Windows.UI.Core;
|
||||
using Microsoft.UI;
|
||||
using Microsoft.UI.Windowing;
|
||||
using System.Diagnostics;
|
||||
|
||||
|
||||
namespace SAPRecorderApp;
|
||||
|
||||
|
||||
public class SapGui
|
||||
{
|
||||
public GuiApplication Application { get; set; }
|
||||
public GuiConnection Connection { get; set; }
|
||||
public GuiSession Session { get; set; }
|
||||
public TextBox textBox { get; set; }
|
||||
|
||||
public SapGui()
|
||||
{
|
||||
SapROTWr.CSapROTWrapper sapROTWrapper = new SapROTWr.CSapROTWrapper();
|
||||
|
||||
object SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
|
||||
if (SapGuilRot != null)
|
||||
{
|
||||
object engine = SapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, SapGuilRot, null);
|
||||
Application = (GuiApplication)engine;
|
||||
Connection = (GuiConnection)Application.Connections.ElementAt(0);
|
||||
Session = (GuiSession)Connection.Sessions.ElementAt(0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void login(string desc, string username, string password)
|
||||
{
|
||||
Application.OpenConnection(desc);
|
||||
Connection = (GuiConnection)Application.Connections.ElementAt(0);
|
||||
Session = (GuiSession)Connection.Sessions.ElementAt(0);
|
||||
GuiFrameWindow frame = (GuiFrameWindow)Session.FindById("wnd[0]");
|
||||
frame.Maximize();
|
||||
GuiTextField usernameTextField = (GuiTextField)Session.FindById("wnd[0]/usr/txtRSYST-BNAME");
|
||||
usernameTextField.Text = username;
|
||||
GuiTextField passwordTextField = (GuiTextField)Session.FindById("wnd[0]/usr/pwdRSYST-BCODE");
|
||||
passwordTextField.Text = password;
|
||||
frame.SendVKey(0);
|
||||
}
|
||||
|
||||
|
||||
public void BeginRecord()
|
||||
{
|
||||
Session.Change += Session_Change;
|
||||
}
|
||||
|
||||
private void SetTextBox(string text)
|
||||
{
|
||||
textBox.Text = text;
|
||||
}
|
||||
|
||||
private void Session_Change(GuiSession Session, GuiComponent Component, object CommandArray)
|
||||
{
|
||||
object[] objs = CommandArray as object[];
|
||||
objs = objs[0] as object[];
|
||||
var Action = "SetProperty";
|
||||
switch (objs[0].ToString().ToLower())
|
||||
{
|
||||
case "m":
|
||||
Action = "InvokeMethod";
|
||||
break;
|
||||
case "sp":
|
||||
Action = "SetProperty";
|
||||
break;
|
||||
}
|
||||
var ActionName = objs[1].ToString();
|
||||
|
||||
string id = Component.Id;
|
||||
var pathToRoot = new List<GuiComponent>();
|
||||
GuiComponent element = Component;
|
||||
while (element != null)
|
||||
{
|
||||
// Program.log(element.Id);
|
||||
if (element is GuiSession)
|
||||
{
|
||||
id = id.Substring(element.Id.Length + 1);
|
||||
}
|
||||
pathToRoot.Add(element);
|
||||
element = element.Parent as GuiComponent;
|
||||
}
|
||||
|
||||
var prefix = $"sap.session.findByid({id})";
|
||||
if (Action == "InvokeMethod")
|
||||
{
|
||||
prefix += $".{ActionName}(";
|
||||
var parameters = new List<string>();
|
||||
|
||||
if (objs.Length >= 3)
|
||||
{
|
||||
var array = objs[2] as object[];
|
||||
|
||||
if (array != null)
|
||||
{
|
||||
foreach (var item in array)
|
||||
{
|
||||
Console.WriteLine(item.ToString());
|
||||
parameters.Add(item.ToString());
|
||||
}
|
||||
prefix += string.Join(",", parameters);
|
||||
}
|
||||
}
|
||||
|
||||
prefix += ")";
|
||||
}
|
||||
else if (Action == "SetProperty")
|
||||
{
|
||||
prefix += $".{ActionName} = \"{objs[2].ToString()}\"";
|
||||
}
|
||||
Console.WriteLine(prefix);
|
||||
|
||||
Globals.recordTextQueue.Add(prefix);
|
||||
//SetTextBox(prefix + "\n");
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user