Существующее приложение/соединение/сеансC#

Место общения программистов C#
Ответить
Anonymous
 Существующее приложение/соединение/сеанс

Сообщение Anonymous »

Я пытаюсь написать программу C#, которая автоматизирует ввод пользователя в графический интерфейс SAP (в настоящее время на версии 7400.3.11.3364), используя API сценариев GUI SAP. Я делал подобные вещи в прошлом, используя VBA, но я изо всех сил пытаюсь заставить его работать именно так, как я хочу в C#. < /P>
Моя конечная цель - иметь метод, который Открывает GUI SAP (если он еще не работает), возвращает объект GuiaPlication SAP GUI и оставляет SAP GUI открытым после окончания моей программы. В настоящее время у меня есть это в VBA, и я считаю, что я правильно работал в C# в предыдущем проекте, когда мы были в SAP GUI версии 7.3, но я не уверен на 100%. < /P>
Вот функция VBA, которую я использую: < /p>

Код: Выделить всё

Public Function GetSapApp() as GuiApplication

Dim Start as Date

If GetObject("SAPGUI") Is Nothing Then
Start = Now()
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
Do Until Not GetObject("SAPGUI") Is Nothing Or Now > (Start + TimeValue("00:01:00"))
DoEvents
Loop
If GetObject("SAPGUI") Is Nothing Then
MsgBox "Unable to detect SAP Scripting API. Please contact the developer."
End If
Set GetSapApp = GetObject("SAPGUI").GetScriptingEngine
End Function
< /code>
А вот различные методы C#, которые я нашел во время Googling: < /p>
[list]
[*]  Ниже я то, что я В настоящее время используется (идея была вдохновлена ​​этим: https://www.codeproject.com/questions/829500/how-do-i-connect-csharp-ta-sap-gui), но есть несколько проблем с это. Кажется, он не обнаруживает GUI SAP, если он уже открыт. Кроме того, после запуска моей программы этот графический интерфейс SAP не обнаруживается ни одним из наших макросов VBA. < /P>
 private static GuiApplication GetSapApp()
{
try
{
object SapGuilRot = new CSapROTWrapper().GetROTEntry("SAPGUI");
return SapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, SapGuilRot, null) as GuiApplication;
}
catch (Exception e)
{
try
{
string SapPath = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe";
if (File.Exists(SapPath))
{
System.Diagnostics.Process.Start(SapPath);
DateTime StartTime = DateTime.Now;
object SapGuilRot = new CSapROTWrapper().GetROTEntry("SAPGUI");
while (SapGuilRot == null && 30 >= (DateTime.Now - StartTime).TotalSeconds)
{
SapGuilRot = new CSapROTWrapper().GetROTEntry("SAPGUI");
}
return SapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, SapGuilRot, null) as GuiApplication;
}
else
{
return null;
}
}
catch
{
return null;
}
}
}
[*] Вот еще один вариант, который я попробовал (согласно этому ответу на другой пост: https://stackoverflow.com/a/14205520 /5134861), но он имеет ту же первую проблему, что и выше (не обнаруживает, работает ли SAP), сеанс GUI SAP, который открывается при вызове метода OpenConnection , выглядит иначе, а затем закрывается, когда моя программа Готово запускается. < /p>

Код: Выделить всё

 private static GuiApplication GetSapApp()
{
return (GuiApplication)System.Activator.CreateInstance(Type.GetTypeFromProgID("SapGui.ScriptingCtrl.1"));
}
[*] А вот последний вариант, который я пробовал, но я получаю компонент Activex, не может создать Object ошибку, Несмотря на проверку SAPFEWSE.OCX зарегистрировано.

Код: Выделить всё

 private static GuiApplication GetSapApp()
{
object sap = Microsoft.VisualBasic.Interaction.GetObject("SAPGUI", "");
return sap.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, sap, null) as GuiApplication;
}
[/list]
Любая помощь и/или предложения будут высоко оценены.
Спасибо заранее!

Подробнее здесь: https://stackoverflow.com/questions/492 ... on-session
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»