2007年05月31日

リンクを電子メールで送信するメニューを追加する方法

リンクを電子メールで送信するメニューを追加する方法について。

デフォルトの状態では、リストに対して、「リンクを電子メールで送信する」メニューが表示されない状態になっています。このメニューを、リストに対しても追加できるようにしたいと思います。


リンクを電子メールで送信 (1) NEW

リンクを電子メールで送信 (2)


実装方法についてですが、以下のファイルの内容をカスタマイズしました。
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1041\CORE.JS
CORE.JS

function AddListMenuItems(m, ctx)
{
    if (typeof(Custom_AddListMenuItems) !="undefined")
    {
        if (Custom_AddListMenuItems(m, ctx))
            return;
    }
    if (currentItemFileUrl==null)
        currentItemFileUrl=GetAttributeFromItemTable(itemTable, "Url", "ServerUrl");
    var currentItemEscapedFileUrl;
    if (currentItemFileUrl !=null)
        currentItemEscapedFileUrl=escapeProperly(unescapeProperly(currentItemFileUrl));
    if (currentItemIsEventsExcp==null)
    {
        currentItemIsEventsExcp=false;
        currentItemIsEventsDeletedExcp=false;
        currentItemEvtType=itemTable.getAttribute("EventType");
        if(currentItemEvtType !=null &&
             (currentItemEvtType==2 || currentItemEvtType==3 || currentItemEvtType==4))
        {
            currentItemIsEventsExcp=true;
            if (currentItemEvtType==3)
     currentItemIsEventsDeletedExcp=true;
        }
    }
    var menuOption;
    if (ctx.listBaseType==3 && ctx.listTemplate==108)
    {
        strDisplayText=L_Reply_Text;
        if(itemTable.getAttribute("Ordering").length>=504)
        {
            var L_ReplyLimitMsg_Text="このスレッドに返信できません。返信の数が制限値に達しました。";
            strAction="alert('"+L_ReplyLimitMsg_Text+"')";
        }
        else
        {
            strAction="STSNavigate('"+ctx.newFormUrl
+"?Threading="+escapeProperly(itemTable.getAttribute("Ordering"))
+"&Guid="+escapeProperly(itemTable.getAttribute("ThreadID"))
+"&Subject="+escapeProperly(itemTable.getAttribute("Subject"))
+"&Source="+GetSource()+"')";
        }
        strImagePath=ctx.imagesPath+"reply.gif";
        menuOption=CAMOpt(m, strDisplayText, strAction, strImagePath, null, 100);
        menuOption.id="ID_Reply";
    }
    AddSharedNamespaceMenuItems(m, ctx);
    if (currentItemID.indexOf(".0.") < 0 && HasRights(0x0, 0x8)
         && !currentItemIsEventsExcp)
    {
        if (ctx.listBaseType==4)
            strDisplayText=L_DeleteResponse_Text;
        else
            strDisplayText=L_DeleteItem_Text;
        strAction="DeleteListItem()";
        strImagePath=ctx.imagesPath+"delitem.gif";
        menuOption=CAMOpt(m, strDisplayText, strAction, strImagePath, null, 300);
        menuOption.id="ID_DeleteItem";
    }

//--- 2007/05/31 追加 START リンクメール送信
    AddGotoSourceItemMenuItem(m, ctx, itemTable, currentItemFSObjType);
    if (currentItemFSObjType !=1)
    {
        AddSendSubMenu(m,ctx);
        AddDocTransformSubMenu(m,ctx);
    }
//--- 2007/05/31 追加 END リンクメール送信


    var contentTypeId=itemTable.getAttribute("CId");
    if (contentTypeId !=null && contentTypeId.indexOf("0x0106")==0
            && HasRights(0x10, 0x0))
    {
        strDisplayText=L_ExportContact_Text;
        strAction="STSNavigate('"+ctx.HttpPath+"&Cmd=Display&CacheControl=1&List="+ctx.listName+"&ID="+currentItemID+"&Using="+escapeProperly(ctx.listUrlDir)+"/vcard.vcf"+"')";
        strImagePath=ctx.imagesPath+"exptitem.gif";
        menuOption=CAMOpt(m, strDisplayText, strAction, strImagePath, null, 350);
        menuOption.id="ID_ExportContact";
    }
    CAMSep(m);
    if (ctx.verEnabled==1)
    {
        AddVersionsMenuItem(m, ctx, currentItemEscapedFileUrl);
    }
    AddWorkflowsMenuItem(m, ctx);
    CAMSep(m);
    if ((currentItemID.indexOf(".0.") < 0)
         && HasRights(0x80, 0x0))
    {
        strDisplayText=L_Subscribe_Text;
        strAction="NavigateToSubNewAspx('"+ctx.HttpRoot+"', 'List="+ctx.listName+"&ID="+currentItemID+"')";
        strImagePath="";
        menuOption=CAMOpt(m, strDisplayText, strAction, strImagePath, null, 1100);
        menuOption.id="ID_Subscribe";
    }
    if (ctx.isModerated==true &&
         HasRights(0x0, 0x10) && HasRights(0x0, 0x4)
            && HasRights(0x0, 0x21000) && ctx.listBaseType !=4)
    {
        strDisplayText=L_ModerateItem_Text;
        strAction="STSNavigate('"+ctx.HttpRoot+"/_layouts/approve.aspx?List="+ctx.listName
+"&ID="+currentItemID+"&Source="+GetSource()+"')";
        strImagePath=ctx.imagesPath+"apprj.gif";
        menuOption=CAMOpt(m, strDisplayText, strAction, strImagePath, null, 1150);
        menuOption.id="ID_ModerateItem";
    }
    if (currentItemFSObjType==1 &&
        ctx.ContentTypesEnabled &&
        ctx.listTemplate !=108)
    {
        strDisplayText=L_CustomizeNewButton_Text;
        strAction="STSNavigate('"+ctx.HttpRoot+"/_layouts/ChangeContentTypeOrder.aspx?List="+ctx.listName+"&RootFolder="+currentItemEscapedFileUrl+"&Source="+GetSource()+"')";
        strImagePath="";
        menuOption=CAMOpt(m, strDisplayText, strAction, strImagePath, null, 1170);
        menuOption.id="ID_CustomizeNewButton";
    }
}


