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

パスワード:


パスワード紛失

起こした覚えのないイベントが発生してしまう

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2016-5-31 15:33
tsukuisora  半人前   投稿数: 31
V8アプリからV10へのマイグレーションを行い、デバッグをしております。
レコードメインに書かれていたコードを、イベント化したのですが、下記の現象にぶつかり、はまってしまっております。

発生させていないユーザーイベントが発生してしまう。

ユーザーイベントを定義し、プッシュボタンでイベント実行させ、ハンドラ内に処理を書いています。
ここで、プッシュボタンを押すとちゃんとハンドラまで飛ぶのですが、このプッシュボタンとは関係のない、テーブルをクリックしたときも、このハンドラまで飛んできてしまいます。

このテーブルは、子タスクのフォームで、サブフォーム化しております。
問題のイベントハンドラ内では、この子タスクをコールしています。
ためしに、このコールをやめてみたところ、テーブルをクリックしてもハンドラに飛んでこなくなりましたが、これでは目的を達成できません。

どのような機序でこのような事が起こるのかわからず、困っております。

もし、この問題について何かわかる方がいらっしゃればお教えいただけないでしょうか。

・呼んだ覚えがないイベントが発生する場合、どのような所を確認すれば良いのか?
・Magicではない、たとえば、VisualStudioなどの開発環境であれば、イベントハンドラ内でブレイクポイントをはっておき、飛んできてから、ステップ実行していけば、イベントを起こしたところへコードが戻っていきます。
この手法で、どこから呼ばれたのか突き止めることができるのですが、Magicでは、

Magicの経験が浅いため、まとまりのない質問で申し訳ございませんが、何卒よろしくお願いいたします。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-5-31 15:40
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
回答になっていないと思いますがイベントハンドラ内で子タスクをコールしている事がおかしいのではないですか?
サブフォームに変更したことにより必要がなくなったのではないでしょうか
あとなぜハンドラ内で子タスクを呼ぶ必要があるのかを書かれるとよいかと思われます。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2016-5-31 16:53
tsukuisora  半人前   投稿数: 31
早速のご回答、ありがとうございます。
わかりにくい質問で申し訳ございません。

詳細を書かせていただきます。

下記のような、V8のプログラムがあり、これをV10へマイグレーションしようとしています。

・親のフォームに、「修正」「登録」などのボタンが配置されています。
・子タスクフォーム上のテーブルコントロールに、実データが配置されています。
・処理モードを示す変数は親タスク側に定義されており、子タスクの初期モードの条件式に、この変数が指定されています。
・親フォームのボタンの動作に応じて、子タスクの処理モードを切り替えようとしています。
 レコードメインで、処理モードを示す変数の値を更新し、子タスクをコールする、という作りです。
・ボタンを押す前に子タスクのフォーム表示をしておくため、親タスクのレコード前で子タスクをコールしています。

これをマイグレーションしたところ、子タスクのテーブルコントロールをクリックすると、勝手に修正モードになってしまう、という不具合が生じました。
ここで、V10の開発環境では、レコードメイン上でステップ実行等を行う事ができず、デバッグが困難だったため、RM互換を消してしまおうと思いました。
また、別トピックで、サブフォーム化の示唆もいただいたため、これも行った次第です。

「ハンドラ内で子タスクを呼ぶ」理由は、V8時点と同じ動きを行わせるため、のつもりです。

各ボタンのイベントハンドラ内で、レコードメインに書かれていたのと同じく、処理モード変数の更新してから子タスクをコールする。
子タスクでは、初期モード条件で処理モード変数を参照し、自分のモードを変更する。

しかしながら、上記の変更をおこなった後も、ボタンクリックではなくテーブルコントロールクリックで、ハンドラが呼ばれてしまう、という状況になってしまっております。


投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-5-31 17:04 | 最終変更
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
このようなプログラムをサブフォーム化するのであれば一度簡単な構造のサブフォームを利用したプログラムを作成して特性を確認してから変更した方が良いかと思います。

サブフォームを利用して現状のプログラムの動きを完全に同じにするには私個人的な考えでは相当なご苦労が必要かと思われます。
もう少しサブフォームの特性を確認されてはいかがですか

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-5-31 17:13
tiyn  常連   投稿数: 70
Unipaasだったかとおもいますが、
別のイベントで同じ子タスクをコールタスクしている場合で
親タスクにカーソルがいる時に
子タスクをクリックすると上手く動かない、
(下のイベントから順番に探しに行ってる?)
事がありました。
無理やりフラグを管理をして解決した記憶があります。


下のような例だと、なぜか修正イベントが実行されたことになる
レコード前
 コール子タスク(表示のみ)

イベント:登録
 変数:モード 登録に項目更新
 コール子タスク

イベント:修正
 変数:モード 修正に項目更新
 コール子タスク
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-5-31 18:06
tsukuisora  半人前   投稿数: 31
ありがとうございます。
また試してみます。

しかし、サブフォーム化が目的ではなく、子タスクのテーブルコントロールをクリックした際の動作を抑止したいのです・・。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-5-31 18:12 | 最終変更
Tanda  長老   投稿数: 2151
tsukuisoraさん、

起こした覚えのないイベントが発生してしまうという現象が起きた
ときにまずチェックすべきポイントは、「イベント」行のオプション
欄にある「スコープ」の設定ですね。

オプションには「タスク」と「サブツリー」の2つがありますが、
これがサブツリーの設定になっていると、そこからコールされた
プログラムやタスクまでイベントが効いてしまいます。

これを「タスク」の設定にしてやると、そのイベントはそのタスク
の中でのみ発動されるという動きになります。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-5-31 18:42
tsukuisora  半人前   投稿数: 31
tandaさん。

コメントありがとうございます。
ハンドラのスコープは「タスク」にしております。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-5-31 18:44
tsukuisora  半人前   投稿数: 31
tiynさん。
ご回答ありがとうございます。
文面を拝見する限り、同じケースのようです。

どのように解決されたか、ご記憶の範囲でお教えいただけないでしょうか?

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-5-31 21:38
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
なのであればサブフォームにしない方が良いかと思います。
無理にサブフォームにするといろいろな問題が発生する可能性がありますよ
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-6-1 9:16
tiyn  常連   投稿数: 70
細かい部分は覚えていないのですが・・
ファントムタスク的な使い方が駄目だったので
最終的にサブフォームコントロールにしたと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-6-1 9:51
tsukuisora  半人前   投稿数: 31
「ファントムタスク」とは、
レコード前
 コール子タスク(表示のみ)
というような書き方のことですね。

ありがとうございます。
投票数:0 平均点:0.00

  条件検索へ


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