NORD POSのレポート。 パート2

jrxmlテンプレートを取得して、アプリケーションにインストールします



最初の部分では、iReportでJasperReportsライブラリのレポートテンプレートを準備する方法について説明しました。 そして、この記事は、生成されたテンプレートをNORD POSアプリケーションに直接統合する方法に専念しています。 そして、最初の部分でプログラムが製品ディレクトリのレポートの例を作成するためのデータソースとしてのみ必要だった場合、この記事では、アプリケーションのビジネスロジックとJasperReportsライブラリテンプレートの要素間の相互作用の可能性を示すために、レポートをアプリケーションインターフェイスに統合する必要があります。







さらに、資料の準備中にバージョン3.0.1CEでレポート印刷エラーが見つかったため、記事を2つの部分に分割する必要がありました。 Insubstantialの Swingルックアンドフィールライブラリの非標準デザインを使用している場合、プリンター選択ダイアログの呼び出しが正しくないため、エラーが発生しました。 オペレーティングシステムのスタイルでMetalテーマまたはデザインを使用している場合、エラーは発生しませんでした。 ただし、NORD POSはデフォルトで非標準のCremeSkinテーマを使用するため、この部分を記述するために、このバグを修正してNORD POS 3.0.2CEの更新バージョンをリリースする必要がありました。 そして、このバージョンが記事の第2部で使用します。



テンプレートを配置する



レポートテンプレートをインストールするには、アプリケーション全体のソースコードをダウンロードする必要はありません。iRepotから./reports/io/example/reports/パスを指定して、インストールされたアプリケーションのレポートフォルダーにファイルを保存するだけです。 さらに、NORD POSでテンプレートを初期化するBeanShellスクリプトと、テンプレートのテキストフィールドをローカライズするPropertiesリソースを作成する必要があります。







スクリプトを書く



スクリプトコードは、プログラムでレポートテンプレートを初期化し、アプリケーションデータベースからフォームフィールドに値を転送する必要があります。 そのため、スクリプトの最初の行で、 PanelReportBean()クラスを初期化します。このクラスは、JasperReportsライブラリとのやり取りを担当します。

report = new com.openbravo.pos.reports.PanelReportBean();
      
      





主なパラメーターを設定します。

 report.setTitleKey("Menu.ExtProducts"); //    report.setReport("/io/example/reports/productsext"); //      report.setResourceBundle("io/example/reports/productsext_messages"); //    
      
      





データベースから値を取得するSQLクエリ文字列:

 report.setSentence("SELECT"+ " PRODUCTS.NAME AS PRODUCT_NAME" + ", PRODUCTS.REFERENCE AS PRODUCT_REFERENCE" + ", PRODUCTS.PRICESELL AS PRODUCT_PRICESELL" + ", PRODUCTS.CATEGORY AS CATEGORY_ID" + ", CATEGORIES.NAME AS CATEGORY_NAME" + ", PRODUCTS.TAXCAT AS TAX_ID" + " FROM PRODUCTS" + " LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID" + " LEFT OUTER JOIN TAXCATEGORIES ON PRODUCTS.TAXCAT = TAXCATEGORIES.ID" + " LEFT OUTER JOIN TAXES ON TAXCATEGORIES.ID = TAXES.CATEGORY" + " WHERE ?(QBF_FILTER)" + " ORDER BY CATEGORIES.NAME, PRODUCTS.NAME");
      
      





ここで、 WHERE?(QBF_FILTER)条件に注意を払う必要があり、アプリケーションインターフェースからフィルターをリクエストに挿入できます。 たとえば、製品ディレクトリの場合、これは次のパラメーターフィールドを持つProductFilter()です。

 report.addParameter("PRODUCTS.NAME"); report.addParameter("PRODUCTS.PRICEBUY"); report.addParameter("PRODUCTS.PRICESELL"); report.addParameter("PRODUCTS.CATEGORY"); report.addParameter("PRODUCTS.CODE"); report.addQBFFilter(new com.openbravo.pos.ticket.ProductFilter());
      
      





NORD POSユーザーは、フィルターを使用して、製品の価格、カテゴリを選択するか、正規のSQL式を使用して特定の名前のみの製品を選択できます。 たとえば、式A%は、任意のカテゴリの文字「A」で始まる製品のリストを提供します。



