2017-02-13 99 views
1

我試圖使用SAP Connector 3.0連接到SAP系統來讀取文檔信息(通過我的ASP.Net MVC應用程序)。當我通過Visual studio 2012運行應用程序時,SAP logon screen啓動,我的應用程序在從SAP BAPI's讀取後顯示數據。但是,當我使用部署在同一臺計算機上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"

的解決方案似乎是設置UseSAPGui爲1啓用回調,你不能這樣做。所以這是一個死路一條。建議使用完全支持RFC的替代BAPI,或者編寫一個不涉及回調的自定義包裝器(在ABAP中)。

+0

這導致消息「不支持來自ABAP的回調」 – WAQ

+0

其中:在創建目的地,連接,檢索? – dlatikay

+0

當調用'documentList.Invoke(Global.SAPDestination);' – WAQ

1

基本上,事實證明,由於我的應用程序託管在IISIIS作爲Windows service運行,並且它不允許啓動其他將與桌面交互的進程。由於BAPI_DOCUMENT_CHECKOUTVIEW2嘗試啓動SAPGUI進程,因此它會拋出錯誤消息。

所以我實現的解決方案是我寫了一個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; 
    } 
} 

和控制檯應用程序的主要方法是

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(); 
     } 
    } 
} 

我已經加入參考System.ServiceModel在控制檯應用程序中也是如此。

然後我在我的Asp.Net應用程序中使用了這個服務,每件事都像魅力一樣工作!

+0

嗨,我可以問你在哪裏你把配置UseSapGui = 1在這個服務,或者如果你不使用它如何工作,如果回調不支持沒有沒有UseSapGui已啓用? –

相關問題