Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net SAP B1-选项按钮-“无法将对象系统.String强制转换为类型SAPbouiCOM.Item”错误_Vb.net_Casting_Sapb1 - Fatal编程技术网

Vb.net SAP B1-选项按钮-“无法将对象系统.String强制转换为类型SAPbouiCOM.Item”错误

Vb.net SAP B1-选项按钮-“无法将对象系统.String强制转换为类型SAPbouiCOM.Item”错误,vb.net,casting,sapb1,Vb.net,Casting,Sapb1,我正在Visual Studio中为SAP B1中的附加组件编写vb.net代码。现在,我想选择一个选项按钮,根据用户的选择,我想获取这个值并将其发送到另一个类中的另一个函数。我想在用户按下OK按钮后立即执行此操作,因此我尝试在事件中执行此操作 我为创建选项按钮编写的代码: Dim optBtn As SAPbouiCOM.OptionBtn 'Dim oFrm As SAPbouiCOM.Form Dim oUserdatasource As SAPbouiCO

我正在Visual Studio中为SAP B1中的附加组件编写vb.net代码。现在,我想选择一个选项按钮,根据用户的选择,我想获取这个值并将其发送到另一个类中的另一个函数。我想在用户按下OK按钮后立即执行此操作,因此我尝试在事件中执行此操作

我为创建选项按钮编写的代码:

Dim optBtn As SAPbouiCOM.OptionBtn
        'Dim oFrm As SAPbouiCOM.Form
        Dim oUserdatasource As SAPbouiCOM.UserDataSource

        oUserdatasource = oform2.DataSources.UserDataSources.Add("BD_resDS", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1)

        'Option 1
        oItem = oform2.Items.Add("BD_rbRes", SAPbouiCOM.BoFormItemTypes.it_OPTION_BUTTON)
        oItem.Left = 155
        oItem.Top = 10
        oItem.Height = 16
        oItem.Width = 55
        optBtn = oItem.Specific
        optBtn.Caption = "Cheque"

        optBtn.DataBind.SetBound(True, , "BD_resDS")

        'Option 2
        oItem = oform2.Items.Add("BD_rbPost", SAPbouiCOM.BoFormItemTypes.it_OPTION_BUTTON)
        oItem.Left = 220
        oItem.Top = 10
        oItem.Height = 16
        oItem.Width = 55
        optBtn = oItem.Specific
        optBtn.Caption = "Cash"
        oItem.Visible = True
        optBtn = oItem.Specific
        optBtn.GroupWith("BD_rbRes")

        optBtn.DataBind.SetBound(True, , "BD_resDS")

        'Option 3
        oItem = oform2.Items.Add("BD_rbPost2", SAPbouiCOM.BoFormItemTypes.it_OPTION_BUTTON)
        oItem.Left = 280
        oItem.Top = 10
        oItem.Height = 16
        oItem.Width = 75
        optBtn = oItem.Specific
        optBtn.Caption = "Credit Card"
        oItem.Visible = True
        optBtn = oItem.Specific
        optBtn.GroupWith("BD_rbPost")
我在事件中编写的代码如下:

Public Sub SBO_Application_ItemEvent(ByVal FormUID As String, ByRef pVal As SAPbouiCOM.ItemEvent, ByRef BubbleEvent As Boolean) Handles SBO_Application.ItemEvent
        Try
            Dim fInv As SAPbouiCOM.Form
            Dim omethod As SAPbouiCOM.Item
            Dim opaymeth As SAPbouiCOM.OptionBtn
            Dim paymeth As String

            'If pVal.ItemUID = "1" And pVal.EventType = SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED And pVal.BeforeAction = True And pVal.ActionSuccess = False And pVal.FormUID = "60006" Then

            'End If

            'Events of the Blanket Agreement form
            If (FormUID = "Choose") Then
                If (pVal.BeforeAction = False) Then
                    ' Click on Add Row
                    If (pVal.ItemUID = "1") And (pVal.EventType = SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED) Then
                        fInv = SBO_Application.Forms.Item(FormUID)
                        omethod = fInv.DataSources.UserDataSources.Item("BD_resDS").ValueEx

                        opaymeth = omethod.Specific

                        paymeth = opaymeth.Value.ToString()
                        SBO_Application.MessageBox(paymeth)

                        If paymeth <> "" And paymeth <> Nothing Then
                            Dim paym As New payment(SBO_Application, oCompany)
                            paym.pay(paymeth)
                        End If
                    End If
                End If
            End If
        Catch ex As Exception
            'SBO_Application.MessageBox(er.Message)
            SBO_Application.MessageBox(ex.Message)
        End Try
    End Sub
现在,我在SAP B1中遇到的错误是:

无法将对象“System.String”强制转换为类型“SAPbouiCOM.Item”

.ValueEx似乎返回字符串,因此我想您只需要删除它

omethod = fInv.DataSources.UserDataSources.Item("BD_resDS")
另一个很好的例子,为什么你应该总是打开选项严格

您已声明 尺寸测量方法为SAPbouiCOM.项目

并将其指定给字符串值 omethod=fInv.DataSources.UserDataSources.ItemBD\u resDS.ValueEx

声明字符串变量并向其赋值,如下所示

作为字符串的Dim tmpval= tmpval=fInv.DataSources.UserDataSources.ItemBD\u resDS.ValueEx


尝试此操作

正如您所说,我删除了.ValueEx,现在出现了错误消息:“无法将类型为'SAPbouiCOM.UserDataSourceClass'的COM对象强制转换为接口类型'SAPbouiCOM.Item'。此操作失败,因为对IID为“{97702124-F229-4A00-FC584049EF9}”的接口的COM组件的QueryInterface调用因以下错误而失败:不支持来自HRESULT的此类接口异常:0x80004002 E_NOINTERFACE。”知道这是怎么回事吗?而且我也不知道在选项严格打开后如何更改我的代码,所以我会让它关闭
omethod = fInv.DataSources.UserDataSources.Item("BD_resDS")