【问题标题】:How can I control GuiScrollbar in SAP using SAPFEWSELib?如何使用 SAPFEWSELib 在 SAP 中控制 GuiScrollbar?
【发布时间】:2019-03-28 08:39:01
【问题描述】:

我以前使用 VBA 来自动化 SAP,现在我使用 C# 和 SAPFEWSELib 来控制 SAP。我可以控制按钮或文本字段,但我在滚动条上做错了,不知道问题出在哪里。

我的目标是滚动条,但不在 Table 或 GridView 中,在这种情况下,我可以避免滚动,但规则是一样的,当然。我尝试使用 SAPFEWSELib GuiScrollbar 类。我可以使用 GuiButton、GuiStatusbar、GuiSession 和许多其他工具。我的应用程序工作正常,用户在他们的机器上运行它,所以我猜我以正确的方式使用 SAPFEWSELib,但我在 SAP 和编码方面并不先进,所以这个错误可能是非常基本的。
我得到的错误:

System.InvalidCastException:“无法将“System.__ComObject”类型的 COM 对象转换为接口类型“SAPFEWSELib.GuiScrollbar”。此操作失败,因为 IID 为“{99CD4189-6B59-4596-B1DF-0C1121BB5240}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE)) .'

我使用 SAP 记录器并从 VBS 获取 ID,然后在我的脚本中使用它。 对于 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 方法使用的路径。在上面的示例中,我将会话和按钮 ID 作为构造函数的参数。在我使用方法“pressbutton”的逻辑部分,我可以避免长 ID,这会使我的代码无法运行。这可能看起来有点复杂和浪费时间,但让我来管理复杂的逻辑。上面的代码运行良好,例如,我附上了它。

问题是当我尝试控制滚动条时,我得到了类似上面的错误:

 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 库来代替那个?也许有一种方法可以像按钮一样单击 ScrollBar 中的“箭头”?我希望有一个人可以帮助我。如果需要,我会得到详细信息。enter image description here

【问题讨论】:

    标签: c# sap


    【解决方案1】:

    可能是您只是收到了错误的查找对象。

    您可以通过以下方式检查您收到的对象类型:

    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,然后使用属性LeftTop 获取滚动条的位置。这些应该是以像素为单位的屏幕相对坐标。

    然后,理论上,您可以通过其他方式模拟鼠标点击,例如类似这样:How do you simulate Mouse Click in C#?


    在使用 GUI 脚本编写期间,我没有看到任何其他花哨的库,因此您可能会被 SAPFEWSELib 卡住。我们在工作场所处理这个问题的方式是使用一个包装库来解决脚本 API 中的一些问题。 (很遗憾,我不能分享它,因为它不公开)

    【讨论】:

    • 感谢您的建议。我已经使用您描述的 TypeName 检查器品尝了我的对象,很高兴知道这一点,因为它真的很有用。你说我抓错了物品,看来你是对的。希望我在 SAP 中找到了可以修改相同参数并且不需要滚动的地方。但是问题还是悬而未决,一般如何控制 GuiScrollbar。您能否确认您可以使用 FindByID 控制 GuiScrollbar 对象?也许唯一的方法就是使用你上面提到的方法。
    【解决方案2】:

    要控制这样的滚动条,我们需要使用对象 ISapTextFieldTarget,而不是 GuiScrollbar。 在 ISapTextFieldTarget 中,我们将找到属性:Horizo​​ntalScrollbar.Position 和 VerticalScrollbar.Position。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多