忍者ブログ

ド壺

脳内がNotes/Domino系からASP.NETに移行しつつあるIT系情報ブログなつもり。

   
カテゴリー「LotusNotes情報」の記事一覧

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

結論をちゃんと載せてませんでしたね。

以前に載せた遠回りですの記事、ちゃんと結論載せてませんでした。


結局のところ、
@todayでやるとビュー表示までに待ちぼうけ状態になるし、
たち様に教えてもらった@TextToTime("Today")でやっても
設計変更したときはちゃんと計算されるものの
ほっときっぱーにしとくと、
やっぱり設計変更した日固定からの計算になってしまふぅうぅううう・゚・(ノД`)・゚・。
意図していた「今日より2週間前までに変更された文書を表示する」ビューは
@Todayも@TextToTime("Today")でも結局ムリ。
という状態に。

フン。結局ビューで日付計算やるなってことなんだろね!

しょうがなく、遠回り方式(設計者以上の人がアクセスしたときに
ビュー選択式を変更する方法)に戻しましたっというオチ。


で、今日RSSチェックしてたら、その辺、めそ凹すね丸様のブログLotusNotesな日々
ビューの選択式に@Todayとか@TextToTimeとか
に載ってましたねー。
うんうん、やっぱりどっちもダメじゃねーって結論でした。まる。

拍手[0回]

PR

昔あった不具合情報

うる覚えで申し訳ないんですが、
以前ノーツのR5.0.5を使用してたときの不具合の現象を載せておきます。
サーバ(DOMINO)もR5.0.5です。


自分の悪いクセなんですが、
スクリプトを作成途中に、ここは関数化したほうがいいなーっと
いうときが多々あります。
設計をちゃんと考えてないのがバレバレですねー(アセアセ
↓は、そんなときに出合った現象です。

ノーツ・スクリプトをフォーム上に作成しているとします。
作成途中に一部のスクリプトを関数化するかーっと
フォーム上の作業は保存せずそのままにして、
スクリプトライブラリにFunction関数もしくはSubルーチンを作成します。

スクリプトライブラリでの作業が終え、保存をかけたところで、
作業中のフォーム上のGlobalsのOptionsに
Use "common"
とUseステートメントを1行追加入力し、
QueryModeChangeなどのイベントに先ほど作成した
スクリプトライブラリ上の関数を呼び出すようにスクリプトを入力します。
ここでフォームをセーブをするとコンパイルエラーが発生します。

一度でもこのコンパイルエラーが発生させると、
その後、そのフォーム上でスクリプトライブラリ上の
関数とSubルーチンを呼び出すステートメントを入力しても
毎回エラーが発生するようになります。
ノーツ(デザイナー)を再起動させようが、PCを再起動しようが
次の日だろうが全然ダメ。
(もしかするとサーバを再起動すれば直るかもしれないが、
この辺の確認はしてません。というか、あきらめて
フォーム上のGlobalsへと関数を移動させるか、
簡単なフォームなら一から作り直してました。。。TT)

これは、スクリプトライブラリを保存して(コンパイルして)から
関数呼び出し(と、useステートメントも)を追加せずに
一度作業中のフォームを保存して閉じて、その後再度フォームを開いてから
呼び出しのステートメントを追加することで回避ができます。

で、現在R7を使用してますが、
この手順で作業しても、一時的にコンパイルエラーするだけで
一度フォームを閉じて→開いて作業しなおすと
問題なくスクリプトライブラリから呼び出すことが可能となります。
R6は分かりません。が、もしかするとR6から直っているのかも???

ただし、R5で『やってしまった』フォームを
R7の設計上で呼び出しができるようになるのかは検証してません。
というか、すでにどのDBのどのフォームが
『やってしまった』フォームに当てはまっているのか
本人でも分からなくなっているので検証不可能。。。

拍手[0回]

DB間文書のコピー用LotusScript

前に他の部署の人に聞かれて作ったサンプルのスクリプト。
メールDBの中のドラフト保存でとっといてたけど、
いい加減ドラフト文書が邪魔zzzなのでこっちに移動。


現在のDBから別DBへとコピーする場合のスクリプト。
現在のDBからコピーする文書をビュー上で選択し、
別DBへとコピーします。

*注意点*
コピーする文書のフォームは、
別DB内に現在のDBで使用している同じフォーム名のフォームを用意すること。
フォーム内の設計をまったく同じにする必要はないが
表示したいフィールドは同じ名前のものを使用すること。


エージェントで作成し、↓のように設定すること。

(ここでの画像はR7のものですが、R5等でも別のところで同じように設定できます。)

Dim session As New NotesSession
Dim db As NotesDatabase
'現在のDB
Set db = session.CurrentDatabase
'別DBの指定
Dim Tdb As NotesDatabase
Dim ServerName as string, DbPath as string
ServerName = "サーバを指定"
DbPath = "パスを指定"
Set Tdb = New NotesDatabase( ServerName, DbPath )
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
  Call doc.CopyToDatabase( Tdb )'ここでコピー
  Set doc = collection.GetNextDocument(doc)
Wend

拍手[3回]

@IFと@Trueと@Return

あまりにお久しぶりです。

以下は、ノーツ関数が不得意な自分のための防備録。
(だってスクリプトのほうが動作確認楽なんだもんzzz)

ボタンアクションで以下のような@関数式が表記されている場合、
1行目で、編集モードになってない場合に
2行目から続く処理を行わないようにする。
編集モードの場合は、そのまま処理を続ける。


@If(@IsDocBeingEdited;@True;@Return(""));
DBFile := "49256997:000BFDAA";
temp := @PickList([Custom]:[Single];DBFile;"TraderSelectView";"業者選択";"業者を選択してください";6);
FIELD GyousyaName := @Word(temp;",";1);
FIELD GyousyaLucas := @Word(temp;",";3);
FIELD GyousyaMail := @Word(temp;",";4);
@Command([ViewRefreshFields])

拍手[0回]

遠回りです

のーつ6から、スクリプトからビューの選択条件を変更できるのね。

ってことで、
ビューを開いたときに条件式が変更できるようなものを作ってみた。

Sub Queryopen(Source As Notesuiview, Continue As Variant)
Dim view As NotesView
Dim formula As String
formname$ = |((Form = "keijiban") || (Form = "Main"))|
formula = " SELECT " & formname$ & " & (@Modified > [" & (Date - 14) & "])"
Set view = Source.View
view.SelectionFormula = formula
Call view.Refresh
End Sub

が、これ、自分で動作確認してみたときは問題なかったのだが
DBアクセス権で編集者権限以下の人がやるとエラーする。。。
当たり前っていえば当たり前。
なんだけど、自分がDB管理者だから落とし穴・゚・(ノД`)・゚・。

