投稿

3月, 2014の投稿を表示しています

XPagesの@Adjust関数で誤った結果が出力される

イメージ
おはようございます。
今日(執筆時点)は2014年3月25日です。6年前の今日、ブログを始めました。

初の記事は、上級だぁですね。まだNotes 8.0が発売開始されたばかりの頃でNotes 7.0の資格試験を受験したという話ですね。
私はこの後、紆余曲折を経てIBM Certified Advanced Application Developer - Lotus Notes and Domino 8.5の資格をなんとか取得することができましたが、すでにNotes 9.0の資格試験が始まっているのですね。
どうしよう、受験しなくちゃ・・・

さて、ということで本日が本当の丸六年の日となります。
そんな日なので記事を更新しないわけにはいかないでしょう。

では、本題に入る前に6年目最後のボタンをクリックしましょう(でも、明日以降にこの記事を見ることもあるんだよね・・・ま、いっか)




今日はXPagesで利用できる@関数についてです。
@Adjust()関数という関数があります。指定した日付のy年m月z日h時間m分s秒前/後を算出するというものですね。
例えば、2014年4月1日の1か月後の日付は@Adjust( @TextToTime("2014/04/01"), 0, 1, 0, 0, 0, 0 )で算出できます。
結果は、2014/05/01が返ってきます。

実はこの関数、不具合があるようなのです。
指定した日付の前月が30日以下の場合(つまり、3月、5月、7月、10月、12月)、1か月後の値が正しく計算されないのです。

以下のような簡単なコードを作成して実行してみました。
var tmpDate; var dspDate; for ( var i=1;i<=12;i++ ) { dspDate = "2014/" + i + "/01"; tmpDate = @TextToTime( dspDate ); print( dspDate + "の翌月は" + @Adjust( tmpDate, 0, 1, 0, 0, 0, 0 ).toLocaleString() + "です。" ); } 実行結果は次の通り。

赤文字になっているところを…

Ctrlキーを使ってソース検索を便利に行おう!

イメージ
皆さん、こんにちは。

3月も半ばになり、ようやく暖かくなってきました。と思っていたのですが、今週末は寒の戻りにより寒くなるとのこと。
季節の変わり目は体調を崩しがちなので気を付けましょう。

また、早いところでは、桜が咲き始めているようで、そろそろお花見を・・・という方もいらっしゃるのでしょうね。
ちなみに葛飾区の水元公園の桜はまだまだでした(場所や桜の種類によっては咲いてるところもあるようです)。


ではこのボタンをクリックしたら、本題に入りましょう。



今日はDomino Designerの話です。
LotusScript を記述中に自作関数の仕様を確認したい、修正したいということがあるかと思います。
その関数が別のスクリプトライブラリになっている場合、いちいちそのライブラリを開いて、目的の関数を探す・・・ということをしていないでしょうか。

でも、ライブラリや関数の数が多くなってくると面倒ですよね。
そんな時はハイパーリンクの機能を使用します。

Domino Designerではデフォルトでこの機能がONになっているのですが、どこで設定されているかを確認しておきましょう。
Domino Designerを起動したら、[ファイル][プリファレンス]メニューを実行します。

プリファレンス画面が開くので、[一般][エディター][テキスト・エディター][ハイパーリンク]を選択します。
下図の画面になるので[オンデマンド・ハイパーリンク・スタイル・ナビゲーションを使用可能にする] のチェックを入れて[OK]をクリックします。

これで、Domino Designer上でハイパーリンクが使えるようになりました。
この機能のON/OFFは即時反映されるので、Domino Designerの再起動の必要はありません。


次にリンクの対象となるものを見ていきましょう。
まずは、スクリプトライブラリ。
下図はエージェントのコード画面です。 Use "LIBSample"としてLIBSampleのスクリプトライブラリを利用できるようにしています。
ここでCtrlキーを押して、マウスカーソルをあてると、下図のように青文字になり、下線が追加されます。

ここでマウスをクリックすると、下図のようにLIBSampleが開きます。

エージェントに戻って、今度はLIBSampleにある…

累計アクセス40万超えました!そして・・・

皆さん、こんばんは。

当ブログを開始したのが、2008年3月25日。
もうすぐ丸6年が経過します。

そして、ついに累計アクセスが40万を突破いたしました!
最初の1~2年は1万アクセスを超えた!とかで喜んでいたというのに・・・

今や、それどころではなくなっています。

Notesが生まれて25年!そのうち、私が携わってなんとまぁ、20年が経過します(今度の4月で21年目です)。
そのうち、たった6年しかブログを書いていないと言ったらそれまでなんですが、
それでもこれだけ書くことがあるというのはなかなかのものではないでしょうか。

ホントに使い勝手のある素晴らしい製品ですね。
まだまだ書きたいこと(皆さんに伝えたいこと)がたくさんあります。


今後もNotes/Dominoの話題を提供できるように頑張っていきますので、応援をよろしくお願いします。


では、今日はこの辺で。

文字列の検索(StrRightBack)

イメージ
皆さん、こんにちは。
3月になりました。ということは、今年はすでに6分の1を消化してしまったという事です。早いですね(笑)。
時間は万人平等に過ぎていくものなので、大切に過ごしましょう。


ということで?、本日の話題に入りますが・・・その前に

をクリックしてください。



さて、今日は久しぶりの文字列操作です。しかもLotusScriptです。XPagesを推進しなければいけないのに・・・

と言いつつ、先に進みます。
文字列操作の関数のうち、StrRightBackやStrLeftBack関数があります。
これらは、文字列を右側から検査していき、検査対象の文字(列)を発見したら、その文字の右側もしくは左側を取得するものです。

例えば、
c:\tmp\TestFolder\testdata.txt
という文字列があった場合、
StrRightBack( "c:\tmp\TestFolder\testdata.txt", "\" )
という関数を実行すると、その戻り値は
"testdata.txt"
となります。

これは、フルパスを元にして、ファイル名だけを取得したい場合に利用できます。

ここで、ファイル名とそのファイルが格納されている直接のフォルダ名の両方を同時に取得したい!となった場合はどうすれば良いのでしょうか?

考えてみましょう・・・
左側から取得するのであれば、Instr関数で検査対象の文字を何回か調べていけば、x文字目からy文字目までを取得して、その後Mid関数で・・・という方法もあるのですが、
右側から取得するとなると、そうはいきません。

難しそうですね・・・
とここであきらめてはいけません。
実はStrRightBackやStrLeftBack関数等には、検査対象の文字が何回出てきたら、そこを基準とするというオプションがあるのです。

関数のヘルプをよく読むと、
occurrences 
Long。部分文字列を返す前に検索パターンが一致する数です。既定は 1 で、検索パターンが最初に一致した時点で部分文字列を返します。
という記述があります。

つまり、ここの数値を2や3にすれば、検査をその回数分、行ってくれるのです。
では、サンプルです。
Sub Click(Source As Button) Dim sD…