2007年05月31日
リンクを電子メールで送信するメニューを追加する方法
リンクを電子メールで送信するメニューを追加する方法について。
デフォルトの状態では、リストに対して、「リンクを電子メールで送信する」メニューが表示されない状態になっています。このメニューを、リストに対しても追加できるようにしたいと思います。
デフォルトの状態では、リストに対して、「リンクを電子メールで送信する」メニューが表示されない状態になっています。このメニューを、リストに対しても追加できるようにしたいと思います。
実装方法についてですが、以下のファイルの内容をカスタマイズしました。
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1041\CORE.JS
この方法を使用することによって、すべてのリストに対して「リンクを電子メールで送信」メニューを反映させることができます。
ただ、この方法の場合、WSS(MOSS)で提供しているスクリプトファイルに対してカスタマイズを行っているため、実運用を考えると、カスタマイズした部分のスクリプトファイルは別途分けておく等、考慮する必要がありそうです。
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 の直接編集が難点ですね。
恐らく、これは製品サポートから外れそうなので・・・
なるほど、そう来ましたか・・・ という感じですね。
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 が上書きされる危険性もあると思いますし…。やはり、フィーチャー等の外部リソースとして作成するべきでしょうね。この記事は、あくまでサンプルとしての意味合いで読んでください^^;
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 さん
ごめんなさい〜^^;
あくまで、サンプルとしての意味合いで読んでください^^;;;
ごめんなさい〜^^;
あくまで、サンプルとしての意味合いで読んでください^^;;;


