投稿者:Mitsuhiro Okamoto | 投稿日:2012年5月29日(火) 03:43

Chatterを導入する際に、企業によってはファイルの添付を禁止させたいというケースをたまに聞きます。Chatterやコンテンツライセンスを無効化せずに、ファイルのアップロードのみをブロックするにはどうしたら良いでしょうか?

その場合、ChatterのFeeditemがInsertされる前のトリガで引っ掛けることによって、添付をブロックすることが可能です。他にも禁止ではなくファイルがアップロードされたらEメールで管理者に通知する等、トリガ内に処理を足せば色々コントロールできますね。


== Chatterフィードのファイル添付を禁止したい場合 ==

trigger BlockAttachementFromChatter on FeedItem (Before Insert) {
    for (FeedItem fi : trigger.new) { 
        if (fi.Type == 'ContentPost'){ 
                system.debug(fi); 
                fi.addError('ファイルの添付は禁止されています'); 
        }
    }
}


同様にコメントへのファイル添付を禁止したい場合には、同様にFeedCommentのトリガによって制御します。


== Chatterコメントのファイル添付を禁止したい場合 ==

trigger BlockFileUploadFromFeedComment on FeedComment (before Insert) { 
    for (FeedComment fi : trigger.new) { 
        if(fi.CommentType == 'ContentComment'){ 
            system.debug(fi); 
            fi.addError('ファイルの添付は禁止されています');
        } 
    } 
}


また、コンテンツのファイルアップロードを禁止する際にはこちらのトリガを使います。

== コンテンツのファイルアップロードを禁止したい場合 ==

trigger BlockAttachementFromContent on ContentVersion (before insert) {
    for( ContentVersion c : Trigger.NEW ) {
        if( c.Origin == 'H' ) {
            c.addError( 'ファイルのアップロードはできません' );
            continue;
        }
    }
}


注意点としましては、上記トリガは全ユーザのアップロードがブロックされますので、実際には特定のロールのみ処理しないといった追加の記述が必要になるかもしれません。
また、現在のバージョンでは上記トリガで添付を防ぐ事ができますが、今後のChatterの機能追加などによって別の方法が産まれる可能性もあります。

添付の可否をコントロールしたいという方はご活用下さい。