Web 関連
Author: takeuchi@fcs21.jp (richiet)
質問 日付属性キーフィールドのレイアウトに DIS(DD)が定義されている場合 reconnect"(再接続)エラーが発生する。 作業時間報告用の画面をダイナミックサーバページで作成しました。 次の処理を実行した場合、再接続エラーが発生します。 1. テーブルのキーに日付属性の項目が割り振られているテーブルを検索します。 日付属性の項目のフィールドレイアウトには DIS(DD)と定義されています。 2. onchange が定義されている任意のフィールドを編集し、Tabキーでカレント フィールドを離れる 結果: Get Stateトリガのreconnect/readcheck を実行した結果、 当月分以外は"reconnect"(再接続)エラーが発生します。 エラー内容: reconnect testent.testmodel failed (Get State) $status = 1 回答 [原因] Uniface DSPは、クライアントとサーバとの同期をとるため、以下の内容が実行されます。 1. ステップ2実行後、クライアントのブラウザからWebサーバにブラウザに 表示されている情報を送信します。 2. WEBサーバ側でUniface DSPが起動され、Get Sate トリガ呼ばれます。 3. ブラウザから受け取った情報を元にキー項目にアサインし、データベースに再接続します。 今回の場合ですと、Unifaceの仕様により、ブラウザ上では、日付属性の項目のフィールド レイアウト DIS(DD)によって、月、年の情報が含まれていなたいめ、サーバ側はブラウザ からは、日付項目の"DIS(DD)" のみ取得します。 ブラウザから送信された日付フィールドには年、月の情報がないため、現在のシステム日付から、 年、月をそれぞれ自動的に割り当て、キーを生成します。 生成されたキーは、本来データベースに 保存されているデータとは異るため、当月分以外は"reconnect"(再接続)エラーが発生します。 [例] システム日付を2010年、1月に設定する データベースに登録されている日付:2011年2月15日 テーブル名 :TSTKIN 日付属性の項目 :SYORIBI この場合、Reconnect実行の際、以下のSQL命令のように、現在のシステム日付から、 年、月が自動的に割り当てられたため、SYORIBIの値が、15022011でなく、15012010 で検索されます。 KHCDSP(_getstate) GTST:11 reconnect/readcheck "%%SOUTER" I/O function: F, mode: 0, on file/table: TSTKIN index: 1 = Where ((NO = '4') And (SYORIBI = 15012010)) Use Index is 1 is (4 2010-01-15) [回避策] 表示用のダミーフィールドを作成し、レイアウトにDIS(DD) と定義します。また、このとき、日付属性の項目のレイアウト内容を 外しておきます。 「Read」トリガで日付属性の項目からダミーフィールドにアサインします。 例 ダミーフィールド:testdateを使用 read testdate=syoribi
5 Comments
Local Administrator
[質問] DSPから非同期処理を実行した場合、-161 エラー が発生する [回答] 同じプロセス内で非同期処理と同期処理が混在した場合、-161 エラーが発生します。 [対象策] 非同期サービスを別のuserverプロセスで処理する [設定手順] 1. DSP起動用のアサイメントファイルをコピーし名前を変更する 例) wasv2.asn 2. $putmess_logfileなどファイルへの出力する設定がされている場合は 指定されたファイル名を変更する 3. DSP起動用のアサイメントファイルを開き、[SERVICES_EXEC] および[PATHS]に非同期用のサービス用の設定を追加する 例) TESTSVCを使用した場合 [PATHS] $ASV tcp:localhost+13001|userver|userver|wasv2 [SERVICES_EXEC] TESTSVC $ASV:TESTSVC <注意> UST名は、web.xmlに定義にされているログオンパスのUST名とは異なる名前を 指定してください。 4. urouter.asnファイルを開き、新規に前のステップで指定したUST名を追加する 例) UST名、wasv2を追加する場合 wasv2 = "C:\Program Files\Uniface\Uniface 9.7.01\common\bin\userver.exe" /dir="C:\Users\uniadmin\Documents\Uniface 97 Development\project" /adm="C:\Program Files\Uniface\Uniface 9.7.01\uniface\adm" /asn=wasv2.asn <備考 1> 改行は含みません。 <備考 2> /asnスイッチで指定するアサイメントファイルはステップで作成したアサイメントファイル を指定してください。 例 /asn=wasv2.asn 5. urouterサービスを再起動する
Author: richiet (takeuchi@fcs21.jp)
Local Administrator
質問 DSP作成時、CommandButtonの背景色を変更する方法を知りたい 回答 uweb.iniファイルに、CommandButtonを3Dで表示させるため 予めイメージが定義されています。 このため、background-color(背景色)を指定してもイメージが優先されるため、 CommandButtonz全体に背景色を指定する事ができません。 [対応策] 任意のボタンの背景色を定義する場合、$fieldpropertiesに、 style:background-imageと style:background-color を追してください。 例) 赤色の背景色を定義する場合 variables string vProplist endvariables putitem/id vProplist, "style:background-image","none" putitem/id vProplist, "style:background-color","red" $fieldproperties(BTN)=vProplist
Author: richiet (takeuchi@fcs21.jp)
Local Administrator
[質問] Unifaceインストールした後、DSPを作成しました。 DSP起動時に以下のエラーページが表示されます。 300 URD_MW_ERROR Middleware : UV8 Error# : Failure in the connection to the UNIFACE Application Server Error Text : Cannot connect to the UNIFACE process on the remote address/port. Error ID : 14f48a87806 [回答] パスワードのポリシー機能で「複雑さの用件を満たす必要があるパスワード」設定が 有効の場合、urouterおよびuserverのデフォルトのパスワードが用件が満たされていないため、 Unifaceインストール時にuserver, urouter ユーザアカウントの作が失敗している可能性があります。 この場合、logフォルダのnewaccur.log,newaccus.logにエラー出力されます。 例) The username and/or password does not meet all password policy requirements. [パスワードのポリシー設定の確認方法] 1. スタート→プログラムとファイルの検索から「secpol.msc」を検索し、ローカルセキュリティポリシーを起動する。 2. セキュリィティの設定→アカウント ポリシー →パスワードのポリシーから 「複雑さの用件を満たす必要があるパスワード」設定値を確認ください。 [対応策] 「複雑さの用件を満たす必要があるパスワード」設定値を予め無効にしてUnifaceを再インストールしてください。 もしくは、以下の方法で用件を満たしたパスワードでurouter, userverの作成ください。 [ユーザの作成方法] 1. スタートメニューからコマンドプロンプトを選択した状態で マウスの右クリックし、[管理者として実行]を選択する 備考 Windowのタイトルが「管理者: コマンドプロンプト」と表示されます。 2. <Unifaceインストールフォルダ>\common/binに移動する 3. urouter /newacc userver /passwd P@ssw0rd を実行し、userverユーザを作成する 実行例 E:\application\Uniface\Uniface9602\common\bin>urouter /newacc userver /passwd P@ssw0rd Group <UNIFACE Server Users> already exists. ←警告は無視しても問題ないです。 Successfully added user <userver> in group <UNIFACE Server Users>. 4. urouter /newacc urouter /passwd P@ssw0rd を実行し、urouterユーザを作成する 実行例 E:\application\Uniface\Uniface9602\common\bin>urouter /newacc urouter /passwd P@ssw0rd Group <UNIFACE Server Users> already exists. ←警告は無視しても問題ないです。 Successfully added user <urouter> in group <UNIFACE Server Users>. 5. [コンピュータの管理](スタート->コンピュータでマウスの右クリックし、管理を選択し、[コンピュータの管理]を起動) から「ローカルユーザとグループ」→「ユーザ」に移動し、名前の一覧にurouterおよびuserver が追加されている事を確認ください。 作成後、web.xmlファイルのログオンユーザのパスワードを修正してください 1. <Unifaceインストールフォルダ>\uniface\webapps\uniface\WEB-INF\web.xmlファイルを開く 2. Uniface W(eb) R(equest) D(ispatcher) Servletの>MIDDLEWAREのログオンパラメタの パスワードを userver から P@ssw0rd に変更する 例 <!-- Uniface W(eb) R(equest) D(ispatcher) Servlet --> <servlet> <servlet-name> wrd </servlet-name> <servlet-class> com.compuware.uniface.urd.WRDServlet </servlet-class> <init-param> <param-name>TESTABLE</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>USERUNPREFIX</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>MIDDLEWARE</param-name> <param-value>UV8:localhost+13001|userver|P@ssw0rd|wasv</param-value> </init-param> 3. urouter, tomcatサービスを再起動する
Author: richiet (takeuchi@fcs21.jp)
Local Administrator
質問 フィールドのInitial Valueに、$textでグローバルメッセージ を書くとメッセージテキストではなく、そのままの値が表示されます。 例) %%$text("mes1")%%% 回答 DSP起動時は、 フィールドのinitial valueに記載された $textの情報は取り込まれません。 [対応策] Set Stateトリガの case FULLPAGEに記述されている websaveの直前に初期値をセットする 例) case "FULLPAGE" ; Initial page weblayout ; Generate layout if ($procerror < 0) webmessage/error "weblayout failed (Set State)%%^$procerror = %%$procerror%%%" return ($status) endif webdefinitions ; Generate component definitions if ($procerror < 0) webmessage/error "webdefinitions failed (Set State)%%^$procerror = %%$procerror%%%" return ($status) endif call set_init websave ; Generate data if ($procerror < 0) webmessage/error "websave failed (Set State)%%^$procerror = %%$procerror%%%" return (0) endif endselectcase <Local proc modules> entry set_init f1 = "%%$text("mes1")%%%" return 0 end
Author: richiet (takeuchi@fcs21.jp)
Local Administrator
質問 uniface.labelでgetText, setTextを実行するとエラーが発生します。 回答 この問題はUniface libraryの記載ミスになります。 ただしくは、 getValue, setValueになります。 例) webtrigger onChange javascript var InstanceName = this.getParent().getInstance("<DSPname>"); var EntName = InstanceName.getEntity("ENT1.DSPMDL").getOccurrence(0); if (this.getValue() == "JPN") { EntName.getLabel("FLD").setValue("DB項目"); }else{ EntName.getLabel("FLD").setValue("DB Item"); } endjavascript end
Author: richiet (takeuchi@fcs21.jp)