ラベル Evolution2:エボリューション2 の投稿を表示しています。 すべての投稿を表示
ラベル Evolution2:エボリューション2 の投稿を表示しています。 すべての投稿を表示

2017年4月14日金曜日

デプロイメント方法 - .net webアプリケーション版

以前(といっても8年前になりますが・・時が経つのは早い・・)、.net webアプリケーションのデプロイメント方法の記事をアップしていましたが、リンク切れしていたり、情報が古くなっていましたので、改めてアップします。


.netジェネレーターの場合、デプロイメントツールは標準でインストールされていません。エクステンションモジュールとして追加インストールする必要があります。

1. デプロイメントツールのダウンロード

GeneXusマーケットプレースで公開されています。ダウンロードするためにはGXTechnicalアカウントにてログインが必要です。


CSharp XCopy Deploymentという名前で公開されています。(これはGeneXus社ではなくSimplifica社のArmando作です) Donloadボタンをクリックすると、それぞれのバージョンのモジュールがダウンロード可能です。ダウンロードしたzipファイルを任意のフォルダに解凍します。




2. デプロイメントツールのインストール

2-1.「ツール」→「エクステンションマネージャー」を開く

2-2.「追加」ボタンをクリック

2-3.「ローカル」タブにて、ファイルの選択ボタンをクリックし、解凍したCSharpXCopyDeployment.dllファイルを選択し、「OK」ボタンをクリックします。

2-4. dllの取込みが成功すると、エクステンションマネージャーにて「CSharpXCopyDeployment」が表示されるので、チェックボックスをONにし「変更の適用」をクリックします。適用後にGeneXusを再起動します。  


3. デプロイ

3-1.事前準備
【環境】
GeneXusでは、基本的な考え方としてジェネレート・デプロイするターゲットごとに「環境(Environment)」を作成・設定します。
例えば、「開発サーバー」「本番サーバー」と2系統ジェネレート・デプロイ先があるのであれば、環境も二つ作成し、それぞれ「Dev」「Release」といった判りやすい名前をつけましょう。
手順は以下の通りです。
①ナレッジベースナビゲータにて、「設定」→「環境」を右クリックし、新規環境を選択
②ビルドをする時に、対象となる環境を右クリックし、「アクティブにする」を選択


※本番環境(DB)がGeneXusから直接接続できないケースでは、LAN内のDBを仮の本番DBに見立てて、データベース再編成を実行します。
 この場合、DB再編成プログラムをエクスポートした後、DB接続情報を本番環境の情報に変更します。

※環境についての解説は、GeneXus教育コースでも取扱いがありませんが、開発プロジェクト・運用を考えると非常に大切な機能です。この点については別途エントリーを書くことにします。


4. データベース再編成のエクスポート

4-1.「ツール」→「CSharp Generator」→「Deployment Tools」をクリックし、デプロイメントツールを起動します。

4-2.「Export Reorganization」タブをクリック(ディフォルト表示)

4-3.「Destination folder」に出力先のディレクトリがディフォルト表示されています。
ディレクトリ名は「reorgYYYYMD」(YYYYMDはシステム日付)となっています。
一日に複数回実行する場合は、名前を変更して上書きされないように注意してください。

4-4.「Confirm」ボタンをクリックすると、指定したディレクトリにモジュールがエクスポートされます。



4-5.データベース接続情報の変更
データベース再編成プログラムをエクスポート後にデータベース接続情報を変更したい場合は「GxConfig.exe」というツールを使います。
「GxConfig.exe」はナレッジベースディレクトリ\ターゲットディレクトリ\web\binに出力されています。
標準的な環境では「C:\Models\ナレッジベース名\CSharpModel\web\bin」になります。

4-5-1.「GxConfig.exe」をデータベース再編成がエクスポートされたディレクトリにコピーします。「client.exe.config」ファイルを「web.config」へリネームします。

4-5-2.「GxConfig.exe」を起動すると以下の画面が表示されます。データベース接続情報として、「サーバー名(Server/DS)」「データベース名(Database)」「ユーザー(Name)」「パスワード(Password)」を設定し、保存します。SQLServerへ信頼関係接続(Windows認証)を使う場合は、ユーザーとパスワードを設定する必要はありません。

4-5-3.「web.config」ファイル名を「client.exe.config」へリネームします。
編集が終わったら「GxConfig.exe」は削除しても構いません。(データベース再編成処理の実行には影響ありません)
SQLServerへの認証方法を変更する場合は(SQLServer認証←→Windows認証)、web.configの内容を直接編集します。「Connection-Default-Opts」の設定値を「Integrated Security=yes」または「Integrated Security=no」に変更します。



4-6.データベース再編成の実行
4-6-1.エクスポートしたファイルを全てデプロイ先のデータベースサーバーもしくはデータベースサーバーにネットワーク的に接続可能なサーバー/PCにコピーします。

