2012年5月30日水曜日

【SVF】SVF for PDFラッパークラスの使い方

前回の続き。
前回紹介したラッパークラスには、DataTableを渡すとルールに従ってズバーッと出力してくれるメソッドを用意していますが、肝心のルールについて記載していませんでした。すいません。

帳票設定サンプル

SVF Designer で SVFの帳票定義ファイル(以下、様式ファイル)を作成するとき、DBから取得したデータをセットするフィールドは、以下のルールでフィールド名を付けます。

フィールド名と、データを取得するSQLの列名を一致させること。

この後で挙げるSQLのサンプルと合わせて見ていただきたいのですが、例えば上記のような様式ファイルを作成して、フィールド名は以下のように設定したとします。
商品名 PRODUCT_NAME
単価 PRICE
数量 NUM
単位 UNIT
小計 LINE_TOTAL

この場合、この様式ファイルに対してSQLは以下のように書きます。

出力するデータを取得するSQLサンプル

DBから印刷対象を取得するSQLのルールは、(様式ファイルのルールと同じことですが)取得結果を格納しているDataTableの列名が様式ファイルのフィールド名と一致することです。

例えばこんな風に、SELECT文の取得項目に対して「AS」で列名を(様式ファイルの定義に合わせて)定義します。
SELECT
    M.PRODUCT_NAME
    ,M.PRICE
    ,T.NUM
    ,T.UNIT AS UNIT
    ,M.PRICE * T.NUM AS LINE_TOTAL
FROM
    T_ORDER T
    ,M_PRODUCT M
WHERE
    T.ORDER_NUMBER = :ORDER_NUMBER
AND T.PRODUCT_ID = M.PRODUCT_ID

このように、様式ファイルのフィールド名と、データを取得してくるSQLの列名を一致させておけば、勝手にラッパークラス側でマッピングして出力してくれます。わぉ。

これちなみに、究極的にはDBのテーブルの列名と様式ファイルのフィールド名を完全に一致させておけば、
SELECT * FROM ~
でいけてしまいます。
あ、SQLの整形とC#用のコード化は、こちらをどうぞ(宣伝)。
「SQLフォーマッター For WEB」で整形したSQLをStringBuilder化するブックマークレットを作りました

ラッパークラス利用のサンプル

というわけで、とりあえずの使い方サンプルコード。サンプルなので、普通のMainメソッドを持つクラスです。

サンプルコード


DBからデータを取得してDataTableに格納する部分は「こんな感じで」っていうサンプルなので、DB無しで動きを確認したい場合は、以下を参考にDataTableオブジェクトを手動で作って試してみてもいいかと。
C#学習メモ)DataSetに手動で値を設定する方法(C#)


さて次回は、ASP.NET MVCにおいて、大量の帳票印刷PGを効率よく書くためのサンプルについて書いてみようと思います。

2012年5月28日月曜日

【SVF】SVF for PDFをC#で利用するならラッパー的なクラスを作るのが吉

ウィングアークさんが販売している(開発元はこっち)帳票作成ツール「SVF for PDF」を使った開発を行ったので、得たこと、知ったこと、Tipsなどを順次公開していきます。

対象読者

このシリーズ(シリーズ化するぞ!という気合を込めて)は、以下のような方々に少しでも役立てば…と願いつつ、時間があるときに少しずつ書いていきます。
  • C#、ASP.NET MVCについて基本的な知識がある方
  • SVFマニュアルのJavaサンプルコードは理解できたけど、さぁC#でどう作ろう?という方
  • SVFの技術情報はWEB検索してもほとんど出てこなくて、毎回サポートに問い合わせないとダメだから面倒!という方

開発・実行環境

WEBサーバーOS Windows Server 2008
WEBサーバー IIS 7.5
APフレームワーク ASP.NET MVC 3
帳票サーバーOS Cent OS 5.6
帳票サーバーJVM Sun Java SE 6
SVF SVF for PDF 9
IDE Visual Studio 2010
※当然DBもありますが、SVFとDBが直接触れることがないので(DataTableクラスとかを対象にするので)割愛。


C#でSVFを利用するならラッパークラスを作れ

C#で SVF を利用するには、(当然ながら)SVFのDLLを参照設定してやります。
で、ここに含まれるAPIをC#から直接呼んでもいいんですが、厄介なのは、APIの各関数が終了状態を戻り値として返してくるってところ。
せっかく素敵な例外機構を持っている言語で利用するのであれば、やっぱり呼出元でちまちま戻り値判定するよりは、サクっと例外処理でまとめてしまいたいですよね。

というわけで、API側でエラーになった場合は例外をスローする、というラッパークラスを用意しておくと便利です。

