単一システムのJavapokalipsis

この記事は、SAP ERPシステムのABAP開発者に焦点を当てています。 プラットフォーム固有の多くの問題が含まれており、他のプラットフォームを使用する開発者にとっては面白くない、または物議を醸すことさえあります。



「歴史的に」という:曲表現があります。



そのため、私のメインシステムでは、歴史的に次のことが起こりました。



そして、これは、適切に構成されたバンドルなしでは、Browser + Javaが生きがいのないことを意味します。



Javaは、ファイルを操作するために必要です(アップロード、ダウンロード)。 基本的に、Webアプリケーションはそのウィンドウ内でのみ動作する必要があり、キャノンショットであっても、ユーザーのファイルシステムへのアクセスを許可しないでください。 ブラウザは個人的に便利な方法でファイルを操作する必要がありますが、これはすべてを制御するSAP GUIのアプローチと矛盾します:開くダイアログ、ダイアログウィンドウのタイトル、利用可能なファイル拡張子のリストの表示、複数選択の許可、ディレクトリの選択、ディレクトリの読み取り、ファイルの内容の読み取りまたは書き込み。 SAP GUI for HTMLは兄貴の機能を繰り返す必要があるため、アプローチを変更せずに、クライアント側でこれらのアクションを実行するJavaアプレットの形式で追加のレイヤーを導入することにしました。 このアプローチを使用したABAP部分は実質的に変更されていません。



さらに、ZWWWは、オプションなしでOLEテクノロジーを通じて機能します。 また、空対空ミサイルの破壊範囲内であっても、WebアプリケーションがクライアントマシンのOLEインターフェイスにアクセスすることは許可されません。 したがって、OLE呼び出しをプロキシし、付随する詐欺を実行するJavaアプレットの形式の別のレイヤーが必要です。



HTML用SAP GUI自体はABAPインスタンスとITSサーバーの間のレイヤーであるため、この構造全体がJengのゲームに似始めます。





このゲームは進行中です。 ブラウザが古いJavaの無効化を開始し、Javaアプレットが権限を失い、アプレット署名の検証で何かが発生し、例外のブラック/ホワイトリストがいくつか表示され、アプレットがJREの一部のバージョンでひどく遅くなり、その後判明します新しいバージョンのオフィス、その後ITS / ABAPが更新され、国の反対側のユーザーはセキュリティポリシーを設定できなくなり、突然ブラウザを低レベルのセキュリティに設定する方が簡単になったように見えます...



年表に従うと、次のことに気付くでしょう。

すぐに、古くてあまり親切ではないIEだけが残ります。 Evosky開発者、彼はWindows 10でIE11をサポートすることを約束しましたが、私たちは皆知っています...



会計士がExcelにレポートをアップロードする機会から突然奪われた場合はどうなりますか? 黙示録!

そして、Javapokalipsisが近づいています。







オプションを検討してください。



* * *

ブラウザ(SAP GUI for HTML)を本格的なSAP GUIに変更します。 管理上の理由で落ちます。



ブラウザ(HTMLのSAP GUI)をNWBCに変更します。 ただし、NWBCは同じIEの単なるシェルであるため、このアプローチは根本的な問題を解決しません。 落ちます。

* * *

ZWWWをサーバー上で動作させ、結果をクライアントにダンプします。 不可能。

* * *

山がプラットフォームに行かない場合、エンジンに似ていない場合は、ZWWWを別のエンジンに変更できます。
  1. PDFフォーム
  2. BIレポート(BObj / BW /その他)
  3. 代替エンジンAbap2xlsx




3つのシナリオはすべて時間がかかりますが、兆候があります。



1. PDFはサーバー側で生成されます。 ユーザーはコンテンツを編集できません。 一部のフォームは印刷にのみ必要で(「キャッシュデスクを出ることなく」)、ファイル形式の作業文書としては不要です。 最も単純な例は、入金の令状、消耗品の現金の令状、支払いの請求書、および1ページにあるその他の小さなフォームです。



2.一部のレポートは、システム内のユーザーだけでなく、外部ユーザーにも必要であり、これらの外部ユーザーはBIシステムにアクセスできます。 レポートはリアルタイムでの関連性を必要としません。 レポートに重要な計算が含まれている場合、BIシステムに最終的な計算をアップロードし、BIシステムにこの複雑なロジックを強制的に繰り返させないようにすることができます。 ERPシステムの負荷を軽減します。 ライセンスの数を節約できます。 作業中のレポートはシステムに残りますが、美しいExcelにアップロードすることはできません。



