当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2009年7月27日月曜日

ツールバーから「Notesの終了」が消えた!?

些細なことだが、筆者は悲しかったのと困ったので、書いておく。

ノーツにはツールバー(昔のバージョンでは、スマートアイコンと呼んでいた)がある。
このツールバー、標準のまま使うのではなく、カスタマイズして使うと結構便利になるので、重宝していた。

筆者がよくカスタマイズするツールバーは以下のもの(画面はLotus Notes 7.0のものを抜粋)。
・選択文書を既読に
・選択文書を未読に
・形式を選択して貼り付け
・データベースを開く
・標準
・Lotus Notesの終了
・表のプロパティ
・文字のプロパティ


これらを既存のツールバーにセットして使っていたのだが、
ノーツ8.5では、[Lotus Notesの終了]がなくなっている。

なんで?
@Command([ExitNotes])はなくなってないし、動くよね?
他に何か不都合でもあったの?

他にも全文検索の検索バーを表示してくれる[検索]もなくなってるし・・・

何、この微妙な変更は?
ちゃんと説明して欲しいっていうか、復活させろ!


特に、[検索]はヘルプDBで重宝して使ってるのだが(ヘルプDBは、起動時に全文検索のバーが表示しないように設計されているので、ツールバーに[検索]をセットして、強引に表示するようにしてました)、ツールバーのカスタマイズでも変更できない!→@Command([ViewShowSearchBar])のアイコンを追加して、保存すると追加されたものが消えてしまう。

これは、もうバグでしょ!?非道いよ!!


仕方がないので、筆者はヘルプDBの設計を変更して、全文検索のバーの非表示をコメントアウトしました。

2009年7月23日木曜日

16進数を10進数に変換する関数を自作してみた

x進数を10進数に変換する関数で16進数を10進数に変換する関数があることを紹介した。

しかし、ないものだと思っていたので、自作してみた。
さらにせっかくなので、関数化してみた。
もっと綺麗に書けるかもしれないが、やっつけだったので勘弁して欲しい(汗)。


===========================================================

Function HexToDec( HexStr As String, DecLong As Long ) As Boolean
'--------------------------------------------
' 【16進数から10進数へ変換する関数】
'
' 引数: HexStr 16進文字[Input]
' DecLong 10進数[Output]
' 戻り値: True 成功
' False 失敗
' 作成者: 御代 政彦
' 作成日: 2009/07/22
' バージョン: 1.0
'--------------------------------------------
On Error Goto ErrProc

Dim HexLen As Integer '16進数の桁数
Dim HexInt As Integer '16進数の各桁を数値にしたもの
Dim i As Integer 'カウンタ

'16進数の桁数を取得する
HexLen = Len( HexStr )

'16進数の桁数分ループする
For i = 1 To HexLen
'各桁を数値に変換する
HexInt = Fto15( Mid( HexStr, HexLen + 1 - i, 1 ) )
If HexInt = -1 Then
HexToDec = False
Exit Function
End If

'桁数に16のべき乗を書けたものを累積していく
DecLong = DecLong + HexInt * ( 16 ^ ( i - 1 ) )
Next

HexToDec = True
Exit Function

ErrProc:
HexToDec = False
Exit Function
End Function

Function Fto15( HexStr As String ) As Integer
Fto15 = -1
If HexStr = "0" Then
Fto15 = 0
End If
If HexStr = "1" Then
Fto15 = 1
End If
If HexStr = "2" Then
Fto15 = 2
End If
If HexStr = "3" Then
Fto15 = 3
End If
If HexStr = "4" Then
Fto15 = 4
End If
If HexStr = "5" Then
Fto15 = 5
End If
If HexStr = "6" Then
Fto15 = 6
End If
If HexStr = "7" Then
Fto15 = 7
End If
If HexStr = "8" Then
Fto15 = 8
End If
If HexStr = "9" Then
Fto15 = 9
End If
If HexStr = "a" Then
Fto15 = 10
End If
If HexStr = "a" Then
Fto15 = 10
End If
If HexStr = "b" Then
Fto15 = 11
End If
If HexStr = "c" Then
Fto15 = 12
End If
If HexStr = "d" Then
Fto15 = 13
End If
If HexStr = "e" Then
Fto15 = 14
End If
If HexStr = "f" Then
Fto15 = 15
End If
End Function

====================================================

また、この関数を利用したサンプルコードを載せるので、どのように使うのかを確認して欲しい。

Sub Click(Source As Button)
Dim inp As String '16進文字列
Dim ret As Long '10進数
Const MSGTITLE = "16進数から10進数への変換"

inp = Inputbox( "8桁以内の、「0-F」でできた文字列を入力してください。", MSGTITLE, "0" )
ret = 0

