You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#获取SAP GUI Desktop客户端输入框及执行日志文本?

SAP GUI自动化:输入框与执行日志文本获取方案

不推荐当前的GetProperty实现方式

你当前使用的反射式GetProperty方法并非SAP GUI Scripting的标准实现,这类反射调用容易因参数匹配、控件上下文等问题抛出TargetInvocationException,即使定位器正确也可能触发错误,不建议使用。

标准文本获取方案(基于SAP GUI Scripting COM接口)

SAP提供了强类型的COM接口库(SAPFEWSELib),直接通过控件的属性访问是更可靠的方式:

1. 先确保项目引用SAP GUI Scripting库

在Visual Studio项目中添加引用,找到SAPFEWSELib(SAP GUI Scripting API),这是官方提供的自动化接口。

2. 获取输入框文本

对于输入框(通常为GuiTextField类型),直接访问其Text属性:

// 初始化SAP应用、连接、会话对象(你已实现这部分)
SAPFEWSELib.GuiApplication sapApp = new SAPFEWSELib.GuiApplication();
SAPFEWSELib.GuiConnection sapConn = sapApp.Connections.Item(0);
SAPFEWSELib.GuiSession sapSession = sapConn.Sessions.Item(0);

// 通过控件ID定位输入框
SAPFEWSELib.GuiTextField inputField = sapSession.FindById("wnd[0]/usr/txtRSYST-BNAME") as SAPFEWSELib.GuiTextField;
if (inputField != null)
{
    string inputText = inputField.Text;
    // 处理获取到的文本
}

3. 获取执行日志文本

根据日志所在控件类型选择对应方式:

  • 状态栏日志(GuiStatusBar):
SAPFEWSELib.GuiStatusBar statusBar = sapSession.FindById("wnd[0]/sbar") as SAPFEWSELib.GuiStatusBar;
string statusLogText = statusBar.Text;
  • 文本视图/表格日志(如GuiTextView、GuiGrid):
    如果是纯文本视图,直接取Text属性;如果是表格控件,需遍历行获取内容:
// 示例:表格控件日志
SAPFEWSELib.GuiGrid logGrid = sapSession.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell") as SAPFEWSELib.GuiGrid;
if (logGrid != null)
{
    // 获取总行数
    int rowCount = logGrid.RowCount;
    for (int i = 0; i < rowCount; i++)
    {
        // 获取第i行第0列的文本
        string logLine = logGrid.GetCellValue(i, 0);
        // 处理每行日志
    }
}

关键说明

  • 所有控件的ID可以通过SAP自带的Scripting Tracker工具获取,确保ID准确。
  • 强类型接口调用避免了反射的不确定性,调试和维护更简单,是SAP GUI自动化的官方推荐方式。

内容的提问来源于stack exchange,提问作者Saurabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:35:18