Ideas for Free

Ideas for Free

only freedom gives SharePoint real power to grow

Ideas for Free RSS Feed
 

Archive for October, 2006

MOSS 2007 ImageButton Doesn’t Fire Event?

English (versi Indonesia)

Today I have got a panic call from my fellows developer, stating that the ImageButton doesn’t fire events when user click on it. He added that it was working yesterday – but today when he come back to the page it behaves strangely. Trying to understand what’s going on, I interviewed the story behind the problem.

  1. He creates a webpart that extensively using table layouts. The webpart contains few textbox and a submit button.

    TesterWP1

  2. Then, today he decide to replace submit button with ImageButton. However, it stop firing event. He makes sure that he only change System.Web.UI.WebControls.Button into System.Web.UI.WebControls.ImageButton – additionaly he also change click event delegate to listen to ImageClickEventArgs.

    TesterWP2

What might be the problem?

I think, first because by design event firing in ImageButton is different with Button (simply because it fires ImageClickEventArgs instead of EventArgs - other explaination must be somewhere in theory). Second, there should be kind of sink when ImageButton fires event. I will not try to explore the first argument – but the second argument is challenge to solve.
Lets define sink – as is a kind of dump box or masked event because of its behaviour or design. The events must be raise up from the control to the host application, however it sinked somewhere in the bubbling path. Let’s see control hierarchy in the questioned webpart.

Bubbling

Having that hierarchy in our mind, we can start to see what happened in the code. The bigger likelyhood is Panel, because it works mainly as a container for other controls. So, here is the original code

SinkingProblem01

adminPanel visibility will be set to true on certain conditions, but by default it will be invisible. I am not sure why this works when he attach Button() but stop working when he attach ImageButton(). However, I think the invisibility of the panel covering event bubbling from ImageButton(). So to avoid sink-ing problem, I suggest not to set the visibility to false when the panel is being contructed in CreateChildControls() method. Now the code looks like,

SinkingProblem02

Compiling and testing the solution, it works as expected.

TesterWP3

–o0o–

Indonesian (English version)

Siang ini saya mendapat pertanyaan dari salah seorang teman, tentang mengapa ImageButton tidak bekerja sebagaimana mestinya – ketika di klik , tidak ada reaksi apapun kecuali refresh halaman. Dia menambahkan, bahwa sehari sebelumnya webpart tersebut bekerja dengan baik – namun hari ini ketika dia mencoba kembali terjadi keaneah seperti yang dia ceritakan. Saya mencoba memahami apa yang sebenarnya ingin dia lakukan, dengan bertany ini dan itu akhirnya didapatkan gambaran awal kejadian tidak bekerjanya webpart itu.

  1. Webpart dibuat secara intensive dengan menggunakan layout table. Didalam webpart ada beberapa text box, dan sebuah tombo submit.

    TesterWP1

  2. Kemudian, hari ini dia mencoba untuk mengganti tombol submit (Button()) dengan menggunakan ImageButton. Namun sayangnya ImageButton tersebut tidak menghasilkan event apapun. Dia meyakinkan bahwa yang diganti hanya deklarasi System.Web.UI.WebControls.Button menjadi System.Web.UI.WebControls.ImageButton – ditambahkannya lagi bahwa EventArgs diganti menjadi ImageClickEventArgs pada delegate control tersebut.

    TesterWP2

Jadi apa yang mungkin menjadi penyebabnya?

Dalam benak saya, kemungkinan pertama adalah karena desain keluarnya event di ImageButton berbeda dengan Button (ini mudah saja, karena ImageButton menghasilkan ImageClickEventArgs dan bukan EventArgs – mungkin ada penjelasan teoritis lain yang bisa didapatkan di buku??). Kemungkinan kedua adalah karena adanya perangkap ketika ImageButton menghasilkan event. Dalam hal ini, kemungkinan pertama tidak perlu lagi digali – namun kita perlu menggali solusi untuk kemungkinan kedua.
Disini saya mendefinisikan perangkap sebagai sebuah kotak sampah/buangan atau tirai atas event yang terjadi karena sifat / desain kontrol yang digunakan. Sebuah even akan dihasilkan oleh kontrol dan diberikan kepada host/parent nya; sehingga jika event tersebut tidak bisa ditangkap oleh host – berarti selama perjalanannya ada yang menangkap dan membuang event itu. Mari kita lihat hirarki control yang ada pada webpart yang sedang bermasalah tersebut,