また、関数によっては「エラー」コードと「警告レベル」のコードを返してくるものもあるので、例えば「警告レベルのものは無視しておk」みたいな設定もラッパークラスに対して行えるようにしておくと、さらに便利ですよね。ね?

さらに、DBから取得したデータを保持させているDataTableオブジェクトをポイっと渡せばルールに従ってズバーっと出力してくれるようなメソッドがあると嬉しいですよね。ね?

サンプルソース

上記の要件をまとめたのが、こちらです。
(例によって宣伝も兼ねてCode 2 HTMLにて公開)

サンプルソース

このサンプルソースでは、新たに作成したSVFExceptionという例外をスローするようにしています。
取り急ぎ試したい方は、これを全部普通のExceptionクラスなりに変更して使ってみてください。
(ちなみにAPI内部で致命的な例外が発生した時は、SvfrExceptionだったかな?そんな名前のExceptionがDLL側から投げつけられます)

で、このクラスを使う側のサンプルコードですが、それはまた次のエントリーで…。

2012年5月27日日曜日

【読書】デザインの輪郭

デザインの輪郭 最近はWEBアプリにしろスマホのアプリにしても随分とUI/UXが重視されるようになっていて、昔からPCのシステムやアプリの画面の使い心地の悪さをどうにかしたいな、と思っていたボクにとって、この流れはとても自然だし、ほとんどの人がやはりそう思っていたから、そういう潮流になっているんでしょう。

ただ、自分が日頃目にしているシステムやアプリの画面を見ていて、以前に比べて洗練されているとはいえ、それでも、生活の中で心地良く使うような椅子や時計や靴などのプロダクトに比べてまだ使い心地が自然じゃないような気がして(※)、ではその違和感というか、自分が考えているものとの距離は何なんだろう、と思い、デザイン論の本を読むことにしてみた。
(※その点、facebookはデザイン会社を買収しながら絶えず細かな修正を行なっていてスゴイと思う)

そこで選んだのがこの本で、2005年発刊なので少し古いけど、結果的に、個人的にはものすごく大当たりな本だった。
現に、ボクと同じような感覚で引っ掛かりがありそうな何人かの方には強くお勧めしたし、読書好きな恩師に、おこがましくも送りつけたりもした。


この本の、何がすごいかと言うと、著名な現役工業デザイナーである著者、深澤直人氏の、とても感覚的で観念的で抽象的なデザイン観が、丁寧に紡ぎだされた言葉を重ねていきながら、見事に読み手の中に植え付けてられてしまうところ。


正直に言うと、デザイン論本を本屋で物色している中でこの本を手に取り、冒頭を立ち読みしている時は、あまりに観念的な話で頭の上に「?」がたくさん並んだんだけど、それでも著者自身が冒頭、「はじめに」の出だしで
これは、私のひとり言のようなものである。
デザインという抽象を語るときには、私と読者がひとつの像を共有しておかなければならないと思った。さもないと私の言葉はあまりに観念的で、しかも脈絡なくあちらこちらに飛び回るので、読者を混乱させてしまうと思ったからだ。
と始めてくれており、とても丁寧に語り進められるので、読み手としても感覚的に読み進めてもいいのかな、という感触のもと、合間で具体的なプロダクトの例や学生のワークショップで教える時の話、俳句、写真家との対談などもあったりして、実のところスイスイと読んでしまうことが出来た。

スイスイと読み終えた結果、自分が漠然と感じていたことが少しクリアになり、かつ第一線で活躍する現役デザイナーのデザイン観を感じ取ることができ、読後感が非常に気持ち良い。さらに、その状態でもう1度最初から読みなおしてみると、「ははぁ、う~ん、なるほど!」と、一読しただけでは「?」だった部分が急に納得ポイントになっていたりする。

これからもボクはいろいろとアプリやシステムを作っていくと思うんだけど、本書で得た知見、感覚は、間違いなく役に立つと思う。
この本、引用しながらの感想文はとても難しいので、印象的な文章をいくつか抜き出しておくにとどめます(たぶん、読む度に抜き出すポイントも変わってくるんだけど、とりあえず)。

P.16「01 デザインの輪郭」
デザインの輪郭とは、まさにものの具体的な輪郭のことである。それは同時に、その周りの空気の輪郭でもあり、そのもののかたちに抜き取られた、空中に空いた穴の輪郭でもある。その輪郭を見いだすことが、デザインである。周りの空気とは環境のことで、それは人やものによって成っている。デザインの輪郭を見いだすということは、ものの輪郭をみるというよりはむしろ、環境の穴の輪郭を見いだすといった方がいいかもしれない。

