1 | 2 | 3 | 4 | 5 |最初 次ページ >>
November 18, 2015

$NoPurge Fieldってなんだ?

テーマ:Notes/Domino
結構、このSystem Fieldをご存知ない方も多いようなので、少しだけ解説しておきます。

このFieldが活躍しているのは、Followup処理の場合なのですが、皆さん、Followup Flagを立てた後に文書のPropertyでこのFieldを確認してみると、Fieldだけ存在し、中はNull状態であることが分かります。

逆にFollowupを解除すると、このFieldに過去のDate Typeの値が入ります。

このFieldはNotesでArchive処理をする際に影響していて、皆さんもご存知の通りFollowupが設定されている文書はArchive対象から除外され、Archiveした後に、Archive出来なかったMessageが表示されます。

繰り返しScheduleの文書を見てみると、このFieldが生成されていて、繰り返しが完了する日付が設定されていることが確認できると思います。

つまり、この$NoPurge Fieldというのは、その文書をいつまで保つかを制御している訳です。

通常、Archiveなどで消されたくない文書にはこのFieldだけを生成して、中身を""にしておくと、Archive処理で対象外になるという訳です。

System Fieldを理解すると、結構面白いと思います。
 
いいね!した人  |  コメント(0)  |  リブログ(0)
最近の画像つき記事
 もっと見る >>
August 03, 2015

Domino AdministratorでのMail監視 -15-

テーマ:Notes/Domino

<話題の履歴>


Domino AdministratorでのMail監視 -1-

Domino AdministratorでのMail監視 -2-

Domino AdministratorでのMail監視 -3-

Domino AdministratorでのMail監視 -4-

Domino AdministratorでのMail監視 -5-

Domino AdministratorでのMail監視 -6-

Domino AdministratorでのMail監視 -7-

Domino AdministratorでのMail監視 -8-

Domino AdministratorでのMail監視 -9-

Domino AdministratorでのMail監視 -10-

Domino AdministratorでのMail監視 -11-

Domino AdministratorでのMail監視 -12-

Domino AdministratorでのMail監視 -13-

Domino AdministratorでのMail監視 -14-



前回は、Agentの有効化/無効化を設定文書から変更可能なようにしてみました。

今回は、もう少し改善して、Agentの状態の表示を行います。



さて、AgentのStatusはどのように取得するのが良いのでしょうか?

LotusScriptが得意な方なら、NotesAgent ClassのPropertyで取得すれば簡単!と言われるでしょう。

@Formulaの得意な方なら、@IsAgentEnabledで取得するのが簡単!と言われるのではないかと思います。


私は、どちらかと言うと、@Formulaが大好きなので、後者の@IsAgentEnabledで取得したいところです。


特に、Formの中で、表示用の計算結果Fieldを定義してAgentのStatusを表示する場合、以下の式を書くと簡単に出来てしまいます。


 @If(@IsAgentEnabled("ChkMailboxDoc"); "Enabled"; "Disabled")


ところが、私が検証に利用しているWindows版のNotes/Domino 9.0.1FP3では、この式で正常に処理できないのです。


前回、@Command([AgentEnableDisable])でAgentの有効化/無効化のToggleが出来ないことを報告しましたが、多分根は同じで、適切にAgentのStatus取得が出来ないのだと思います。


この問題は、AgentのSecurityで『「編集者」レベルのユーザーの有効化を許可』を有効にした場合のみ起こり、このOptionを無効化すると正常にStatusが取得できます。


しかし、今回は『「編集者」レベルのユーザーの有効化を許可』を有効にして編集者権限しか持たないOperatorであっても、設定文書からAgentの有効化と無効化を行えないと意味がありません。


Bugだから出来ないと言っていても仕方ないので、別の方法を考えるしかありません。


最初に書いたように、LotusScriptのNotesAgent ClassのPropertyでAgentの状態を取得することが出来ます。


しかし、皆さんご存知のように、表示用計算結果Fieldの式にLotusScriptを記述することは出来ません。

