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

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月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が新たに導入してきたという事はそれ相応の目的とメリットがあるわけで、使わない理由はありません。

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

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

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

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月5日月曜日

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

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

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





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

2013年7月17日水曜日

GeneXusにおけるロック・排他制御

GeneXusにおいてデータベース更新処理(INSERT/UPDATE/DELETE)が可能なオブジェクトはトランザクションとプロシージャのみです。

データベース更新処理としてはロックと排他が重要な制御になってきますが、GeneXusでの仕様は以下の通りです。

トランザクションオブジェクト

1)ロック

  • 書き込み処理の直前にSELECTを実行しますが、その時のモードがLOCKモードになります。( Oracleだとfor update no wait指定/SQLServerだと WITH (UPDLOCK)指定 )
  • もし、ロックが失敗した場合(既に他のユーザーにロックされていた場合)はエラーが返されます。

2)排他制御

  • トランザクションオブジェクト内で独自の排他制御が実装されています。
  • レコードをLoad時(SELECT時)のデータを全て保持しておき、書き込みの直前のSELECT(上記ロック時)で取得した項目と全項目付け合わせをします。一項目でも差があれば他の誰かが変更を加えたと判断し排他エラーが返ります。= 楽観的排他
  • 一般的には更新回数や更新タイムスタンプ項目を設け、その項目を用いた比較で排他制御を実装するのが一般的だと思いますが、GeneXusの場合はトランザクション=テーブルではないのでストラクチャーで定義されている全項目の比較になります。


プロシージャオブジェクト

1)ロック

  • for eachによる更新処理にて、条件項目および更新対象項目がベーステーブルにある場合は、UPDATE/DELETE文が生成されます。
  • for eachによる更新処理にて、条件項目および更新対象項目がベーステーブル以外にもある場合は、SELECT文(条件指定用+ロック用)とUPDATE/DELETE文が生成されます。この場合は、トランザクションと同様にロックモードでのSELECTになります。



2)排他制御

  • 排他制御は盛り込まれていません。アプリケーションの仕様として開発者が実装する必要があります。


悲観的排他が必要な場合は、独自に設計し実装する必要があります。



2013年6月13日木曜日

データベーステーブル作成・再編成にてよく使うオプション

データベーステーブル作成およびデータベース再編成処理時によく使うオプション(プロパティの設定)をご紹介します。  


1.Declare referential integrity

対象

  • 言語 : .NET、Java、Ruby
  • DBMS: SQLServer,Oracle,PostgreSQL,MySQL, DB2 UDB for iSeries,iSeries native, Informix


概要
データストアプロパティにある「Declare referential integrity」プロパティはデータベースに参照整合性(DBMSの制約)を作成する/しないの指定が可能です。


データストアプロパティ




設定値

  • Yes(既定値) :参照整合性が作成されます。(データベーステーブル作成、再編成時)
  • No : 参照整合性は作成されません。(データベーステーブル作成、再編成時)
  • Remove :参照整合性は作成されません。(データベーステーブル作成、再編成時) 但し、既に参照整合性がある場合は削除されます。


備考
例えば、プロパティをYes→Noに変更し、データベーステーブルの作成を行った場合、再編成プログラムはテーブルをDrop→Createしますが、参照整合性が既にあるとテーブルをDropできません。この場合は、Yes→Removeを選択する事により、既存の参照整合性も削除されます。

出典 : http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Declare+Referential+Integrity+Property,


2.Generate comment on statements

対象

  • インターフェイス : Web
  • DBMS: Oracle,DB2 UDB,DB2 for iSeries,PostgreSQL(エボリューション1以降)


概要
データストアプロパティにある「Generate comment on statements」プロパティはテーブル及びカラムのコメント作成を指定できます。

設定値

  • Yes : COMMENTステートメントを生成します。(データベーステーブル作成、再編成時)
  • No(既定値) : COMMENTステートメントを生成しません。(データベーステーブル作成、再編成時)



