English (versi bahasa Indonesia)
Features have been introduced as one of building block in SharePoint 2007. Using feature ones could extend the capabilities of SharePoint, from just a simple ActionMenu to the site definition – all of them can be done using feature.
I have created many ActionMenu that extend “EditItem” block in SharePoint but sometimes its not enough. How about creating sub menu for context item – just like “Send to” context menu?
Picture 1. Sub menu in context item
I can not find any information to create sub menu using feature – please correct me. So what can we do? Well…we’ll do the old way – extending the ows.js with our javascript.
Then if we want to create a new context “Comments” menu with “View Comments” and “Add Comments” for list item like this picture, what can we do?
Picture 2. Custom sub menu in context item
If you look at ows.js and start finding “Add[???]MenuItems” function then you’ll realize that it always calls “Custom_Add[???]MenuItems”. The last function is our place to make customization. For example, if I want to customize the context menu of ListItem then I need to define “Custom_AddListMenuItems” as follows,
function Custom_AddListMenuItems(m, ctx)
{
AddCommentSubMenu(m,ctx);
AddAttachmentSubMenu(m,ctx);
CAMSep(m);
return false;
}
We call “CAMSep(m)” to create separator and returning false to enable rendering default context menu item. I create “Comments” and its submenu using “AddCommentSubMenu(m,ctx)” function like this,
function AddCommentSubMenu(m,ctx)
{
strDisplayText=”Comments”;
strImagePath=ctx.imagesPath+”reply.gif”;
var sm=CASubM(m,strDisplayText,strImagePath,””,400);
sm.id=”ID_Comment”;
var menuOption;
// define your own action
strAction=””;
menuOption=CAMOpt(sm, “View comments”, strAction,””);
menuOption=CAMOpt(sm,”Add comment”, strAction,””);
}
The “CASubM()” is the main function to create sub menu. If you look for the function in ows.js, you’ll find the definition for the function,
function CASubM(p,wzText,wzISrc,wzIAlt,wzISeq,wzDesc)
I guess I’ll make my guess for the parameters,
– p , the menu to attach
– wzText , text to display in the sub menu
– wzISrc , icon location for the sub menu
– wzIAlt , alt text for the image icon
– wzISeq , I am not sure but I thing this related sequence number
– wzDesc , I am not sure either , it should be a description but I saw ows.js never put any text on it.
Anyway, you only need to modify parameter p, wzText, wzISrc, wzIAlt and leave default value for the last 2 parameter.
After we done with customization, put the script to the page as reference or as inline javascript, and now you can have your own sub menu for context item.
––o00––
Indonesia (see English version)
Features merupakan salah satu terminologi baru yang diperkenalkan di SharePoint 2007. Kita dapat menggunakan feature untuk menambah fungsi-fungsi baru didalam SharePoint – mulai dari sekedar menambahkan ActionMenu sampai membuat site definition baru – semua dapat dilakukan dengan menggunakan feature.
Didalam banyak kesempatan saya sering membuat ActionMenu untuk menambah fungsi di bagian “EditItem” didalam list-item SharePoint – namun kadangkala hal itu masih belum cukup. Salah satu yang mungkin kita inginkan adalah, bagaimana cara membuat sub menu untuk menu context – seperti “Send to” dibawah ini?
Gambar 1. Sub menu didalam menu context
Sampai saat ini saya belum punya cara termudah untuk membuat sub menu dengan menggunakan feature (mungkin kita bisa menggunakan feature receiver – tapi berarti kita harus membuka visual studio) CMIIW. Jadi apa yang bisa kita lakukan? Yah terpaksa kita lakukan dengan cara lama, dengan memanfaatkan ows.js dan menambah fungsi javascript tambahan.
Sebagai contoh, disini kita akan menambahkan menu context baru “Comments” dengan sub menu “View Comments” dan “Add Comments” seperti gambar dibawah.
Picture 2. Custom sub menu in context item
Jika kita perhatikan didalam ows.js , setiap fungsi “Add[???]MenuItems” akan memanggil “Custom_Add[???]MenuItems”. Contohnya, fungsi “AddListMenuItems” akan memanggil fungsi “Custom_AddListMenuItems”. Didalam fungsi “Custom_AddListMenuItems” inilah kita dapat menambahkan fungsi-fungsi baru seperti yang kita inginkan.
Disini kita akan menambah menu di list item, jadi disini kita definisikan fungsi Custom_AddListMenuItems sebagai berikut,
function Custom_AddListMenuItems(m, ctx)
{
AddCommentSubMenu(m,ctx);
AddAttachmentSubMenu(m,ctx);
CAMSep(m);
return false;
}
Fungsi “CAMSep(m)” berguna untuk membat pembatas dan kembalian false (return false) dihasilkan agar konteks menu default tetap dirender. Untuk membuat menu “Comment” dan submenu dibawahnya, kita buat fungsi baru “AddCommentSubMenu(m,ctx)” seperti dibawah,
function AddCommentSubMenu(m,ctx)
{
strDisplayText=”Comments”;
strImagePath=ctx.imagesPath+”reply.gif”;
var sm=CASubM(m,strDisplayText,strImagePath,””,400);
sm.id=”ID_Comment”;
var menuOption;
// define your own action
strAction=””;
menuOption=CAMOpt(sm, “View comments”, strAction,””);
menuOption=CAMOpt(sm,”Add comment”, strAction,””);
}
Fungsi “CASubM()” adalah kunci untuk membuat sub menu. Jika kita lihat definisi CASubM() didalam ows.js, kita dapat temukan definisi fungsi itu sebagai berikut,
function CASubM(p,wzText,wzISrc,wzIAlt,wzISeq,wzDesc)
Disini kita gunakan intuisi untuk menterjemahkan parameter itu (so just guessing – OK),
– p , parent menu yang akan ditempel sub menu
– wzText , teks yang akan ditampilkan di sub menu
– wzISrc , lokasi ikon untuk sub menu
– wzIAlt , teks alternatif untuk ikon
– wzISeq , (gak yakin) tapi mungkin urutan sub menu
– wzDesc , (gak yakin) kemungkinan besar adalah deskripsi, tapi didalam tidak pernah digunakan didalam ows.js
Yah, singkat kata, kita hanya perlu melakukan modifikasi parameter p, wzText, wzISrc, wzIAlt dan menggunakan nilai default untuk parameter-parameter yang lain.
Setelah selesai, letakkan script tersebut secara inline maupun sebagai reference , dan dijamin Anda akan mendapatkan sub menu untuk item konteks.