Bubbling

Dengan berbekal hirarki itu, kita dapat mulai menganalisa bagian mana yang mungkin menjadi penyebab anomali itu. Kemungkinan terbesar adalah pada bagian Panel – karena panel memiliki fungsi utama sebagai wadah untuk kontrol yang lain. Berikut ini gambaran kode webpart tersebut,

SinkingProblem01

adminPanel visibility akan diatur true berdasarkan kondisi-kondisi tertentu, namun secara default diharapkan tidak terlihat. Meskipun saya tidak yakin mengapa kode ini bekerja hanya untuk Button() namun tidak bekerja untuk ImageButton(). Namun, saya pikir bahwa pengaturan tidak terlihatnya panel menutupi kaluarnya event dari ImageButton(). Dengan demikian, untuk menghindari masalah perangkap itu, sebaiknya kita tidak mengatur visibility menjadi false ketika panel sedang dikonstruksi didalam CreateChildControls(). Dengan perbaikan itu maka kode yang baru akan nampak sebagai,

SinkingProblem02

Kita lakukan kompilasi ulang dan pengetesan, dan nampaknya solusi tersebut berhasil sesuai dengan yang diharapkan.

TesterWP3

MOSS 2007: Some Caveats in WebPart Development

English (Indonesian version)

WebPart creation is just analogous with the one for server controls. Any child controls in the webpart must be added programatically throughout the code (no design time GUIs) – and also for the layouts. Simply, what we do on server controls development are bringed into webpart development – the difference is webparts inheriting from System.Web.UI.WebControls.WebPart or Microsoft.SharePoint.WebPartPages.WebPart instead of System.Web.UI.WebControls.WebControl . However, there are some ceveats if you start developing webparts. If someday you ever encounter these symptoms, it might be because one of these reasons:

  1. Symptom, you are successfully developing webpart by gradually adding features and deploy the assembly into bin directory. However when you try to install it into production server, the Sharepoint can not import the web part; showing following error message.

    ImportError

    Possible reasons, the web part class contains explicits class contructors.
    Developers might create simple web part at the first time to see how it works, and then add some more functionalities time to time. The simple web part can be added to the web page sucessfully – and he/she add class contructor without any problem. This could be happened because, after the web part becomes child control of the web page – it will follow normal loading sequence (contruct – init – load – render). However, if it’s first imported to the page an error will be presented to the users.

    Resolution, avoids using explicits class constructors in web part class.

  2. Symptom, web part are displayed correctly in web page, but it rendered as “object reference not found” in designer

    Editor

    Possible reasons, some object are contructed in OnInit() timing event.
    Objects in web part can be created in CreateChildControls() or for some reason the developers need to put it in OnInit() timing event. Creating object in CreateChildControls() maintains it state, in contrast with creating objects in OnInit(). For example, if text box control is constructed n CreateChildControls() then the text will be preserved during postback events. Web part in web page follows normal loading sequence, however in the designer OnInit() will be neglected by the designer rendering tools.

    Resolution, check the DesignMode property of the web part and add necessary object contructor statement in CreateChildControls() ;
    Microsoft suggest us to implement the IDesignTimeHtmlProvider interface, which means we need to implement GetDesignTimeHtml() method.

  3. Symptom, web part assembly is strong named and its already “<SafeControls.. ” list of web.config. However, when you try to add it in site collection the web part is not listed.

    Possible reasons, by default Visual Studio 2005 creates private class. So, if you create new class and add inheritance from webpart class, it still private class. A private class can not be listed in web part catalog of site collection.

    Resolution, add public modifier to the web part class.

At last, if you create web part – always try full cycle loading. Delete and add the web part from web page before delivering to the user.

–o0o–

Indonesia (versi English)

