goo blog サービス終了のお知らせ 

Biz/Browserを愛でる会

我々が感動したことをみなさまに味わって頂きたい、それがBiz/Browserを愛でる会の原点です。(入会員募集!)

基幹システム開発者向け実践セミナー

2008-01-29 22:14:37 | プログラミング応用講座(佐藤)
Biz/Browserをやっている方、これから始める方にお勧めするセミナーです。

基幹システムのWEB化における

落とし穴に落ちないためのポイント


http://www.juas.or.jp/seminar/open/s07080.html

2月19日(火)10:00~17:00開催。
有料セミナーですが、Biz/Browserを実践レベルで広めていくためのものという位置づけで行います。
アクシスソフト様関係者の方もよろしければご参加下さい。
 


Biz/BrowserでSVG画像を使う

2008-01-25 10:19:35 | プログラミング応用講座(佐藤)
Biz/Browserは、V3の時代からSVGに対応しています。
SVG(Scalable Graphic Vector)とは、XMLで記述する画像データのことで、例えばCreative Vision.netの中ではフォーム背景にSVGを使っています。
また、SVGButtonクラスを使うと、より美しい表示が可能になります。
下の画像は、FormのBgPattern、SVGButtonを使った今年からリニューアルしたCV.netの画面です。



また、各プログラムの背景も、一括してSVGに変わっています。
下の画像はCV.netのCPAというもので、ユーザが自由に条件や表示項目、集計項目、ソート順を選んで、時系列で分析できるものです。



このように、システム全体のイメージを統一したいときに、個別のCRSファイルをメンテすると膨大な手間がかかります。
CV.netでは、最初にSatooDialogという共通クラスを用意していますので、その中で処理するだけでよくなっています。
    class SatooDialog extends Dialog{
        Array para;
        Function OnInit(init_para){
            if (Classsatoo.BgFlag ==1){
                var bgpat = ClassSatoo.FindChild(ClassSatoo.BgSvg);
                Classsatoo.FindFormObj(this,Classsatoo.BgColor, Classsatoo.FgColor, bgpat);

            }
            if (init_para != null &&init_para instanceof array){
                for(var i=0; i<init_para.length; i++){
                    para[i] = init_para[i];
                }
            }
            if (Classsatoo.SysTest==1){
                try{
                    var wrk_session = getHTTPSession();
                    var wrk_str = str(wrk_session.lasturl);
                    var v_pos = wrk_str.lastIndexOf("/");
                    if (v_pos >0){
                        wrk_str = mid(wrk_str,v_pos+1,wrk_str.length);
                    }
                    this.Title += " "+wrk_str;
                }
                catch(e){
                }
            }
        }
        Function Remove(){
            para.erase();
        }
        Function OnTouch(e){
        }
        Function OnClose(e){
            this.Delete();
        }
    }

Formと、TabFormの両方を見る必要があるため、別Functionで実際の処理は定義しています。(オブジェクトの子オブジェクトを辿って全てのForm,TabFormのBgPatternを変更)






ECサイトとBiz/Browserとの連動

2007-06-18 18:42:20 | プログラミング応用講座(佐藤)

Biz/Browserは有料であるため、BtoCで使う用途には不向きである。
そのため、通常はBtoCのECサイトは通常のHTMLで構築し、Biz/Browserとデータ連係させるという手法をとる。
例えばyahooや楽天のショッピングサイトを使うと、ECサイト構築はショッピングサイト側の機能で汎用的なものがほとんどそろっている。
一方、業務システムはHTMLでは不可能なので、Biz/Browserのほうが向いている。

「yahoo!ショッピングサイトとBiz/Browserの連動例」



上は、yahoo!ショッピングの中に構築したECサイトの画面である。

このECサイトとCV.netが連動している。商品マスタはCV.netで管理し、ECサイトからの売上情報をCV.netに取り込んで集計・分析を行っている。





このように、Biz/Browserの強みを生かした使い方をすることで、ユーザにとってもっともメリットがあるシステムを構築することができる。

http://store.yahoo.co.jp/shirt/

また、ECサイト連動の部分はある程度決まってくるので、上記のようなシステムを構築することで、例えばyahoo以外のECサイトでも同様に連動させることができる。


Biz/Browser Mobile(ベータ)

2007-04-03 16:21:34 | プログラミング応用講座(佐藤)

SODECへ向けて、Biz/Browser Mobileは大幅に進化している。
3/30には開発ドキュメントが「Bizの宝箱」に公開されたが、今度はBiz/Browser Mobileのデバッグ環境が提供されようとしている。
Biz/Browser Mobile3と同等の実行環境をWindows上で再現する「Biz/Browser Mobile3 for Windows」の開発が大詰めを迎えているのだ。

