カテゴリー
月別アーカイブ: 9月 2011
そんな事あるのね
現在開発中のAIRアプリも開発終了に近くなったので、そろそろ本格的にリモートサーバーへデプロイしようとしているが上手く行かない。 先に書いた方法で、デバッグレベルではリモートサーバでの利用が可能なのだが、リリースビルドの段階で引っ掛かる。 あれこれやってるうちに プロセスが予期せず終了しました。 invalid application descriptor: invalid application identifier なんてのが出るので、調べたら <!– A universally unique application identifier. Must be unique across all AIR applications. Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. –> <id>hoge_Application</id> のように、IDへアンダースコアを使うとエラーが出ると言う情報があった。 … 続きを読む
カテゴリー: Flash Builder, 仕事
コメントは受け付けていません。
ドラッグ可能なウインドウの時の工夫と注意
良く、検索画面や設定画面でTitleWindowなどを使ってポップアップウインドウを利用する。 この場合、ウインドウの位置をドラッグしながら他の操作も出来るようなウインドウの場合困ることがある。 一番簡単なのはウインドウ上でマウスダウンやアップするイベントを取り、dragStartを仕掛ける方法だが、ウインドウの中にTextIpnutなどの入力コンポーネントをはじめ、コンポーネントを配置しておいて操作するとそれを操作してもドラッグされてしまう。 この場合、TitleWindowの上端部にGroupなどの空のコンポーネントを置いて、そこでマウスダウンするとドラッグスタートと言う具合にする方法を使うと、他のコンポーネントの操作には影響されない。 問題は、その時に、その場所に来たらカーソルの形状を変えて手の形のハンドカーソルへ変えてユーザにパネルが移動できると知らせたりするとわかりやすいが、これはuseHandCursor=”true”だけでは実現できない。 これ以外に、buttonMode=”true” mouseChildren=”false”と言う二つのプロパティを設定する必要がある。 意外に、忘れていて「?」となってしまう。
カテゴリー: 未分類
コメントは受け付けていません。
帳票の悩み
業務用のWEBアプリをやると必ず「印刷」と言う要求が出てくる。 今開発中のアプリは、現状、客先がやっているのはWordの差し込み印刷と言うやつなので、それに対応するデータを出力すると言う方法を選択する予定だ。 これはこれで客がフォームを自由に作る事ができるので悪く無いと思うが、標準で自身のアプリから印刷と言う事を考えるとやはりPDFを利用するというのが最も簡単だろう。 以前はPDFlibを使っていたのだが、運良く僕はまだ安い時代だったから良かったが、ある時期から人の足元を見るように非常に高額な金額となってしまった。 その為、エンジニアはフリーのツールを探しているのだが、単にPDFで印刷と言っても決まったフォームで印刷したい場合、PDFlibで言う所のPPSが簡単なのだが、フリーでこれを実現できているのは無さそうだ。 PPSを利用するとAcrobatの拡張機能で既定のテンプレートPDFに対して位置を決めた出力範囲を設定して、その場所を名前で特定してPHPなどから出力できる為コードがシンプルになる。 座標系で出力する。と言うところまで我慢すれば、テンプレートを読み込めるものがある様で、今、調べているのがTCPDF+FPDIと言うもの。フリーだとこれが良さそうだが、これまでPDFlibのPPSを使ってきた経験からすると、座標系で管理するのは若干面倒と言う気がする。 座標系の場合、縦横の座標を指定して出力させるので、出力場所が多い場合などコードがわかりにくくなる。 PDFlibほど高価では無いが、PPSと同じことが出来そうな、Field Reportsと言うLL言語専用のPDF帳票開発ツールがあるようだ。価格からするとサーバへインストールするタイプで1/5程度の様だ。 この手のライブラリはそれぞれ使い方が違うので、一つ使いこなす為に調査・ノウハウを習得したら、他へはそう移行したくない。 フリーを使いこなすか、有償のツールを使うか悩むところだ。 これ以外にもExcelで出力する等、様々なアプローチはあるのだが、例えばAIRアプリから印刷する事を考えると完全にサーバへ依存するのも避けたい。 出来れば、スタンドアロンで印刷したいが、このAIRの印刷機能が、多少マシになったとは言え、まだまだ業務ユースで使えるレベルではない。 せっかく、PDFリーダーの定番のAcrobatを提供しているAdobe社の製品なのだから、この辺の機能が充実したらAIRももっと業務ユースで利用が広がるのにと思うのは僕だけだろうか。
カテゴリー: 未分類
コメントは受け付けていません。
selectionChangeの罠
DataGridなどでいずれかの行を選んで修正したり削除したりする場合、selectionChangeイベントを利用するが、処理をキャンセルした場合、行の選択状態もキャンセルしておかないと、データが1行しか無い場合に一度選択してキャンセルを行いもう一度選ぶと、当然だが、selectionChangeは発生しない。 その為、処理をキャンセルした場合は必ず selectedIndex=-1と言う具合に選択も解除しておく、これならば必ずselectionChangeは発生する。 うっかりしておくと見逃す処理だ。
カテゴリー: Flash Builder, 仕事
コメントは受け付けていません。
カスタムイベント
今更ながらだが、Flash Builderのカスタムイベントの使い方がわかってきた。 一般的にアプリケーションの構造が大きくなるとコンポーネント別に作っていき、ViewStack等を使って、機能別にコンポーネントを表示して動かすが、その場合、カスタムイベントを利用すると、子どものコンポーネント内の処理を他のコンポーネントや自身の次の処理へ繋げるなど、任意の処理のイベント終了を管理する事ができる。 例えば、Aと言うコンポーネントで、A1と言う処理(例えばデータベースのデータの更新)を行った後、Bと言うコンポーネントの別の処理、B1(例えばデータベースのリスト更新)を行いたいと言う場合に有効だ。 Aのコンポーネントのメタタグで <fx:Metadata> [Event(name="A1_END", type="flash.events.Event")] </fx:Metadata> と言うイベントを用意しておき、Aの中で必要な時に呼べば良い。 データベースの更新等場合、通常はCallResponderなどで戻りの処理を書くが、その場所で protected function A1_END_Handler(event:GridSelectionEvent):void { var eventObject:Event=new Event(“A1_END”); dispatchEvent(eventObject); } とすれば、これでデータベス更新が終わったイベントを親へ伝える事が出来る。 親から見れば、Aのメタタグで、A1_ENDと言うカスタムイベントを作成すると <local: A1 id=”Child_A1″ A1_END=”Child_A1_A1_END_Handler(event)”></local:driver_list> と言う感じでA1_ENDと言うイベントが参照出来るので、これに対して任意のハンドラを当てて、その中でBコンポーネントのB1と言う処理を行うメソッドを呼び出せば良い。 実際の処理はBコンポーネント内で書けば良い訳で、親は全体の管理をするだけで良い。 特にFlashBuilderの様に、イベントドリブンで非同期なアプリケーションの場合は何かの処理が終わる事を確実に把握しないと、値を読みに行った時まだ処理が終わってなくてエラーと言う場合が多々ある。 それも、テストの時は良かったけど、実機になると入っていた筈の値が入ってないと言う現象になったりする。 特に、データベス関連の処理をする場合は、一度の呼び出しで処理が終わら無い場合もあり、前の処理が終わって、次の処理をすると言う事が良くあるし、連続して他の処理を行いたい場合もある。 データを追加した後の、件数の更新などは一度で出来るが、リストの更新となるとその更新から戻ったタイミングでやる必要がある。 コンパイラ系のプログラムだと、その辺を気にしないでプログラム出来るのだが、この辺がFlash系のプログラムの面倒なところで、コンパイラ系から変わって少し複雑なプログラムを書く時に最初に戸惑う部分だ。 そう言う意味で、このカスタムイベントと言うのは、複数のコンポーネントに分けるような大きなプログラムを書く場合、非常に便利で、これを使うことで複雑な処理もスッキリ書ける。
カテゴリー: Flash Builder, 仕事
コメントは受け付けていません。