LotusScriptを使って取得するにはFormのOnload/QueryOpen/PostOpen Eventなどを使って、一度Fieldに結果を入れてから参照しなければならないのです。


まあ、こんなことを言ってみても仕方ありませんので、まず、LotusScriptなら状態が把握できるのかどうかを試してみることにします。


簡単な方法は、ボタンにLotusScriptを記述してAgentの状態をCheckしてみることです。


簡単なCodeですが、以下を書いてみました。


 Sub Click(Source As Button)
  Dim ss As New NotesSession
  Dim db As NotesDatabase
  Dim agent As NotesAgent
  Dim agent_status As Boolean
  Set db = ss.CurrentDatabase
  Set agent = db.GetAgent("ChkMailboxDoc")
  agent_status = agent.IsEnabled
  Messagebox agent_status
 End Sub


このButtonを実行してみると、問題なく取得できているようです。



では、この結果を文書上に表示させる訳ですが、表示用の計算結果Fieldに値を書き込むことはできませんので、編集可能なText Fieldとして、AgentStatus Fieldを作成し、文書上には表示しないようにしておきます。

次に、文書上に表示用の計算結果Fieldを作成し、以下を記述します。



 @If(AgentStatus = "True"; "Enabled"; "Disabled")



これで、AgentStatus FieldにAgentの状態が書き込まれていれば、状態を表示してくれるようになります。


次に、AgentStatus FieldへのAgentの状態の書き込みですが、QueryOpenやOnload Eventを使って書き込むことができますが、この場合、文書が編集Modeでないと書き込みは出来ません。


結局、文書を編集することになってしまいますが、今回はAgentの状態を変更するUserは編集権限を持っているので、文書を編集することは可能です。


取り敢えず、Onload Eventに以下のCodeを書いてみます。



 Sub Onload(Source As Notesuidocument)
  Dim ss As New NotesSession
  Dim db As NotesDatabase
  Dim agent As NotesAgent
  Dim agent_status As Boolean
  Set db = ss.CurrentDatabase
  Set agent = db.GetAgent("ChkMailboxDoc")
 If Source.IsNewDoc Then
  Call Source.FieldSetText("AgentStatus", Cstr(agent.IsEnabled))
  Call Source.FieldSetText("SaveOptions", "0")
  Call Source.Refresh
 Else
 If Not(Source.EditMode) Then
  Source.EditMode = True
  Call Source.FieldSetText("AgentStatus", Cstr(agent.IsEnabled))
  Call Source.FieldSetText("SaveOptions", "1")
  Call Source.Save
  Source.EditMode = False
 Else
  Call Source.FieldSetText("AgentStatus", Cstr(agent.IsEnabled))
  Call Source.FieldSetText("SaveOptions", "0")
  Call Source.Refresh
  End If
  End If
 End Sub



騙しのようなLotusScriptですね。


無理やり、Editmodeに変更して、AgentStatus Fieldの値を更新し、文書を保存してから、再度Editmodeを解除すると言う荒業です。


多分、こんなCodeを書くことはお勧めできないと思います。

出来ることとやっていい事は違いますから。


Formの中に書くAgentの有効化/無効化の式は以下のようにしました。


 @If(AgentStatus = "True";
    @Command([AgentEnableDisable]; "ChkMailboxDoc"; "0");
    @Command([AgentEnableDisable]; "ChkMailboxDoc"; "1")
   );
 @Command([CloseWindow]);
 @Command([OpenDocument])


これもかなり無理やりですが、AgentStatusによって状態をToggleすることが出来、かつ、無理やり文書をClose後にOpenすることで、文書で表示されるAgentStatusがUpdateされた状態で表示できます。


これらのCodeは文書更新を前提としたCodeであり、ここまでして実現するか??と私だったら思うCodeです。


Code上実現可能なことと、Applicationが正常で、問題を起こさないことは別物ですから。


このCodeもちょっとしたことで、Loopを招いたりすることもあるのです。


途中でSaveするために、SaveOptions Fieldを"1"に設定していますが、保存された文書はこのままの状態になります。