CREATE TABLE TestPropGenCom (TestCod smallint NOT NULL , TestDesc CHAR(50) NOT NULL , PRIMARY KEY(TestCod))
COMMENT ON TABLE TestPropGenCom IS 'Test property Generate comments on'
COMMENT ON COLUMN TestPropGenCom.TestCod IS 'Test Code'
COMMENT ON COLUMN TestPropGenCom.TestDesc IS 'Test Description'

出典 : http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Generate+COMMENT+ON+Statements+Property,

3.Enable national language support

対象

  • 言語 : .NET、Java、Ruby
  • DBMS: SQLServer,Oracle,MySQL, DB2 UDB,DB2 for iSeries,


概要
「Enable national language support」プロパティは文字列データ型(Char/VarChar)でのマルチバイト対応が指定できます。
バージョンによってプロパティの場所が違います。

  • バージョンXはデータストアプロパティ
  • エボリューション1以降はバージョン、項目属性、ドメインプロパティ


バージョンプロパティ



設定値

  • Yes:マルチバイトキャラクター対応(Char/VarCharの桁数=文字数)
  • No(既定値):マルチバイトキャラクター非対応(Char/VarCharの桁数=バイト数)

備考
Noを指定してもマルチバイトキャラクターは保存可能です。但し、DB上は桁数=バイト数、画面上は桁数=文字数と異なるため、画面上では入力可能な桁数の文字列がデータベース保存時に桁あふれでエラーとなる場合が出てきます。

どちらの設定を選択するかは設計ポリシーに依存します。但し、バージョン・項目属性・ドメインの各レベルで指定可能なので、全体指定と個別指定が可能です。

例) 全体指定はマルチバイト対応とし、個別にマルチバイト非対応とする。(バージョンプロパティではYes、必要に応じて任意の項目属性またはドメインプロパティではNoとする)

エボリューション2アップグレード3からはプロパティ値変更時、データベース再編成対象になります。それより前のバージョンでは、プロパティ値を変更しただけではデータベース再編成対象になりません。データベーステープルを再作成して下さい。

出典 : http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Enable+National+Language+Support+Property,



2013年6月5日水曜日

外部オブジェクトの使い方 : ネイティブ・オブジェクト編

外部オブジェクトを使う事でネイティブ・オブジェクトつまり各ジェネレーター環境における外部ライブラリ(GeneXusを使用せずに作成したライブラリ)を利用する事が可能になります。

1.外部オブジェクトの作成

ネイティブ・オブジェクトに関しては、Webサービスと同様にウィザードを使って簡単に外部オブジェクトを作成する事ができます。

「ツール」メニュー→「アプリケーションの統合」→「.Netアセンブリインポート」または「Java クラスのインボート」を選択



2013年6月3日月曜日

Google Chromeを業務用Webアプリケーションプラットフォームとして使用するためのTips


直接GeneXusのTipsではありませんが、Google ChromeをWebアプリケーションプラットフオームとして使用する場合に考慮したい事が何点かあります。

  1. 当該Webアプリケーション起動(表示)した時に必ずChromeとする。又、ブラウザのディフォルト起動設定を変更しない。
  2. アドレスバーやタブを表示させない
  3. 自動アップデートを禁止にする


2013年5月29日水曜日

Webアプリケーションでのキーボード制御系Tips

通常のWebアプリケーションだとあまりニーズはありませんが、業務系Webアプリケーション、特に旧来のホスト系やC/S(クライアント/サーバー)系システムからWebアプリへの移行だと(あるいはそういったシステムを使いなれた人達からのリクエストでは)レガシーなキーボード制御を要求される場合があります。GeneXusでの対応可・不可も含めて紹介します。


1.Enterキーでフォーカス移動したい

HTMLの標準ではEnterキーはFormのSubmitつまりサーバーへのデータ送信です。しかし、ホスト・C/S系だと(特にテンキーを使って操作する場合は)Enterキーでフォーカス移動が主流です。
GeneXusにはジェネレーターのプロパティに「Field exit」プロパティがあり、以下が選択できます。