2020-08-15 22:14发布
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 在用C#准备插件时,我经... 显示全部
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好
在用C#准备插件时,我经常在Visual Studio中手动添加SAPBobsCOM类型库参考。 现在,我想构建自己的插件,并使其使用SAPbobsCOM90.dll(对于运行SAP Business One版本9.x的用户)或SAPbobsCOM100.dll(对于运行SAp Business One版本10.x的用户)
请就如何动态添加此引用提供建议,以便我只能构建一个版本。
谢谢。
你好库尔特,
我早在一段时间(8.82 vs 9.0的时候)就一直在研究这个问题。
那我的结论是,因为SAPbobsCOM.dll是一个非托管的COM对象,
一个人真的不想在编程时使用后期绑定。
只需查看下面的代码即可连接到SAP公司对象:
AppDomain.CurrentDomain.AssemblyResolve + =委托(对象发送者,ResolveEventArgs e)
{
System.Reflection.AssemblyName requiredName =新的System.Reflection.AssemblyName(e.Name);
string v_AssemblyPath;
如果(requestedName.Name ==" Interop.SAPbobsCOM,版本= 8.8.0.0,文化=中性,PublicKeyToken =空")
//在此处放置代码以加载您实际拥有的程序集的任何版本
v_AssemblyPath = @" Interop.SAPbobsCOM88.dll";
返回System.Reflection.Assembly.LoadFrom(v_AssemblyPath);
}
如果(requestedName.Name ==" Interop.SAPbobsCOM,版本= 9.2.0.0,文化=中性,PublicKeyToken =空")
v_AssemblyPath = @" Interop.SAPbobsCOM92.dll";
其他
返回null;
};
动态o_Company = Activator.CreateInstance(Type.GetTypeFromProgID(" SAPbobsCOM.Company"));
o_Company.Server ="服务器名称";
o_Company.CompanyDB =" sql_db_name";
o_Company.DbUserName =" sa";
o_Company.DbPassword =" sa_password";
字符串v_Path = @" C:\ dev \ MultipleSAPVersions \ bin \ Debug \ Interop.SAPbobsCOM.dll";
System.Reflection.Assembly组装= System.Reflection.Assembly.LoadFrom(v_Path);
类型类型;
type = assembly.GetType(" SAPbobsCOM.BoDataServerTypes");
o_Company.DbServerType =(dynamic)Enum.Parse(type," dst_MSSQL2008");
o_Company.UserName ="经理";
o_Company.Password =" manager_password";
如果(o_Company.Connect()!= 0)
//错误
//好!
我最终以更加整洁的方式解决了这个问题:多个VS解决方案都使用相同的代码:每个VS解决方案都包含链接到同一"黄金"解决方案的"项目"(阅读:c#代码)。
最多设置5个标签!
你好库尔特,
我早在一段时间(8.82 vs 9.0的时候)就一直在研究这个问题。
那我的结论是,因为SAPbobsCOM.dll是一个非托管的COM对象,
一个人真的不想在编程时使用后期绑定。
只需查看下面的代码即可连接到SAP公司对象:
AppDomain.CurrentDomain.AssemblyResolve + =委托(对象发送者,ResolveEventArgs e)
{
System.Reflection.AssemblyName requiredName =新的System.Reflection.AssemblyName(e.Name);
string v_AssemblyPath;
如果(requestedName.Name ==" Interop.SAPbobsCOM,版本= 8.8.0.0,文化=中性,PublicKeyToken =空")
{
//在此处放置代码以加载您实际拥有的程序集的任何版本
v_AssemblyPath = @" Interop.SAPbobsCOM88.dll";
返回System.Reflection.Assembly.LoadFrom(v_AssemblyPath);
}
如果(requestedName.Name ==" Interop.SAPbobsCOM,版本= 9.2.0.0,文化=中性,PublicKeyToken =空")
{
//在此处放置代码以加载您实际拥有的程序集的任何版本
v_AssemblyPath = @" Interop.SAPbobsCOM92.dll";
返回System.Reflection.Assembly.LoadFrom(v_AssemblyPath);
}
其他
{
返回null;
}
};
动态o_Company = Activator.CreateInstance(Type.GetTypeFromProgID(" SAPbobsCOM.Company"));
o_Company.Server ="服务器名称";
o_Company.CompanyDB =" sql_db_name";
o_Company.DbUserName =" sa";
o_Company.DbPassword =" sa_password";
字符串v_Path = @" C:\ dev \ MultipleSAPVersions \ bin \ Debug \ Interop.SAPbobsCOM.dll";
System.Reflection.Assembly组装= System.Reflection.Assembly.LoadFrom(v_Path);
类型类型;
type = assembly.GetType(" SAPbobsCOM.BoDataServerTypes");
o_Company.DbServerType =(dynamic)Enum.Parse(type," dst_MSSQL2008");
o_Company.UserName ="经理";
o_Company.Password =" manager_password";
如果(o_Company.Connect()!= 0)
{
//错误
}
其他
{
//好!
}
我最终以更加整洁的方式解决了这个问题:多个VS解决方案都使用相同的代码:每个VS解决方案都包含链接到同一"黄金"解决方案的"项目"(阅读:c#代码)。
然后,每个VS解决方案都针对不同的SAP B1版本进行了编译。 (不同的VMware映像)。一周热门 更多>