-1

我在 C# 中为 SAP B1 编写了一个附加组件。我创建了一个安装程序并在 SAP B1 下成功注册了它。但问题是每当我在 SAP B1 中启动插件时,有时它会显示“插件连接超时”。在插件管理器窗口中,它说插件失败。然而,我可以使用插件的所有功能。我唯一不能做的是,使用“插件管理器”窗口断开插件。但是如果我关闭 SAP B1,它也会触发应用程序关闭事件。

我的问题是为什么即使它完全正常工作也会出现此消息?它与您在附加安装程序创建向导期间必须提供的安装时间有关吗?因为我的加载项大约需要 45 秒才能启动,而我只给了 25 秒的安装时间,我认为安装时间和加载项的实际启动时间之间没有联系。

如果任何专家能解释这种情况的原因以及避免这种情况的方法,我将不胜感激。

我怀疑我与 SAP B1 的连接方法有问题。然而,为了问题的完整性,可以在下面看到。

public void set_application()
{
        SAPbouiCOM.SboGuiApi SboGuiApi = null;
        string sConnectionString = null;

        SboGuiApi = new SAPbouiCOM.SboGuiApi();

        // by following the steps specified above, the following
        // statment should be suficient for either development or run mode
        //System.Convert.ToString(Environment.GetCommandLineArgs().GetValue(1)

        if ((System.Environment.GetCommandLineArgs().Length > 1))
        {
            sConnectionString = "0030002C0030002C00530041005000420044005F00440061007400650076002C0050004C006F006D0056004900490056";  
        }
        else
        {
            sConnectionString = "0030002C0030002C00530041005000420044005F00440061007400650076002C0050004C006F006D0056004900490056"; 

        }

        try
        {
            // If there's no active application the connection will fail
            SboGuiApi.Connect(sConnectionString);
        }
        catch 
        { //  Connection failed
        System.Windows.Forms.MessageBox.Show("No SAP Business One Application was found");
            System.Environment.Exit(0);
        }

        SBO_Application = SboGuiApi.GetApplication(-1);
} 
4

1 回答 1

0

在发布答案之前,我将提供一些我发现的有价值的信息。如果您将 Main() 声明为(请注意传递给 main.

static void Main(String[] Args)  
{   
 sConnection = Args[0];  //This will be the 0 index because Args will only contain the arguments passed  
}  

如果您将 Main() 声明为

static void Main()  
{   
sConnection = Environment.GetCommandLineArgs().GetValue(1).ToString();  //This will be the 2nd arguments, the first arguments(0 index) is the executable.  
}

因为我的 main 被声明为static void Main()我必须更改 if/else 块,如下所示

if ((System.Environment.GetCommandLineArgs().Length == 0))
{
    sConnectionString = "0030002C0030002C00530041005000420044005F00440061007400650076002C0050004C006F006D0056004900490056";
}
else
{
    sConnectionString = System.Environment.GetCommandLineArgs().GetValue(1).ToString();
}
于 2016-02-23T14:32:38.743 回答