SAP: невозможно преобразовать COM-объект типа «System .__ ComObject» в тип интерфейса «sapfewse.GuiTextField». - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь взаимодействовать с окном SAP GUI с помощью C #.Используя это решение здесь: решение , я успешно подключился к моему открытому окну GUI.Я могу отправить команду

frame.Maximize();

, которая увеличит окно, как и ожидалось.

Проблема возникает, когда я пытаюсь поместить некоторый текст в текстовое поле.

((GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd")).Text = "InputText";
    //or
    GuiTextField targetField =
    (GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd");
    //or
    GuiTextField targetField =
    (GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd", "GuiTextField");
    targetField.Text = "InputText";

Ошибка, которую я получаю:

System.InvalidCastException
  HResult=0x80004002
  Message=Unable to cast COM object of type 'System.__ComObject' to interface type 'sapfewse.GuiTextField'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B4D89EE3-6EFD-4F4C-9F42-AD42B71C8EB7}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

Если я вместо этого попробую это:

var x = session.FindById("wnd[0]/tbar[0]/okcd");

, тогда мое окно наблюдения сообщит мне, что x имеет типGuiComponent, а не GuiTextField, как я надеялся.

Это запустится:

GuiComponent targetField = (GuiComponent)session.FindById("wnd[0]/tbar[0]/okcd");

, но затем targetField не имеет свойства текста.

Что мне нужно сделатьчтобы исправить это?Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Нашел ответ, оставив его здесь на случай, если он может кому-то помочь.

Глядя на

GuiComponent targetField = (GuiComponent)session.FindById("wnd[0]/tbar[0]/okcd");

Я обнаружил, что targetField имеет свойство Type:

var tmp = targetField.Type;

, который оказывается GuiOkCodeField.

Итак, требуемый код:

((GuiOkCodeField)session.FindById("wnd[0]/tbar[0]/okcd")).Text= "InputText";

tldr;use ((GuiOkCodeField) session.FindById ("wnd [0] / tbar [0] / okcd")). Text = "InputText";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...