4-6-2.「Reor.exe」を実行します。
「実行」ボタンをクリックすると、対象データベースに対して、再編成処理が実行されます。

※注意1 データベース再編成処理はDDL(Data Define Language)を実行します。つまり、通常のSQL文(DML)の様にロールバックが効きません。従って、何らかの理由で再編成の途中でエラーが発生した場合は、実行前の状態には自動で戻りません。再編成を行う場合は事前に必ずデータベースのバックアップを行ってください。(GeneXusの制約事項ではなく、DBMSの仕様です)


5. Webアプリケーションのエクスポート

5-1.「ツール」→「CSharp Generator」→「Deployment Tools」をクリックし、デプロイメントツールを起動し、「Web Deployment」タブをクリックします。


5-2.「Destination folder」に出力先のディレクトリがディフォルト表示されています。
ディレクトリ名は「webYYYYMD」(YYYYMDはシステム日付)となっています。
一日に複数回実行する場合は、名前を変更して上書きされないように注意してください。
「Confirm」ボタンをクリックすると指定したディレクトリにモジュールがエクスポートされます。
設定 項目説明
Virtual Directoryデプロイ先でのIISの仮想ディレクトリ名を指定します。
OrverWriteチェックON既に同じ名前で仮想ディレクトリが存在した場合、設定を上書きします。
チェックOFF既に同じ名前で仮想ディレクトリが存在した場合、設定を上書きしません。


5-3.データベース接続情報の変更
データベース再編成と同様に、Webアプリケーションのデータベース接続情報を変更したい場合は「GxConfig.exe」を使います。
WebDeploymentにおける「GxConfig.exe」の実行に関しては、データベース再編成とフォルダ・ファイル構成が違うため、以下の2つの方法があります。
 ① 「web.config」ファイルをbinフォルダ(GxConfig.exeがあるフォルダ)にコピー(移動)し、GxConfig.exeを起動します。(データベース再編成と同様)
   この場合、web.configを修正・保存後にbinフォルダからwebフォルダへ再度コピー(移動)す
る必要があります。

 ②コマンドプロンプトから「GxConfig.exe」を実行する方法
  コマンドプロンプトを開き、WebDeploymentの出力先ディレクトリに移動します。
  「GxConfig.exe」を相対パスで実行します。
※②の方法の場合、「web.config」ファイルをコピー(移動)する必要がありません。

5-4.Webアプリケーションのデプロイ
エクスポートしたファイルをディレクトリごとコピーし、デプロイ先のサーバー/PCへ配置します。
デプロイフォルダにある「createVirtualDirectory.bat」を実行します。


エクスポート時に指定したVirtusl Directory名で仮想ディレクトリが作成されます。
又、仮想ディレクトリ作成後、ブラウザが自動的に起動し開発者メニューが表示されます。




2014年4月21日月曜日

データプロバイダーを使いこなそう - 応用編その4 スケジューラー

データプロバイダー応用編の最後はスケジューラーを作ってみたいと思います。
カレンダーソフトやグループウェアの様に月のカレンダー上で予定を登録していくイメージです。

1.トランザクション

まずは予定を登録するためにイベントトランザクションを作成します。スケジューラー上で表示する為に、予定の日付と時刻を持っています。今回は説明をシンプルにする為にマルチユーザーに対応するための仕組みは入れていません。



2014年4月14日月曜日

データプロバイダーを使いこなそう - 応用編その3 DB以外のインプット その2

前回のつづきです。

3-2.勤怠データ作成用データプロバイダー

前回はカレンダーデータ作成用データプロバイダーを作成しました。そのデータを受けて勤怠データをマージするデータプロバイダーです。



出力結果のイメージとしては個人ごとの勤怠状況を表示させますので、パラメータに社員IDを含めます。


2014年4月7日月曜日

データプロバイダーを使いこなそう - 応用編その3 DB以外のインプット その1

今まで基礎編・応用編とデータプロバイダーに関するエントリーを書いてきましたが、データプロバイダーはデータベースのみがインプットではありません。ハードコーディングやロジック、他のオブジェクト(データプロバイダー/プロシージャ)のアウトプットをインプットにする事もできます。

今回の応用編はデータベース以外のインプットを扱うデータプロバイダーです。

1.トランザクションの定義

出勤管理につかうタイムカードを画面表示する機能にデータプロバイダーを使用します。
前提としては、1日の出勤・退勤を1レコードとするタイムレコーダートランザクションを作成します。但し、この勤怠データは1日から末日まで全ての日にちのレコードが存在するわけではなく、出勤した場合のみデータを登録します。

タイムレコーダートランザクションのストラクチャー定義

2014年4月2日水曜日

データプロバイダーを使いこなそう - 応用編その2 グルーピング集計

