LotusNotesな日々IBM社のLotusNotesに関係する何かを日々語ってるようなきがしないでもないブログです。 

スポンサーサイト

   ↑  --/--/-- (--)  カテゴリー: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

(記事編集) http://mesosune.blog123.fc2.com/?overture" target="_new

--/--/-- | Comment (-) | HOME | ↑ ページ先頭へ |

競合回避方法(Web)

   ↑  2007/12/17 (月)  カテゴリー: Notes(LotusScript)
Notesでは「ひとつの窓を操作している限り、自分自身を競合文書にしてしまうことはない」はずなんですが、
Webでは他人が編集していなくとも、かなりイトモ簡単に自分自身で自分の編集していた文書が競合になります。

その方法とは
1)戻った時(左に向いている矢印のボタンなヤツとか)
2)途中で中止(赤い丸にバッテンのボタンのヤツとか)し、再度保存処理をしたとき
3)保存ボタンを連打した時
とか、他にもいっぱい色々。

1~3はいくら禁止のアナウンスをしたところで
(大人用語で言えば"運用で回避する"にも)

ユーザーは必ずやります。

競合文書が発生しても大丈夫なように最初から組め!

・・・といいたいところなんですが、
設計段階から考えていかなくてはいけないので、手間!
(私もそんなのやりたくないです。)

加えて、

Webブラウザというもの自体が元々表示するためだけのものなので、
常にDominoと情報のやりとりをやっているわけではない。
そのため、競合しているかどうかはHTML上(ブラウザ上)では簡単にわからない

=JavaScriptで判断することは出来ない。

そんなこんなで保存エージェントのLotusScript内で判断するしかなかったりします。
※先に「SaveOptions」フィールドを対象のフォームに設置しておいてください。
※判断する方法は、文書中に「$Conflict」というフィールドがあるか否かです。
※IE5.0以降以外のhistory.back()の動作があやふやなので、強制的に元のページ(編集モードだけど編集前に)戻らせる方法をとります。

Dim Ses as new NotesSession
Dim doc as NotesDocument
Set doc = Ses.DocumentContext

If ( doc.HasItem("$Conflict") = True ) Then
'競合文書が発生していたら保存処理中止し、競合メッセージ表示
doc.SaveOptions = "0"
Print |<script>|
Print |alert('競合エラー\n他ユーザが編集中です。\n一度文書を閉じてください。')|
Print |if(documnt.all){| 'IE5.0以降
Print | window.history.back()|
Print |}else{|'IE5.0以降以外
Print | location.href = (location.href.indexOf('?') == -1) ? |
Print | location.href + '?EditDocument' : location.href.replace(/?.*/i, '?EditDocument');|
Print |}|
Print |</script>|
Exit Function
else
doc.SaveOptions = "1"
End If

こんな方法でしか確実な回避方法がないってどうなんだろう;
これからDominoバージョンアップで対応されるといいなぁ。
スポンサーサイト

(記事編集) http://mesosune.blog123.fc2.com/blog-entry-50.html

2007/12/17 | Comment (3) | Trackback (0) | HOME | ↑ ページ先頭へ |
この次の記事 : 競合回避方法(他文書)
この前の記事 : 競合回避方法(Notes)

Comment


あるあるあr(ry

>ユーザーは必ずやります。

ごめん、めっちゃウケましたw
どんなに注意勧告だそうが、やる人はやりますねw
それも、その人は懲りずに何度でもやらかしますよねww

nami |  2007/12/18 (火) 10:49 No.20


いらっしゃいませ^^

コメントありがとう御座います。

今回は,ド壺さんのところの記事をみて競合回避方法をざっくりと書いてみました(笑)

何度もやるユーザーさんも
耳には入って居ると思うんですよ。

しっかし,保存エージェントが重いと,
送信できているのか不安になったりして止めちゃったり,連打したりと
色々やってみたくなるのがユーザー心理ってもんでしょうw

「IEしか対応してないDBです」といってるのに他のブラウザ使ってみたり(笑)

開発者ですら
「ブラウザを何個も立ち上げてTESTしても
セッションIDの関係が絡んで正しい結果にならんのでやらんでください;」
といってもやるヤツはやりやがるので

ユーザーに過大な期待するほうが(以下自粛)

めそ凹 すね丸(管理人) |  2007/12/22 (土) 04:31 [ 編集 ] No.21


あぁ,そうそう。

私はとある理由(そのうち掲載します)で隠しボタンを極力やりたくないので,
保存ボタンの中身は常にJavaScriptです。

なので,本文中で「以外の方法が無い」と言っています。

保存ボタンを@式で動作させる場合には,
@式で競合しているかをNotesと同じように判定することができますよ。
※実は@式でもJavaScriptを使えたりするので工夫次第では(略)

めそ凹 すね丸(管理人) |  2007/12/22 (土) 04:36 [ 編集 ] No.22

コメントを投稿する 記事: 競合回避方法(Web)

お気軽にコメントをぞうぞ。
非公開 (管理人のみ閲覧可能なコメント) にしたい場合には、ロック にチェックを入れてください。

  任意 : 後から修正や削除ができます。
  非公開コメントとして投稿する。(管理人にのみ公開)
 

Trackback

この次の記事 : 競合回避方法(他文書)
この前の記事 : 競合回避方法(Notes)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。