Ideas for free


Howto series : Lambda and SharePoint

Posted in Microsoft Sharepoint,Tips and Tricks by cakriwut on September 14, 2009

Why Should We Use List and/or ID in Query String?

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on September 7, 2008

English (versi bahasa Indonesia)

One of my team asked me why should we use “List={GUID}” and/or “ID={ItemID}” in query string? Can’t we use other query string name?

My answer is yes you can use other query string name, but you will lost one of out of the box functionality. Why? Because when you keep with standar “List” or “ID” query string then you don’t need to parse it anymore – then SharePoint provides simple way to get SPList or SPListItem object using SPContext.

The query string  “List={GUID}” has corresponden SPContext.List , and query string “List={GUID}&ID={ItemID}” has the corresponden SPContext.Item. SPContext.List is SPList and SPContext.Item is SPListItem that can be obtained easily if you follow the convention.

So, check your code now. 

-o0o-

 

Indonesia (see English version)

Ada pertanyaan dari salah satu tim saya kenapa kita harus menggunakan “List={GUID}” dan/atau “ID={ItemID}” di dalam query string? dan apakah kita tidak boleh menggunakan nama lain untuk query string?

Jawabannya adalah tentu saja kita dapat menggunakan nama lain, tetapi kita akan kehilangan salah satu fungsi yang sudah disediakan oleh SharePoint. Mengapa?

Karena jika kita tetap menggunakan standar “List” atau “ID” didalam query string, maka kita tidak perlu melakukan parsing parameter lagi. Dan untuk itu SharePoint telah menyediakan cara yang sangat mudah untuk memperoleh object SPList atau SPListItem dengan menggunakan SPContext.

Query string  “List={GUID}” memungkinkan kita untuk memperoleh SPContext.List , dan query string “List={GUID}&ID={ItemID}” memungkinkan kita untuk memperoleh SPContext.Item. SPContext.List adalah objek SPList dan SPContext.Item adalah objek SPListItem yang dengan mudah diperoleh hanya jika kita mengikuti konvensi tersebut.

Jadi, coba cek lagi apakah sudah mengikuti konvensi yang berlaku?

What can cause “Error page has been modified”

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on September 7, 2008

English (versi bahasa Indonesia)

For anyone who customize SharePoint using SharePoint Designer, I believe you’ve familiar with “Error page has been modified”. The reason is obvious, you open the page in browser while modifying it using SharePoint Designer. Then save the page withing SharePoint Designer and try to access any links in that page. So, just go back , refresh and the link will works again.

PageRefreshIssue

But how about in a case that this happened in production environment, where nobody edit the page behind the screen. What can cause “Error page has been modified” ?

I have tried some resources from internet and check whether this can help me solve the problem:

