2017-02-13 11 views
1

Я пытаюсь подключиться к системе SAP, используя SAP Connector 3.0, чтобы прочитать информацию о документах (через приложение ASP.Net MVC). Когда я запускаю приложение через Visual studio 2012, запускается SAP logon screen, и мое приложение показывает данные после чтения с SAP BAPI's. Но когда я развернуть то же приложение, используя Visual Studio'sPublish вариант на тот же компьютер, а затем запустить приложение я получаюstart sapgui не удалось во время размещения приложения в IIS

Start 'sapgui' failed. 

Ниже приведен код для чтения данных SAP в приложении 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"); 

While вот код для подключения к SAP Destination.

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». Вы не можете использовать диалоговое диалоговое окно входа в систему (которое является диалоговым окном Windows) при работе в качестве приложения ASP.NET. SAPGui не открывается в «автоматическом режиме», то есть когда пользователь не будет взаимодействовать с диалоговыми окнами.

Другая проблема, обратные вызовы не поддерживаются, обсуждается здесь:
Calling BAPI_DOCUMENT_CHECKOUTVIEW2 using SAP.Net Connector 3.0 returns "RFC Callback server not available"

Решение, как представляется, установить UseSAPGui на 1, чтобы включить функцию обратного вызова, который вы не можете сделать. Так что это тупик. Рекомендация - использовать альтернативный BAPI, который полностью поддерживает RFC, или написать пользовательскую оболочку (в ABAP), которая не включает обратный вызов.

+0

Это приводит к сообщению «Обратные вызовы от ABAP не поддерживаются» – WAQ

+0

где: при создании адресата, при подключении, при получении? – dlatikay

+0

'Обратные вызовы из ABAP не поддерживаются 'при вызове' documentList.Invoke (Global.SAPDestination); ' – WAQ

1

Так что в основном получается, что, поскольку мое приложение размещено в IIS и IIS работает как Windows service, и оно не позволяет запускать другие процессы, которые будут взаимодействовать с Desktop. С BAPI_DOCUMENT_CHECKOUTVIEW2 пытается запустить процесс SAPGUI, поэтому он выдает сообщение об ошибке.

Итак, решение, которое я реализовал, это то, что я написал службу WCF, которую я размещал в управляемом консольном приложении Windows, как показано ниже (простое консольное приложение Windows в VS 2012).

определение

Service Interface здесь идет

[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 включен? –

 Смежные вопросы

  • Нет связанных вопросов^_^