この「Mobile3 for Windows」はモバイル版でのデバッグ効率を大幅に高めてくれる。
いままではPCのDesignerでスクリプトを記述し動作チェックは全てPDA上でおこなう必要があった。それが、この「Mobile3 for Windows」を使うことによって論理的なデバッグ作業は全てPC上で完結する。デバッグが済んだスクリプトを最後にPDA上でチェックするだけでよくなる。



モバイル端末向けに、これだけ開発環境が整ったリッチクライアントは他にない。
Microsoftですら、モバイル開発環境はPCに比べればかなり貧弱である。

以前にもBlogで書いたように、Windows Mobileは去年、今年かなりの機種が発売されている。
アクシスソフト社として、マイクロソフトのモバイル事業部に「Biz/Browser Mobile」をなんとか紹介できないだろうか?
これだけ材料が整ってくれば、「Biz/Browser Mobile」モバイル開発環境として最強、最速のものとしてその地位を確立できるであろう。

また、「Mobile3 for Windows」は既存のモバイル端末に対応するだけではなく、端末プロファイルを変更することで、将来的なモバイル端末にも対応可能である。(現在は、画面サイズ、縦横切替等のみ。今後設定項目が増えていけばかなり役に立つと思われる)

現在「Mobile3 for Windows」はベータ版だが、Bizのパートナーであればアクシスソフト社の担当経由で手に入るはずである。

Windows Mobile5.0タイプのPDAで現在開発されている会社があれば、是非早めに「Mobile3 for Windows」を手に入れ、Biz/Browserでなければ作れないようなシステムを構築していって欲しい


CRSスクリプトのクラスについて(佐藤)

2007-03-26 12:16:42 | プログラミング応用講座(佐藤)
CRSスクリプトでは、クラスを定義して使用することができる。
ただし、このクラスは配列が使えないという制約がある。...GUIクラスに限り。。。
実は、非GUIクラスでは自分で定義したクラスを配列化して使うことができる
例えば、以下のように定義されたクラスがあるとする。

  class SatooLoadCSVTitle extends Record{ /* 帳票用のRecord(配列生成して使用)title,len,flag,type=A,N,D,format */
  String title;
  Number len;
  Number flag;
  Number col;
  String type;
  String format;
 }

これは、非GUIクラスなので、配列化して使うことが可能である。
ただし、
SatooLoadCSVTitle title_header[10];
というCRSスクリプトではエラーになってしまうので、以下のようにする。

    Append(new SatooLoadCSVTitle[], "title_header2");
   title_header2 << CSV{
    "在庫計上日"  ,10,0,3
    "取引区分"  ,10,0,4
    "仕入先"  ,8,0,5
    "仕入先名"  ,30,0,17
    "数量" ,8,1,6
    "単価" ,12,1,7
    "金額" ,12,1,8
    "関連商品CD" ,10,0,24
    "伝票NO" ,12,1,10
    "行NO" ,6,1,11
   };

 (if(!$DESIGNTIME){}の中に記述する)

このようにすることで、配列として定義したクラスを使用することができるようになる。


Biz/Browserのライセンスファイルの処理(佐藤)

2007-03-11 09:43:27 | プログラミング応用講座(佐藤)

「Bizの宝箱」に「ライセンスファイルに関するよくあるお問い合せ」という内容が載っていた。
ここに書かれてない内容について若干補足。

