2017-02-13 10 views
1

私はを実行しています。SAP Connector 3.0を使用してドキュメント情報を読み込みました(私のASP.Net MVCアプリケーションから)。 Visual studio 2012でアプリケーションを実行すると、SAP BAPI'sから読み取った後にSAP logon screenが起動し、アプリケーションにデータが表示されます。しかし、私は、同じコンピュータ上Visual Studio'sPublishオプションを使用して、同じアプリケーションをデプロイしてから、私は以下IISでアプリケーションをホストしているときにsapguiを起動できませんでした

Start 'sapgui' failed. 

を取得するアプリケーションは、ASP.Netアプリケーション

var documentList = Global.SAPRepository.CreateFunction("BAPI_DOCUMENT_CHECKOUTVIEW2"); 
documentList.Invoke(Global.SAPDestination); 

documentList.SetValue("DOCUMENTTYPE", "TPK"); 
documentList.SetValue("DOCUMENTNUMBER", "2000-ABC-T01-TPK"); 
documentList.SetValue("DOCUMENTPART", "000"); 
documentList.SetValue("DOCUMENTVERSION", "A0"); 

var documentData = documentList.GetTable("DOCUMENTFILES"); 
documentList.Invoke(Global.SAPDestination);//execute query 

var docNo = documentData.GetString("DOCUMENTNUMBER"); 
var type = documentData.GetString("DOCUMENTTYPE"); 
var version = documentData.GetString("DOCUMENTVERSION"); 

しばらくSAPデータを読み込むためのコードであり、実行するとここには、SAP宛先に接続するためのコードがあります。

public RfcConfigParameters GetParameters(string destinationName) 
    { 
     RfcConfigParameters parms = new RfcConfigParameters(); 
     if ("Dev".Equals(destinationName)) 
     { 
      parms.Add(RfcConfigParameters.AppServerHost, "192.168.x.xx"); 
      parms.Add(RfcConfigParameters.SystemNumber, "00"); 
      parms.Add(RfcConfigParameters.User, "myuserName"); 
      parms.Add(RfcConfigParameters.Password, myPassword); 
      parms.Add(RfcConfigParameters.Client, "900"); 
      parms.Add(RfcConfigParameters.Language, "EN"); 
      parms.Add(RfcConfigParameters.PoolSize, "5"); 
      parms.Add(RfcConfigParameters.UseSAPGui, "1"); 
      parms.Add(RfcConfigParameters.PeakConnectionsLimit, "10"); 
      parms.Add(RfcConfigParameters.ConnectionIdleTimeout, "600"); 
     } 
     return parms; 
    } 

答えて

1

設定パラメータUseSAPGuiを "0"に設定するだけです。 ASP.NETアプリケーションとして実行する場合は、対話型ログオンダイアログ(Windowsダイアログ)は使用できません。 SAPGuiは「無人モード」では開きません。つまり、ダイアログと対話するユーザがいない場合です。

他の問題は、サポートされていないコールバックは、ここで説明されています
Calling BAPI_DOCUMENT_CHECKOUTVIEW2 using SAP.Net Connector 3.0 returns "RFC Callback server not available"

ソリューションは、あなたが行うことができないコールバックを有効にするには1にUseSAPGuiを設定することのようです。だからこれは終わりです。推奨事項は、完全にRFC対応の代替BAPIを使用するか、コールバックを伴わないカスタムラッパー(ABAP)を作成することです。

+0

この結果、「ABAPからのコールバックはサポートされていません」 – WAQ

+0

ここでは:作成先、接続時、取得時? – dlatikay

+0

'documentList.Invoke(Global.SAPDestination);を呼び出したときに' ABAPからのコールバックはサポートされていません 'というメッセージが表示されます。 – WAQ

1

したがって、私のアプリケーションはIISでホストされており、IISWindows serviceとして実行されており、デスクトップとやりとりする他のプロセスを起動することはできません。 BAPI_DOCUMENT_CHECKOUTVIEW2SAPGUIプロセスを起動しようとしているため、エラーメッセージがスローされます。

私が実装したソリューションは、私がWCFというサービスを以下のような管理されたWindowsコンソールアプリケーション(VS 2012の簡単なWindowsコンソールアプリケーション)でホストしたと書いたことです。

サービスインタフェースの定義は

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    string ViewDocuments(); 
} 

サービス実装クラスは、ここで

public class MyService : IMyService 
{ 
    public string ViewDocuments() 
    { 
     var documentList = Global.SAPRepository.CreateFunction("BAPI_DOCUMENT_CHECKOUTVIEW2"); 
     documentList.Invoke(Global.SAPDestination); 

     documentList.SetValue("DOCUMENTTYPE", "TPK"); 
     documentList.SetValue("DOCUMENTNUMBER", "2000-Abc-T01-TPK"); 
     documentList.SetValue("DOCUMENTPART", "000"); 
     documentList.SetValue("DOCUMENTVERSION", "A0"); 

     var documentData = documentList.GetTable("DOCUMENTFILES"); 
     documentList.Invoke(Global.SAPDestination);//execute query 

     var docNo= documentData.GetString("DOCUMENTNUMBER"); 
     var type = documentData.GetString("DOCUMENTTYPE"); 
     var version = documentData.GetString("DOCUMENTVERSION"); 
     return docNo; 
    } 
} 

行き、コンソールアプリケーションのMainメソッドは、私がSystem.ServiceModelへの参照を追加した

class Program 
{ 
    static void Main(string[] args) 
    { 
     Uri baseAddress = new Uri("http://localhost:8085/hello"); 

     // Create the ServiceHost. 
     using (ServiceHost host = new ServiceHost(typeof(MyService), baseAddress)) 
     { 
      ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
      smb.HttpGetEnabled = true; 
      smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
      host.Description.Behaviors.Add(smb); 
      host.Open(); 

      Console.WriteLine("The service is ready at {0}", baseAddress); 
      Console.WriteLine("Press <Enter> to stop the service."); 
      Console.ReadLine(); 

      // Close the ServiceHost. 
      host.Close(); 
     } 
    } 
} 

であるここにコンソールアプリケーションでも同様です。

私はAsp.Netアプリケーションでこのサービスを利用しましたが、すべてのことが魅力的に機能しました。

+0

こんにちは、このサービスで設定UseSapGui = 1をどこに置くか尋ねることができますか、コールバックがサポートされていない場合、 UseSapGuiが有効になっていますか? –

関連する問題