0

PDF バイナリ ファイルを SAP I にアップロードするには、RFC 関数モジュールを使用できます。この FM には、次の 2 つの特定のパラメーターが必要です。

  • IC_ARC_OBJECT= SAP (OAC2) で MIME タイプを定義するドキュメント クラス
  • IN_CONTENT_LENGHT= IMPORTING データ型、ファイルのサイズ
  • IT_CONTENT= IMPORTING table of structure TBL1024、ファイルのバイトを含むテーブル、サイズ 1024 に分割
  • ET_MESSAGES= エラーをチェックするための単なるBAPIRET2テーブル (RETURN テーブル)

関数モジュールは Python プログラムで正常に実行されますが、関数モジュールを中断して内容を確認するIT_CONTENTと、テーブルの行が正しく入力されていないことがわかります。

FM の python プログラム呼び出しの抽出:

arc_object = "ZZ_PDF" 
content = Arc.get_arc_content(filename)
size = Arc.get_size(filename)
messages = []
result = connection.call("ZZ_UPLOAD_FILE", 
IC_ARC_OBJECT = arc_object,
IN_CONTENT_LENGTH = str(size),
IT_CONTENT = content,
ET_MESSAGES = messages)
messages = result['ET_MESSAGES']
for mes in messages:
     print mes['MESSAGE']

Python 関数の抽出Arc.get_arc_content(filename):

def get_arc_content(filename="file.pdf"):
    maxLineLength = 1024
    structure = []
    if filename == '':
        filename = 'file.pdf'
    with open(filename, 'rb') as file1:
        f = file1.read()
        n = 1024
        fl = [f[i:i + n] for i in range(0, len(f), n)]

    content = []
    for line in fl:
        lineapp = {
            u"LINE": line
        }
        print len(line)
        content.append(lineapp)

    return content

パラメータに対する SAP での結果は次のとおりです。

  • IN_CONTENT_LENGHT= 000000007945 (7.8キロバイト)
  • IT_CONTENT= 8 x 1 行: (4 行)

LINE1 255044462D312E3300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 LINE2 B89B067867673EAB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 LINE3 5BF4CB23B9A7513700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 LINE461DB44B3B0AAB12500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .... LINE8 202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000LINE8 202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000LINE8 202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

IT_CONTENTFM でチェックされた の期待される結果は、ARCHIVE_OBJECT_GET次のようになります。

LINE1 255044462D312E330D0A25E2E3CFD30D0A25525354585044463320506172616D65746572733A204452535458680D0A322030206F626A0D0A3C3C0D0A2F46696C7465722033203020520D0A2F4C656E67 LINE2 FA1D555450C8EF41AC263F14BC03C49BDD773CF22BC43FD21B3565DA2DFCCB83D8FFAC7BCBBBEBE6DED0AD68DEA29B349398511824DDDCFFAF41EA7FDADDF67EE61EF3FC303293F7E96351A911F8DE10 LINE3 FB4A559526CD6AED428976E80F8DD0B02517C4178D1EFB73C65792D09CFE5C717883BE38E61ED0AB3ADC0983C103E4338A1B210DA086DA73375E679C0A410F510FDC542BB686A1A4D601DD411A506504 ...

したがって、問題は最初のバイトのみが転送され、残りのバイトは後続ゼロであることです。

これは、私が何か間違ったことをしているという事実に関連していますか、それともバイナリ ファイルを 1024 のチャンクに適切にカットし、それらを SAP 向けのテーブルに転送することはできませんか? PythonでSAPのバイト型を使用するには?

あなたの提案/サポートに感謝します。

4

1 に答える 1

1

pyrfc-1.9.4-py2.7-win-amd64.egg が問題を解決しました。

Windows + PyRFC 1.9.3 バージョンの問題のようですが、1.9.4 ディストリビューションは完璧に動作します。

Srdjan Boskovicのサポートに感謝します

于 2016-11-25T07:40:44.430 に答える