P.26「02 選択圧」
デザインは、生き残るということが目的ではない。製品をできる限り長く生き続けさせるためにデザインをするということは、力の誇示ともとれる。その境遇における調和したものの立場が持続すれば、結果として長く生きることはある。他を生かして自ら朽ちることをよしとすることも、デザイン上の配慮である。デザインをつくり込むということは、そのものが生きながらえる安定した調和を邪魔する要因を取り除いていくということである。適合度(Fitness)を高めるということである。すべて、状況における調和である。

P.32「03 張り」(この項はとても重要)
張りは、輪郭の力のことです。

P.45「04 考えない」
幅七ミリ程の目地と同じような溝を、玄関の隅に壁から10センチ程離して壁と平行に引けば、傘立てになると思った。訪れた客は傘立てらしきものが見当たらないので、その溝に傘の先をあてて立てるだろう。私は傘立てをデザインし、客は結果的に傘を立てるという目的を達したことになる。しかし、そこにはよくあるような、円筒のような傘立てらしき物体の存在はないということだ。デザインは存在し、目的も達しているが、物体は消える。これは「行為に溶けるデザイン」ということだなと思った。

P.59「05 行為に溶けるデザイン」
最初に見たときに、そのかたちの意味がよくわからないというのがいいと思う。何かあたりまえのことをしていて、それが立ち現れてきたときに、「あれ?」・・・「!」となるのがいい。もちろん本当にそのものが溶け込んでしまっているわけだから、その存在すら気づかずに通りすぎてもいい。意識の中心に置かれるものは、気づかれることを目的にしているわけではない。気づいた人はちょっと微笑み、気づかなかった人は行為が止まらず流れていくということでいい。

P.88「07 ふつう」
買うときと使うときでは、また違うんです。人はものを買うときの期待値としては、ふつうを求めていないんです、わざわざお金を払うからです。でも生活に戻ったときに急にふつうを期待するわけですよ。結果的に生活の中に個性的で、突出したものがあふれるんです。自分で選んだのに。「ふつうのものを探すのが大変だ」という声をよく聞くじゃないですか。ないんですよ、そういうものが。だから僕は、ふつうのものをつくりたいと思ってしまうんです。

P.103「08 そのものの周り(外側を見る)」
小泉 僕は、レンズとものの間の空気を撮りたい。(中略)そのものを見ると、そればっかり撮りたいという気持ちになりがちですが、でも実際にはこの間(ま)があって、それがこのものをよくしていたりすることがあるんです。
深澤 見えてないんだけど、間が見えるといい。
山口 俳句でいわれたのは、いいたいことをいうのではなくて、いわないことをいうために17文字を使うんだっていうこと。17文字でいえることではない、17文字以外のことをいうために、17文字を使うんだといわれたことがあって。

P.196「26 アイデアとエクスキューション」
デザインというのは、アイデアとエクスキューション(出来映え)の両方が揃ってできることです。

アイデアは寿司で、エクスキューションは醤油のようなものです。
寿司を食べていると思っても、醤油がないと料理として成立しない。
本当は醤油がデザイナーの力だということです。
寿司の味を引き立てても表には出ない。

P.217「情報と経験」
礼儀がないとか、マナーが悪いとか、だらしないとかいうことは、
精神的なことよりも、関係性が見えない、
インタラクションの欠如だと思います。
相手が動いたらこう来るというような。自分がやったことに対して、周りの環境がどう変化するかということのセンサーがまったく働かない。
タバコを吸っていて、
後ろを歩く人は煙たいということがわからないことのように。
音のうるさいバイクのように。
インタラクションの欠如はインテリジェントに見えない。
センサーが弱いんです。

デザインも同じで、環境に対して、
この机はどうあればいいのかということは
経験から割り出されてくるものです。
それによって「このテクスチャーがいいよね」と決まっていく。

P.281「39 もてなすということ」
手をできるだけ加えないようにするということは、掃除したときに、きれいすぎるときに客をよぶということは失礼な話で、掃除してそれが少し落ち着いてから来ていただくとか、そこまで考えてないといけないみたいな、たまたまそこに水を打って、それが乾き始めた頃にお客がちょうどみえるとか。タイミングをケアすること自体が、人をもてなすということだから…。

P.282「40 自分を決めない」
自由であるということは、細胞しか鍛えていないということです。
何をするためにその筋肉を鍛えるかじゃなくて、
単に「鍛えている」ということです。
そうすれば、どんなゴールにでも行ける。


デザイナーさんだけじゃなく、モノをつくる人、企画する人にお勧めの一冊。

「デザインの輪郭」深澤直人(著)/2005年
デザインの輪郭