'入力チェック
If inp = "" Then
Msgbox _
"キャンセルされたので、処理を中止します。", _
MB_OK + MB_ICONEXCLAMATION, MSGTITLE
Exit Sub
End If

If HexToDec( inp, ret ) Then
Msgbox _
"16進数: " & Chr$(9) & inp & Chr$(10) & _
"10進数: " & Chr$(9) & Format( Cstr(ret), "#,###" ), _
MB_OK + MB_ICONINFORMATION, MSGTITLE
Else
Msgbox _
"変換に失敗しました。", _
MB_OK + MB_ICONSTOP, MSGTITLE
End If
End Sub




【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年7月22日水曜日

x進数を10進数に変換する関数

数値をx進数に変換してみるの中で、10進数に変換する関数はない。と書きましたが・・・

ありました。

Val関数を使います。
元々は、文字列を数値にする関数なのですが、
特別な記号を使うことで、16進数や2進数を10進数に変換することができるのです。
特殊な記号とは、ヘルプにも書いてありますが、
&h及び&です。
「&h文字列&」というように、&hと&で囲うと間の文字列が16進数として判断されます。
&hの代わりに、&oや&bを使うとそれぞれ8進数、2進数となります。


サンプルは16進数を10進数に変換するものです。
応用して、2進数を10進数に変換するものを作ってみてください。


------------------------------------------------------------
Sub Click(Source As Button)
Dim inp As String
inp = Inputbox( "16進数を入力してみてください", "16進数を10進数に変換" )

Msgbox Format( Cstr( Val( "&h" & inp & "&" ) ), "#,###" )
End Sub


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

数値をx進数に変換してみる

10進数からx進数への変換のサンプルです。
とは言っても、
2進数、8進数、16進数のみです。
それぞれBin、Oct、Hex関数を使うだけの簡単なものです。
この中で使えそうなのは、BinとHex関数ですね。

入力できる10進数に限界があるのは、Long型だからです。
ノーツでは、数値はそこまでしか扱えないので、注意が必要です。

ヘルプを見ると分かりますが、BinやHexもLong型の限界までしか変換をサポートしていません(戻り値の最大桁数が決まっています)。


ちなみに、10進数への変換を行う関数はないんですね。ちょっと残念。


--------------------------------------------------------------------
Sub Click(Source As Button)
On Error Goto ErrProc

Const MSGTITLE = "数値のバイナリ表現"
Dim ret As String

'基本となる数値の入力
ret = Inputbox( "-2,147,483,648~2,147,483,647の数値を入力してください。", MSGTITLE, "0" )

'入力チェック
If ret = "" Then
Msgbox "キャンセルがクリックされたので、処理を中止します。", _
MB_OK + MB_ICONINFORMATION, MSGTITLE
Exit Sub
End If
If Not ( Isnumeric( ret ) ) Then
Msgbox "入力された値は数値ではありません。", _
MB_OK + MB_ICONEXCLAMATION, MSGTITLE
Exit Sub
End If

'x進数への変換結果
Msgbox _
"10進数表現:" & Chr$(9) & ret & Chr$(10) & _
" 2進数表現:" & Chr$(9) & Bin$( Clng(ret) ) & Chr$(10) & _
" 8進数表現:" & Chr$(9) & Oct$( Clng(ret) ) & Chr$(10) & _
"16進数表現:" & Chr$(9) & Hex$( Clng(ret) ), _
MB_OK + MB_ICONINFORMATION, MSGTITLE

Exit Sub

ErrProc:
Msgbox _
"エラーコード:" & Chr$(9) & Cstr(Err) & Chr$(10) & _
"エラーメッセージ:" & Chr$(9) & Error & Chr$(10) & _
"エラー発生行:" & Chr$(9) & Cstr(Erl), _
MB_OK + MB_ICONSTOP, MSGTITLE

Exit Sub
End Sub



【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

4万アクセス!

前回(累計3万アクセス突破!)から2ヶ月かからずに、4万アクセスに達しました。

ネタが尽きてきて、あまり記事を書けていないのに、これだけアクセスしてくれるのは嬉しいです。

まだまだ続けていく気はありますので、期待しないで見てください。

ネタを増やすため、引き続きお仕事の依頼も受け付けておりますので、
お気軽にお問い合わせください。

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

第43回葛飾納涼花火大会

昨夜は、地元の花火大会がありました。雨天と言うことで心配だったのですが、決行されました。
葛飾区に引っ越してきて7年目。今の場所に住み始めてもうすぐ丸3年。
毎年、見てきましたが雨というのは初めてです。

自宅の近所の江戸川河川敷まで歩いていき、そこで遠目に見てきました。


雨という割には、綺麗に見えますね。


写真の下の方に写ってる橋は常磐線の鉄橋です(金町-松戸間の所ですね)。

