これはネクロスレッドかもしれませんが、私が働いているのと同じような状況にありました. テスト目的で、C# で記述された自社開発の自動化プラットフォームの残りの部分と統合できる SAP GUI 自動化が必要でした。私は、SAP の自動化レイヤーの基礎として使用できる、SAP が提供する GUI 自動化用ライブラリーを利用する 1 つのソリューションの提案を作成するのを手伝いました。
SAP ファイルのインストールに次のファイルが存在しますか? x:\Program Files\SAP\FrontEnd\SAPGui\sapfewse.ocx?
その場合は、参照として Visual Studio (または使用している IDE) に追加します。これは基本的に、対話を可能にする一連の SAP 固有のオブジェクトを含むクラス ライブラリです。SAP GUI から必要なもののほとんどを公開するため、非常に効果的です。他の試みで、SAP の多くのオブジェクトが利用できないことがわかりました。
これは私が行った初期の概念実証です。接続文字列を使用して SAP を起動し、資格情報を入力して、トランザクション コードに移動します。
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using SAPFEWSELib;
namespace SAPGuiAutomated
{
//created a class for the SAP app, connection, and session objects as well as for common methods.
public class SAPActive
{
public static GuiApplication SapGuiApp { get; set; }
public static GuiConnection SapConnection { get; set; }
public static GuiSession SapSession { get; set; }
public static void openSap(string env)
{
SAPActive.SapGuiApp = new GuiApplication();
string connectString = null;
if (env.ToUpper().Equals("DEFAULT"))
{
connectString = "1.0 Test ERP (DEFAULT)";
}
else
{
connectString = env;
}
SAPActive.SapConnection = SAPActive.SapGuiApp.OpenConnection(connectString, Sync: true); //creates connection
SAPActive.SapSession = (GuiSession)SAPActive.SapConnection.Sessions.Item(0); //creates the Gui session off the connection you made
}
public void login(string myclient, string mylogin, string mypass, string mylang)
{
GuiTextField client = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-MANDT", "GuiTextField");
GuiTextField login = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-BNAME", "GuiTextField");
GuiTextField pass = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-BCODE", "GuiPasswordField");
GuiTextField language = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-LANGU", "GuiTextField");
client.SetFocus();
client.text = myclient;
login.SetFocus();
login.Text = mylogin;
pass.SetFocus();
pass.Text = mypass;
language.SetFocus();
language.Text = mylang;
//Press the green checkmark button which is about the same as the enter key
GuiButton btn = (GuiButton)SapSession.FindById("/app/con[0]/ses[0]/wnd[0]/tbar[0]/btn[0]");
btn.SetFocus();
btn.Press();
}
}
//--------------------------//
//main method somewhere else
public static void Main(string[] args)
{
SAPActive.openSAP("my connection string");
SAPActive.login("10", "jdoe", "password", "EN");
SAPActive.SapSession.StartTransaction("VA03");
}
この件に関するドキュメントはあまりありません。以下は、私が始めるのに役立ったいくつかの情報源です
-私たちの計画の元のソース
http://scn.sap.com/thread/1729689
-API に関するドキュメント (VB と JavaScript の場合ですが、一般的なルールとオブジェクトは同じです)。SAP GUI ランタイム階層の部分を確実に読んでください。たくさんの質問に答えてくれます。
http://www.synactive.com/download/sap%20gui%20scripting/sap%20gui%20scripting%20api.pdf