为什么"嵌入互操作类型" SAP b1项目中的SAPbobsCOM.dll需要设置为false吗?

时间:2018-03-21 19:12:00

标签: c# casting com interop sap

在我的第一个SAP B1项目中,我将SAPbobsCom.dll的嵌入互操作类型设置为True。这是一个" DI API"附加项目,即无需从SAP B1内部运行附加组件。我创建的代码编译得很好,我觉得我没事。

但是,出现了一个新的要求,它必须在SAP B1中运行。简而言之,我意识到为了打包附加组件SAP b1工具需要我将Embed Interop Types设置为False。

然后我在SAP论坛中发现了一些文章,表明建议将互操作类型设置为false,否则会导致问题"。但没有解释为什么或问题会是什么。我想知道这是一个特定于SAP类,COM或其他问题的问题。为什么该设置会改变类的行为方式?

当我尝试使用设置为False的Embed Interop Types重新编译加载项时,许多使用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;

1 个答案:

答案 0 :(得分:0)

我多年来一直在制作SAP B1 AddOns,并且从未将SAPbouiCom.dll设置为false。我认为你不必这样做。这适用于使用.ard文件添加的插件和在B1外部运行的程序。 这也适用于B1DESetup_B192

我使用L_1 = np.tril(np.random.normal(scale=1., size=(D, D)), k=0) L_1[np.diag_indices_from(L_1)] = np.exp(np.diagonal(L_1)) 工具在Visual Studio中打包我的插件,并且没有上述要求。见下图。

enter image description here