アップロード時のファイル名自動生成 for SPS2003 [技術情報]
今日はドキュメントライブラリへのアップロード時のファイル名変更について記載します。MOSS2007ではいろいろな方法が提案されていますがもう少し違ったアプローチでSPS2003で実現してみましょう。
今回はデータベーストリガーを使用したアプローチを紹介します。データベーストリガーはデータベースに対してInsert,Delete,Update文発行前後におのおの動作するように指定が可能になっています。これを利用します。
たとえば、「障害レポート」ドキュメントライブラリを作成し、障害発生時にアップロードする運用を考えます。
障害レポートのひな形は「障害報告.xls」。これはひな形をドキュメントライブラリに登録しておきトップページにリンクを張っておきます。
障害発生時に運用担当者がリンクから「障害報告.xls」をローカルPCにダウンロードし、これを記入した後で「障害レポート」ドキュメントライブラリにアップロードします。
この運用の場合、下記の要件が考えられます。
・上書きしないようにファイル名を変えてアップロードする。
・定められた命名規則に則って変更してアップロードする。
・「障害レポート」ドキュメントライブラリのみファイル名を自動生成させる。
これを自動化する運用を考えます。
SQLServerの場合はInsert,Delete,Update文発行時にINSERTED,DELETEDテーブルに更新する値が保持されます。
またドキュメントライブラリにアップロードされたドキュメントはDocsテーブルに保存されます。Docsテーブルには下記の使えそうなColumnが用意されています。
ID … ドキュメントごとにユニークなID
LEAFNAME … ファイル名
DOCLIBROWID … ドキュメントライブラリごとにユニークなID
DIRNAME … ファイルのURL
今回の要件の場合はドキュメントライブラリにアップロードされたタイミングで実行されればいいのでDocsテーブルにInsert文が発行された後にトリガーが動くようにトリガーを張ります。
トリガーの中ではDocsテーブルに対してInsertされたデータに対して下記の条件をチェックします。
・ドキュメントライブラリに登録された文書か?
・「障害レポート」ドキュメントライブラリに対してInsertされたか?
上記条件を満たした場合、ファイル名の前に"[TR-00000x]"のヘッダーを追加するようにします。
【トリガー】
--------------------------------------------------------------------------
/*
ドキュメントライブラリ通番付加ストアドプロシージャ
前提
・サーバーオプション 「nested trigger」 が1になっていること
・WebURLを指定すること
*/
CREATE TRIGGER trigger_DoclibNumbering ON Docs
AFTER INSERT AS
BEGIN
DECLARE @ID UNIQUEIDENTIFIER
DECLARE @LeafName NVARCHAR(255)
DECLARE @DocLibRowID INT
DECLARE @LenRowID INT
-- 更新前データの取得
SELECT
@ID = Id,
@LeafName = LeafName,
@DocLibRowID = DocLibRowID,
@LenRowID = LEN(DocLibRowID)
FROM
INSERTED
WHERE
DIRNAME = 'sites/test/TroubleReport/TR_Report'
-- 見つからない場合は何もしない
IF @LEAFNAME IS NULL
BEGIN
-- 対象外データ
RETURN
END
-- ファイル名の更新
UPDATE Docs
SET LeafName = '[TR-' + STUFF('000000',6 - @LenRowID,@LenRowID + 1,CAST(@doclibrowid AS NVARCHAR) ) + ']' + @LEAFNAME
WHERE Id = @ID
END
--------------------------------------------------------------------------
では、実際に運用してみましょう
まずは障害管理.xlsをダウンロードし、障害内容を記入します。
そして、ドキュメントライブラリにアップロードします。
すると、自動的にファイル名の頭にヘッダー部をつけて登録してくれました。
もうひとつ
今度はエクスプローラビューにドラッグ&ドロップしてみましょう。すると。。。
あら、失敗か? 試しにすべてのドキュメントビューに戻すと。
おおっ、うまく動いているようです。
編集もすべてのビューからは問題なくできます。ただ、エクスプローラビューはそのままだとファイル名が違うので開けません。そこでいったんブラウザを閉じて再度エクスプローラビューにするとファイル名がきちんと表示されて編集が可能になります。
という具合にデータベーストリガーを利用することにより比較的簡単に自動採番を実施できます。
今回は自動採番機能にDocLibIDを使用しましたが日付を使用したり、採番用のストアドを作成する
ことによりいろいろな使い方ができると思います。
Hi,
I try to develop a trigger to help me to audit the users who remove other users in WSS 2.0.
Have you any idea how to perform that?
Cheers,
Haydar
by Haydar (2007-07-13 10:46)
こんにちはHaydarさん、コメントありがとうございます。
最新記事にユーザー情報抽出に関するSQL文を掲載しました。
参考になれば幸いです。
by としつぐ (2007-07-19 23:36)
Hi,
Can you answer me in English please to my request? : I try to develop a trigger to help me to audit the users who remove other users in WSS 2.0.
Cheers,
Haydar
by haydar2906@hotmail.com (2007-07-25 12:16)