1. One or more feature is missing (http://forums.technet.microsoft.com/en-US/sharepointgeneral/thread/9a98188b-9dec-4d85-b8b7-47ba41e5271f/)
2. Use of PublishingLayoutsPage instead of TemplateRedirectionPage (http://blogs.msdn.com/tejasr/archive/2008/06/19/resolution-moss-this-page-has-been-modified-since-you-opened-it-you-must-open-the-page-again.aspx)
3. Use of NLB with affinity set to none (http://support.microsoft.com/kb/892348)
4. Some says that security enhancement in MOSS SP1 (KB936984) /WSS SP1 (KB936988)help to fix this problem.

But unfortunatelly I come back with no luck, untill I read an article “The evil’s of RunWithElevatedPrivilege from Danniel Larson”. I believe that since it drops down to the thread identity, then the current session in page is no longer valid with the links. Thus creating exception “Error page has been modified”.  Then, I instructed my team to change all impersonation method to use

SPUserToken sysToken = SPContext.Current.Site.SystemAccount.UserToken;
using(var systemSite = new SPSite(SPContext.Current.Site.ID, sysToken))
{
    using (var sysWeb = systemSite.OpenWeb(SPContext.Current.Web.ID))
    {
        // Perform elevated actions here
    }
}

instead of using old

SPSecurity.RunWithElevatedPrivilege(delegate()
{
     using(var systemSite = new SPSite(SPContext.Current.Web.Url))
     {
           using (var sysWeb = systemSite.OpenWeb(SPContext.Current.Web.ID))
          {
               // Perform elevated actions here
          }

      }
});

 

That is and the production issues gone. So from now I would add one more entry to the list, Minimalize using RunWithElevatedPrivilege in your code, and use SPUserToken instead.

-o0o-

 

Indonesia (see English version)

Bagi rekan-rekan yang sering bekerja dengan SharePoint Designer, pesan kesalahan berikut ini pasti sering dijumpai “Error page has been modified”. Penyebabnya jelas sekali, karena kita membuka halaman di browser sementara di balik layar dilakukan editing dengan menggunakan SharePoint Designer. Kemudian setelah melakukan editing dan menyimpan halaman di SharePoint designer, kita langsung mengklik salah satu link di halaman yang telah dibuka. Cara mengatasinya cukup mudah , kembali ke halaman semula , refresh dan link-link akan bisa diakses seperti semula.

PageRefreshIssue

Tetapi bagaimana dengan kejadian yang muncul di server produksi? Di server produksi, tidak seorang pun mengedit halaman dengan SharePoint Designer. Jadi apa yang bisa menyebabkan “Error page has been modified” ?

Seperti biasa, saya mencari-cari informasi di internet dan menemukan beberapa hal dibawah yang mungkin dapat membantu:

1. Ada fitur yang ada di datastore tapi hilang secara fisik (http://forums.technet.microsoft.com/en-US/sharepointgeneral/thread/9a98188b-9dec-4d85-b8b7-47ba41e5271f/)
2. Tidak menggunakan TemplateRedirectionPage tapi PublishingLayoutsPage (http://blogs.msdn.com/tejasr/archive/2008/06/19/resolution-moss-this-page-has-been-modified-since-you-opened-it-you-must-open-the-page-again.aspx)
3. Menggunakan NLB dengan affinity diatur none (http://support.microsoft.com/kb/892348)
4. Beberapa mengatakan bahwa perbaikan prosedur keamanan di MOSS SP1 (KB936984) /WSS SP1 (KB936988) akan membantu menyelesaikan masalah.

Sayangnya semua hal diatas sudah terpenuhi, tetapi tetap saja masalah tersebut muncul. Sampai akhirnya saya membaca artikel tentang RunWithElevatedPrivilege – “The evil’s of RunWithElevatedPrivilege dari Danniel Larson”. Dari penjelasan yang ada, saya menduga bahwa penyebabnya adalah karena prosedur tersebut mengganti identitas thread dan menjalankan di thread lain, sehingga halaman yang sedang dibuka akan kehilangan “hubungan” dengan server (mirip dengan pada saat kita menyimpan dengan menggunakan SharePoint Designer). Akibatnya, link-link yang ada di halaman sudah tidak valid lagi dan muncul “Error page has been modified”. 
Berbekal dari dugaan itu, saya kemudian meminta rekan-rekan di team untuk mengganti cara impersonation untuk mengugnakan SPUserToken 

SPUserToken sysToken = SPContext.Current.Site.SystemAccount.UserToken;
using(var systemSite = new SPSite(SPContext.Current.Site.ID, sysToken))
{
    using (var sysWeb = systemSite.OpenWeb(SPContext.Current.Web.ID))
    {
        // Perform elevated actions here
    }
}

dan menghapus RunWithElevatedPrivilege

SPSecurity.RunWithElevatedPrivilege(delegate()
{
     using(var systemSite = new SPSite(SPContext.Current.Web.Url))
     {
           using (var sysWeb = systemSite.OpenWeb(SPContext.Current.Web.ID))
          {
               // Perform elevated actions here
          }

      }
});

 

Dan seperti yang diharapkan, masalah di production akhirnya teratasi. Jadi mulai dari saat ini saya akan menambahkan satu lagi di dalam daftar , Kurangi penggunaan RunWithElevatedPrivilege dan sedapat mungkin gunakan SPUserToken.  

Creating Weather Webpart using SharePoint Designer

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on September 6, 2008

English (versi bahasa Indonesia)

Weather webpart is one of most popular wepart to place in homepage. Many available resources out-there in internet using C# and webservices. But instead of create weather webpart using Visual Studio I will show you how create it using SharePoint Designer.

HomeShow

The process is pretty simple,
1. You need to create a new page in Sharepoint as working canvas.
2. In that working canvas, drop webpart zone and dataview webpart.
3. Find appropriate weather datasource and format dataview webpart.
4. Export the new formatted webpart and delete working canvas.
5. Distribute / use the webpart. Package in solution file if necessary.

Initially open SharePoint site using SharePoint Designer. To prepare a page for working canvas, just create a new aspx page.

Bmg0

On the new page, attach default master page by using attach master page under format menu.

Bmg01

On the PlaceHolderMain in the page, click Create Custom Content to detach this section from master page.

 CustomPlace

Then in the new custom content area, insert “Web Part Zone” and “Data View”  component from SharePoint Controls.

InsertDataView

Next, we need the reference to get weather information from. SharePoint designer provides wide range of data source type, starting from SharePoint List, SharePoint Libraries, Database Connection, XML Files, Server-side scripts, XML Web Services and Linked sources. Since my country has “BMG” which announce weather data officially, in this case I will use XML files as my datasource.

XmlData

For me, the location of weather data is http://www.bmg.go.id/dataxml/cuaca_indo_1.xml or http://www.bmg.go.id/dataxml/cuaca_indo_2.xml. Saving that location into XML data files, give me a new datasource to working with.

Bmg3

Then click Show Data on the new datasource.

Bmg4

In the data source detail, we can select appropriate fields to show. In this case I select “Kota”, “Cuaca”, “SuhuMin” and “SuhuMax”. And then click Multiple Item View.

Bmg5

By default you will get a table from XML datasource. Like the one bellow.

Bmg6

Since I only want few big cities in Indonesia, then I click filter on the Common Data View Tasks.

Filter

Next, is to insert icons to describe weather conditions such as raining, clear, clouds etc. To select appropriate icon, we can test on the “Cuaca” field and choose correct icon ( inspect line number 108 – 118 in the figure below). I also make the table into single column by moving the field content into leftmost column and deleting other column in original table.

Bmg9

Since I transform to single column, then I don’t need to keep the header anymore. So I just change the header into long cell title.

Bmg10

Saving the page and opening in browser, allows me to export the webpart and import back in the future.

Export

Thats for now, just couple minutes to create weather webpart. For you who curious with the webpart, please download it from the attachment ( BMGLike.webpart (17 KB) ).

-o0o-

 

Indonesia (see English version)

Webpart cuaca merupakan salah satu webpart populer yang sering diminta oleh client. Di internet bisa kita temukan webpart cuaca yang berbayar maupun gratis yang dibuat dengan C# dan web services. Di artikel ini, alih-alih membuat webpart dengan menggunakan Visual Studio, saya akan mendemonstrasikan pembuatannya dengan menggunakan SharePoint Designer.

HomeShow

Prosedurnya cukup sederhana, 
1. Buat halaman aspx di SharePoint sebagai tempat eksperimen.
2. Tambahkan webpart zone dan dataview webpart di halaman kerja tersebut.
3. Tambahkan sumber data cuaca yang sesuai dan format dataview webpart agar tampil cantik.
4. Export webpart yang baru ke dalam 1 file dan hapus halaman kerja.
5. Distribusikan webpart dan masukkan ke dalam solution package jika perlu.

Untuk menyiapkan halaman kerja, buka SharePoint site dengan menggunakan SharePoint Designer. Dari menu file, buat sebuah halaman ASPX baru.

Bmg0

Di dalama yang baru terbentuk, buat referensi ke master page dengan menggunakan menu attach master page.

Bmg01

Setelah di-tempel dengan master page, maka secara default design dan isi halaman akan mengikuti master page. Klik Create Custom Content di bagian PlaceHolderMain untuk memulai membuat kustomisasi di halaman itu.

 CustomPlace

Di area custom content yang baru terbentuk, tambahkan “Web Part Zone” dan “Data View” webpart didalamnya.

InsertDataView

Selanjutnya yang kita butuhkan adalah sumber data. SharePoint Designer memberikan kemudahan untuk menggunakan beberapa jenis sumber data misalnya, SharePoint List, SharePoint Libraries, Database Connection, XML Files, Server-side scripts, XML Web Services dan Linked sources. Disini saya akan menggunakan data yang disediakan secara cuma-cuma oleh BMG , berupa XML file. Kita dapat langsung menggunakan referensi berupa URL ke XML yang bersangkutan.

XmlData

Lokasi XML data yang disediakan oleh BMG adalah di http://www.bmg.go.id/dataxml/cuaca_indo_1.xml atau http://www.bmg.go.id/dataxml/cuaca_indo_2.xml. Simpan informasi lokasi tersebut sebagai sumber data XML yang baru.

Bmg3

Kemudian klik “Show Data” pada sumber data XML yang terbentuk.

Bmg4

Didalam data source detail, kita dapat menentukan field-field yang akan ditampilkan. Disini kita ambil “Kota”, “Cuaca”, “SuhuMin” dan “SuhuMax”. Kemudian klik Multiple Item View.

Bmg5

Secara otomatis, kita akan memperoleh tabel yang diperoleh dari field-field yang ditentukan tadi, seperti dibawah.

Bmg6

Kita juga dapat memfilter agar menampilkan beberapa kota besar di Indonesia saja. Caranya, dengan menentukan filter dari properti data view webpart di  Common Data View Tasks.

Filter

Agar tampilannya menjadi cantik, kita bisa menambahkan icon untuk hujan, cerah, berawan dsb. Untuk mendapatkan icon yang sesuai, maka kita gunakan xsl:choose dan mengetes nilai field Cuaca (perhatikan baris 108 – 118 pada gambar dibawah). Saya juga mengubah tabel menjadi 1 kolom, dengan memindahkan isi field lain ke kolom paling kiri dan menghapus kolom yang tidak digunakan. 

Bmg9

Judul tabel juga diubah dengan mengubah table headernya, dan menyesuaikan dengan format 1 kolom.

Bmg10

Simpan halaman yang sudah selesai diedit dan kemudian buka di browser. Hasilnya adalah halaman dengan weather webpart yang baru, tugas kita berikutnya adalah mengeksport webpart tersebut dan siap untuk didistribusikan.

Export

Akhirnya, mudah-mudahan step-by-step diatas memberikan ide untuk rekan-rekan semua. Untuk yang tidak mau report, berikut ini adalah webpart yang sudah jadi ( BMGLike.webpart (17 KB) )

 

MOSS 2007 : Howto override page redirection Url

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on January 28, 2008

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––

MOSS 2007: How to create sub menu for context item

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on January 3, 2008

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.

 

MOSS 2007 : Displaying User Picture Profile

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on November 30, 2007

English (versi bahasa Indonesia)

Recently I’ve got a question how to display user picture profile. 

Up5

Again, there are many approach – however I’ll show you with no code approach. First, I want to emphasize that this approach can be used to answer other customization which uses SharePoint’s ootb controls.  

So, here we go. Open the default.aspx using SharePoint designer and look at the toolbox control on the right pane. You’ll see several categories ie. ASP.NET Controls, SharePoint Controls etc. In this case we need Server Controls (SharePoint) – it will available if you work with MOSS 2007 not WSS v3.0.

Up1

Expand Server Controls (SharePoint) and there are many specific controls from SharePoint Server WebControls. To show user picture profile, we need ProfilePropertyImage from SharePoint Server WebControls. I guess you understand how to pick-it-up, just drag-drop from the toolbox into designer pane.

Up2

In this case I drag-drop from toolbox pane to the empty space just above default WebPartZone in default.aspx.

Up3

Giving a center tag arround the ProfilePropertiImage, will give you just like mine.

Up4

Then, save the page to see the result; an avatar will be shown for any users who already customize their profile image.

At last, if you can not see the image, please check if the tags looks similar with

<SPSWCrofilePropertyImage PropertyName=”PictureUrl” ResizeToFit=”100″ RenderWrapTable=”True” ShowPlaceholder=”true” id=”PictureUrlImage” runat=”server”/>

Please pay attention that “PropertyName” of the tag should be “PictureUrl”.

Indonesia (see English version)

Baru-baru ini saya mendapat pertanyaan bagaimana cara menampilkan gambar yang ada di profile user.  

Up5

Sama seperti artikel-artikel saya sebelumnya, ada banyak cara yang dapat kita lakukan – dan lagi-lagi saya tetap menganjurkan untuk menggunakan teknik dengan sedikit coding. (no code approach). Sebelum melanjutkan, saya juga ingin menggaris-bawahi bahwa teknik ini dapat pula digunakan untuk melakukan kustomisasi lain yang membutuhkan kontrol bawaan dari SharePoint.   

Pertama-tama buka “default.aspx” dengan menggunakan SharePoint designer. Lihat pane “toolbox control” yang ada disebelah kanan – kalau belum muncul masuk ke dalam menu “Task Pane” dan pilih Toolbox control.  Disana kita bisa dapatkan beberapa kategori misalnya, ASP.NET Controls, SharePoint Controls dsb. Dalam kasus ini yang kita butuhkan adalah Server Controls (SharePoint) – kategori ini akan muncul jika kita bekerja dengan MOSS 2007.

Up1

Buka Server Controls (SharePoint) dan didalamnya akan kita dapatkan beberapa kontrol yang diambil dari SharePoint Server WebControls.  Untuk menampilkan gambar profile user yang kita butuhkan adalah ProfilePropertiImage. Klik di ProfilePropertyImage dan drag-drop kedalam default.aspx yang sedang dibuka di panel designer.

Up2

Untuk mendapatkan hasil seperti yang diinginkan diatas, saya memasukkan control tersebut keatas WebPartZone yang ada dibagian kanan (lihat gambar dibawah).

Up3

Kemudian dengan menambahkan tag “center” maka ProfilePropertiImage akan tampil rata kanan-kiri, sama seperti dibawah ini.

Up4

Akhirnya, simpan halaman tersebut dan buka dengan browser; sampai disini kita akan dapat melihat gambar profile user. Dan jika user melakukan kustomisasi gambar profilenya, maka secara otomatis gambar diatas juga akan menampilkan avatar yang sesuai.

Pada tahap ini, jika Anda gambar profile tidak muncul – coba cek tag yang baru disisipkan apa sudah terlihat seperti ini, 

<SPSWCrofilePropertyImage PropertyName=”PictureUrl” ResizeToFit=”100″ RenderWrapTable=”True” ShowPlaceholder=”true” id=”PictureUrlImage” runat=”server”/>

Perhatikan bahwa “PropertyName” harus diisi dengan “PictureUrl”.

 

 

How to enable “Edit Page” in SharePoint’s standard form.aspx

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on November 3, 2007

English (versi bahasa Indonesia)

Just like the old version, if we want to add additional web part in standard form (newform.aspx, editform.aspx, dispform.aspx) then we have establish a strategy to view the page in edit mode. However, the new page model in SharePoint 2007 makes our job more easier.

NewItemAction

Picture 1a. No “Edit Page” in SharePoint form.

 

NewItemInEditMode
Picture 1b. NewForm.aspx in Edit Mode

Actually we can change site template definition, but since I don’t want to modify all forms, then I choose to edit directly using SharePoint Designer (SPD) . I open the site using SPD, go through target list and open “NewForm.aspx” in the designer.

NewItemEdit

Picture 2. Open NewForm.aspx using SharePoint Designer

Having the form in the designer, then I go to “Site Action” content template (by default it is master page content place holder). So I click on it to “Create Custom Content”.

NewItemMaster

Picture 3. Create Custom Content in Site Action section

Switched into code designer for the new content block then look for <SharePoint:MenuItemTemplate tag. There are few tags, but the point of interest for our project is the one with “MenuItem_EditPage” id. Change the id to anything you’d like – mine, I change it to “MenuItem_EditPage1”.

NewItemMaster2

Picture 4. Change the id for MenuItemTemplate

Save the changes and now goto NewForm.aspx. See a new “Edit Page” command in Site Action.

NewItemWithEdit

Picture 5. Edit Page menu command in “Site Action”

o0o—

Indonesia (see English version)

Sama seperti di versi sebelumnya, jika kita ingin menambahkan web part di form-form standar SharePoint (newform.aspx, editform.aspx, dispform.aspx) maka kita harus bisa menampilkan form tersebut dalam mode edit. Namun kali ini pekerjaan kita akan jauh lebih sederhana dengan diperkenalkannya master page dan page layouts di SharePoint 2007.

NewItemAction

Picture 1a. “Edit Page” tidak bisa ditemukan di form standar.

 

NewItemInEditMode
Gambar 1b. NewForm.aspx dibuka dalam mode edit

Ada dua pilihan yang dapat dilakukan yaitu melakukan perubahan secara global di definisi site template atau melakukan perubahan secara terbatas di masing-masing list. Karena tidak semua list perlu perubahan ini, maka saya akan melakukannya secara terbatas dengan mengedit “NewForm.aspx” secara langsung dengan menggunakan SharePoint Designer (SPD).

NewItemEdit

Gambar 2. Buka NewForm.aspx dengan menggunakan SharePoint Designer

Setelah form tersebut terbuka, arahkan mouse ke area “Site Action” (secara default area ini mengambil definisi dari master page). Context menu di area ini memungkinkan kita untuk mendefinisikan konten secara khusus dan tidak mengambil definisi dari master page. Klik di “Create Custom Content”.

NewItemMaster

Gambar 3. Create Custom Content pada area Site Action

Ubah tampilah SPD ke bagian source code dan disana kita akan dapat menemukan blok yang berisi tag <SharePoint:MenuItemTemplate . Kita bisa menemukan beberapa tag semacam itu, tapi target kita adalah tag yang memiliki id “MenuItem_EditPage”. Ubah nama id menjadi nama lain – disini saya mengubahnya menjadi “MenuItem_EditPage1”.

NewItemMaster2

Gambar 4. Ubah id dari MenuItem Template

Simpan seluruh perubahan diatas dan buka kembali NewForm.aspx. Arahkan kursor ke Site Actions dan disana kita bisa melihat command menu “Edit Page” seperti yang diharapkan. Dan mulai sekarang dengan mudah kita bisa menambah / menghapus web part di halaman itu.

NewItemWithEdit

Gambar 5. Menu Edit Page di “Site Action”

o0o—

MOSS 2007: How to delete default Shared Service?

Posted in Microsoft Sharepoint,Office 12,Office Server 2007,Tips and Tricks by cakriwut on August 25, 2007

English (versi bahasa Indonesia)

You might already know that one of essential component in MOSS 2007 is the Farm’s Shared Services. Farm’s Shared Services serves all server in the farm for profiles, bussiness data catalog and many more. Default Shared Services is the first farm’s shared services that we create in our MOSS 2007 servers. If we ever create farm shared services, then any web applications listed in SharePoints configuration databases will be associated with any of farm shared services. And so this is a not turning back operation; once you make an association then “forever” MOSS won’t let you disassociate with it.

Sharedsvcerr3
You can see the “Delete” action is disabled by default – so , how to delete this kind of default Shared Services?
Of course we will use the unprotected tools from MOSS.

Let’s understand what happened if we issue “Delete” shared service command?

MOSS will present you to */_admin/deletessp.aspx page with ssp GUID as sspId parameter. The page would be seen as  */_admin/deletessp.aspx?sspID={GUID}

Hence if we want to delete any of shared service, we only need to call that page with correct sspId – and if we put the GUID of default shared service then it will be deleted too.

Find out the GUID by clicking “Edit Properties” link for the Default Shared Service.

Ssp2

You’ll come to */_admin/sspdetails.aspx?task=Edit&sspId={GUID}. And intuitively you know the rest is to use that GUID. When you run deletion procedure for default shared service, there would be error like this,

Sharedsvcerr2

You can ignore it, because it will delete the ssp anyway.

-o0o-

Indonesia (see English version)

Anda mungkin sudah tahu salah satu komponen penting di MOSS 2007 adalah Farm Shared Services. Farm Shared Service merupakan layanan bersama yang digunakan oleh semua server yang ada didalam konfigurasi farm di MOSS 2007; misalnya untuk melakukan sinkronisasi profile dengan Active Directory, business data catalog, search dsb.
Default Shared Services adalah shared service yang dibuat pertama kali didalam farm. Jadi pada saat pertama kali kita membuat farm shared services di MOSS, semua aplikasi web yang ada didalam database konfigurasi akan diasosiasikan secara otomatis ke farm shared service tersebut. Proses assosiasi tersebut hanya berlangsung satu arah, artinya jika suatu saat kita ingin menghapus shared service maka secara desain hal tersebut tidak dimungkinkan oleh MOSS.

Sharedsvcerr3
Kita bisa melihat bahwa perintah “Delete” secara default tidak dapat diakses – jadi bagaimana cara kita menghapus default shared service? 
Anda mungkin berfikir untuk mengapus database shared service, tapi tidak, kita akan menggunakan tools yang sudah disediakan oleh MOSS.  

Apa yang sebenarnya dilakukan jika kita meng-klik perintah “Delete” ?

MOSS membawa kita ke halaman  */_admin/deletessp.aspx dengan GUID ssp sebagai parameter sspId. Jadi halaman tersebut akan terlihat sebagai   */_admin/deletessp.aspx?sspID={GUID}

Jadi singkat kata, jika kita ingin mengapus shared service apapun, maka yang kita lakukan adalah memanggil halaman tersebut dengan dilengkapi parameter sspId yang dikehendaki. Jika kita masukkan GUID yang dimiliki oleh default shared service, maka dapat dipastikan default shared service juga akan terhapus. 

GUID dari shared service dapat dicari dengan meng-klik perintah “Edit Properties” seperti gambar dibawah.

Ssp2

Kita akan dibawa ke halaman */_admin/sspdetails.aspx?task=Edit&sspId={GUID}. Dan secara intuitif yang dilakukan selanjutnya adalah menggunakan GUID tersebut untuk memanggil halaman deletessp.aspx. 

Jika Anda melakukan prosedur menghapus default shared service seperti diatas, Anda akan menemukan error seperti ini, 

Sharedsvcerr2

Abaikan pesan kesalahan tersebut, sebab MOSS akan tetap menghapus default shared service seperti yang kita inginkan.

MOSS 2007: Fixing SSOSrv error 0x80040e14

Posted in Microsoft Sharepoint,Office Server 2007,Tips and Tricks by cakriwut on August 19, 2007

English (versi Indonesia)

Yesterday I tried to enable single-sign-on (SSO) webpart on one of our client’s server. It was very strange since the webpart was tested well few month ago on other client – but not at this time.
The “GetCredentials” of “ISsoProvider” always throws an error:

ssofailed4

I have double checked SSO configuration in the server farm, and looks everything has been setup correctly – so what was wrong?

KB932917 is not available!
Further investigation in the events viewer, I’ve found error number 0x80040e14. The error description is non-sense, credentials configuration has been double checked and this is not the first sso implementation.

ssofailed6

Searching the problem in Internet direct me to an explaination from Chris Calderon and he referred KB932917 which is private link from Microsoft. It will be included in roll-up SP package, but when? We need it right at the moment.

Do it your self!
From that article, Chris already mention that the problem is; MOSS always validate IX_SSO_Credentials index.
So, I open SSO database in SQL Management Studio, and found that there only IX_SSO_TempCredentials index in dbo.SSO_Credentials table.

ssoqry

Using the same index creation statement, I create second index called IX_SSO_Credentials. Then I left database with two index in that table – and starting to validate our sso webpart again.

ssofailed7

And, thanks God – although we expect for the upcoming update but now everything is running well again.

–o0o–

Indonesia (English version)

Kemarin, untuk kesekian kalinya saya mengimplementasikan webpart single-sign-on (SSO) di salah satu mesin di client kami. Tapi kali ini saya mendapatkan keanehan, webpart tersebut gagal berfungsi – padahal ini bukan implementasi pertama kali. Terpaksa, visual studio debuging dihidupkan dan error muncul pada saat pemanggilan method “GetCredentials” dari interface “ISsoProvider”.

ssofailed4

Terpaksa, dilakukan check-list konfigurasi SSO di webfarm dan semua sudah dikonfigurasi dengan benar – jadi apa yang salah?

KB932917 tidak tersedia!
Saya coba melakukan investigasi lanjutan dengan membuka event viewer. Disana ada error yang disebabkan oleh SSO dengan nomor 0x80040e14. Penjelasan bahwa credentials tidak dapat diambil sangat tidak masuk akal, sebab konfigurasi SSO ini sudah bukan yang pertama kalinya, dan credentials yang digunakan juga memiliki otoritas yang sesuai.

ssofailed6

Saya coba membuka internet dan menemukan penjelasan dari Chris Calderon dan disebutkan pula bahwa kita harus menggunakan hotfix KB932917 dari Microsoft. Saya coba membuka link tersebut dan gagal. Menurut informasi yang ada, hotfix tersebut akan dimasukkan didalam service pack MOSS 2007, tapi kapan? Padahal kita butuh hotfix itu saat ini!

Patching Manual!
Dari blog yang ditulis Chris, kita bisa lihat bahwa masalah utamanya adalah MOSS selalu menggunakan index IX_SSO_Credentials yang ada di database SSO.
Hmm, saya buka database SSO dengan menggunakan SQL Management Studio. Ternyata disana hanya ada index dengan nama IX_SSO_TempCredentials.

ssoqry

Tanpa pikir panjang, saya gunakan perintah yang sama untuk membuat IX_SSO_TempCredentials – dan saya buat index kedua dengan nama IX_SSO_Credentials. Jadi sekarang dbo.SSO_Credentials memiliki dua index yang sama dengan nama berbeda.

ssofailed7

Tanpa menunggu terlalu lama, saya sekali lagi mencoba webpart sso dan syukurlah bahwa patching manual tersebut berhasil; dan webpart sso dapat bekerja dengan baik seperti sedia kala.

Next Page »

Follow

Get every new post delivered to your Inbox.