Appeon PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
24569 20/02/27 18:51:40 RE(3):PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By asano01
24568 20/02/27 17:29:13 RE(2):PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By Wutian
24567 20/02/06 20:12:32 RE:PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By 178504
24566 20/02/06 16:08:48 PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By 178504

カテゴリ:PowerBuilderの不具合?
日付:2020年02月27日 18:51 発信者:asano01
題名:RE(3):PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう


いくつかアイディアを。

1、閉じる処理は別イベントにして、POSTで呼ぶ
2、レスポンス画面のXボタンは使用不可にする。
3、印刷完了まで、画面を使用不可にする。
  Xボタンは押せちゃう。。。

参考までに。


>この事象、PBのバグというより仕様なんじゃないですかね。

>ボタンクリックなどのイベントはイベントキューに追加されるので非同期です。
>なのでcb_1のクリック後、cb_1の処理が動いているときにcb_2や×ボタンをクリックできるのは
>仕様になると思います。
>cb_1の処理が終わってCloseWithReturn()が動いた後にcb_2のCloseWithReturn()が動く
>(タイミングによっては逆もあり)と最初のCloseWithReturn()ですでにresponse!のウィンドウが
>閉じられているため2回目のCloseWithReturn()がエラーになるのでしょう。
>(×ボタンの時はcb_1の処理前にClose()で閉じられてるからかな)

>これを回避するためにはcb_1クリック直後にcb_2をDisableにするとか、プログラムで対策が
>必要になりますね。(Javaとかで作ったWebシステムでもそんな対策をした記憶が・・・)

>main!の時にエラーにならないのは、CloseWithReturn()はレスポンスウィンドウだけで
>使用できるとマニュアルに書いてあるので、main!のウインドウではそもそも動かない(無視?)
>のだと思います。

>以上はほぼ個人的な意見ですが参考にしてください。


>>自己レスになります。
>>
>>ウィンドウの種類がresponse!のウィンドウ上でPrint()を行うと、
>>後続処理が走行する前にウィンドウが操作可能な状態にあり、
>>他の操作ができることに起因していました。
>>
>>Print()の後続処理としてCloseWithReturn()がある場合、
>>Print()後のウィンドウが操作可能なタイミングで×などによって
>>ウィンドウを意図的に閉じる(とてもシビアなタイミングなので×を連打しまくる)と、
>>当然のごとくCloseWithReturn()でエラーとなります。
>>
>>確認していませんが、ウィンドウを意図的に閉じた場合、
>>ウィンドウが破棄されているため、恐らくオブジェクト操作をする
>>実装が行われていると必ず死ぬのでは・・・。
>>
>>そもそもPrint()を実行後に、後続処理がまだ終わっていないのに
>>ウィンドウを操作できることに問題があると思われます。
>>
>>これはPBの不具合でしょうか?
>>また、ウィンドウの種類をmain!にすると上記のような現象は発生しません。
>>回避策としてはそれしかないでしょうか?
>>
>>
>>
>>
>>>下記のようなコードがあった時、画面Bでcb_1をクリック後、
>>>すぐさまウィンドウの×ボタンをクリックしたり、cb_2をクリックすると、
>>>CloseWithReturn()が走行するより前にウィンドウが閉じてしまい、
>>>CloseWithReturn()でエラーになってしまいます。
>>>
>>>実装コードとしては非同期処理を実施しているわけでもないのに、
>>>コード処理の途中でウィンドウメッセージが伝わるのが
>>>変な気がするのですが、PBの不具合なんでしょうか?
>>>
>>>回避する方法はありますでしょうか?
>>>
>>>この現象はPB12.1でも発生していました。
>>>Windows7、Windows10のいずれでも発生します。
>>>
>>>
>>>【A:呼び元画面】
>>>OpenWithParm(print_test, dw_1)
>>>
>>>【B:呼び先画面(ウィンドウの種類reponse!)】
>>>[Instance Variables]
>>>DataWindow idw
>>>
>>>[open()]
>>>idw = Message.PowerObjectParm
>>>
>>>[cb_1:clicked()]
>>>idw.Object.DataWindow.Print.Page.Range = ""
>>>idw.Object.DataWindow.Print.Copies = "1"
>>>idw_current.Object.DataWindow.Print.Collate = "Yes"
>>>idw.Print( true )
>>>
>>>CloseWithReturn( parent, 1 )
>>>
>>>[cb_2:clicked()]
>>>CloseWithReturn( parent, 0 )
>>>

付加情報:

PowerBuilder Version AppeonPB2017

Client SoftWare

OS Windows7
DBMS DBMSクライアントソフトウェアなし
Browser その他

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.