Defaultとしては"0"であって欲しいと思いますが、そのために小細工をしようとしたりすると、Loopに陥ったりする場合があるのです。


まあ、本来は@IsAgentEnabledで取得できるのがBestなのです。


文書を保存しない方法も考えられるでしょう。


皆さん、真っ先に思いつくのが環境変数で保存して参照することでしょう。

まあ、それも一つの解決策かも知れません。


今回は、AgentのStatusを文書上に表示するようにしてみましたが、文書更新を伴う処理になり、もう一つの結果でした。

次回は、別の方法を試してみたいと思います。



<続く>

 

いいね!した人  |  コメント(0)  |  リブログ(0)
July 27, 2015

Domino AdministratorでのMail監視 -14-

テーマ:Notes/Domino

<話題の履歴>


Domino AdministratorでのMail監視 -1-

Domino AdministratorでのMail監視 -2-

Domino AdministratorでのMail監視 -3-

Domino AdministratorでのMail監視 -4-

Domino AdministratorでのMail監視 -5-

Domino AdministratorでのMail監視 -6-

Domino AdministratorでのMail監視 -7-

Domino AdministratorでのMail監視 -8-

Domino AdministratorでのMail監視 -9-

Domino AdministratorでのMail監視 -10-

Domino AdministratorでのMail監視 -11-

Domino AdministratorでのMail監視 -12-

Domino AdministratorでのMail監視 -13-



前回は、Mail.boxの数を取得できるようにしました。

今回は、Agentの有効化/無効化を設定文書から出来るようにします。



AgentのEnable/Disableは非常に簡単で@Commandで変更することができます。


FormのAction Buttonに以下の式を記述するだけです。


  @Command([AgentEnableDisable]; "ChkMailboxDoc")


Actionを実行して暫く待ってから、Server Consoleから状態を確認すると、以下のうにAgentがScheduleされたことが分かります。


> tell amgr sch
[0BB0:0002-0BB4] S S 09:26 今日 ChkMailboxDoc Test\MBCheck.nsf


勿論、Agentの画面でも有効化されているのが確認できます。


MailMonitoring_15


では、一般のOperatorが有効化/無効化の変更をすることを考えて、別のUserにDBのACLの設計者権限のみを与えてみます。


MailMonitoring_16


しかし、設計者権限では足りないようです。



MailMonitoring_17


管理者権限を与えてやると、AgentのEnable/Disableが可能になりますが、管理者権限を与えたくない場合もあるでしょう。


編集者権限以上の場合は、Agentの設定でAgentのEnable/Disableが可能になります。



MailMonitoring_18


この場合、Agentを有効化すると、以下のようになります。



MailMonitoring_19


編集者以上の権限でAgentのEnable/Disableを行う場合は、Notes/Domino 6以降での有効化になっています。

記憶が定かではありませんが、Mail DBを編集者権限で運用する際にMail受信前Agentの有効化/無効化をサポートするためにこのように変更された記憶があります。


この場合、@Command([AgentEnableDisable])によるAgentの状態のToggleが出来なくなってしまうようで、無効なAgentを有効化出来ても無効化が出来ない、逆に有効なAgentは無効化出来ても有効化できない状態になるようです。


これはBugとしか思えませんが、以下のように式を修正して、明示的にAgent Statusを指定すると回避できます。


 Enable : @Command([AgentEnableDisable ]; "ChkMailboxDoc"; "1")

 Disable: @Command([AgentEnableDisable ]; "ChkMailboxDoc"; "0")


しかしこれではButton(Action)の数が増えてしまいますし、現在のAgentのStatusも分からない状態ですので、どのButton(Action)を実行して良いのか判断も付かない状態です。



今回は、Agentの有効化/無効化を設定文書から変更可能なようにしてみました。

次回は、もう少し改善して、Agentの状態の表示を行います。


<続く>

いいね!した人  |  コメント(0)  |  リブログ(0)
1 | 2 | 3 | 4 | 5 |最初 次ページ >>

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。