3.残りはすべてZWWWからAbap2xlsxに書き換えることができます。 このライブラリを使用すると、サーバー上でExcelファイルを直接生成できます。 これら2つのライブラリのアプローチは根本的に異なり、一部の呼び出しを他の呼び出しに置き換えることは不可能です。 特に複雑なドキュメントの場合、速度は大幅に向上します。 古いXLS形式をサポートする必要性はもはや関係ありません。



これがすべての背景ですが、私が何かを書き始めたために... Abap2xlsxでファイル生成を書き直したとしましょう。しかし、それは何らかの形でクライアントに投げられる必要があります!



ブラウザーアプローチによるクライアントへのファイルの折りたたみは、機能メソッドALEWEB_DOWNLOADを使用して実行できます。 彼はそれをしますが、あまり美しくありません。 たとえば、その中のファイル名を制御することは不可能であり、ランダムな文字からの一時的な名前はシステムによってのみ好まれ、人々は単にこれで気分が悪くなります。 そのエリアでスピンした場合、Zエリアにタップ、フィニッシュ、コピーすることもできます。 退屈!



また、サービスとHTTPハンドラーを介してフェイントを作成できます。 これは非常に興味深いです!



最初に、たとえば、テーブルを作成します。





この表では、クライアントに提供する必要があるバイナリファイルを追加します。 ファイル自体はXDATAフィールドに保存されます。



システムのHTTPハンドラーはクラスとして実装されます。 サンプルでは、​​クラスCL_HTTP_EXT_PINGを使用します。



クラスZCL_WWW_FILE_DOWNLOADを作成し、その中にHANDLE_REQUESTメソッドを実装しましょう。



data lt_query_string type tihttpnvp, ls_query_string type ihttpnvp. data ls_zwww_content type zwww_content. data lv_mimetype type string. data lv_filename type string. server->request->get_form_fields( changing fields = lt_query_string ). read table lt_query_string into ls_query_string with key name = 'file_uid'. ls_zwww_content-file_uid = ls_query_string-value. select single * from zwww_content into ls_zwww_content where file_uid = ls_zwww_content-file_uid. lv_mimetype = ls_zwww_content-mimetype. concatenate 'attachment; filename="' ls_zwww_content-filename '"' into lv_filename. server->response->set_header_field( name = 'Content-Type' value = lv_mimetype ). server->response->set_header_field( name = 'Content-Disposition' value = lv_filename ). server->response->set_data( ls_zwww_content-xdata ).
      
      





すべてが簡単です:
  1. HTTP要求からfile_uidパラメーターを読み取ります
  2. テーブルの内容を取得します
  3. HTTP応答ヘッダーを公開する
  4. ファイルの内容をHTTP応答の本文にダンプします




次に、トランザクションSICFで新しいサービスを登録し、新しく作成したハンドラーに割り当てます。





その後、次の形式のリンクからサービスを利用できます。

http://ホスト:8000 / sap / bc / ZFILE_DL?file_uid = 5A2D5067C04D1ED5AFB71835DF981A07



いいね! 残っているのは、アンロードを行うことだけです。



まず、何らかの方法でバイナリXLSXファイルを取得します。 例:ALVからの変換:

  data lo_converter type ref to zcl_excel_converter. create object lo_converter. lo_converter->convert( exporting io_alv = gr_table it_table = gt_report[] i_row_int = 2 i_column_int = 2 ).
      
      







次に、ファイルをテーブルに追加します。

  data ls_zwww_content type zwww_content. clear ls_zwww_content. call function 'GUID_CREATE' importing ev_guid_32 = ls_zwww_content-file_uid. ls_zwww_content-filename = sy-repid && '.xlsx'. ls_zwww_content-mimetype = 'application/msexcel'. ls_zwww_content-uname = sy-uname. get time stamp field ls_zwww_content-timestamp. lo_converter->get_file( importing e_file = ls_zwww_content-xdata ). insert into zwww_content values ls_zwww_content. commit work and wait.
      
      







次に、ブートローダーをキックします。

  data lv_url type string. concatenate 'http://host:8000/sap/bc/ZFILE_DL?file_uid=' ls_zwww_content-file_uid '&sap-client=100&sap-language=RU' into lv_url. call function 'ITS_BROWSER_WINDOW_OPEN' exporting url = lv_url window_name = '_top' exceptions its_not_available = 1 others = 2.
      
      







試してみて、ドラフトは機能します



しかし、ZWWWアプローチはAba​​p2xlsxにどのように適用できますか?



そして、ダイアログがあります:

同じことですが、写真で








この楽観的なメモで、私は休暇を取る。 よろしくお願いします!



All Articles