Membuat web part sangat mirip dengan teknik yang digunakan untuk membuat server control. Control-control yang akan ditambahkan kedalam web part harus ditambahkan secara programatik melalui code (karena tidak ada tool untuk GUI). Begitu pula ketika kita menginginkan layout tertentu pada web part, maka semua harus dilakukan secara manual melalui code. Tapi pada prinsipnya, apa yang kita lakukan pada saat membuat web server control juga dilakukan pada saat membuat web part – bedanya web part diturunkan dari System.Web.UI.WebControls.WebPart atau Microsoft.SharePoint.WebPartPages.WebPart dan bukan System.Web.UI.WebControls.WebControl. Namun, ada beberapa hal yang harus diperhatikan jika Anda baru memulai membuat web part. Ada beberapa jebakan yang biasanya dialami oleh rekan-rekan yang baru memulai project web part, misalnya:

  1. Gejala, fungsi-fungsi tambahan dapat ditambahkan pada web part yang sudah diinstall dengan tanpa masalah. Akan tetapi ketika web part tersebut akan diinstall ke tempat lain, muncul error yang menyebutkan bahwa web part tidak dapat diimport. Begitu pula, ketika web part di development dihapus dan akan ditambahkan kembali, muncul pesan error yang sama sebagai berikut,

    ImportError

    Kemungkinan penyebabnya, web part tersebut memiliki konstruktor yang eksplisit.
    Pada saat awal, web part mungkin dibuat dengan sangat sederhana hanya untuk melihat cara kerjanya. Lalu, web part tersebut ditambahkan kedalam halaman web dan tampil dengan tanpa masalah. Kemudian, seiring dengan waktu beberapa fungsi ditambahkan dan hasilnya langsung dilihat pada web part yang sudah ada didalam halaman web. Developer juga mungkin menambahkan konstruktur eksplisit tanpa masalah. Ini terjadi karena web part yang sudah menempel di halaman web akan mengikuti urutan eksekusi yang normal (construct – init – load – render). Akan tetapi, jika web part tersebut tidak dapat ditambahkan ke halaman web yang lain.

    Resolusi, hindari pendefinisian konstruktor eksplisit untuk web part.

  2. Gejala, web part tampil normal di web page, namun ketika web page dibuka dengan designer muncul pesan “object reference not found”

    Editor

    Kemungkinan penyebabnya, pengaturan property untuk object/control yang dibuat di method OnInit() dilakukan dengan menggunakan nilai dari property webpart.
    Biasanya konstruksi object/control dilakukan didalam CreateChildControls() namun kadangkala untuk alasan tertentu, developer harus meletakkannya di OnInit(). Ketika halaman berada pada urutan OnInit(), property webpart belum diwujudkan didalam object webpart tersebut. Sehingga, pada dasarnya pengaksesan property itu pada saat OnInit() akan menimbulkan kesalahan ‘object reference not found’ .

    Resolusi, pindahkan urutan pengaturan property didalam method CreateChildControls() atau RenderWebPart(). Lebih jauh menurut Microsoft, kita harus mengimplementasikan interface IDesignTimeHtmlProvider, dan dengan kata lain harus menambahkan method GetDesignTimeHtml() didalam webpart yang kita buat.

  3. Gejala, assembly web part sudah memenuhi standard strong name. Isi “<SafeControls.. ” di dalam web.config sudah ditambah dengan text yang sesuai. Namun, pada saat akan menambahkan web part kedalam site collection, tidak ditemukan nama web part yang dimaksud.

    Kemungkinan penyebabnya, secara default Visual Studio 2005 akan membuat class privat. Jadi, meskipun class tersebut sudah diturunkan dari class webpart, namun masih merupakan class private. Sebuah class private tidak dapat ditampilkan didalam web part catalog yang ada didalam site collection.

    Resolusi, tambahkan modifier public kedalam class web part.

Sebagai pedoman terakhir, jika Anda membuat sebuah web part – jangan lupa untuk selalu mencobanya secara lengkap. Hapus dan tambahkan web part dari web page serta cobalah untuk membuka halaman tersebut didalam designer.

Preparing Mobile Active Directory Infrastructure

English (versi Indonesia)

Often, we need to use Active Directory (AD) infrastructure during presentation. For example, AD is necessary infrastructure to demonstrate profile synchronization, audience grouping, approval hierarchy configuration using Sharepoint Designer, etc. Therefore we need mobile AD infrastructure – in a laptop or in VPC.

Installing AD in the laptop is the easiest way, but it will bring in some problem, ie.

  • AD is running all the time even if we don’t need it – wasting unecessary resources
  • we are only showing operation in AD controller – hiding complete AD infrastructure behaviour

Surely we can demonstrate AD infrastructure by preparing client environment in VPC, however running AD everytime in our laptop is still undesireable. Thus, installing AD in VPC is the best option in our case – and for a complete AD infrastructure we need 2 virtual machine, for the Domain Controller and for the client box.

