Как я могу управлять GuiScrollbar в SAP, используя SAPFEWSELib? - PullRequest
1 голос
/ 28 марта 2019

Раньше я использовал VBA для автоматизации SAP, теперь я использую C # с SAPFEWSELib для управления SAP.Я могу управлять кнопками или текстовыми полями, но я делаю что-то не так с полосами прокрутки и не знаю, в чем проблема.

Моя цель - использовать полосу прокрутки, но не в Table или GridView, в таких случаях я могу избежать прокруткино правила одинаковы, конечно.Я пытаюсь использовать класс SAPFEWSELib GuiScrollbar.Я могу использовать GuiButton, GuiStatusbar, GuiSession и многие другие.Мое приложение работает правильно, и пользователи запускают его на своих компьютерах, поэтому я предполагаю, что я правильно использую SAPFEWSELib, но я не разбираюсь в SAP и кодировании, поэтому ошибка может быть очень простой.
Ошибка, которую я получаю:

System.InvalidCastException: 'Невозможно привести объект COM типа' System .__ ComObject 'к типу интерфейса' SAPFEWSELib.GuiScrollbar '.Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{99CD4189-6B59-4596-B1DF-0C1121BB5240}' завершился ошибкой из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)). '

Я использую регистратор SAP и получаю ID из VBS, затем использую его в своем сценарии.Для типов объектов в SAp я создал свои собственные классы, например для кнопки:

public class SAPElementButton
    {
        GuiSession _session;
        public string _Id;

        public SAPElementButton(GuiSession session, string Id)
        {
            _session = session;
            _Id = Id;
        }

        public void pressbutton()
        {        
            {
                GuiButton _SapButton = (GuiButton)_session.FindById(_session.Id.ToString() + _Id);
                _SapButton.SetFocus();
                _SapButton.Press();         
            }
        }
    }

Благодаря этому я могу создать объект своего класса, в котором я даю путь для использования методом FindByIDв методе класса.В приведенном выше примере я указываю идентификатор сессии и кнопки в качестве параметра для конструктора.В логической части, где я использую метод «кнопка», я могу избежать длинного идентификатора, который сделал бы мой код недоступным для просмотра.Это может показаться немного сложным и напряженным, но позвольте мне управлять сложной логикой.Приведенный выше код работает нормально, я прикрепил его, например

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

 public class SAPElementVerticalScrollbar
    {
        GuiSession _session;
        public string _Id;

        public SAPElementVerticalScrollbar(GuiSession session, string Id)
        {
            _session = session;
            _Id = Id;
        }

        public void setScrollbar(int possition)
        {
            {           
                GuiScrollbar sAPElementVerticalScroll = (GuiScrollbar)_session.FindById(_session.Id.ToString() + _Id);
                sAPElementVerticalScroll.Position=possition;
            }
        }
    }

Если из-за ошибки такой Id недоступен, он понятен, но синтаксис выглядит нормальнои объект в SAP доступен.

Может быть, я использую неправильный класс из SAPFEWSELib или, может быть, есть еще один хороший .dll libray, который я не знаю, чтобы использовать вместо этого?Может быть, есть способ нажимать «стрелки» в ScrollBar как кнопки?Я надеюсь, что кто-то может помочь мне.Я получаю детали при необходимости. введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Возможно, вы просто получили не тот объект для поиска.

Вы можете проверить, какой тип объекта вы получили, выполнив следующее:

object comObject = _session.FindById(_session.Id.ToString() + _Id);
string comType = Microsoft.VisualBasic.Information.TypeName(comObject);
// comType will now contain something like "GuiButton" or "GuiScrollbar"

Этот код требуетссылка на сборку Microsoft.VisualBasic.

Если вы действительно получаете GuiScrollbar, он должен работать, я видел успешные примеры, реализованные аналогично.


Есливы получаете что-то непригодное, попробуйте привести объект к SAPFEWSELib.GuiVComponent, затем использовать свойства Left и Top, чтобы получить положение полосы прокрутки.Это должны быть относительные к экрану координаты в пикселях.

Теоретически вы можете смоделировать щелчки мыши другими способами, например, аналогично следующему: Как вы имитируете щелчок мыши в C #?


Во время работы со сценариями GUI я не видел никакой другой необычной библиотеки, так что вы, вероятно, застряли с SAPFEWSELib.То, как мы справились с этим на моем рабочем месте, - это иметь библиотеку-обертку, которая устраняет некоторые изломы в API сценариев.(Я не могу поделиться этим, к сожалению, потому что это не общедоступно)

0 голосов
/ 18 июля 2019

Для управления такой полосой прокрутки нам нужно использовать объект ISapTextFieldTarget , а не GuiScrollbar. В ISapTextFieldTarget мы найдем свойства: HorizontalScrollbar.Position и VerticalScrollbar.Position.

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