2014年5月16日金曜日

TypeScriptについて

 TypeScriptは、Javascriptの弱点を「JScript」のような良く似た別モノ扱いでなく、クロスコンパイルで、javascriptとなる言語である。

本家のサイト(英語)より、拾い読みすると

  • オープンソースである。 (Apache License Ver.2)
  • 型が利用できる。
  • クラス定義による実装ができる。

利用方法

 tsc hoge.ts と実行するとhoge.js が生成される。


言語仕様

 TypeScript Language Specification.pdf (2014/5/16では、Ver.1.0)


とても素敵な日本語サイト

 TypeScript クイックガイド

2014年4月27日日曜日

intra-martのルーチングと認可

 intra-martがAccel Platformになって、APIが変わりましたが、もっとも
大きな変化と思われるのが、このルーチングと認可です。

 これまでのサンプルプログラムをAPIを変えたら、チョチョイのパで、動くものと
思っていたら、pageディレクトリというエデンの園から、追い出されていたんですね。

 1.これまで通り、作成した画面をメニューから実行するパスの設定はあるが、このパスは、
   Webブラウザから呼び出すことのできる。外向けの「パス」で、サーバ内の
   ディレクトリとは、別の扱いとなった。

   その話しが出るたびに、web.xmlへクラスとパスの対応を全て書き込んだ
   javaのweb開発の初期の苦しい時代がフラッシュバックする。

 以下の個所を一読して、ルーチングの役割と、xmlによる設定方法を確認する。
  intra-mart Accel Platform / スクリプト開発モデル プログラミングガイド - ルーチング

 2.さらに、ここに「認可」を行って、初めて作成したプログラムの実行が行える。
   縦の機能と横の対象という表で、許可する/許可しないとするのは、非常に分かりやすい。

 以下の個所を一読して、認可の役割と、操作方法を確認する。
 intra-mart Accel Platform / スクリプト開発モデル プログラミングガイド - 認可

 3.でも1と2の間に、なにかなかったっけ?と気づきました。
   2の操作は、ルーチングテーブルに認可リソースが登録されていて、それを変更する画面ですので、そもそも登録されていないと、縦の機能の場所に、出てこないのです。

   これは、本当にまいりました。

 4.インターネットで、解決方法を探していたら、正式ブログで説明してました。
 ルーティングテーブルに認可リソースを設定しないで済ませる方法

 自動登録さまさまです。

<file-mapping page="sandbox/index" path="/sandbox/index">
<authz mapper="dev-auto-register">
<param key="auto-permit" value="true" />
</authz>

2014年4月13日日曜日

intra-martのDebug.writeで、オブジェクト記録を残す方法

 スクリプト開発で、大量の要素を含んだオブジェクトを調査したい場合、
(例:requestの内容やテーブル検索結果等)Debug.browse()を利用します。

 しかし、Debug.browseを実行してしまうと、そこで処理中断してしまうため、継続したその後の処理を解析できません。

 eBuilderによる開発中ならば、Debug.console()を利用することで解決できますが、そのような環境でない場合は、Debug.writeを使った、ファイル記録されると思います。
 Debug.writeは、文字列の出力専用なので、オブジェクトは使えません。

 そこで、オブジェクトをJSON形式の文字列に変換して解決できます。

 以下のようなコードで、Debug.consoleと同様の結果をファイル記録できます。

 Debug.write(ImJson.toJSONString(obj,true));

intra-mart FORMタグを利用したaction処理の解決方法

IMARTタグのformでは、同じ画面内や画面遷移の不要なサーバリクエストを呼び出す
action属性がありました。

IMARTタグのformが非推奨となり、htmlのFORMタグを利用すべきなのですが

その場合、IMARTタグで使っていたactionの処理をどうするのかが、良くわかりませんでした。

以下は、APIのaction属性の説明部分です。

------
属性 action は、このリンクにより intra-mart がコールされた際に、同ページのファンクション・コンテナ内に定義されている関数をリクエスト時に起動するための指定で、起動させたい関数名称を指定する事で可能になります。
action 関数の実行は、次に表示するべきページの作成処理(該当ページのファンクション・コンテナ内 init() 関数)よりも先に動作します。
------

しかし、htmlのFORMタグのaction属性は、遷移先のURLを設定する場所です。もちろんpage属性なんてありません。


解決方法1 hidden項目を作る

name="action" というhidden項目を作って、javascriptでサーバリクエスト(画面遷移)イベント発生時に、valueの内容を呼び出し関数名を設定する。

ファンクション・コンテナのinit関数で、それを受けて呼び出すという仕組みです。
function init(request) {
  if (request.action != undefined) {
    if (request.action === "insXxx") {
        insertXxx();
    }
    ...
}

解決方法2 ルーチングのPathVariablesを使う

以下の説明を見ると、ルーチングを使うことで、URLの最後のディレクトリ名を
パラメータとして扱えるようにできるようです。
intra-mart Accel Platform / スクリプト開発モデル プログラミングガイド

<file-mapping path="/webpath/bar/{action}" page="realpath/bar">

この場合は、サーバリクエスト(画面遷移)イベント発生時に、
formタグのaction属性の内容を
登録ボタン ... action="/webpath/bar/insXxx"
削除ボタン ... action="/webpath/bar/delXxx"

というよう設定することになります。

intra-martによるPOI利用方法 xlsxの場合

以前紹介したサイトのプログラムを実行して、intra-martから、
excelファイルを活用できるようになったけど、xlsファイルしか扱えない。

Microsoft Office 2003(2014年4月9日にサポート終了)の標準形式でなく、
xlsxを扱いたいのに… という方へ

こちらのブログに、解決方法が書かれています。
org.apache.poi_v3_8.* にpkg変更した「POI 3.8」を公開


そこを見たけど、分からなかった方へ、ちょっと補足します。

java開発では、プログラムの集合をパッケージという単位で管理します。

それをintra-martスクリプトプログラムから利用するために、Packagesを使用します。

こちらのプログラムでは、
Apache POIでExcelワークブックに画像を挿入してみる。

var workbook = new Packages.org.apache.poi.hssf.usermodel.HSSFWorkbook() ;

という箇所でした。

これを

var workbook2 = new Packages.org.apache.poi_v3_8.xssf.usermodel.XSSFWorkbook() ;

というように扱うことで、過去のxls用コードを利用しつつ、xlsx用のコードも
「共存」できるようになります。

※先日、最新のAccel Platformを初期インストールした際に、紹介されていた
パッケージ名のpoi_v3_8が含まれていることを発見し、就寝前の心配事が1つ解消されました。

具体的な、POIを使ったExcelファイルのプログラミングは、こちらが参考になります。
「Usermodel API」を利用したExcelファイルの基本操作


2014年3月8日土曜日

リッチクライアントのための道具箱

Javascriptしばらく遠ざかっていたら、すごいことになってました。
VMCをサーバーサイドで考えるのが普通だったので、目からウロコが
ぽろぽろです。


  • jQuery
    • 学習サイト jQuery (ozpa-h4.com)

  • Node.js
  • Meteor
    • 学習サイト Meteor (Gihyo.jp)
  • Javascript学習サイト(コードをその場で確認できる)



2014年2月27日木曜日

intra-martによるPOI利用方法

intra-martによるPOIのプログラムとして、非常に参考になりました。
ソフトウェア開発日記
http://lightgauge.net/intra-mart/script-dev/160/

でも一部、APIが変更になって、このままだと動かなかったので、修正しました。
以下がその記録です。

24 var exfile = new VirtualFile( strXlsFileName ) ;
⇒ var exfile = new PublicStorage( strXlsFileName ) ;