なので、ちょっと細工。
アクセス権チェックして設計者以上なら条件式を変更するようにしてみた。

Sub Queryopen(Source As Notesuiview, Continue As Variant)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Set db = session.CurrentDatabase
Set acl = db.ACL
Dim user As String
user = session.UserName
Set entry = acl.GetEntry( user )
If Not ( entry Is Nothing ) Then
If entry.level = 5 Or entry.level = 6 Then
Dim view As NotesView
Dim formula As String
formname$ = |((Form = "keijiban") || (Form = "Main"))|
formula = " SELECT " & formname$ & " & (@Modified > [" & (Date - 14) & "])"
Set view = Source.View
view.SelectionFormula = formula
Call view.Refresh
End If
End If
End Sub

とりあえずはこれで。
だが、一番痛いのは設計権ない人が開いても
日付更新しないのよねー。げふんげふん。


ほんとは↓にしたかっただけなんだけど、
SELECT (Form = "keijiban" | Form = "Main" ) & ((@Modified >@Adjust( @Today ; 0 ; 0 ; -14 ; 0 ; 0 ; 0 ) ))
なんだか集中してるサーバにDBを置いたもんで
アクセス集中する時間帯に、この条件式置いたビューひらくと
表示までに3分以上待たされるという最悪な状態。

やっぱ、ビュー選択条件に日付計算させるのが悪いって?
でも、自前の部門サーバでやると問題ないのになー。ないのになー。
違いは、サーバ上に置いてるDBの量と、OSだけなんだが。。。なぁ。。
あ、ハードもサーバスペックも違います。(そりゃそーだ。

拍手[0回]

カウンター

ブログ内検索

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

プロフィール

HN:
nami
性別:
女性
自己紹介:
火星人+/ペガサス/ささ女
の完全変人タイプ。

仕事は1事業所のIT管理者。
ノーツDB開発を主に担当。
鯖管理とNetwork管理にも携わる。
ぶっちゃけIT便利屋。
基本は「広く浅く」。
口癖は「メンドクサ。。。」

ついったーやってます。
@namiphoをフォローしてネ


トラバについて
ここの記事のリンクがない記事については、トラバ許可はしませんのでご承知おきください。

最新コメント

No Title(返信済)
(04/25)
No Title(返信済)
(04/12)
No Title(返信済)
(03/01)
(10/07)
(09/29)

最新トラックバック

バーコード

アフェリエイト


デル株式会社
シマンテックダウンロードストア

お天気情報

アクセス解析

Copyright ©  -- ド壺 --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]