ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

オンラインプログラムでダブルクリックされると動作がおかしくなる。

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-4-13 8:32
shokor  新米   投稿数: 19
なるほど、ありがとうございます。
そのあたり、もっとよく勉強してみます!
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-12 17:04 | 最終変更
sigeno56  長老   投稿数: 336
並行実行ではない(普通の)PGを呼んだ場合
呼ばれたやつの処理が終わるまで
呼び出し元に制御が戻りませんよね。

並行実行にすると
呼んだとたん、放流というか、好きにしてーさようなら
お互い別々に動きましょう、となります。

よってこの処理もあの処理も 起動しておくと便利な分を
並行実行にするようにしております。

並行実行で非 単一インスタンスにして
メニューPGなどから
売上伝票入力PGを2つ立ち上げるといった使い方も有りなのでしょうね。

※モーダルウィンドウは小さめにして、
 実行中です。しばらくお待ちください。
 といったメッセージ表示にするのはいかがでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-4-12 16:47
shokor  新米   投稿数: 19
引き続き、もう一つだけ教えていただけますでしょうか…

「並行実行」と「非同期実行」について書いておられましたが、
「タスク特性−拡張−並行実行」が「ON」であれば、そのプログラムは「並行実行」で「非同期実行」という理解で合っていますか?

この部分は常に「OFF」の状態で使っていて、恥ずかしながら、意識的に使いこなせていません。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-4-12 16:11
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
モーダルウインドウでなければ非同期なのでそのような動きになると思います。

最後に入れたメッセージが画面起動中に表示されるようであれば非同期かなと思いました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-12 16:09
sigeno56  長老   投稿数: 336
こちらこそご返信ありがとうございます。

モーダルウィンドウを表示する事で、そのウィンドウが表示されている間は他のタスククリックも出来なくなりますもんね。

客先でも成功するといいですね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-12 14:30
shokor  新米   投稿数: 19
sigeno56様

・プッシュボタンです。

・バッチ処理の一つめでモーダルウィンドウを表示するようにしてみました。

モーダルウィンドウはピコピコと明滅するのですが(画面クリックが起こっているような動作)、あとのプログラムで暴走することはなくなりました!

客先でも試してみて、ボタンを押すたびにウィンドウが開くことを承諾してもらえたら、この方法でしのごうと思います。

アドバイスありがとうございました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-4-12 14:19 | 最終変更
shokor  新米   投稿数: 19
私の書き方が間違っていたのですが、プログラム4−1は、プログラム4の子タスクです。大変失礼いたしました。


プログラム4 開始 (ウィンドウ表示 No)
  ☆追加 プログラム メッセージ表示 開始
  ☆追加 プログラム メッセージ表示 終了 (ウィンドウ消去 Yes)
  4−1 開始
  4−1 終了 (ウィンドウ消去 Yes)
4 終了



ひとまず、sigeno56様からアドバイスいただいた方法(バッチ処理でモーダルウィンドウを表示する)で改善されたので、それでしのごうと思います。


# 個人的には、メッセージ表示サブプロ(モーダル)では変化がなかったのに、どう違うのかな?と不思議なのですが…


アドバイスありがとうございました!
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-12 10:23
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
プログラム4の中ではなくプログラム4が終了したあとです。
多分ボタンを押せるように変更しているところの前あたりだと思います。

もしプログラム4−1の画面が表示されたまま追加したメッセージが出ているのではないでしょうか
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-11 15:11 | 最終変更
sigeno56  長老   投稿数: 336
・ボタンはプッシュボタンですか?

・バッチ処理3つで画面表示を行い
 モーダルウィンドウにしてみるといかがでしょうか?

(ちなみに私もプッシュボタンから
 単一実行ではない並行実行 のPGを実行する
 プッシュボタンをダブルクリックしたら
 同じPGが2本起動しました。)

※後で思いましたが、上記実験は
 並行実行の時点で、非同期実行なので実験方法としては
 ふさわしくありませんでした。失礼しました。
 
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-11 14:41
shokor  新米   投稿数: 19
ISHIJIMA様、引き続きありがとうございます。

プログラム4のあと、4−1へ行く前にメッセージを入れましたが、改善しませんでした。
メッセージ、4−1がそれぞれ一瞬表示されて、4−2(オンラインの子タスク)へ行ってしまう、という動きです。

ログでは、問題の動作は
>> イベント処理中 [コントロールヒット] コントロール名 : [ボタン_01]
と残っており、「コントロールヒット」はプログラム1の画面上で起こっていることなのに、プログラム4−1に入ってから処理されてしまい、4−1が想定外にクローズされてしまっているようです。