今回はデータプロバイダーを使ったグルーピング集計処理です。

考え方としてはプロシージャにおけるグルーピング集計処理と同じになりますが、データプロバイダー言語としての表現がありますので、その点を押さえてください。

まず前提となるデータモデルのおさらいです。前提としては集計の起点となるベーステーブルと集計の対象となるテーブルが1対nのリレーショナルモデルとなります。

データモデルの例。
Customerテーブルを1に対してInvoiceテーブルがnのリレーショナルモデル

2014年3月27日木曜日

データプロバイダーを使いこなそう - 応用編その1 ページング その2

前回はページングの実装として検索用データプロバイダーの修正と新たに件数取得用データプロバイダーを作成しました。今回はWebパネルの修正です。

3.Webパネルの修正

3-1.変数の追加

変数としてレコードカウント用SDT、ページカウント、最大ページ数用を定義します。


2014年3月20日木曜日

データプロバイダーを使いこなそう - 応用編その1 ページング

データプロバイダーを使って一覧画面(Grid)を作成すると、オブジェクト分割もでき、シンプルなコーディングもでき、工数も削減できていい事づくめのように思えます。

しかし、GridをSDTコレクションで実装する場合、データプロバイダーを使う・使わないに関係無く、検索結果のデータ(レコード)が大量にある場合はパフォーマンスが悪化する事になります。
これはDBから取り出したデータをAPサーバー上のプログラムが一旦SDTコレクションとしてオブジェクトを組み立てるのにコストが掛かるためです。

一方、ベーステーブルありのGridやSDTコレクションではないシンプルな変数を使ったGrid実装の場合は、そのコストがないためパフォーマンスは良いですが、そもそもデータプロバイダーを利用できません。

データプロバイダーを使ってもパフォーマンスを維持できる実装はできるのでしょうか?

2014年3月16日日曜日

データプロバイダーを使いこなそう - 基礎編その3 検索一覧画面

前回の簡単な一覧画面に手を加えて検索一覧画面に変更してみます。

1.データプロバイダーの修正

データプロバイダーに対しパラメータを渡し、ソート順と検索条件を指定可能にします。

変数を追加します。
&OrderTypeはソート順を指定する変数です。
&CustomerNameと&CustomerAddresは検索条件を指定する変数です。

定義した変数をParmルールに記述します。
検索条件をパラメータで受け取るためです。

Sourceセクションにソート指定(Order節)、検索条件指定(Where節)を記述します。

2014年3月10日月曜日

データプロバイダーを使いこなそう - 基礎編その2 シンプルな一覧画面

前回はデータプロバイダーの基本的な説明をしました。今回は具体的にデータプロバイダーを作成する手順を見ていきましょう。

1.SDT/BCの定義

まず必要なのはデータプロバイダーにOUTPUTさせる型、つまりSDT(構造化データタイプ)又はBC(ビジネスコンポーネント=トランザクション)です。

用途に応じてSDTを作成するか、対象となるトランザクションオブジェクトのBusiness ComponentプロパティをYesにしビジネスコンポーネント化します。

SDTの定義
トランザクションの構造をそのままSDTにする場合は、フォルダービューから
トランザクションオブジェクトのアイコンを空のSDTへドラッグ&ドロップ
すると構造がコピーされます

2014年3月5日水曜日

データプロバイダーを使いこなそう - 基礎編その1

皆さん、データプロバイダーって使ったことありますか? 「名前は聞いたことあるけど、使ったことは・・・」という人、以外に多いと思います。

データプロバイダーはバージョンXから導入された比較的新しいオブジェクトです。その為、昔からGeneXusエンジニアやっている人からすると馴染みが薄く「プロシージャで作った方が早いよ」と言われるかもしれません。

しかし、メーカーであるArtechが新たに導入してきたという事はそれ相応の目的とメリットがあるわけで、使わない理由はありません。

そこで、当ブログでも何回かに分けてデータプロバイダーの使い方を紹介したいと思います。

データプロバイダー基礎編

まずはデータプロバイダー基礎編として、基本的な説明からサンプルの作成まで解説します。

2014年2月27日木曜日

IISでHTTP Error 500.19 - Internal Server Errorが発生した場合の対処

IISでHTTP Error 500.19 - Internal Server Errorが発生した場合の対処についてです。



このエラーはGeneXus X Evolution2でスマートデバイスジェネレーターを使用する場合で、且つ、C#ジェネレーターを選択している時に発生する可能性があります。

2013年12月4日水曜日

Internet Explorer 11 (IE11)の対応

Windows8.1がリリースされ1ヶ月以上が経過しました。Windows8.1からInternet Explorer(以下IE)も11にバージョンアップされました。又、Windows7用のIE11もリリースされています。

一方、GeneXusの最新バージョンであるEvolution2 Upgrade3で生成さたアプリケーションをIE11で動作させると、一部動作しません。