スクリプトの最後で、レポートを作成するためにjrxmlテンプレートで使用されるフィールドを指定する必要があります。

 report.addField("PRODUCT_NAME", com.openbravo.data.loader.Datas.STRING); report.addField("PRODUCT_REFERENCE", com.openbravo.data.loader.Datas.STRING); report.addField("PRODUCT_PRICESELL", com.openbravo.data.loader.Datas.DOUBLE); report.addField("CATEGORY_ID", com.openbravo.data.loader.Datas.STRING); report.addField("CATEGORY_NAME", com.openbravo.data.loader.Datas.STRING); report.addField("TAX_ID", com.openbravo.data.loader.Datas.STRING); report;
      
      





そして、作成したレポートを使用してBeanShellスクリプトを呼び出します。



完成したスクリプトテキスト
report = new com.openbravo.pos.reports.PanelReportBean();



report.setTitleKey( "Menu.ProductList"); //パネルの名前を設定します

report.setReport( "/ io / example / reports / productsext"); //レポートを生成するファイルを指す

report.setResourceBundle( "io / example / reports / productsext_messages"); //およびローカライズファイルへ



report.setSentence( "SELECT" +

「PRODUCTS.NAME AS PRODUCT_NAME」+

"、PRODUCTS.REFERENCE AS PRODUCT_REFERENCE" +

"、PRODUCTS.PRICESELL AS PRODUCT_PRICESELL" +

"、PRODUCTS.CATEGORY AS CATEGORY_ID" +

"、CATEGORIES.NAME AS CATEGORY_NAME" +

"、PRODUCTS.TAXCAT AS TAX_ID" +

「製品から」+

「PRODUCTS.CATEGORY = CATEGORIES.IDでカテゴリを左に登録」+

「LEFT OUTER JOIN TAXCATEGORIES ON PRODUCTS.TAXCAT = TAXCATEGORIES.ID」+

「TAXCATEGORIES.IDの左外側税を課税= TAXES.CATEGORY」+

「どこ?(QBF_FILTER)」+

「ORDER BY CATEGORIES.NAME、PRODUCTS.NAME」);

report.addParameter( "PRODUCTS.NAME");

report.addParameter( "PRODUCTS.PRICEBUY");

report.addParameter( "PRODUCTS.PRICESELL");

report.addParameter( "PRODUCTS.CATEGORY");

report.addParameter( "PRODUCTS.CODE");

report.addQBFFilter(新しいcom.openbravo.pos.ticket.ProductFilter());



report.addField( "PRODUCT_NAME"、com.openbravo.data.loader.Datas.STRING);

report.addField( "PRODUCT_REFERENCE"、com.openbravo.data.loader.Datas.STRING);

report.addField( "PRODUCT_PRICESELL"、com.openbravo.data.loader.Datas.DOUBLE);

report.addField( "CATEGORY_ID"、com.openbravo.data.loader.Datas.STRING);

report.addField( "CATEGORY_NAME"、com.openbravo.data.loader.Datas.STRING);

report.addField( "TAX_ID"、com.openbravo.data.loader.Datas.STRING);



レポート;





フィールドをローカライズします



これを行うには、iReportに戻り、署名フィールドをテキストに置き換えて、式のローカライズ用に$ R {label.key}の形式の変数を指定する必要があります。 たとえば、レポートのヘッダーの場合、jrxmlテンプレートのテキストフィールドに値$ R {label.title}を設定します。



次に、このキーの値をproductsext_messages.properiesファイルに追加します。



 label.title=List of Products label.line.number=N label.product.reference=Reference label.product.name=Name label.product.price=Price label.product.vat=VAT label.product.TaxPrice=Price+Tax label.report.summary=Summary
      
      







基本言語として英語を使用してから、別の言語で翻訳を追加することをお勧めします。 たとえば、ロシア語の場合、 productsext_messages_ru.properiesファイルになります。



 label.title=  label.line.number=№ label.product.reference= label.product.name= label.product.price= label.product.vat= label.product.TaxPrice=+ label.report.summary= 
      
      







税金を再計算します



最初の部分では、データベースから直接税率を取得しましたが、アプリケーションからレポートを生成するときは、 TaxesLogicクラスの特別に設計されたgetTaxRateメソッドを使用して税率と税額を計算することをお勧めします。 これを行うには、テンプレートにTAXESLOGICパラメーターを作成します。





XMLテンプレートのパラメータータグ
 <parameter name="TAXESLOGIC" class="com.openbravo.pos.sales.TaxesLogic" isForPrompting="false"/>
      
      









