SSブログ

アップロード時のファイル名自動生成 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を使用しましたが日付を使用したり、採番用のストアドを作成する
ことによりいろいろな使い方ができると思います。


nice!(0)  コメント(3)  トラックバック(0) 

nice! 0

コメント 3

Haydar

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) 

haydar2906@hotmail.com

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) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。