トランザクションでレコードセレクターや実行ボタンを押すと
グレースクリーンのまま応答が無くなる

開発者ツールでこの時の動作を見てみると

GeneXusのJavaScriptライブラリ(gxgral.js)の中でJavaScriptエラーが発生しています

恐らく、IE11になってJavaScriptの仕様が一部変更になった箇所があると思われます。

このエラーの対処ですが、Artechのサイトを探してみるとWikiの中のページ「GeneXus X Evolution 2 Hardware and Software Requirement(ハードウェアとソフトウェアの前提条件)」に以下のコメントがありました。



という事で、まもなくリリースされるアップグレード4にてIE11対応がされるそうです。
プレビュー版はこちらからダウンロードできます。


2013年9月4日水曜日

列挙型ドメインとマスタ化の判断基準

画面上での選択肢(コンボボックス等)を実装する手段としては、列挙型ドメインの定義とトランザクションでマスタテーブルを作る方法の2種類ありますが、皆さんはどういうケースで列挙型ドメインにし、どういうケースでマスタ化を選択しますか?




2013年8月30日金曜日

項目属性名の変更にはご注意を

GeneXus教育をしていてよく見受けられるGeneXusビギナーが陥る操作ミスとして、項目属性名の変更があります。


1.項目属性名の変更方法

項目属性の登録作業はトランザクションオブジェクトでのストラクチャーエディタで項目属性を追加する事ですが、一旦登録した項目属性の名称を変更する時にストラクチャーエディタ上でダイレクトに変更してはいけません。

トランザクションのストラクチャー(Structure)エディタ上で
項目属性名を直接変更してみる

2013年8月28日水曜日

オプションに関するTips

GeneXusのオプションに関するTipsです。

1.起動オプション


GeneXusの実行ファイル(GeneXus.exe)に対するオプションです。基本はショートカットのプロパティで指定します。オプションの中でも便利なものを紹介します。

起動オプションはショートカットのプロパティで指定します

2013年8月26日月曜日

プロンプトに関するあれこれ - その3

今回はプロンプトの仕様についてです

プロンプトの目的はキー項目の入力補助です。従ってプロンプトから返されるのはキー項目の値のみです。外部キー項目に従属する参照項目はプロンプトからは返されません。
参照項目はトランザクション画面に制御が移り、キー項目からフォーカス移動したタイミングにDBからデータを取得・表示します(外部キー項目を手入力した時と同じ動作)。

Country(国)プロンプトを閉じた直後
フォーカスは外部キー項目である国番号にあり、
プロンプトから返された値がセットされている
参照項目である国名にはまだデータが表示されていない

2013年8月22日木曜日

プロンプトに関するあれこれ - その2

前回の話の続きです。

3.プロンプトを使用したくない場合

トランザクションオブジェクトでの主キー項目と外部キー項目は自動でプロンプトが紐付けられます。逆にプロンプトを使いたくない場合(プロンプトアイコンを表示したくない場合)はどうしたらよいでしょうか?


2013年8月21日水曜日

プロンプトに関するあれこれ - その1

プロンプトオブジェクトは自動生成される為、なにげなく使っている人も多いと思いますが、その実態(仕様)をちゃんと知っていますか? 今回はプロンプトにまつわる話です。

1.プロンプトとは


プロンプトとはいわゆるレコード選択用の一覧画面の事です。プロンプトオブジェクトという呼び方もしますが、実態はWebパネルオブジェクトです。
GeneXusでは、主キー項目、外部キー項目に対して自動的にプロンプトオブジェクトが作成されます。(ビルド時)

トランザクションの主キー項目、外部キー項目がプロンプトの対象になる

2013年8月7日水曜日

【ショーケース】GeneXusインターナショナルミーティング用アプリ #GX23

9月にウルグアイで開催されるGeneXusインターナショナルミーティング用のスマートデバイスアプリが公開されています。






これはGeneXusインターナショナルミーティングの各セッションやスピーカーの紹介やホテルの案内など、ミーティングに参加する人のナビゲーターになるアプリです。







もちろんGeneXusで開発されており、iOS版とAndroid版が各ストアに公開されています。


まだ、セッションやスピーカーが決まっていないので内容的にはまだまだですが、開催が近づくにつれ充実していくはずです。ウルグアイに行かない人もその雰囲気を味わってみて下さい。

2013年8月5日月曜日

GeneXusでのサブクエリ(副問い合わせ)の実装方法

前回のエントリーでGeneXusにおけるJOINの話をしましたが、今回はGeneXusでのサブクエリーの実装方法です。

以下の様なデータモデルで、Invoice一覧の画面を実装する時に、検索条件としてInvoiceDetailつまり明細の項目を含めたい場合はどう実装したらよいでしょうか?





例えばfor eachコマンドで記述してみます。