この方法を使用することによって、すべてのリストに対して「リンクを電子メールで送信」メニューを反映させることができます。
ただ、この方法の場合、WSS(MOSS)で提供しているスクリプトファイルに対してカスタマイズを行っているため、実運用を考えると、カスタマイズした部分のスクリプトファイルは別途分けておく等、考慮する必要がありそうです。

トラックバックURL

コメント一覧

1. Posted by kunitaka   2007年05月31日 21:46
前の記事が前振りで、RSSフィードのタイトルと記事の前半を見た時に、え〜、もうフィーチャーとして作ってしまったのか!と思ってしまいました・・・
なるほど、そう来ましたか・・・ という感じですね。
core.js の直接編集が難点ですね。
恐らく、これは製品サポートから外れそうなので・・・
2. Posted by kunitaka   2007年05月31日 23:06
よく見ると、本文のリンクではアクセス出来ないように思います・・・
3. Posted by nsystem2   2007年06月01日 10:21
指摘ありがとうございます!リンクを出力する処理を修正しました。
http://blog.livedoor.jp/sharepoint/archives/50175696.html

私も、core.js 等は、できるだけ直接編集しないに越したことはないと思います。Microsoftのパッチによって core.js が上書きされる危険性もあると思いますし…。やはり、フィーチャー等の外部リソースとして作成するべきでしょうね。この記事は、あくまでサンプルとしての意味合いで読んでください^^;
4. Posted by saruhiko   2007年06月01日 14:24
うぉ〜すごい!
でも確かにリスクがありますね。
う〜、生殺しっぽいです(笑)
5. Posted by nsystem2   2007年06月03日 11:40
>saruhiko さん
ごめんなさい〜^^;
あくまで、サンプルとしての意味合いで読んでください^^;;;

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星
 
 
 
Profile

OrangeWorks(nsyste...

Ranking
Recent Comments
QRコード
QRコード
livedoor Readerに登録
RSS
livedoor Blog(ブログ)