【发布时间】:2018-03-21 19:11:59
【问题描述】:
在我的第一个 SAP B1 项目中,我将 SAPbobsCom.dll 的 Embed Interop Types 设置为 True。这是一个“DI API”插件项目,即不需要从 SAP B1 内部运行插件。我创建的代码编译得很好,我认为我还可以。
但是,出现了一个新要求,即它必须在 SAP B1 中运行。长话短说,我意识到为了打包 SAP b1 工具所需的插件,我将 Embed Interop Types 设置为 False。
然后我在 SAP 论坛中发现了一些文章,表明建议将互操作类型设置为 false,否则会“导致问题”。但是没有解释为什么,或者会出现什么问题。我想知道这是否是特定于 SAP 类、COM 或其他东西的问题。为什么该设置会改变类的行为方式?
当我尝试重新编译插件并将 Embed Interop Types 设置为 False 时,许多使用 SAPbobsCOM 类的语句都失败了。错误的形式为:无法将类型“xyz”隐式转换为“abc”。存在显式转换(您是否缺少演员表?)
例如,为了得到语句:
objRecSetDN = SapObjects.oCompany.GetBusinessObject(BoObjectTypes.BoRecordset)
要编译,我必须将其更改为:
objRecSetDN = (SAPbobsCOM.Recordset)SapObjects.oCompany.GetBusinessObject(BoObjectTypes.BoRecordset)
我不得不改变:
string CheckSend = RS.Fields.Item("U_Send").Value;
到:
string CheckSend = (string)RS.Fields.Item("U_Send").Value;
【问题讨论】:
-
感谢 Marvin Fischer 的编辑建议。我是 StackOverflow 的新手。
标签: c# casting com interop sap