Ideas for free

Januari 28, 2008

MOSS 2007 : Howto override page redirection Url

Diarsipkan di bawah: Microsoft Sharepoint, Office 12, Office Server 2007, Tips and Tricks — cakriwut @ 9:28 am

English (versi bahasa Indonesia)

I had a question from one of my friend “How can I override page redirection Url?”. He was using inline C# code which is not my preference – because it adds additional page-parser process and introduce new security consideration. His code also diminish upload attachment function in the original form.
My first suggestion was to create a new links that construct custom “Source=” url to the original form – but this is not what he looks for. He doesn’t want to replace the “New Item” menu with a link.

So in this case, he wants to click “New Item” menu in a list and redirected to custom page after sucessfull submission or cancelation.

ItemRedirect1

Technically, after we click “New Item” we’ll be redirected to “..\NewForm.aspx?RootFolder=….&Source=….”. And guess what – the “Source” is the location after we submit “OK” or press “Cancel”.

So – how can we change the “Source” url? Use Javascript !

Open “NewForm.aspx” using SharePoint Designer and find “PlaceHolderMain” content Id. Place following custom javascript just after tag definition.

function PreSaveAction()
{
     // TODO : create some actions here
     return true;
}

ItemRedirect2

Remember that the name of the function MUST BE PreSaveAction and it must return true.

Next, in the function I add operation to replace original action url with the new construction – I just need to change the text after “Source”. What you need to do, is change newSrcUrl variable to match with the custom page in your location. 

––o0o––

 

Indonesia (see English version)

Baru-baru ini saya mendapat pertanyaan dari seorang kawan tentang “Bagaimana cara mengganti halaman redirect? “. Menurutnya, dia sudah menggunakan inline C# namun akibatnya dia tidak dapat memanfaatkan upload attachment yang ada di form asli. Saya sendiri kurang sependapat dengan penggunaan inline C# itu, sebab inline C# akan menambah beban kerja server untuk memparsing dan juga membuka resiko keamanan yang baru.

Anjuran saya adalah dengan menggunakan link yang sudah diubah sedemikian rupa sehingga “Source” url disesuaikan dengan apa yang diinginkan. Tapi saran tersebut tidak sesuai dengan keinginannya, karena hal ini berarti mengganti menu “New Item” dengan menggunakan link.

Jadi, yang dia inginkan adalah tetap menggunakan menu “New Item” tetapi dapat mengganti halaman yang dibuka setelah submit atau cancel.

ItemRedirect1

Pada dasarnya, setelah kita mengklik “New Item” , maka kita akan diarahkan pada alamat “..\NewForm.aspx?RootFolder=….&Source=….”. Dan “Source” adalah lokasi yang akan dibuka ketika kita mensubmit form dengan mengklik “OK” atau menekan “Cancel”.

Jadi bagaimana kita dapat mengganti “Source” url? Gunakan Javascript !

Buka “NewForm.aspx” dengan menggunakan SharePoint Designer, dan cari tag id yang bertuliskan “PlaceHolderMain”. Kemudian tambahkan javascript berikut setelah tag tersebut,.

function PreSaveAction()
{
     // TODO : create some actions here
     return true;
}

ItemRedirect2

HATI-HATI, bahwa nama fungsi javascript tersebut HARUS  PreSaveAction dan nilai kembaliannya HARUS true.

Didalam fungsi javascript yang baru, kita hanya perlu menambahkan operasi untuk mengganti action url yang lama dengan action url baru. Di action url baru inilah kita definisikan “Source” url agar merujuk pada halaman web custom yang kita inginkan. Dari gambar diatas, Anda hanya perlu mengganti variable newSrcUrl agar sesuai dengan yang diinginkan – atau kalau perlu merubah operasi untuk mengganti “Source” url agar lebih robust.

––o0o––

Januari 3, 2008

MOSS 2007: How to create sub menu for context item

Diarsipkan di bawah: Microsoft Sharepoint, Office 12, Office Server 2007, Tips and Tricks — cakriwut @ 4:01 am

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?

SendToItem

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?

CommentsSubmenu

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?

SendToItem

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.

CommentsSubmenu

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.

 

Blog pada WordPress.com.