【发布时间】: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
【问题讨论】: