สวัสดีครับ ทุกท่าน เรามาพบกันแล้วอีกครั้งนึง วันนี้ผมมีเวลาไม่มากนักเรื่องของรูปภาพประกอบและข้อมูลให้กระชับมากขึ้น ผมจะขอมาอัพเดทเพิ่มเติมวันหน้าน่ะครับอีกครั้ง วันนี้ผมจะมากล่าวเรื่องการพัฒนา SharePoint เพื่ออุดช่องโหว่ หรือ เสริมความสามารถของ SharePoint ในลักษณะการจับเหตุการณ์ต่างๆ ที่เกิดขึ้นใน List เช่น Add Item, Edit Item, Delete และอื่นๆ อีกหลายเหตุการณ์ ตัวอย่างที่ผมได้เคยลองทำมา คือ เมื่อมีการสร้าง Item ขึ้นมาใหม่ เราจะนำข้อมูลใน Field ต่างๆที่เราต้องการ นำไปอัพเดท ค่าใน Database หรือ Application อื่นๆ ที่เราต้องการเพื่อนำไปออกรายงาน เป็นต้น สามารถใช้งานได้ทั้ง MOSS2007 และ WSS 3.0 สิ่งที่กระผมได้กล่าวมาข้างต้น เครื่องมือนี้ คือ Event handler manager !!!
Note Software REQ. : MS Vistual Studio.NET
Event handler manager เป็น Solution ตัวนึงที่เราต้องทำการ Deploy เพื่อจะนำมาเข้าสู่ระบบของ SharePoint มีขั้นตอนดังนี้
1. ใช้คำสั่ง stsadm -o addsolution -filename GatWeb.SharePoint.EventsManager.wsp ใน sharepoint command ของ SharePoint ( C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN ) ซึ่งเราต้องนำไฟล์ที่เราต้อง Download มาตาม URL : http://rapidshare.com/files/182461521/GatWeb.SharePoint.EventsManager.wsp.html นำไฟล์มาวางไว้ใน Path ที่เราใช้คำสั่ง addsolution
2. ขั้นตอนต่อไปให้เรา Deploy Solution ขั้นตอนนี้สามารถได้ทั้งใน Central Administrator(GUI) ในส่วนของ Operations และไปที่ลิงค์ Solution management เลือก gatweb.sharepoint.eventsmanager.wsp หลังจากนั้นเลือก Web Application Port ที่เราต้องการจะใช้งาน หรือจะเป็น sharepoint command(stsadm -o deploysolution -name gatweb.sharepoint.eventsmanager.wsp -url http://hostmane:port)
3. เมื่อเรา Deploy เรียบร้อยแล้ว ให้เราเข้าไป Active การใช้งานอีกครั้งหนึ่งใน Web Application นั้นๆ ใน Site Actions >> Site Settings >> Site collection features เมื่อเข้าไปแล้วก็จบพบ Feature ตัวนึงที่ชื่อ Event Manager ให้เราทำการ Active เพียงเท่านี้ Event Handler Manager menu ก็จะปรากฏใน Menu ต่างๆในลิส ซึ่งจะแสดงตรงที่เมนู Settings จะแสดงรายการที่ชื่อ Events Manager สำหรับสิทธิในการเข้าไปจัดการ Event ต่างๆได้ จะต้องมี Permission level เป็น Site Owner เท่านั้น !!!
นี่เป็นเพียงแค่ขั้นตอนเริ่มต้นเท่านั้นน่ะครับ ยังไม่ได้เริ่มการ codding เลยครับยังไงก็สู้สู้น่ะครับ ( - -)=#@
เรามาเริ่มส่วนของการเตรียมการ Code น่ะครับ ให้เราเปิด Visual Studio .NET ขึ้นแล้วทำตามขั้นตอนดังนี้
1. สร้าง Project template ที่เป็น class librarys ขึ้นมาหนึ่งตัว
2. เพิ่ม Reference Microsoft.SharePoint ซึ่งเป็นสิ่งที่จำเป็นในการพัฒนา SharePoint ( โดยสามารถดาวน์โหลดได้ที่ : http://rapidshare.com/files/182473921/VSeWSSv11.exe.html )
3. กำหนด Properties Project ด้วย Assembly name และ Default namespace ในส่วนของ TAB Application และ กำหนด Signing เพื่อทำการสร้าง Storng key name ใช้สำหรับอ้างใน Event manager ใน List
4. สร้างไฟล์คลาสขึ้นมาหนึ่งคลาส เท่านี้ก็สามารถเริ่มต้นการเขียนโปรแกรมได้แล้วครับ
Note บทความนี้ไม่ได้สอนเกี่ยวกับหลักเขียนโปรแกรม
สิ่งถัดไป คือ ตัวอย่างของโค้ดเกี่ยวกับการ ดึงข้อมูล User ที่กำลัง Logon Windows หมายความว่า User ตอน Logon เข้า Windows น่ะครับ ไม่ได้หมายถึงว่า หากมีการ Sign Difference User ไปแล้วจะนำ User ที่ Signin ต่างจาก User ที่ Logon เข้า Windows ซึ่งจากคำพูดนี้ หลายท่านคงเคยใช้ SPContext กันบ้างจะจับ User ที่กำลัง Signin อยู่ แต่จากการที่ผมพยายามหาข้อมูลอยู่ SPContext ไม่สามารถนำมาใช้ได้ดีกับ Event handler manager ครับ เพราะฉะนั้นสิ่งที่กล่าวมาทั้งหมดนี้ หมายความว่า เราจะจับ Current User ยังไง เมื่อเราเขียนโปรแกรมเพื่อดึงแล้ว โปรแกรมของเราก็จะจับ User ที่ Logon เข้า Windows เท่านั้นครับ อันนี้ผมได้ทดลองกับ Document Library เท่านั้นน่ะครับ (ส่วนที่มาของ ISSUE นี้หากท่านใดสงสัย สอบถามได้เพิ่มเติ่มน่ะครับ )
public class InsertEventHandler : SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
ChangeSubmittedBy(properties);
}
private void ChangeSubmittedBy(SPItemEventProperties properties) {
Guid siteID = properties.ListItem.ParentList.ParentWeb.Site.ID;
Guid webID = properties.ListItem.ParentList.ParentWeb.ID;
Guid listID = properties.ListItem.ParentList.ID;
Guid newItemID = properties.ListItem.UniqueId;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteID))
{
using (SPWeb web = site.OpenWeb(webID))
{
SPList questionList = web.Lists[listID];
SPListItem listItem = questionList.Items[newItemID];
SPFieldUserValue oUser = new SPFieldUserValue(
web, web.CurrentUser.ID, web.CurrentUser.LoginName);
listItem["Author"] = oUser;
listItem["Editor"] = oUser;
listItem.Update();
}
}
});
}
}
ขอขอบคุณที่มา : http://k2distillery.blogspot.com/2008/03/update-splistitem-created-by-and.html
หลังจากที่เราเขียนโค้ดและ Build Class เสร็จเรียบร้อยแล้วขั้นตอน ต่อไปคือ การนำ Event ของเราไปใช้งานกับ SharePoint ครับ มีลำดับขั้นตอนดังนี้
1. นำไปไฟล์ DLL ที่เก็บอยู่ใน Folder Bin>>Debug โดยการ drag and drop ไปใน Folder c:\windows\assembly
2. ให้เราไปหา ชื่อ dll ที่เรานำไปวางเมื่อสักครู่ เรานำค่าในแต่ละ Properties มาเก็บไว้และนำมาจัดในรูปแบบข้อถัดไป
3. ไปยัง Menu Events Manager ใน List ที่เราต้องการโหลด event ไปใช้งาน และคลิ๊กไปที่ เมนู Add new event เมื่อแสดงหน้าของการใส่รายละเอียด ให้เรานำรายละเอียดตามตัวอย่างนี้ในช่อง Assembly* : idgSpListEvent,Version=1.0.0.0,Culture=neutral,PublicKeyToken=3c6484527166b189 ตัวหนาส่วนแรก คือ ชื่อ dll เมื่อสักครู่ที่เราได้นำไปชื่อวางใน Folder Assembly ส่วนตัวทึบในส่วนหลังคือ ค่า properties ของ Assembly ตัวนั้น และกด Load
4. จากนั้นเลือก Class ที่เราได้เขียนไว้ และ เลือก Event Type * ที่เราได้เขียนไว้และตั้งชื่อ ของ Event และกด OK เพียงเท่านี้ก็เสร็จเรียบร้อยสำหรับขั้นตอนการใส่ Event ให้ทำงานควบคู่ไปกับ List เราได้อย่างสมบรูณ์
เพียงเท่านี้ก็เสร็จเรียบร้อยสำหรับ การเสริมลูกเล่นให้ List ของเรามีความสามารถในการทำงานควบคู่ไปกับเหตุการณ์ที่เกิดขึ้นกับลิสได้อย่างมีประสิทธิภาพ
วันหน้าพบกันใหม่น่ะครับ :-)
edit @ 13 Jan 2009 00:25:02 by Thai SharePoint Society
edit @ 13 Jan 2009 00:56:28 by Thai SharePoint Society