サーバライセンスをチェックするCRSスクリプトということで、以下のような内容になっている。


  if( sys.CLIENT_VERSION >= 4.1 ) {
        if( !HasConnectionLicense("
http://server") ) { 
            try {
                importConnectionLicense("
http://server/license.xml");
            }
            catch(exp) {
                MessageBox(exp);
                login();
            }
        }
    }

これはこれで問題ないのだが、"http://server"の部分をサーバURLが変わるたびに書き換える必要がある。(厳密なチェックをするという意味ではアリかもしれない...)

CV.netでは、サーバURLが変わっても問題ないよう、以下のようなCRSスクリプトを使用している。
[menu.crs]


String Version2="20061215";
Number Version2Clear=0;
if (//.sys.CLIENT_VERSION >= 4.103){
 if (!HasConnectionLicense("
http://"+//.sys.Server+":"+str(//.sys.Server_port)+"/")){
  try{
   if (!HasConnectionLicense("
https://"+//.sys.Server+"/") &&!HasConnectionLicense("http://"+//.sys.Server+"/")){
    ImportConnectionLicense ("License.xml");
   }
  }
  catch(exp){
   MessageBox(exp);
  }
 }
}

if ( !$DESIGNTIME ) {
 //.Get("menuver.crs");
 if (VersionCache!=Version2){
  //.DeleteCache();
  var fs = new FileSystem(FileSystem.PUBLIC_ROOT);
  if (fs.isdirectory("/CvnetManual")) {
   try {
    fs.deletefile("/CvnetManual");
   } catch (ex) {
   }
  }
  //.Version2Clear = 1;
  //.Messagebox("キャッシュをクリアしました。");
 }
 if (//.Version2 == null) //.Append(Version2,"Version2");
 if (//.VersionCache == null) //.Append(VersionCache,"VersionCache");
 if (//.Version2Clear == null) //.Append(Version2Clear,"Version2Clear");
 //.Get("menu_next0.crs");
 //.Get("menu_next.crs");
 Function OnException(e){
  MessageBox("エラーが発生しました。"+e.message+"\n"+str(e.SourceURL)+"\n"+str(e.sourceOffset),"エラー"+str(e.method)+" "+str(e.code),$OK);
 }
}
[MENUVER.CRS]
String VersionCache="20061215";

キャッシュ処理とグローバルエラーハンドラ、マニュアルの自動更新の部分が下に入っているが、ライセンス処理は最初の15行ぐらいの部分で行っている。
(//.sysオブジェクトを使うことで汎用的に使えるようにしている)
(また、バージョンチェックが4.103以上になっているのは、Ver4の初期バージョンはライセンス関連の処理がうまく動かなかった時代の名残り)

若干脱線するが、//.SYSオブジェクトをうまく使うことで、クライアントの端末バージョンなどの管理を行うことができる

CV.netでは、上の画像のように、OSバージョン、コンピュータ名、ユーザ名、Bizバージョンなどの情報を端末から取得することで、誰が、いつ、どの端末からLOGINしたのかを管理している。
(2008年会計年度から始まる内部統制では、こういうアクセス情報の管理は必須となる)
こういった管理をしておくと、Biz/Browserのバージョンが上がり端末をバージョンアップしたいときなど(直近ではIE7やVista対応のとき)、ユーザがちゃんとBiz最新版をインストールしているのかどうか一目瞭然である。


Biz/Browserでのマスタ選択画面の作り方(佐藤)

2007-03-05 10:04:38 | プログラミング応用講座(佐藤)

例えば、下の画面は仕入入力画面(CV.net)で、仕入先を入力する項目がある。



この項目に対し、仕入先を選択入力できるようにするのに、
1.ComboBoxで選択させる
2.Dialogを表示して選択させる
2通りの方法が考えられる。
CV.netでは、ユーザの要望に応じて両方対応させるために、フラグを用意し内部で処理を分岐させている。
さらに、共通ルーチン(cvnet.car)内部にクラスを持つことで、共通化させている。
---------------------------------------------
/* Dialogで選択する場合の処理 */
   .....(中略).....
    Get(dia);
    var wrk_para = v_obj;
    if (v_obj instanceof ComboBox){
     wrk_para = split(v_obj," ",0);
    }
    var child = FindChild("SubDlg_Sel");
    if (child == null) {
     child = FindChild("SubDialog");
    }
    child.OnInit(v_mstname,new array(wrk_para),v_para2);
    return;
   .....(中略).....
/* Comboboxで選択する場合の処理 */
      if (v_obj instanceof ComboBox){
       wrk_para = split(v_obj," ",0);
      }
      if (i==0){ 
        ret_csv = Cvnet.AspxSqlQueryMst(v_mstname,new array(wrk_para),v_para2);
      }
      if (v_obj instanceof ComboBox){
       v_obj.ComboItem1.truncate();
       ret_csv.clearColumnName();
       v_obj.ComboItem1<< ret_csv;
       if (v_obj.findChild("para")!=null){
        v_obj.para.clear();
        v_obj.para << ret_csv;
       }
      }
   .....(中略).....
---------------------------------------------
Biz/Browser V3からV4になるとき、Classの概念が導入されたが、それによって大幅に開発効率が向上した。ロジックや外見を共通化させることが簡単にできるようになった。

近日中にさらなるバージョンアップがあるが、さらに便利なClassがいくつか追加されるようである。
また、既存のClassも、マイナーバージョンアップ毎に細かい修正が加わっており、使い勝手と動作の安定性も高くなってきている。

これら標準提供のClassを使いこなすことによって、開発効率は大幅に上がっていくようになる。

---------------------------------------------
(現在の要望項目)
・FlexItemクラスに表示/非表示を定義させてほしい。
(現在は、Width=0;Title=nullにしているが、カーソルが止まってしまうので不自然)
・FlexViewクラスのSortメソッドで複数列を指定できるようにしてほしい。
(現在は、裏でダミー列=複数列のデータ項目を連結させた文字列を保持、によって擬似的にソート)

などなど。。。



HTMLドキュメントエクステンションについて(佐藤)

2007-02-09 15:29:15 | プログラミング応用講座(佐藤)

Biz/Browserにも、ユーザが作成したDLLを組み込む機能があるが、開発時にも同様に、DLLで機能拡張することができるようになっている
(Ver4.1.3.2から。現在のバージョンは4.1.3.3)
このDLL拡張機能を使ったものが、「HTMLドキュメントエクステンション」である。

CRSファイル内のコメントとHTMLで記述されたテンプレートを組み合わせることで、CRSの簡易HTMLドキュメントを作成することができる。
(1CRSファイル=1HTMLファイル)

出力されるドキュメントの元になっているテンプレートは通常のHTMLファイルなので、出力フォーマットを自由にカスタマイズすることが可能である。

プロジェクト内のCRSファイルの一通りの内容が出力できるので、受託開発型でBiz/Browserを使っている企業にはとても便利な機能である。

また、DLL拡張機能は使い方によっては非常におもしろくなる。
例えばBiz/BrowserのVBコンバータという某商品があるが、これをDLL拡張に対応することで、あたかもBiz/Designerの標準であるかのように組み込むことが可能になる。



(雑記)
先日片貝さん経由の相談で、あるBizパートナーさんに技術提供することになった。
DTPとしては無償で提供するので利益はないのだが、「愛でる会」の活動としては、こういう形でつながりができるのもよいかと思う。

これもまた、「愛でる会」の活動の一環ということである。


Biz/BrowserがVistaで動作するメリット(佐藤)

2007-02-07 17:46:45 | プログラミング応用講座(佐藤)

1/30にWindows Vistaが発売されてから、1週間ほど経過した。

一般の家電量販店を見ると、すでにVista搭載モデルが主流でXPモデルは在庫品処分の扱いになっていた。
ということは、BtoCのソリューションを展開している企業は、Vista対応をせざるを得ない状況にあるということだ

Biz/Browserは企業向けブラウザという売りだが、Bizを使う企業でBtoCもやっているところも少なからずある。
また、これからBizの導入を検討している企業にとっては、新しいOSに対応しているかどうかは選定の重要ポイントになる

また、Biz/Browser(3Tierアプリケーション)の本当の競合は、CurlやFlexではない。クライアントサーバ型のアプリケーションである。
既存のVB、COBOL、Delphi、dbMAGIC等のクラサバ型ツールで作ったアプリケーション、ここをリプレースすることで巨大な市場が生まれる

極論すれば、アプリケーションの一部のWeb化はCurl、Flex、Ajax、HTMLなどどれを使ってもできる。しかし、既存のクラサバアプリケーションの全面リプレースは、これらWeb型ツールでは事例がない。(少なくとも公式には出ていない)

CV.netでは、既存のクラサバで動いている基幹業務を全部リプレースさせて数十社導入してきた。
ユーザにはクラサバを遙かに凌駕するパフォーマンスを実感してもらい、満足されている。
(台数が多くなっても遅くならない、回線スピードに依存しない、どこからでもアクセスできる、クライアントのインストールが簡単になったなど)

SODECなどで業務アプリケーションが全部Biz/Browserで可能であるということをユーザに実感してもらえれば、クラサバからの移行がより進むであろう。

上に上げたようなクラサバ型開発ツールは、Vistaが出てきたにも関わらず、ほとんどが対応できていない。実際にこれらツールは、XPになっても2000互換モードでやっと対応してきた。Vista上でも互換モードで検証しているだろうが、それではあまりにも古すぎ、時代に合わなくなる。
また、過去のクラサバ型のツールは開発エンジンにしろ、実行エンジンにしろ非常に高価であった。

このようなことから、Vista登場を契機として再び基幹系アプリケーションの見直しが行われていくであろう



(追記)
Biz/BrowserとFelicaを連動させるツール、CvnetFelica.exeですが、Vistaでの動作確認がとれました。
http://www.dtpnet.jp/download/CvnetFelica.exe
MD5チェックサム
(308bd9c93b5cc2884af4ef2280cad5ea  CvnetFelica.exe)
236 KB (241,664 バイト) Win2K,WinXP,WinVista用


SonyのFelicaドライバ(パソリ)も1/29にアップデートされています。Vista用Felicaドライバはここからダウンロードしてください。
Felicaドライバは、XPのときにはx64エディションには未対応だったのですが、Vistaではちゃんとx86、x64両方に対応しているようです。




【Bizの宝箱】 サイト更新について(佐藤)

2007-01-25 20:05:52 | プログラミング応用講座(佐藤)

さきほど気がつきましたが、1/23,1/25と更新されていたようです。
この「Bizの宝箱」にはバージョンの更新情報があるので、定期的にチェックしています。
バージョン情報は、PrintStreamの若干の更新があったようです。
プレビュー時の不具合修正、PDF生成時1レコードもない場合の不具合修正etc細かいアップデートがありました。

また、以前私のほうからあげていた「ダウンロードのドキュメントを最新にしてほしい」という要望が受け入れられたようで最新になっていました!ありがとうございます。

それよりも、一番驚いたのは、Bizのサンプルのレベルが以前と比べものにならないぐらい上がっていることです。
いくつかあるうちの1つ、FlexView2をダウンロードして動かして見たのですが、すごく実用的な作りになっています!

(Biz宝箱 FlexView2サンプルの画面)


ソースもざっと確認してみたのですが、実に理にかなった作りになっていて、かなりのBiz経験値の高さが感じられる作り方でした。(^_^)
例えば、
  var csvobj = new CSVDocument;
  csvobj.Get( "BB_Data.csv" );
 ......
  csvobj.clearColumnName();
  csvobj.setColumnName( 0, "FlexIndentLabel1.Data" );
  csvobj.setColumnName( 2, "FlexIndentLabel1.parentKey" );
  csvobj.setColumnName( 3, "FlexIndentLabel1.value" );
  csvobj.setColumnName( 4, "FlexLabel1" );
  csvobj.setColumnName( 5, "FlexLabel2" );
  FlexView1 << csvobj;

この部分。
前にこのBlogでもふれましたが、CSVDocumentで列名をつけるといろいろよいことがあります。このソースでは、列名をセットすることで、FlexView1へのCSVDocumentの読み込みを1行で済ませることができています。
これ、列名をセットしないとループで回さないといけなくなるので効率的なコードです。

また、StyleEditの
 SetKeywordStyle(0, "[0-9a-z_.-]+@[0-9a-z_-]+.[0-9a-z_.-]+", StyleEdit.REGEXP + StyleEdit.NOCASE+ StyleEdit.HOTSPOT, $BLUE);
  SetKeywordStyle(1, "http[s]*://[0-9a-z_/.-?=&~#%:]+", StyleEdit.REGEXP + StyleEdit.NOCASE + StyleEdit.HOTSPOT, $BLUE);
  SetKeywordStyle(2, "^>.*", StyleEdit.REGEXP + StyleEdit.NOCASE, $DGREEN);
この部分。
SetKeywordStyleをちゃんと正規表現で設定していますし、オプション設定も正しく設定されています。
StyleEditクラスは、SetKeywordStyleを設定することで、簡単に複数行の文字列をきれいに表示することができます。
また、正規表現は使ったことがない人にとってはとっつきにくいものかもしれませんが、上の数行でどんなメールアドレスやURLでも、正しく表示orイベント処理することができるようになります。

FlexViewあたりのコードも、無駄がなくきれいに記述されています。
いろいろあるのですが、効率化で重要なポイントを1つ説明すると、
FlexView FlexView1{
...
  Function OnClicked(e){
   if( e.ctrlKey ){
    if( e.row.FlexIndentLabel1.BgColor == ^.PrintLine ){
     e.row.FlexIndentLabel1.BgColor = $STD;
     e.row.FlexLabel1.BgColor = $STD;
     e.row.FlexLabel2.BgColor = $STD;
    ...}
   }
}
この部分。
OnClickedイベントは、FlexLabelやFlexIndentLabelなどのクラスで発生するのですが、OnClickedファンクションの定義はFlexView直下でしています。
これが正しいやり方で、私はFlexViewのイベント関数や独自関数などは基本はFlexView直下にすべきだと思っています。
デザイン画面から定義しようとすると、各FlexLabelやFlexIndentLabelなどにOnClickedを作成することになります。しかし、それでは複数のオブジェクトに同じような処理を定義することになります。
ゆえにイベント伝播の原則(これもBizにおいては重要な概念)により、FlexView直下に1つだけ定義します。

他のサンプルはまだ見ていませんが、FlexViewをこれだけ理解されているので、おそらく非常によい出来になっていることと思います。

Bizのテクニック等で悩まれている方がおられれば、是非新しくアップされたサンプルを参考にされることをオススメいたします!