2013年3月29日金曜日

エラー(Exception)のハンドリング方法 Webアプリ(Java)編

GeneXusではデータベースI/O時の予期せぬエラー(SQLException)はError_Handlerルールがサポートされていますが(エラー(Exception)のハンドリング方法 DB編を参照)、アプリケーション上の予期せぬエラー(Exception)はサポートされていません。

これはアプリケーション上の予期せぬエラー(nullポインタや0割りなどは)はバグの範疇でありデバッグした上でのリリースが前提となる。という事と、GeneXus言語としては昨今のExceptionを利用した論理的なエラーを通知する仕組みをサポートしていないためです。
(ジェネレート対象となる言語にCOBOLやRPGといったExceptionをサポートしていない言語があるため)


2013年3月27日水曜日

エラー(Exception)のハンドリング方法 DB編

データベースI/O時に発生する予期しないエラー(SQLException)をハンドリングするにはError_Handerルールを使用します。各オブジェクト(トランザクション/プロシージャ/Webパネル)に以下の内容を定義します。


2013年3月26日火曜日

HTMLヘッダーにあれこれ直接追加したいとき


現在GeneXusのメインのジェネレーターはWebジェネレーター(C#/Java/Ruby)です。すなわち実行時の画面はHTMLになるわけですが、GeneXusで標準に生成されるHTMLにないコード(タグ)を独自に埋め込みたい場合があります。例えば、HTML Document typeやMetaタグ、独自のJavaScriptなど。そういった場合のTipsです。

2013年3月22日金曜日

外部オブジェクトの使い方 : ストアドプロシージャ編その2


前回作成した外部オブジェクトを使ってストアドプロシージャを呼び出してみましょう。

2.外部オブジェクトの使い方

今回はWebパネルから外部オブジェクトを使ってストアドプロシージャを実行してみます。

2-1.変数の宣言

外部オブジェクトを使う場合には、変数を宣言しそのデータ型として外部オブジェクトを指定します。呼び出しに使うパラメータの変数宣言し、WebFormに配置します。


2013年3月19日火曜日

外部オブジェクトの使い方 : ストアドプロシージャ編その1

外部オブジェクトを利用する事でDBMSのストアドプロシージャを呼び出す事が可能になります。

例えば、以下のようなストアドプロシージャ(SQLServer)

CREATE PROCEDURE [sp_get_customer_id]
@p_country_id int,
@p_customer_id int OUTPUT
AS
BEGIN
SELECT @p_customer_id = max(CustomerId)+1 FROM Customer WHERE CountryId = @p_country_id;

RETURN;
END
をGeneXusアプリケーションから実行したい場合には

2013年3月17日日曜日

ビルド時に適用されるオプティマイズ(最適化)について

For eachコマンド(DBに対するクエリー)の記述に関して、ビルド時にGeneXusが分析した結果、生成するコードをオプティマイズ(最適化)するケースがあります。

For eachというとカーソルで結果セットをぐるぐるループしながら処理するイメージがあります。処理対象が数十万件を超えるとループ処理がネックになってきますが、オプティマイズ(最適化)が適用されると一回のSQLを実行するだけになり実行効率が上がるのです。

例えば、

2013年3月15日金曜日

エボリューション2 アップグレード3の新機能

GeneXus Evolution2(エボリューション2)は昨年リリースされたGeneXusの新バージョンです。目玉はスマートデバイスジェネレーターの搭載で、これによりiOS(iPhone/iPad)、Android、BlackBerryのネイティブアプリが開発可能になりました。

当ブログではまだエボリューション2の紹介をしていませんが(公開していないGeneXusの既存機能の解説記事がまだまだあるのですが、スマートデバイスジェネレーターに関しても平行して書いていきます)、既に正式リリースからアップグレードが2回行われており、この春には3回目のアップグレードがリリースされる予定です。(アップグレードとはWindowsのサービスパックと同じように主にバグフィックスが目的ですが新機能が含まれる場合があります)

GeneXusのメーカーであるArtech社のCTO がブログでアップグレード3の新機能を紹介していました。

Do The Harlem Shake & GeneXus Evolution 2 Upg 3

・サイドナビゲーション



Facebookでおなじみのナビゲーション(メニュー)がスライドして表示・非表示切り替わる機能です。設定方法は「Navigation Style」プロパティを「Side」に設定するだけだそうです。今まで横表示でのスプリットモードはメニューが常に表示されていたので、サイドナビゲーションで全画面表示が可能になるのは嬉しいです。


・UIエフェクトの強化



デモムービーでは映像一覧から映像への画面遷移がページめくりの様なエフェクトで描画されていますが、これをプログラミングではなくテーマの適用で実現できるようになっています。逆に言えば自分が開発しているモデルを一切変更せずにUIエフェクトの適用・変更ができる事になります。


・Google Analytics


アップグレード3はUI関する機能追加だけではありません。その一つがGoogle Analytics連携です。スマートデバイスアプリケーションをリリースした後で、そのアプリケーションに対してどういうアクセスがされているかを参照・分析する事が可能になります。これもプロパティにGoogle AnalyticsのIDをセットするだけで利用できるようになります。

デモムービーとしてアップされていましたDo The harlem Shakeというアプリケーションは既に Google PlayApp Store(iPhone/iPad用) に公開されています。是非インストールして体感してください。


2013年3月13日水曜日

イノベーションは情熱によって生まれる - enchantMOON見てきました

東京ビックサイトで行われたモバイルITアジアに行ってきました。

目当てはこれ


enchantMOONです。知らない方はこちら(UEIが仕掛ける「enchantMOON」の正体)を参考に。


以下、UEI 清水社長のセッションの要約です。(メモと記憶をたよりに書いてますので言い回しとか実際とは違っているかもしれませんがご容赦ください)

きっかけは(打合せの写真を見せて)打合せしている相手がノートパソコンを開いているのにノートにメモ書きをしいる。しかもパソコンは半開き(つまり使っていない)。結局、打合せが終わるまでパソコンを使わなかった。これは日常よく目にする風景。不思議→愚問なのか?


2013年3月12日火曜日

【News】株式会社ウイング - 奄美情報通信協同組合(奄美市)とシステム開発業務パートナーシップ締結

日本では老舗のGeneXus開発ベンダーである株式会社ウイングが奄美情報通信協同組合(奄美市)とシステム開発業務パートナーシップを締結されたそうです。

以下、ウイング社のプレスリリースより掲載

弊社ウイングと奄美情報通信協同組合は、3月8日奄美市役所にて、システム開発業務のパートナーシップ契約の締結を行いました。

調印式は市長立ち会いのもと、福山奄美情報通信組合理事長との間で滞りなく終了致しました。

福山様からの挨拶として、
「今までなかったチャンスを生かして奄美のIT産業の発展に尽くしたい」
「そのため継続的な仕事をウイングと一緒に進めて行きたい」
とのコメントを頂きました。

朝山市長も同様ですが、中央と仕事をすることで技術を習得し奄美の雇用を活性化したい。
そのための第一歩としてウイングとパートナーシップ契約のもと進めていくのは大変喜ばしいとのことでした。

今回の契約では、当社の保有する代表的な技術であるGeneXusの習得のため組合から2名が出向され、技術の習得後はまず組合員へ技術の伝達を行い、組合の中で技術者を育成することを目指します。また当社の受注した開発案件などについて組合へ業務委託し、組合各社で開発を行います。

GeneXusを通じて都心の開発案件が奄美市に回るようになる地方振興であり、GeneXusエンジニアを育成するという人材育成支援であり雇用促進でもあります。ウイング社の素晴らしい取り組みだと思います。

今後、ウイング社に限らず各GeneXusベンダーがこの様なパートナーシップを全国各地と結べるようになるといいですね。



ファイルオブジェクトを活用しよう

GeneXusを使っていると外部のファイルを追加するケースがあります。例えば、独自に作成したJavaScriptファイルやJQueryなどのJavaScriptライブラリ、Log4j.jarなどの各言語ごとのライブラリ、静的なHTMLファイルなどなど。

この外部で作成したファイルをどうやって管理・デプロイしていますか?恐らくファイル自体の管理(バージョン管理)はSubVersionなどのバージョン管理ツールを使っていると思いますが、GeneXusが生成・コンパイルしたファイルとのマージ・デプロイは手作業ではないでしょうか?

こんな時に便利なのがファイルオブジェクトです。ファイルオブジェクトはその名の通り、外部で作成したファイルをそのままオブジェクトとしてナレッジベースの中に格納します。




2013年3月10日日曜日

ローカル式の挙動に関するあれこれ

GeneXusのコードの中には、記述してあるコードの順序と実際に動作する時の順序(生成されるソースコードの順序)が違っているケースがあります。具体的にはFor eachを使わないローカル式がそれにあたります。


ケース1.ローカル式の条件に変数を使用している場合

あるコードブロック内にて変数の初期化後にローカル式がある場合、ローカル式が先に評価されるため、条件内の変数が未設定の状態で実行されます。

&CustomerId = 1
&Count = Count( InvoiceDate, CustomerId = &CustomerId )
//Countが先に評価されコンディション内の&CustomerIdの値は初期状態

ケース2.Newコマンド内にローカル式を記述した場合

Newコマンド(つまりInsert)が先に評価され、ローカル式の実行はInsertの後になります。結果として、ローカル式の結果をセットしている項目属性は未設定の状態で保存されます。
又、Newコマンドの外側でfor each以外のループ処理をしている場合(例えば、カウンタやコレクションによるforコマンド)、1回目のループでは未設定、2回目のループでは1回目の式で取得した値がセットされるという、ループ処理がずれた結果になります。

New
   Attribute1 = &val1
   Attribute2 = Max( Attribute2, Attribute1 = &val1) + 1
   Attribute3 = &val3
Endnew

ケース3.BC(ビジネスコンポーネント)を使ったInsertにローカル式を記述した場合

これは例外ケースです。BCの操作はDBアクセスと認識されないため(DBに対するI/OはBC内に隠蔽かされている為)、ローカル式が先に評価され、取得した値を元にBCを使ったインサートが実行されます。この場合は見た目と同じ挙動になります。

&BC.Attribute1 = &val1
&BC.Attribute2 = Max( Attribute2, Attribute1 = &val1)
&BC.Attribute3 = &val3
&BC.Save()


ケース1と2の対処としては、ローカル式を使用する部分をサブルーチンに分割する事により、明示的に処理の順序を指定することが可能です。

ケース1
&CustomerId = 1
Do ‘GetCountInvoice’ //サブルーチン呼び出し

//ローカル式をサブルーチン化
Sub ‘GetCountInvoice’
   &Count = Count( InvoiceDate, CustomerId = &CustomerId )
EndSub

ケース2
New
   InvoiceId = &InvoiceId
   Do ‘GetMaxDetailId’ //サブルーチン呼び出し
   InvoiceDetailId = &max + 1
   ProductId = &ProductId

//ローカル式をサブルーチン化
Sub ‘GetMaxDetailId’
   &max = Max( InvoiceDetailId, InvoiceId = &InvoiceId )
EndSub


2013年3月8日金曜日

GeneXusユーザー事例 : 三菱重工

ブラジルのサイトでGeneXusの事例として日本の三菱重工が掲載されていました。

Mitsubishi Heavy Industries integra Mainframe e SAP com GeneXus

Mitsubishi Heavy Industries integra Mainframe e SAP com GeneXus

A ferramenta garantiu produtividade e redução de custos
Salvador, 05 de março de 2013 – A Mitsubishi Heavy Industries (MHI) foi fundada em 1884 e atualmente possui mais de 30 mil funcionários, oito bases de operação, seis centros de pesquisa e desenvolvimento e 14 fábricas em todo o mundo. Em 2003, quando o GeneXus chegou ao Japão, a empresa começou a utilizar a ferramenta para integrar o sistema SAP e o sistema Mainframe e ganhou não só em produtividade, mas também na redução de custos.
O vice-diretor responsável pelo desenvolvimento de aplicações em sistemas Mainframe da Yokohama Engineering Center, da MHI, Kyoji Noda, explica que optou por GeneXus porque havia poucos engenheiros com conhecimento em Mainframe, os gastos para atualizar a tecnologia eram altos e também havia dificuldades para desenvolver novas tecnologias. “GeneXus é fácil de aprender, traz alta produtividade de desenvolvimento, é fácil de manter e evolui junto com a tecnologia, não se desatualiza”, destaca.

日本のGeneXusユーザー内では三菱重工の事例はかなりポピュラーですが、知らない人の為に過去に書いた投稿を紹介します。(プレゼンの取材記事です。プレゼンの具体的な内容はここでは書いていませんが予めご了承ください)

これは一昨年のGeneXus Day 2011の時に三菱重工の野田さんのスピーチの紹介記事です。

GeneXus Day 2011 Winterが開催されました


これは昨年ウルグアイで開催されたインターナショナルミーティングでの三菱重工の野田さんのスピーチの紹介記事です。
2012 GeneXusインターナショナルミーティング [その他のスピーチ]



2013年3月6日水曜日

2012年度 ジェネクサス・ユーザー会 最終報告会がありました

去る3月5日、ジェネクサス・ユーザー会 ユーザーサロン(勉強会) 最終報告会が開催されました。ユーザー会加盟企業から50名を超える参加がありました。

今年度、ジェネクサス・ユーザー会ではユーザーサロン(勉強会)を企画しました。参加者を5つの分科会にチーム分けし、それぞれ研究テーマを考えて一年間活動してきました。そしてその集大成として最終報告会が開催されたのです。

発表会の内容はここでは公開できませんが実装技術、ナレッジベースの管理、ドキュメントなどのテーマがありました。エンドユーザー・ベンダーそれぞれGeneXusを使っている立場で意見を持ち寄り議論し研究されていて、私も色々と勉強になりました。

ユーザーサロンは今年度初めての試みでしたので、各自いろいろと反省点ややり残した事もあるようですが、これも来年度に向けての糧となる事でしょう。

ともあれ、ユーザーサロンに参加された皆様、企画運営された理事会の皆様、そしてバックアップして下さったジェネクサス・ジャパンの方々、本当にお疲れ様でした。









2013年3月5日火曜日

Webサービス用外部オブジェクトのデプロイ

GeneXusにて外部のWebサービス・プロバイダーを呼び出すアプリケーションを作成する場合に外部オブジェクトを使用しますが、呼び出し先(Webサービス・プロバイダー)のURLは外部オブジェクトのプロパティに設定します。



しかし、実際にテスト環境や本番環境で動かす時には開発時のURLとは別のURLを指定しなければいけない場合がほとんどだと思います。GeneXusを使ってビルドを行わずに別のURLを指定する場合は以下の方法となります。


2013年3月4日月曜日

Webサービスを呼び出すアプリケーション(サービス・リクエスタ)の作成 その2

 2.外部オブジェクトの利用

前回作成した外部オブジェクトを使ってWebサービスを呼び出す画面を作成します。
Webパネル上にユーザーID、パスワードを入力項目として配置し、実行ボタンでWebサービス・プロバイダーを呼び出します。



2013年3月1日金曜日

OperaがWebKitに移行 - ブラウザ戦争の果てに

先日(2/12)、OperaがHTMLレンダリングエンジンを独自のPrestoから、SafariやGoogle Chromeで採用されているWebKitに移行すると発表がありました。

Opera Developer News - 300 million users and move to WebKit


一般の人にはなじみが薄いかもしれませんが、Operaというといち早くタブブラウザを採用したり、マウスジェスチャーや描画スピードの速さなど、通好みのブラウザでした。私も2000年〜2005年ぐらいまでは使っていたと思います。その後、FireFoxやGoogle Chromeなど新しいブラウザーが普及するにつれ段々と使わなくなっていきました。