two virtual machine

Click to continue reading “Preparing Mobile Active Directory Infrastructure”

Records Management

English (baca Indonesian)

The first notion in my mind about records management is a simple data / log management; however throughout learning process about MOSS 2007 concept, records management is more complex then data / log management. It’s not as simple as document management – due to some requirements:

  • clasification can and should be automated
  • automatically create unique record
  • having compliance in auditing and policy
  • should have its own environment
  • limited/controlled read access; wide write access

Hence records management is document management with those additional requirements; or I can say it is an evidence management which collect and manage evidence in MOSS 2007. Using combination of document library feature, information rights management (IRM), and auditing – MOSS 2007 offers out of the box records management.

Records management can be modeled as,

Records Management Repository

 

Here the records owner send all evidence to the records manager. The evidence can be document or anything that is digitalized using 3rd party digital imaging tools. The records owner can be an Information worker who access knowledge from SharePoint/Exchange/server through his PC/Laptop. Then, all records are sent to the records repository – having all policy and behaviour set automatically.

Indonesian (see in English)

Mendengar kata “records management” yang terbayang di benak saya adalah proses pengelolaan data / list / log. Namun, sejalan dengan proses belajar tentang konsep yang dibawa oleh MOSS 2007, records management ternyata lebih kompleks dari sekedar catatan biasa / list. Records management juga berbeda dengan document management – karena records management membutuhkan persyaratan-persyaratan khusus yaitu:

  • pengklasifikasian harus dapat dilakukan secara otomatis
  • pencatatan harus dilakukan cara unik
  • memiliki sistem auditing dan aturan yang standar
  • harus memiliki lingkungan terpisah yang independen
  • akses baca yang terbatas/terkendali

Jadi records management adalah sebuah document management ditambah dengan syarat-syarat dasar tersebut; atau dengan kata lain saya bisa mengatakan bahwa records management adalah proses pencatatan dan pengumpulan bukti-bukti kedalan sebuah wadah didalam MOSS 2007. Dengan memanfaatkan fitur-fitur di document library, information rights management (IRM) dan auditing, maka MOSS 2007 dapat digunakan untuk membuat records management didalam sebuah organisasi. Nah, tugas kita selanjutnya adalah bagaimana mengimplementasikan membuat records managment di MOSS 2007, sesuai dengan standar records management yang ada.

Sebuah records management dapat dimodelkan seperti dibawah ini,

Records Management Repository

Pada gambar diatas records owner mengirimkan semua catatannya kepada records manager. Catatan itu dapat berupa dokumen digital atau dokumen hasil digitalisasi dengan menggunakan perangkat digitalisasi seperti scanner, foto dsb. Records owner sendiri dapat merupakan seorang pekerja informasi (Information Worker) yang memeliki akses kedalam informasi yang ada di server (Exchange, Sharepoint dsb) melalui terminalnya. Kemudian, semua catatan dimasukkan kedalam records repository, dimana aturan-aturan baku diberlakukan secara otomatis kedalam catatan yang disimpan tersebut.

Compatibility Problem Virtual Server / Virtual PC and Wireless Device

Indonesian: (see in English )

Kali ini gue mengalami masalah dengan virtual server. Virtual machine yang ada didalam virtual server tidak bisa terhubung melalui devais nirkabel yang ada didalam laptop. Dengan konfigurasi yang sama, hampir semua teman didalam kelas tidak mengalami masalah kecuali satu orang lagi dari India. Padahal, gue menggunakan Virtual Server 2005 R2 (virtual server keluaran paling gress dari Microsoft) dan si orang India menggunakan Virtual PC 2004 SP1 dengan hotfix untuk prosesor centrino.

Setelah mencoba selama beberapa jam, kami semua tidak ada yang tahu penyebab masalah tersebut. Dan bahkan salah satu teman gue dari Microsoft juga tidak dapat memberikan solusi. Dia menyarankan untuk nebeng di mesin sebelah gue (sesuatu hal yang tidak dapat gue terima).

Jadi apa yang terpikir pada saat itu? In pasti masalah kompatibilitas antara virtual PC/virtual server dengan adapter wireless. (punya gue 3945ABG). Dan dengan demikian, tidak ada yang bisa dilakukan kecuali menunggu Microsoft mengeluarkan patch atau mengupdate driver untuk adapter tersebut.