この時間に電車に乗ると、見えるかもしれないです。その近くを国道6号線が走っているのですが、なんか自動車がゆっくりと走っているように見えました。きっと花火を見ているのでしょう。


・・・最早、花火ではないですね。
火事です。爆発です(笑)。

さすがに連発すると、その煙?で周りが曇ってしまい、綺麗に見えませんでした。
風向きや天気の影響もあるのでしょう。


来年は、晴れて欲しいなと思った夜でした。

2009年7月17日金曜日

文書内の全フィールド名を表示する

今日は文書に含まれる全部のフィールド名を抽出するというサンプルです。
となると、LotusScriptかなぁ?と思うのですが、@関数でもできるのです。

@DocFieldsという関数を使うのがミソですね。
これが文書内の全フィールドを取得してくれますので、後は分解するだけです。

サンプルは、フィールドごとに改行してプロンプト表示するようにしてあります。
リストの要素を取得するのに、[]を使っているので、サンプルは6.0.x以降でないと動作しませんので、注意してください。

--------------------------------------------------------------
lst := @DocFields;
num := @Elements(lst);
@For(i:=1;i<num;i:=i+1;tmp:=tmp+@Text(i)+":"+@Char(9)+lst[i]+@NewLine);

@Prompt([Ok];"文書内の全フィールド:["+@Text(num)+"個]";tmp)


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年7月16日木曜日

ファイルの情報を取得する

ネタ切れです。
最近、ノーツの仕事が減っているのもあって、なかなかネタが増えません。
ネタを増やすためにも、仕事の依頼をお待ちしておりますm(_ _)m

さて、今日はそんな中、あまりノーツには縁がなさそうなサンプルの紹介です。
ファイルの情報を取得するというものです。
ファイルのサイズや属性(読み取りとか、隠しとか)程度であれば、Win32APIを使わなくてもLotusScriptの関数だけで取得可能というものです。

サンプルは、ダイアログで選択したファイルの「名前」「サイズ」「更新日」「属性」を取得して表示するものです。
ノーツDBに添付してあるファイルが正常にダウンロードできたかどうか?などの判定に使えるのではないでしょうか?

試してみてください。

下図は実行結果です。


%include "lsconst.lss"

