BAPIのパラメータについては多くの説明がありますが、理解できません。私自身、EXCEL VBAからのパラメーター化されたBAPI呼び出しを実現するのに多くの困難があったため、ここにソリューションを投稿します。
私の仕事はSAPに問い合わせることでした。(フォームを介してExcelで)選択できる必要があります
-日付範囲
-さまざまな状態(例:10、20、60)
-さまざまな部門コード(例:
10、20、60)-Z800プロジェクトを表示するかどうか
BAPIにアクセスするには、次のことを実行する必要があります。
If Not (connection Is Nothing) Then
debug.print "connection is successful"
Set functions = sapFunctions(connection)
Set obSapBapi = functions.Add(BapiName)
デバッグモードでBAPIオブジェクトにBAPI名が含まれていることがわかった場合、この割り当ては成功しています。成功したBAPI割り当て割り当てが成功しなかった場合、BAPIオブジェクトには「Nothing」が含まれます。
BAPIは、2つの区別されたパラメータータイプを持つことができます(すべてのパラメーターはSAPビューの1つの明示的なフィールドを参照します):1。1つの値のみが渡されます:これは.exportingです(例:surname = "Smith")2。複数のパラメーターが渡されます:これはテーブルを介して行われます(例:姓=「スミス」または「マイヤー」または「ピット」、注文日> 4/1/2019および<4/15/2019)BAPIの入力/出力
入力テーブルと出力テーブルは同じタイプです。SAP部門は、どちらがデータテーブルであるかを指定できます。BAPIのすべてのテーブル(およびそのフィールド)を取得するには、次のコードを実行できます(入力テーブルと出力テーブルを参照)。
If obSapBapi.Call <> False Then
'Function Call is Successfull
Dim oTables As Object
Set oTables = obSapBapi.Tables 'Tables collection
Call GetColumnDetails(oTables)
Set oTables = Nothing
Debug.Print "Function Call is Successfull"
End If
サブのコード:
Private Sub GetColumnDetails(ByVal obTables As Object)
on error resume next
Dim iLoop As Integer, iColIndx As Integer, iColValuePos As Integer
Dim iTblCnt As Integer, iColCnt As Integer
dim iRowCnt As Integer, iRowIndx As Integer
Dim oTable As Object, oColumn As Object, iValuePosn As Integer
iTblCnt = obTables.Count
iValuePosn = 1
For iLoop = 1 To iTblCnt
Set oTable = obTables.Item(iLoop)
iColCnt = oTable.ColumnCount
iRowCnt = oTable.RowCount
iColValuePos = 1
Sheet3.Cells(iValuePosn, 1) = oTable.Name
iValuePosn = iValuePosn + 1
For Each oColumn In oTable.Columns
Sheet3.Cells(iValuePosn, iColValuePos) = oColumn.Name
iColValuePos = iColValuePos + 1
Next oColumn
Set oTable = Nothing
Next
End Sub
インポート/入力テーブルインポートテーブルは主に次のようになります。SAPインポート/入力テーブル
単一行は、ORで接続されたSQL-WHEREステートメントとしてアセンブルされます。入力テーブルの説明:
Field Zeile(en:row)
行番号(i ++、1から始まる)を指定する必要があります!!!
フィールドSIGN
(のみ)可能な値:
I:包括的定義範囲
E:排他的定義範囲
フィールドOPTION(=演算子)の可能な値: -EQ等しい(=低)
-NE等しくない(<>低)
-BT低と高の間(両方を含む)(低<= x <=高)
-NB外側の低と高(x <低およびx>高)
-CPパターンを
含む-NPパターンを含まない
-LTより小さい(-LE低い等しい(<=低い)
-GTより大きい(>低い)
-GEより大きい等しい(> =低い)
フィールドLOWに指定できる値
は、参照フィールドのデータ型によって異なります。例:
フィールドHIGHの可能な値
データ型
SAP BAPI Data Type / Description / Passed from VBA as
C (<len>) / Character / string
D(8) / Date / Format$(mydate,”yyyyMMdd”)
F(<len>) / float / Double
I(<len>) / Integer / Integer
N(<len>) / Numeric / Integer / long
B / Boolean / String (length 1)
例:上記のタスクについて説明しました。選択できるはずです
解決
シートのボタンをクリックすると、フォームが表示されます。上記のすべての可能な値が入力され、シート「接続」、B9:B13に書き込まれます。
B9: 20190401
B10: 20190701
B11: 10;20;40
B12: X
B13: 05;08;11
およびコード:
Function ReadCatsData()
On Error GoTo ReadCatsDataError
Dim MyWB As Workbook
Dim MyWS As Worksheet
Dim connection As Object
Dim SAP_System As String
Dim WinUser As String
Dim functions As Object
Dim ErrText As String
Dim ErrTitel As String
Dim BapiName As String
Dim DatumVon As String
Dim DatumBis As String
Dim Status As String
Dim Z8 As String
Dim ILC As String
Dim Result() As String
Dim a As Integer
Dim i As Integer
Dim obSapBapi As Object
'Basiswerte setzen:
ErrTitel = "Monitoring times"
WinUser = UCase(Environ$("Username"))
SAP_System = ActiveWorkbook.Sheets("Connection").Cells(2, 1)
BapiName = "Z_BAPI_CATS_MON_GET"
Set MyWB = ActiveWorkbook
Set MyWS = MyWB.Worksheets("SapDaten")
Debug.Print SAP_System, WinUser, BapiName
Set connection = sapConnectionLogon(SAP_System, WinUser) ' "SGI"
If Not (connection Is Nothing) Then
Set functions = sapFunctions(connection)
Set obSapBapi = functions.Add(BapiName)
If Not (obSapBapi Is Nothing) Then
DatumVon = Sheets("Connection").Cells(9, 2).Value
'DatumVon = "20190401"
DatumBis = Sheets("Connection").Cells(10, 2).Value
'DatumBis = "20190418"
Status = Sheets("Connection").Cells(11, 2).Value
'Status = "10;20;30"
Z8 = Sheets("Connection").Cells(12, 2).Value
ILC = Sheets("Connection").Cells(13, 2).Value
'ILC = "05;08"
Debug.Print DatumVon, DatumBis, Status, Z8, ILC
'Declare the Table Parameters => Uebergabewerte
' Date table (1)
Dim vbIT_WORKD_RANGE As Object
Set vbIT_WORKD_RANGE = obSapBapi.Tables("IT_WORKD_RANGE")
vbIT_WORKD_RANGE.Rows.Add
vbIT_WORKD_RANGE(1, "SIGN") = "I"
vbIT_WORKD_RANGE(1, "OPTION") = "BT"
vbIT_WORKD_RANGE(1, "LOW") = DatumVon
vbIT_WORKD_RANGE(1, "HIGH") = DatumBis
' Status (2)
If Status <> "" Then
Dim vbIT_STATUS_RANGE As Object
Set vbIT_STATUS_RANGE = obSapBapi.Tables("IT_STATUS_RANGE")
Result = Split(Status, ";")
For i = LBound(Result()) To UBound(Result())
vbIT_STATUS_RANGE.Rows.Add
vbIT_STATUS_RANGE(vbIT_STATUS_RANGE.Rows.Count, _
"SIGN") = "I"
vbIT_STATUS_RANGE(vbIT_STATUS_RANGE.Rows.Count, _
"OPTION") = "EQ"
vbIT_STATUS_RANGE(vbIT_STATUS_RANGE.Rows.Count, _
"LOW") = Result(i)
Debug.Print i, Result(i)
Next i
End If
Erase Result
' Industry_line (3)
If ILC <> "" Then
Dim vbIT_ZZIDL_RANGE As Object
Set vbIT_ZZIDL_RANGE = obSapBapi.Tables("IT_ZZIDL_RANGE")
Result = Split(ILC, ";")
For i = LBound(Result()) To UBound(Result())
vbIT_ZZIDL_RANGE.Rows.Add
vbIT_ZZIDL_RANGE(vbIT_ZZIDL_RANGE.Rows.Count, _
"SIGN") = "I"
vbIT_ZZIDL_RANGE(vbIT_ZZIDL_RANGE.Rows.Count, _
"OPTION") = "EQ"
vbIT_ZZIDL_RANGE(vbIT_ZZIDL_RANGE.Rows.Count, _
"LOW") = Val(Result(i))
Debug.Print i, Result(i)
Next i
End If
'Declare the Export Parameter
' show Z800 projects (4)
obSapBapi.exports("IF_AWART") = Z8
'Call the function. get error in Bapi via obSapBapi.Exception
If obSapBapi.Call = False Then
ErrText = "Established connection with SAP system " & _
SAP_System & vbCrLf
ErrText = ErrText & "BAPI " & BapiName & " exists. " & vbCrLf
ErrText = ErrText & "BAPI could not be called. " & vbCrLf
ErrText = ErrText & "SAP delivers the following message: " & _
obSapBapi.Exception & vbCrLf
ErrText = ErrText & "Data cannot be fetched from SAP." & vbCrLf
a = MsgBox(ErrText, vbOKOnly + vbCritical, ErrTitel)
Else
'Function Call is Successfull
Dim obSAPTblData As Object
Set obSAPTblData = obSapBapi.Tables("ET_Data")
Dim SheetRowPos As Integer
Dim iRowCnt As Integer
Dim iRowIndx As Integer
Dim iColCnt As Integer
Dim iColIndx As Integer
iColCnt = obSAPTblData.ColumnCount
iRowCnt = obSAPTblData.RowCount
SheetRowPos = 1 'init
For iRowIndx = 1 To iRowCnt
SheetRowPos = SheetRowPos + 1 'start at row 2
For iColIndx = 1 To iColCnt
MyWS.Cells(SheetRowPos, _
iColIndx) = obSAPTblData.Value(iRowIndx, iColIndx)
Next
Next
'Debug.Print "Col.: " & iColCnt & ", Rows: " & iRowCnt
End If
Set vbIT_WORKD_RANGE = Nothing
Set vbIT_STATUS_RANGE = Nothing
Set vbIT_ZZIDL_RANGE = Nothing
functions.Remove (BapiName)
Set obSapBapi = Nothing
Else
ErrText = "Established connection with SAP system " & _
SAP_System & vbCrLf
ErrText = ErrText & "BAPI " & BapiName & _
" was not found (could not instantiate object)." & vbCrLf
ErrText = ErrText & "Data cannot be fetched from SAP." & vbCrLf
a = MsgBox(ErrText, vbOKOnly + vbCritical, ErrTitel)
End If
connection.LogOff
Set connection = Nothing
Set functions = Nothing
Else
ErrText = "Could not establish connection with SAP system." & vbCrLf
ErrText = ErrText & "User: " & WinUser
ErrText = ErrText & ", SAP System: " & SAP_System & vbCrLf
ErrText = ErrText & "Data cannot be fetched from SAP." & vbCrLf
a = MsgBox(ErrText, vbOKOnly + vbCritical, ErrTitel)
End If
ReadCatsDataExit:
Set MyWS = Nothing
Set MyWB = Nothing
Exit Function
ReadCatsDataError:
Resume ReadCatsDataExit
End Function
あなたが言及した外部ドキュメントで説明されていないことは、7.70より前のバージョンのSAP GUI(現在はベータ版であり、まだ公開されていません)では、SAPGUIスクリプティングOCXライブラリは32ビットであるということです。多くの人がMSOffice 64ビットを使用しているため、そこで説明されているように、いくつかのSAPGUIエントリのWindowsレジストリを変更する必要があります。
呼び出しがBAPIと呼ばれる特別なRFC汎用モジュールに関係する場合、データを登録、更新、または削除するには、パラメータのメッセージに示されている成功または失敗をそれぞれ呼び出すBAPI_TRANSACTION_COMMIT
か、それにBAPI_TRANSACTION_COMMIT
基づいて行う必要がありますRESULT
(タイプE
、A
またはのメッセージが存在する場合X
) 。これobjRfcFunc.Call = False
はシステムエラーを意味することに注意してください。
Reba McEntire が息子の Shelby Blackstock と共有しているクリスマスの伝統について学びましょう。
メーガン・マークルとマライア・キャリーが自然な髪の上でどのように結合したかについて、メーガンの「アーキタイプ」ポッドキャストのエピソードで学びましょう.
ハリー王子が家族、特にチャールズ王とウィリアム王子との関係について望んでいると主張したある情報源を発見してください。
ワイノナ・ジャッドが、母親のナオミ・ジャッドが亡くなってから初めての感謝祭のお祝いを主催しているときに、彼女が今では家長であることをどのように認識したかを学びましょう.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
深夜のアンバー・ラフィンとジェニー・ヘーゲルが繰り返し「ジョーク・セス・カント・テル」で戻ってきました。これらのジョークの多くは観客をがっかりさせますが、最初から最後まで素晴らしいです。ルフィンとヘーゲルは黒人女性として自己紹介します。とゲイの女性、それぞれ、したがって、セスマイヤーズが10フィートのポールで触れることができない主題について賢明にクラックすることができます。
(写真:ライオンズゲート)この「キアヌ・リーブスはダッパースーツを着て人々を殺害する」というモチーフ全体が手元にあることをはっきりと知っているライオンズゲートは、スタイリッシュで復讐に燃えるジョン・ウィックのフランチャイズで3回目のリリース日を設定しました。犬をベースにした復讐のためのババ・ヤガの果てしない十字軍を支えるバットシット神話をより深く掘り下げることを約束する3番目のジョン・ウィック映画は、2019年5月17日に設定されました。これまでのところ、それはその日に上陸した唯一の映画です。
写真:NBCパイロットは良すぎるのでしょうか?ありそうもないようですが、This IsUsのファンの場合はそうかもしれません。クレイジー、バカ、ラブライターのダン・フォーゲルマンからの待望の新シリーズは、ツイストエンディングを中心に展開しています。シリーズを適切に設定しますが、非常に巧妙に行われているため、改善の余地はあまりありません。
ここにいくつかのニュースがあります:あなたは今FacebookにGIFを埋め込むことができます。まあ、技術的には、GIFへのリンクを投稿することができ、Facebookは、他のほとんどすべてのソーシャルネットワークが何年も行ってきたようにアニメーションを作成します。
ロシアのフィギュアスケーター、カミラ・バリエバが関与したドーピング事件が整理されているため、チームは2022年北京冬季オリンピックで獲得したメダルを待っています。
何千人ものAmazonの買い物客がMulberry Silk Pillowcaseを推奨しており、現在販売中. シルクの枕カバーにはいくつかの色があり、髪を柔らかく肌を透明に保ちます。Amazonで最大46%オフになっている間にシルクの枕カバーを購入してください
ラファイエット警察署は、「不審な男性が女性に近づいた」という複数の苦情を受けて、12 月にパデュー大学の教授の捜査を開始しました。
私たちの周りの世界と同じように、言語は常に変化しています。以前の時代では、言語の変化は数年または数十年にわたって発生していましたが、現在では数日または数時間で変化する可能性があります。
認知症を患っている 91 歳のアジア人女性が最近、47 番街のアウター サンセット地区でロメオ ロレンゾ パーハムに襲われました。伝えられるところによると、被害者はサンフランシスコの通りを歩いていたところ、容疑者に近づき、攻撃を受け、暴行を受けました。
Cómo mejoramos la accesibilidad de nuestro componente de precio, y cómo nos marcó el camino hacia nuevos saberes para nuestro sistema de diseño. Por Ana Calderon y Laura Sarmiento Leer esta historia en inglés.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.