Sementara belum di-rilis, apa yang bisa dilakukan?

Kita harus dapat memanfaatkan koneksi wireless tersebut secara tidak langsung dengan menggunakan NAT. Jadi, alih-alih menggunakan bridge kita harus mengkonfigurasi NAT antara virtual machine dengan host. Mengatur NAT di virtual PC dapat dilakukan dengan sangat mudah, karena virtual PC sudah memiliki opsi NAT.
Untuk membuat NAT di virtual server; kita membutuhkan adapter microsoft loopback dan internet connection sharing di devais wireless. Kemudian, adapter jaringan virtual machine harus dihubungkan ke adapter microsoft loopback. Dengan cara ini, virtual server dapat terhubung ke jaringan luar melalui adapter microsoft loopback. Kemudian, adapter microsoft loopback akan meneruskan paket data melalui devais wireless sebagai gateway. Cara yang dilakukan pada virtual server tersebut juga dapat diterapkan di virtual PC.

–o0o–

English : (baca Indonesian)

Today I am experiencing a problem with virtual server. It can’t connect to the networks through wireless device in my laptops. Other classroom fellows are fine with their wireless device and virtual pc – but not me and one other guy from India. I am using Virtual Server R2 and he is using VPC 2004 SP1 with hotfix for centrino processor.

After couple of hours trying, we all don’t know what’s behind the problem – and even the Microsoft guy can not give the solution. The only suggestion they gave me is, to share the machine with other classmate.

So – what did I think about that? It must be an incompatibility problem between virtual PC/virtual server and 3945ABG wireless adapter from Intel. And no much we can do untill Microsoft releases the patch or update the drivers.

Can we immediate the problem until the new patch/driver released? Sure, we can!

We need to set-up a NAT network instead of a bridged one. For the virtual PC you can just change the network device setting into NAT. For the virtual server; you must prepare the host to have internet connection sharing in wireless device and microsoft loopback adapter as home device. Next, connect the virtual machine to the microsoft loopback adapter – and voila you’ll be connected to the network through microsoft loopback adapter as gateways. The microsoft loopback adapter will then use ICS in wireless adapter. And you can to the same thing to the virtual PC too.

Hawker Lau Pa Sat

Indonesian (read in English)

Di Singapura, salah satu pilihan tempat makan yang cukup murah adalah “hawker”. “Hawker” tak lain adalah food junction / food court, namun dengan gedung terbuka dan tanpa AC. Jadi bayangkan saja, kalau siang hari bolong panasnya pasti bisa bikin keringatan. Apalagi, kebanyakan masakan dibuat pada saat di pesan – jadi panas dari kompor dan masakan akan menambah panas suasana.

Tapi jangan khawatir, di sekitar hawker biasanya dilengkapi dengan kipas angin dan biasanya dikelilingi dengan taman / pepohonan. Foto dibawah adalah salah satu “hawker” di Singapura. Letaknya di Lau Pa Sat, tak jauh dari stasiun MRT Rafless Palace.

DSC00021

Didalamnya kita bisa menemukan berbagai macam makanan mulai dari makanan India (biasanya cukup murah dengan porsi yang cukup besar) sampai ke makanan Korea (meskipun lebih mahal tapi porsinya tetap cukup besar). Jangan kaget, kalau di hawker ini kita bisa menemukan mie goreng dengan harga 77 sent Singapore atau kurang dari Rp. 6.000,00.

Tak jauh dari Lau Pa Sat, bisa kita temukan China Town. (berikutnya China Town – Singapore)

 

English (dalam bahasa Indonesia)

One of the inexpensive food court in Singapore is “hawker”. “Hawker” is a just like other food junction / food court in this country, but without air conditioning (AC) and located in open area. Hence you can imagine how hot is it in lunch time. Moreover, almost all foods are prepared at the moment you order it – fresh cook and gas will add more temperature to the site.

But don’t be too worry, hawker usually surrounded with trees and ceilling fans. For instance, here is one of hawker in Singapore. It is in Lau Pa Sat – near MRT station Rafless Palace.

DSC00021

Within the hawker we can find many type of foods, ranging from Indian foods to the Korean. And don’t be surprised if there is fried noodle with only 0.77 SGD, really best price in that country.

About 15 minutes walk from Lau Pa Sat, we can find China Town (next story, China Town – Singapore).

Computers Business Directory - BTS Local