これは、価格の計算時に呼び出され、レポートの日付に税率を直接受け取ります。これにより、特定の日付以降に税率が変化した場合にNORD POSの機能を使用してVATを計算できます。





報告日における税を含む価格フィールド
 <textField pattern="" isBlankWhenNull="false"> <reportElement uuid="1158eb51-5046-4b15-88f2-2456bac9eea1" x="425" y="2" width="84" height="32"/> <textElement textAlignment="Right" verticalAlignment="Top"/> <textFieldExpression><![CDATA[com.openbravo.format.Formats.CURRENCY.formatValue( new Double( $F{PRODUCT_PRICESELL}.doubleValue() * (1.0 + $P{TAXESLOGIC}.getTaxRate($F{TAX_ID}, new Date())) ) ) ]]></textFieldExpression> </textField>
      
      









また、この例では、金銭的価値のテンプレート自体のパターンの代わりに、アプリケーションパターンを使用して、すべての値の出力が均一になるようにします。



ロゴとQRコードを追加



また、レポートで外部クラスのメソッドを呼び出すことにより、親アプリケーションのさまざまなリソースを追加できます。 たとえば、NORD POSデータベースにはロゴ画像が保存されます。 SQLクエリを使用してレポートに挿入することはできませんが、イメージフィールド式から呼び出すことにより、 DataLogicSystemクラスのgetResourceAsImageメソッドを使用できます。

 com.openbravo.pos.forms.DataLogicSystem.getResourceAsImage("Window.SupportBy")
      
      





ロゴ画像ボックス
 <image scaleImage="Clip"> <reportElement uuid="5b7371fd-db3f-488e-80b2-1f2bc912703b" key="image-1" mode="Transparent" x="381" y="1" width="132" height="34"/> <box> <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <bottomPen lineWidth="0.0" lineColor="#000000"/> <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> </box> <imageExpression><![CDATA[com.openbravo.pos.forms.DataLogicSystem.getResourceAsImage("Window.SupportBy")]]></imageExpression> </image>
      
      









または、たとえば、JasperReportsにはサポートされているバーコードの中でQRコードがなく、 ZXingライブラリはNORD POSに統合されています。これを使用して、たとえばサイトへのリンクを含むレポート用のQRコードを生成できます。

 com.nordpos.device.util.BarcodeImage.getQRCode("http://nordpos.mobi")
      
      





サイトへのリンクのQRコードフィールド
 <image scaleImage="RetainShape" hAlign="Center" vAlign="Middle"> <reportElement uuid="425a36a5-4937-4551-8b26-8ffe7245f9f0" key="barcode-1" x="449" y="13" width="64" height="64"/> <box> <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <bottomPen lineWidth="0.0" lineColor="#000000"/> <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> </box> <graphicElement fill="Solid"> <pen lineWidth="0.0" lineStyle="Solid"/> </graphicElement> <imageExpression><![CDATA[com.nordpos.device.util.BarcodeImage.getQRCode("http://nordpos.mobi")]]></imageExpression> </image>
      
      









アクセスを構成する



最後のステップは、NORD POSからレポートへのアクセスを開くことです。 最初から、レポートのボタンをアプリケーションインターフェイスに追加します。 [設定]-> [リソース]で開き、BeanShellスクリプトMenu.Rootを見つけて、 MenuSalesManagementセクションにレポートパネルを追加します。

  submenu.addPanel("/com/openbravo/images/appointment.png", "Menu.ProductList", "/io/example/reports/productsext.bsh");
      
      







2番目のステップは、ユーザーグループのプロファイル内のレポートへのアクセスを許可することです。 [設定]-> [プロファイル]に移動して、リストから役割を選択し、XMLドキュメントのレポートにアクセスする権限を追加します。

 <class name="/io/example/reports/productsext.bsh"/>
      
      







それだけです。NORDPOSを再起動し、レポートパネルを開いて作成します。 これでNORD POSのレポートを作成するタスクが完了しました。







NORD POSでJasperReportsツールを使用してレポートを作成することに加えて、ラベルを作成し、表に記入し、グラフやチャートを作成できますが、この記事ではHabrの読者にこの基礎について伝えようとしました。 将来的には、もし興味があれば、サードパーティのライブラリを使用したことで登場したNORD POSのその他の機能についての話を続けたいと思います。 しかし、最初に両方の部分を最後まで読んだ読者の間で小さな調査をしたいと思います。



All Articles