Sub Click(Source As Button)
 Dim uiws As New NotesUIWorkspace
 Dim FullPath As Variant 'ファイルフルパス
 Dim FileName As String 'ファイル名
 Dim FileLength As Long 'ファイルの長さ
 Dim FileDate As Variant 'ファイルの更新日
 Dim FileAttribute As Integer 'ファイルの属性(GetFileAttrの戻り値)
 Dim FileZokusei As String 'ファイルの属性
 
 'ファイル名の設定
 FullPath = uiws.OpenFileDialog( False, "ファイルの選択", "*|*", "", "" )
 If Isempty( FullPath ) Then Exit Sub
 FileName = Strrightback( FullPath(0), "\" )
 
 'ファイル情報の取得
 FileLength = Filelen( FullPath(0) )
 FileDate = Filedatetime( FullPath(0) )
 
 'ファイル属性の取得
 FileAttribute = Getfileattr( FullPath(0) )
 If ( FileAttribute% And ATTR_READONLY ) Then FileZokusei = FileZokusei & " 読み込み専用 "
 If ( FileAttribute% And ATTR_HIDDEN ) Then FileZokusei = FileZokusei & " 隠し "
 If ( FileAttribute% And ATTR_SYSTEM ) Then FileZokusei = FileZokusei & " システム "
 If ( FileAttribute% And ATTR_ARCHIVE ) Then FileZokusei = FileZokusei & " アーカイブ "
 
 'ファイル情報の表示
 Messagebox _
 "名前: " & Chr$(9) & FileName & Chr$(10) & _
 "フルパス:" & Chr$(9) & FullPath(0) & Chr$(10) & _
 "サイズ: " & Chr$(9) & Format( FileLength, "#,###" ) & Chr$(10) & _
 "更新日:" & Chr$(9) & FileDate & Chr$(10) & _
 "属性:" & Chr$(9) & FileZokusei , _
 MB_OK + MB_ICONINFORMATION, "ファイル情報"
End Sub




【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年7月10日金曜日

自分のカレンダーに他人のカレンダーを表示する

きっとIBMのサイトに書いてあったので、そっちを見ればいいや。と思って方って置いたと思われるネタがありました。
このブログもせっかく、多くの方に見ていただいているので、かぶりますが書きます。決してパクリではありませんので(笑)。

他人のカレンダーを見る場合、そのユーザのカレンダーを開く必要があります。
1人のカレンダーを見るだけなら、まだそれでも良いのですが、複数人となると面倒ですね。
また、同時に確認できないのもつらいですね。

グループカレンダーを使えば、空き時間の確認だけはできるけど、具体的な予定が見えないですね。
8.5ではそれを解消するため?に、「自分のカレンダーに他人のカレンダーを表示する」という機能が設けられました。

その手順を紹介します。
1.自分のカレンダーを表示して、左下にある「カレンダーの表示」を確認します。
デフォルトでは、自分自身が表示されているはずです。
※そこのチェックを外すと、自分のスケジュールも表示されなくなります。


2.[カレンダーの追加]をクリックします。


3.「カレンダーの追加」という画面になるので、ノーツユーザ名を入力します。
※ノーツユーザでも直で入力する必要があるのは、ちょっといただけないですね。


4.Googleカレンダーのアカウントを持っている場合、アカウントもしくは公開カレンダーのURLを入力します。


以上です。

下図は実際にカレンダーを追加した画面です。



スケジュールの所にマウスカーソルを移動すると、簡易情報がポップアップで表示されます。


なかなか便利でしょ。
これならグループカレンダーはいらないんじゃ・・・

@Command([FileOpenDatabase])について

ネタDBを見ていて、ふと思ったことがあります。

@Command([FileOpenDatabase])コマンド、いつまであるのかな?
このコマンドは、ノーツDBをオープンするものですが、引数がちょっと変わっています。

引数に設定できるのは、「ビュー」もしくは「ナビゲータ」なんです。
えっ!?まだ「ナビゲータ」なの?「ページ」は?「フレームセット」は?

・・・設定できません。フレームセット名を設定して、実行しても
「そんなビュー/ナビゲータは存在しません。」と怒られる始末。



もうナビゲータは使って欲しくないような事を言っている割に、詰めが甘いですよねぇ。
関数/コマンド増やしすぎて、チェックが行き届いていないのでしょうか。
引数の見直しをして欲しいです。IBMさん。


ちなみに、引数を何も設定しない場合、そのデータベースの起動プロパティの内容に従いますので、フレームセットやページを開きたい場合は、そこを変更するようにしましょう。

2009年7月8日水曜日

MailAddressコマンドの効用

@Command([MailAddress])という@コマンドがあります。

ヘルプには、「[宛先の設定] ダイアログボックスを表示します。このダイアログボックスで、メール文書の [宛先] フィールドに含めるユーザーやグループを選択できます。」と書いてあります。
一見、「ダイアログを表示するだけで、フィールドにセットはしてくれないんだな。」と思ってしまいがちですが、そんなことはありません。ある設定をすることでフィールドにセットしてくれるのです。

その設定とは・・・
宛先フィールドを作ることです。それも決まった名前のフィールドです。
勘の良い方なら、「あ!そういうことか!」と思ってもらえるでしょう。
そうです。「SendTo」「CopyTo」「BlindCopyTo」フィールドです。
これらのいずれかがあれば、良いのです。

後は、アクションに、@Command([MailAddress])と記述すれば、選択した値を上記のフィールドにセットしてくれるのです。
下図は、フォームに「BlindCopyTo」フィールドだけを作って、@Command([MailAddress])を実行したときの画面です。


BCCだけを選択できるようになっているのが分かりますでしょうか?


さて、ではSendToやCopyToなどがないと、この@コマンドは使えないのでしょうか?
いいえ。そんなことはありません。
ヘルプには載っていませんが、引数が設定できるのです。
@Command([MailAddress];"宛先フィールド名";"CCフィールド名";"BCCフィールド名")
とすることで、設定したフィールド名に値をセットできるのです。

A1、A2、A3フィールドがあれば、@Command([MailAddress];"A1";"A2";"A3")とすれば良いのです(フィールド名は""で囲うのを忘れないでください)。
ちなみに、""として省略することも可能です。


簡単なコマンドですが、ちょっとした工夫ができますので試してみてください。



※引数はヘルプには載っていませんので、将来のバージョンでは使えなくなる可能性があります。自己責任で利用するようにしてください(Notes 7.0/8.0/8.5では利用できるのを確認済みです)。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年7月6日月曜日

筆者も買いました! Lotus Notes8.5クライアントガイド!

ノーツのブロガーの皆さん、記事にしているようですが、筆者も買いました。
というか買っていました。
仕事が忙しくて、まだパラパラとしか見ていませんが良くまとまっています。
さすがですね。
会社でノーツが導入されたけどどう使えばいいの?とか8.5にバージョンアップしたら使い方が分からなくなった。なんて言う方にお勧めですね。


目次などの情報はこちらから!Lotus Notes 8.5 クライアントガイド(秀和システム)



筆者もこんなの書ければ良いなぁ、なんて思っていますが、いかんせん文才がないので・・・
このブログで勘弁してやってください。