プログラム4で、4−1を経由しない場合はプログラム終了させるようにすると、
1回目のクリックでは異常動作しつつも(プログラム1まで戻ってしまう)、
2回目のクリックが生きてきて、正常に想定通りの動きをしてくれるので、
最悪、この方法で直すしかないかと思っています。

ただ、この方法だと、同様の動きをするプログラムすべてを変更することになり(けっこう本数がある)、できればプログラム1(メニュー画面)の段階で、余計なクリックを無視できたら手数が少なくて済むのですが。。

「コントロールヒット」等の内部イベントは、どこか待ち行列にため込まれるのでしょうか。それをクリアできるような何かがあれば…と思うのですが…そんな都合の良いものはないのでしょうか。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-11 11:07
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
プログラム4の後ろにメッセージを入れた場合
どのような動作になりますか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-4-11 9:37
shokor  新米   投稿数: 19
イベントは、1回実行されています。(ログで確認済み)。

イベントが実行されたあと、次のオンラインタスクが現れたときに、残りのクリックがそこで実行されています。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-11 9:35
shokor  新米   投稿数: 19
メッセージ表示を追加してみました。「最後に」というのがわかりかねたので、プログラム4を呼ぶ前に入れました。
すると、メッセージ画面で止まるようになりました。


プログラム1 (オンライン) メニュー画面 ボタンが並んでいる画面。ボタンクリックで以下のように遷移。
 ↓
プログラム2 (バッチ) 画面表示なし。イベントNo。
 ↓
プログラム3 (バッチ) 画面表示なし。イベントNo。
 ↓
☆追加
☆プログラム  (オンライン) 「はい」「いいえ」ボタンがあるメッセージ画面。
 ↓
プログラム4 (バッチ) 画面表示なし。イベントNo。受け取ったパラメタに応じて、適切な子タスクへ遷移。
 ↓
プログラム4−1 (オンライン) 伝票入力プログラム。(プログラム1と同じコントロール名の項目は無い。)


他のプログラムでも確認したところ、プログラム3の次がオンラインプログラムであれば止まるのですが、バッチプログラムでオンラインの子タスクがあると、止まらないようです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-7 15:35
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
前にその対処としてボタンを無効化した覚えがありました。
となると最後にメッセージボックスを出力するとどうなりますか

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-7 15:29
shokor  新米   投稿数: 19
バッチを起動する部分は変更せず、ボタン有効/無効だけを追加した形です。

・フォームのボタンコントロールの「有効」の式に、「NOT(変数)」

・ロジックのイベントにて変数を更新。クリックされたらTRUEが入る。
バッチ処理を呼び出している部分が終わると、FALSEに戻り、クリック可能になる。

一度目のクリックで、論理上はボタンは無効になると思いますが、実際にはボタン無効よりもクリックのほうが先に起こっているような感じです。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-7 15:02
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
ボタンを無効化する前にその変数を確認してバッチを起動するかの条件を追加する方法でしょうか
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-7 14:52
shokor  新米   投稿数: 19
ISHIJIMA様

アドバイスありがとうございます。

イベントの冒頭で、ボタンを無効化する変数を更新してみましたが、残念ながら変化なしでした。
2回目のクリックのほうが、項目更新より先に受け付けられているようです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2017-4-7 11:28
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
イベントが2回実行されているかもしれません。
イベントを実行する時に変数等でボタンを無効化するとどうなりますか?
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-4-6 15:31 | 最終変更
shokor  新米   投稿数: 19
ちなみに、ボタンには、

フォーム:
イベントタイプ 「S=システム」
イベント「F5」

ロジック:
「E=イベント」「I=内部」「ズーム(Z)」
スコープ「T=タスク」 伝播「NO」

と割り当てています。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2017-4-6 12:17 | 最終変更
shokor  新米   投稿数: 19
システム内ではシングルクリックだけで進めるように作っています。

ダブルクリックされたときに、まれに異常な動作をすることがあり困っています。


プログラム1 (オンライン) メニュー画面 ボタンが並んでいる画面。ボタンクリックで以下のように遷移。
 ↓
プログラム2 (バッチ) 画面表示なし。イベントNo。
 ↓
プログラム3 (バッチ) 画面表示なし。イベントNo。
 ↓
プログラム4 (バッチ) 画面表示なし。イベントNo。受け取ったパラメタに応じて、適切な子タスクへ遷移。
 ↓
プログラム4−1 (オンライン) 伝票入力プログラム。(プログラム1と同じコントロール名の項目は無い。)


シングルクリックだと、正常に遷移しますが、
ログを確認すると、ダブルクリックだと2回目のクリックが「プログラム4−1」に入ったときに発行され、それ以降動作がおかしくなります。


ダブルクリックされたときも、シングルクリックとして扱いたい(2回目のクリックは無視してよい)のですが、
どのような対処法が考えられますか?アドバイスいただけると助かります。
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約