0

SAP B1のアドオン用にVisual Studioで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」にキャストできません

4

2 に答える 2

0
omethod = fInv.DataSources.UserDataSources.Item("BD_resDS").ValueEx

.ValueEx は文字列を返すように見えるので、削除するだけでよいと思います

omethod = fInv.DataSources.UserDataSources.Item("BD_resDS")

Option Strict を常にオンにする必要があるもう 1 つの良い例 ;)

于 2014-07-15T09:01:42.307 に答える
0

Dim method As SAPbouiCOM.Item を宣言しました

それを文字列値 omemethod = fInv.DataSources.UserDataSources.Item("BD_resDS").ValueEx に割り当てます。

文字列変数を宣言し、それに値を割り当てます

tmpval を文字列 ="" として薄暗い tmpval = fInv.DataSources.UserDataSources.Item("BD_resDS").ValueEx

これを試して

于 2014-07-16T05:19:33.057 に答える