You are on page 1of 27

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

CHNG

WebPart v cc trang SharePoint


Lu : Nu quen vi SharePoint 2007, bn s thy rt th v khi tm hiu cc ch v SharePoint Designer, chnh sa XSLTListViewWebPart, v cc cng c mi i km Visual WebParts. Nhng ni khc ca chng ny bn c th lt qua. Trong Chng 1 v 2, bn tm hiu nhng kin thc c bn v SharePoint. Trong Chng 3, bn tm hiu nhng kin thc m mi lp trnh vin SharePoint cn bit l vit cc tnh nng v gii php. Nh ni trong Chng 3, cc tnh nng v gii php l nhng th c s dng ng gi mt chc nng mi vo SharePoint. L mt lp trnh vin SharePoint bn phi bit cch vit tnh nng v gii php. iu ny c bit quan trng khi bn chuyn m ngun t mt m i trng ny sang mi trng khc, v d chuyn mt chc nng t mi trng QA sang mi trng Production. Trong phn cn li ca cun sch, bn s tip tc tm hiu cch vit v ng gi cc phn t khc nhau trong SharePoint, nh tnh nng v gii php. Bt u t chng ny, ti s cp vi cc WebPart v trang SharePoitn. Chng tip theo s cp ti Client Object Model, mt m hnh th v mi c Microsoft gii thiu gn y. Ngoi ra, bn cng s tm hiu ADO.NET(WCF) Data Services v chc nng ca n vi SharePoint 2010. Bn cnh , ti s minh ha mt s k thut thc tin rt th v s dng khi pht trin cc ng dng SharePoint 2010, nh ty chnh dch v WCF v cc WebPart chng c th giao tip m khng gy ra tnh hung postback. Trc khi i su vo tng ch trn, trc tin cho php ti tm lc mt s kin thc c bn v nhng ch s c cp ti trong chng ny.

WebPart l g?
Cc web site hin i cha rt nhiu phn t khc nhau trn trang. Mi phn t cung cp mt tnh nng ring bit cho ngi dng. i khi nhng phn t c th c cu hnh hoc nhng s kin c th ni chuyn vi nhau. Cc phn t chim mt vng khng gian hnh ch nht trn trang web. Cc cng ngh khc nhau s dng cc t ng khc nhau m t nhng phn t . Mt s cng ngh gi chng l portlet. Mt s cng ngh li gi l widget. SharePoint gi chng l WebPart. WebPart l mt b phn khng th thiu ca ASP.NET 2.0. WebPart c gii thiu ln u tin trong SharePoint 2003, trc khi ASP.NET 2.0 chp nhn chng v cc WebPart trong SharePoint 2007 c xy dng da trn framework WebPart ca ASP.NET 2.0. Trong chng trc, ti tm lc c bn WebPart l g, v cch s dng cng nh cu hnh mt WebPart c bn. Nu cha quen vi WebPart, ti khuyn bn nn c li mc trc khi c chng ny. Cng trong chng trc, bn tm hiu cch vit mt WebPart n gin l HelloWorld WebPart. Trong chng ny, bn s tip tc m rng kin thc v xem xt tt c cc kha cnh lin quan ti vit cc WebPart phc tp hn.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Cc trang SharePoint l g?
Cc trang SharePoint n gin ch l cc trang ASPX c s dng duyt qua website SharePoint. Mt s trang SharePoint nm trong h thng file c gi l cc trang ng dng, trong khi mt s trang nm trong c s d liu c gi l cc site. C mt s khc bit v cch s dng v trin khai gia cc trang ng dng v site. Ngoi ra, mt s trang c th c s dng cha WebPart. i khi chng c gi l cc trang WebPart, tuy nhin, cc trang WebPart thng thng l site. V mt k thut, cc trang ng dng cng c th cha cc WebPart, nhng theo quy c, cc trang ng dng trong SharePoint c mc ch s dng khc vi cc site. Sau khi kt thc chng ny, bn s nm r cch vit v s dng trang ng dng v site. Bn s c th a ra quyt nh khi no s dng trang ng dng, khi no s dng site da trn nhng kin thc hc c trong chng ny.

S dng SharePoint Designer vi WebParts


Nh cp trong Chng 3, c ba cch cung cp mt chc nng trong SharePoint. Thng qua trnh duyt Thng qua SharePoint Designer Thng qua Visual Studio

S kh khn v kt qu thu c tng ng vi mi cch cng lc cng phc tp v hp dn hn. Trong chng trc, bn ty chnh ni dung cho mt WebPart editor thng qua trnh duyt. Tip theo, trong chng ny, bn s bt u tm hiu cch ty chnh mt WebPart c sn bng cch s dng SharePoint Designer. WebPart bn s thc hin ty chnh l WebPart XSLT List View, c tham chiu trong m lp trnh l XsltListViewWebPart. Trong SharePoint 3.0, y l mt WebPart kh quan trng c tn l DataViewWebPart. XsltListViewWebPart mt WebPart thay th tt hn v c nhiu ci tin so vi DataViewWebPart. DataViewWebPart vn cn, nhng XsltListViewWebPart s dng d dng v tt hn, ti hy vng bn cng ng vi ti v iu ny sau mt s v d thc t. bt u, ti s to mt list n gin da trn mu Custom List. Sau thm mt ct c tn l "Population". Ct ny s cha d liu s, v th ti thit lp kiu ca n l Number. Sau , truy cp vo a ch http://www.census.gov/ipc/www/idb/ranks.php v ly mt s d liu mu. Bn c th cho rng ti ang c a ra mt s d liu ch quan cho mt v d thc t. Nu mun th nghim v to ra cc d liu mu ca ring mnh, bn hy thoi mi lm iu ! Khi list c in mt s d liu mu, tip theo ti s s dng XsltListViewWebPart ty chnh cch trnh by d liu trong List. C th tm lc li mt cht, ti c mt data source (ngun d liu) l Custom List vi mt ct l Population. Ti thm mt s d liu mu vo list ch ra dn s ca 50 nc ng dn nht trn th gii. u tin, khi ng SharePoint Designer 2010. SharePoint Designer 2010 l mt cng c mang nhng kh nng ca b Office 2010. N c thit k dnh cho cc lp trnh vin v ngi dng doanh nghip mc phc tp trung bnh . Trong SharePoint 2007, cng c tng ng l SharePoint Desginer 2007. SharePoint Designer 2010 ch c th s dng cho cc site SharePoint 2010; n khng th s dng cho cc site SharePoint 2007. Do , nu cng ang qun l cc site SharePoint. 2007, bn vn phi ci t SharePoint Designer 2007 bn cnh SharePoint Designer 2010 trn cng mt my. Tuy nhin, cn phi ch rng nu ci t SharePoint Designer 2007 v SharePoint Designer 2010 trn cng my th c hai phn mm ny phi l phin bn 32 bit. Bn khng th ci bn office 2010 64 bit v SharePoint 2007 trn cng mt my. Vi c nhn ti, ti lun o ha cng vic ca mnh, do vn ny khng bao gi l iu kh khn vi ti.

80

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Ch Bn khng th ci bn office 2010 64 bit, SharePoint Desinger 2010 bn 64 bit v SharePoint 2007 trn cng mt my. Bn
ch c th ci t cc phin bn 32 bit cnh nhau.

Gi s SharePoint Designer 2010 m v ang chy trn my tnh ca bn, hy click vo nt open site trong SharePoint Designer, nh trong Hnh 4-1.

Hnh 4-1. M mt site trong SharePoint Designer Khi c yu cu nhp mt tn site, hy nhp vo http://sp2010. Nu tng lm vic vi SharePoint Designer 2007, bn s thy rng SharePoint Designer 2010 trnh by giao din theo hng tc v h on ton khc bit. Tc v tip theo l chnh sa trang ch v s dng XsltListViewWebPart hin th thng tin cc nc trong list trong mt form thn thin vi ngi dng. Trong SharePoint Designer 2010 vi site ang m, trong mc customization hy click vo lin kt edit sites home page, nh trong Hnh 4-2.

Hnh 4-2. Chnh sa trang ch site

Khi click vo lin kt edit site home page, trang ch site s c m ra trong ch cho php chnh sa. Tip theo, click vo vng WebPart bn tri v click tip vo tab Insert trn ribbion ca SharePoint Designer. Bn di tab Insert, hy tm ti bt Data view. Click vo nt Data view v chn countries trong danh sch bn di, nh trong Hnh 4-3.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-3. Chn cc nc trong list iu ny s thm danh sch cc nc s dng XsltListViewWebPart, nh trong Hnh 4-4.

Hnh 4-4. XsltListViewWebPart hin th danh sch cc nc

Nu lu trang ch trong SharePoint Designer v ti li trang trong trnh duyt, bn s thy danh sch d liu cc nc xut hin trn trang ch ca site. Hy cng lm cho danh sch ny thm phn th v. Hy tip tc bng cch click vo mt trn ct Polpulation bt k bn phi. Vi con tr ang nm trong trn ct Population, hy tm tab cha cc ty chn nm bn di cc cng c list view trong ribbon SharePoint. Click vo nt conditional formatting v chn format column, nh trong Hnh 4-5.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-5. Chn nh dng ct trong SharePoint Designer Tip theo bn s c thng bo vi hai dialog box: Dialog box u tin yu cu bn xc nh iu kin cho ct v dialog box th hai yu cu xc nh mt nh dng style. S dng hai dialog box ny, chn nh dng nn mu hng cho cc nc vi dn s ln hn 80,000,000 . Tip theo, lu trang ny li v s dng trnh duyt truy cp ti a ch http://sp2010. Hy ch danh sch cc nc c lit k trong trang ch. Tip tc bng cch sp xp ct Title theo th t tng dn. By gi hy thng tin nh dng m bn xc nh s vn c p dng ngay c khi th t sp xp thay i. iu ny c ch ra trong Hnh 4-6. Nh bn c th thy, XsltListViewWebPart cung cp s linh hot trong vic nh dng hnh thc xut hin ca danh sch trong trnh duyt. Trc khi chuyn sang mc tip theo, ti mun bn thc hin hai iu sau. Th nht, bn hy xem xt mt s WebPart khc c th thm vo trang web thng qua SharePoint Designer v hy ty chnh chng theo thch. iu ny s gip bn thc hnh thm vi SharePoint Designer 2010. iu th hai c l th v hn, hy truy cp vo li danh sch cc nc trong trnh duyt v click vo tab list trn ribbon. Hy tm danh sch x xung Modify View v chn Modify in SharePoint Designer, ging nh trong Hnh 4-7.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-6. Listing cc nc c p dng nh dng theo iu kin

Hnh 4-7. Chnh sa view ca list

Nh bn c th thy, view ca cc trang trong SharePoint Designer 2010 cng c ty chnh thng qua XsltListViewWebPart. y l mt ci tin quan trng so vi cc CAML-based views trong SharePoint 2007.

Vit cc Visual WebPart

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Tip theo, bn s bt u vit cc WebPart s dng Visual Studio 2010. Nhng WebPart ny c trin khai s dng WSP hoc cc gi gii php. Kiu WebPart u tin bn s vit l Visual WebPart. T visual n gin m ch s tht l bn s s dng cc tri nghim chnh sa trc quan khi pht trin kiu WebPart ny trong Visual Studio. iu ny l hon ton c th v Visual WebPart da trn mt ASCX hay iu khin ngi dng (user control). Kiu WebPart ny l mt ASCX do n mang mt hn ch quan trng. Vic trin khai kiu WebPart ny yu cu mt file ASCX c sao chp vo h thng file. Do vic trin khai WebPart yu cu thc hin thay i vi h thng file, do cc Visual WebPart phi c trin khai nh mt gii php farm. Nu c k Chng 3, iu ny i ngc li vi li khuyn ca ti v vic nn cung cp cc gii php s dng gii php sandbox thay v gii php farm. C mt s cch trin khai file ASCX vo content database, nhng khng phi l cch hot ng ca cc WebPart SharePoint Item trong Visual Studio 2010.

Ch Mt kiu WebPart khc, c gi n gin l WebPart cng c th biu din cc phn t trc quan trn trang

SharePoint. Visual WebPart n gin cp ti tri nghim chnh sa trc quan trong sut qu trnh pht trin. Visual WebPart da trn mt User Control; cn cc WebPart khc u l Server Control.

Tuy nhin, tri nghim chnh sa trc quan trong sut qu trnh pht trin cng rt hu dng. Hy tip tc v lm ch cng ngh pht trin Visual WebPart ny. Bt u bng cch to ra mt gii php mi trong Visual Studio 2010 da trn kiu project Visual WebPart. Ch rng SharePoint s hi bn web site s dng g li, nhng khng cho php to gii php di dng sandbox solution. Khi gii php c to, Visual Studio s m file ASCX cha giao din ca Visual WebPart. Bn c th tip tc v cung cp cho Feature mt tn ph hp, bng cch i li tn cho cc file bng cc tn c ngha hn. Tuy nhin, cc v d y vn s dng cc tn mc nh cho ngn gn. Khi file ASCX m, bn c th s dng cc iu khin khc nhau ca SharePoint cng nh ASP.NET xy dng giao din cho Visual WebPart. Bn c th vit m nng cao tnh logic ca Visual WebPart. iu ny c th c thc hin bng cch click chut phi vo Visual WebPart ASCX v chn view code. Tuy nhin, v d ny ch khai bo m trong ASCX chng minh mt cch hin th th danh sch cc nc s dng c iu khin SharePoint v ASP.NET. thc hin iu ny, hy tip tc v thm on m nh trong Listing 4-1 vo file ASCX. Listing 4-1. M cho Visual WebPart <h1>My Visual WebPart</h1> <br /> <SharePoint:SPDataSource runat="server" ID="countriesList" DataSourceMode="List" SelectCommand="<Query><OrderBy><FieldRef Name='Title' Ascending='true'/></OrderBy></Query>"> <SelectParameters> <asp:Parameter Name="ListName" DefaultValue="Countries" /> </SelectParameters> </SelectParameters> <asp:GridView ID="GridView1" runat="server" DataSourceID="countriesList" EnableModelValidation="True" AutoGenerateColumns="False" AllowPaging="True"> <Columns> <asp:BoundField DataField="Title" HeaderText="Country Name"/> <asp:BoundField DataField="Population" HeaderText="Country Population" /> </Columns> </asp:GridView> Ch on m trn s dng c iu khin SharePoint v ASP.NET chy song song. Hy tip tc bng cch chy v trin khai gii php. Ch y l mt gii php farm do n s thc hin IISReset. Ko th WebPart vo trang ch ca site collection v bn s thy hot ng thc s ca WebPart

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

nh trong Hnh 4-8.

Hnh 4-8. Hot ng ca Visual WebPart

Cc trang SharePoint
Nh cp lc trc, c hai kiu trang c sn trong SharePoint. u tin l cc trang ng dng c c t a cng trong khi cc site c c t content database. Khi SharePoint nhn c mt yu cu HTTP, n s dng mt khi nim ca ASP.NET gi l VirtualPathProvider ly v ni dung thc s ca trang. Lp VirtualPathProvider trong ASP.NET cung cp mt tp cc phng thc cho php mt ng dng web truy xut ti cc ti nguyn t h thng file o. SharePoint cng c mt lp tng t nm ti Microsoft.SharePoint.ApplicationRuntime.SPVirtualPathProvider. Hy cng i su tm hiu bn trong ca SharePoint. thc hin iu , hy ti cng c min ph reflector ti a ch http://reflector.red-gate.com. Trong qu trnh tm hiu SharePoint, bn s thc hin bin dch ngc cc b phn quan trng ca SharePoint. Xin hy ch vic bin dch ngc ch nhm phc v mc ch hc tp. Khi ti v ci t cng c reflector trn my SharePoint, hy ko th tt c cc th vin Microsoft.SharePoint.* t th mc 14\ISAPI vo trong reflector. iu ny s cho php kim tra cu trc ca cc lp bn trong framework SharePoint 2010. Ti mun ni rng m m bn ang nhn vo l ca Microsoft v Microsoft c th thay i n m khng cn phi hi kin ca chng ta. Khi cc lp Microsoft SharePoint c np, hy tm ti lp Microsoft.SharePoint.ApplicationRunTime.SPRequestModule. y l lp rt quan trng trong framework Microsoft SharePoint. Lp ny l mt HttpModule. Thc t, n l HttpModule u tin chy trong pipeline SharePoint. Bn c th kim tra iu ny bng cch m file web.config ca mt web site SharePoint v tm ti mc nh trong Listing 4-2. Listing 4-2. HttpModules trong mt file web.config SharrePoint <modules runAllManagedModulesForAllRequests="true"> <remove name="AnonymousIdentification" /> <remove name="FileAuthorization" /> <remove name="Profile" /> <remove name="WebDAVModule" /> <remove name="Session" /> <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <add name="SharePoint14Module" preCondition="integratedMode" /> <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule,

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> </modules> cho n gin, nhng cng c th khng c chnh xc, lp SPRequestModule bin mt site ASP.NET thnh site SharePoint. Quay tr li reflector, hy tm ti phng thc Init ca SPRequestModule. Trong phng thc Init, bn s thy mt khi m nh sau: SPVirtualPathProvider provider2 = new SPVirtualPathProvider(); HostingEnvironment.RegisterVirtualPathProvider(provider2); _virtualPathProviderInitialized = true; Lp SPVirtualPathProvider c SharePoint s dng cung cp mt h thng file o cho Shar ePoint. Lp SPVirtualPathProvider k tha t lp tru tng VirtualPathProvider v cung cp thc thi cho cc phng thc cn thit nh GetFile and GetDirectory. Do phm vi khng cho php, nn ti ch cp ti hai phng thc ny, tuy nhin bn c th t mnh tm hiu thm v framework SharePoint s dng Reflector nu mun. Phng thc GetFile to ra mt th hin ca lp SPVirtualFile, ty vo kiu yu cu m phng thc ny s tr v Microsoft.SharePoint.ApplicationRuntime.SPDatabaseFile hoc Microsoft.SharePoint.ApplicationRuntime.SPLocalFile. Phn ln cc lp ny l lp ni (internal) v khng cho php k tha (lp sealed), nhng chng l nhng cng c tuyt vi tm hiu cch hot ng thc s ca sn phm. Nh bn c th thy, c mt s file nm trong c s d liu (site pages), mt s nm trong h thng file (cc trang ng dng). Hnh vi ca cc trang ng dng v site page rt khc bit. Hy cng vit mt soultion Visual Studio nh trin khai mt trang ng dng v mt site page, sau kim tra s khc nhau gia chng.

Trin khai cc trang SharePoint: V d ngn


M Visual Studio 2010 v to mt project SharePoint trng c tn SomePages. Bn s phi to mt gii php farm v cc trang ng dng nm trong h thng file trong khi cc gii php sandbox khng th thay i h thng file. Cc trang ng dng nm trong th mc SharePoint chun c tn l layouts. thm th mc layouts vo project, hy nhn chut phi vo project v chn add\SharePoint "layouts" mapped folder. Hnh ng ny s thm mt th mc SomePages nm trong th mc layouts trong cu trc solution. y l cch rt tt v h thng file c th c dng chung cho nhiu gii php khc nhau. Vic t cc trang ng dng vo th mc ring s m bo khng v tnh ghi cc trang ca ngi khc. Tip theo, nhn chut phi vo th mc SomePages v chn Add a new item. Khi c thng bo, hy tip tc v thm mt trang ng dng mi c tn MyApplicationPage.aspx. Theo cch tng t, hy thm mt element mi c tn Elements.xml v thm mt module mi SitePageModule. Trong SitePageModule, t li tn cho file sample.txt thnh SitePage.aspx. Cui cng, thm mt feature mi c th SomePages. Cu trc ca project s trng ging nh trong Hnh 4-9.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-9. Cu trc ca project SomePages Gi gii php s phi trin khai mt trang ng dng v feature SomePages. Feature SomePage khi c kch hot s to ra mt hnh ng ty chnh mi truy cp vo trang ng dng nm trong menu site actions, v to ra mt site page mi trong content database. M file MyApplicationPage.aspx v thay i li ni dung ca PlaceHolderMain ContentPlaceHolder nh sau: <h1> Current Trust Level is: <asp:Label ID="currentTrustLevel" runat="server" Text="Label"></asp:Label> </h1> Chnh sa li code-behind ca file MyApplicationPage.aspx ging nh trong Listing 4-3. Listing 4-3. Code behind ca MyApplicationPage.aspx protected void Page_Loa d(object sender, EventArgs e) { currentTrustLevel.Text = GetCurrentTrustLevel().ToString(); } private AspNetHostingPermissionLevel GetCurrentTrustLevel() { AspNetHostingPermissionLevel[] permissionLevels = new AspNetHostingPermissionLevel[] { AspNetHostingPermissionLevel.Unrestricted, AspNetHostingPermissionLevel.High, AspNetHostingPermissionLevel.Medium, AspNetHostingPermissionLevel.Low, AspNetHostingPermissionLevel.Minimal }; foreach (AspNetHostingPermissionLevel trustLevel in permissionLevels) { try { new AspNetHostingPermission(trustLevel).Demand(); }

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

catch (System.Security.SecurityException) { continue; } return trustLevel; } return AspNetHostingPermissionLevel.None; } Nh bn c th thy, on m trn ly v AspNetHostingPermissionLevel hin ti v hin th ln trang web. Trin khai gi ng dng s lm cho n c th c s dng bi tt c cc ng dng w eb SharePoint khc. Sau khi trang ng dng c trin khai, hy nhp URL trc tip vo trnh duyt m trang . Tuy nhin, bn vn cn lm cho trang ng dng d dng truy cp hn vi ngi dng bng cch s dng mt ng lin kt ph hp. Mt cch thm ng lin kt nh vy l thm mt hnh ng ty chnh (custom action) trong SharePoint. C nhiu v tr trong SharePoint thm mt custom action. Mt trong s l menu site actions. thm mt custom action vo menu site actions, hy chnh sa li file elements.xml ging nh trong Listing 4-4. Listing 4-4. File Elements.Xml c s dng thm mt Custom Actions <?xml version="1.0" encoding="utf-8" ?> <Elements xmlns="http://schemas.microsoft.com/SharePoint/"> <CustomAction Id="MyApplicationPage" GroupId="SiteActions" Location="Microsoft.SharePoint.StandardMenu" Sequence="2001"

ImageUrl="_layouts/images/somepages/wslogo.gif" Title="My ApplicationPage" Description="This page will tell you what security level it is operating under.">

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

<UrlAction Url="~site/_layouts/SomePages/MyApplicationPage.aspx"/> </CustomAction> </Elements> Trang ng dng ca bn hon thnh, by gi bn cn bt u lm vic vi SitePage. Bn di th mc SitePageModule, click vo file SitePage.aspx thm vo on m sau: <%@ Page Language="C#" MasterPageFile="~masterurl/default.master" %> <asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server"> <h1> Current Date and Time is: <% Response.Write(DateTime.Now); %> </h1> </asp:Content> Trong file elements.xml trong th mc SitePageModule, thm vo on m sau: <?xml version="1.0" encoding="utf-8" ?> <Elements xmlns="http://schemas.microsoft.com/SharePoint/"> <Module Name="SitePageModule"> <File Path="SitePageModule\SitePage.aspx" Url="SitePageModule/SitePage.aspx"> <NavBarPage ID="1002" Name="SitePage" Position="1002"/> </File> </Modules> </Elements> Trong chng 3 bn bit rng th module cho php trin khai cc artifacts vo content database. Trong trng hp ny, bn ang trin khai file SitePage.aspx vo th mc SitePageModule trong content database. Ngoi ra, bn cng ang to mt menu trn thanh iu hng cho php truy cp d dng ti site page. Hy tip tc bng cch chy v trin khai gii php. Sau khi trin khai gii php, hy truy cp vo a ch http://sp2010 trong trnh duyt v tm ti site actions\site settings Click vo lin kt Manage site features bn di mc site actions. Bn s thy feature SomePages c kch hot nh trong Hnh 4-10.

Hnh 4-10. Feature SomePages c kch hot Bn cnh vic ch ti feature c kch hot, hy quan st than h iu hng ca web site. Bn s nhn thy mt lin kt ti menu SitePage. iu ny c ch ra trong Hnh 4-11.

Hnh 4-11. Lin kt iu hng cho SitePage Trong SharePoint Designer, nu m site v click vo tt c lin kt All Files bn tri, bn s thy th mc SitePageModule trong content database. iu ny c ch ra trong Hnh 4-12.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-12. Th mc SitePageModule trong content database Bn trong th mc ny, bn s thy file SitePage.ASPX c trin khai. Quay tr li trnh duyt v click vo lin kt SitePage trn thanh iu hng truy cp ti SitePage. Bn s thy trang SitePage xut hin nh trong Hnh 4-13.

Hnh 4-13. SitePage ang chy trong SharePoint Tip theo, thc hin cc thay i sau y vi file web.config SharePoint: 1. 2. 3. Thay i thuc tnh SharePoint\SafeMode\@CallStack bng true. Thay i thuc tnh System.Web\CustomErrors\@Mode bng On Thay i ch System.Web\Compilation\Debug bng true.

Cc thay i trn s cho php quan st y chi tit cc li xy ra thng qua trnh duyt. Sau khi thc hin cc thay i trm hy chnh sa li site page bng Visual Studio hoc bng SharePoint Designer, sau nhng mt s on m pha server bng cch s dng th <script runat="server">, bn s thy rng SharePoint thng bo khi m kch bn pha server b cm khng cho php chy trong SitePage theo mc nh. Bn nhn thy thng bo li ny v khi m theo mc nh khng c php chy trong site page. cho php cc khi m trong site page, bn phi cho php cc ngoi l bng cch s dng element PageParserPaths trong file web.config ca SharePoint. C th, bn phi thm khi m sau y vo element SharePoint trong file web.config ca website SharePoint. <PageParserPaths> <PageParserPath VirtualPath="/SitePageModule/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/> </PageParserPaths> Tuy nhin, vic s dng element PageParserPaths khng phi l cch tt. l v gi y, bt c ai cng c th truy cp vo content database thng qua SharePoint Designer hoc c kh nng ti v chy mt on m bt k trn server. Nhc im th hai ca phng php ny l phi chnh sa file web.config cho php chy on m. Tip theo, hy cng xem xt hot ng ca trang ng dng. Vi feature c kch hot, bn s thy mt lin kt ti trang ng dng bn di menu site actions, nh trong Hnh 4 -14.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-14. Ty chnh hnh ng cho feature c thm vo Vic truy cp ti trang ng dng cng s chy trang trong SharePoint. Ch URL thc s ca ng dng ny nh sau: http://sp2010/_layouts/SomePages/MyApplicationPage.aspx. Tip theo, hy th truy cp vo trang ng dng ny thng qua central administration bng cch thay i URL thnh: {0> http://sp2010:40000/_layouts/SomePages/MyApplicationPage.aspx.

Ch 4000 l cng ca Central Administration trn my cu

Ngoi ra, to mt site con c tn SubSite nm ti cng 80 cp th mc gc trong site collection v truy cp ti trang ng dng ti a ch URL: http://sp2010/subsite/_layouts/SomePages/MyApplicationPage.aspx. Ch trang ng dng c th c truy cp t nhiu ni trong SharePoint. Thm ch ti khng cn kch hot feature, v file vt l tng ng vi URL trn ang c s dng chung trong cc v tr ny. Trn thc t,s n c phc v bi cng mt file vt l, do , vic chnh sa file dn ti s thay i ti mi ni trong SharePoint. Hnh vi ny rt khc vi cc site page v vic chnh sa site page ch thay i ni ti mt a ch xc nh. Ngoi ra, vic chy trang ng dng s hin th cp tin cp (trust level) hin ti, nh trong Hnh 4-15.

Hnh 4-15.Trust level hin ti ca trang web Ngoi ra, hy ch trang ng dng chy di trust level unrestricted ASP.NET. Do , nu trin khai cc trang ng dng ty chnh, bn lun phi ngh ti vn bo mt chng. bo mt mt trang ng dng, bn c hai la chn. Bn c th yu cu ngi dng phi l mt qun tr vin site collection hoc c th xc nh mt chui quy nh cc quyn truy cp vo trang ng dng. Chui

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

quyn truy cp v bo mt trong SharePoint s c cp ti trong cc chng sau. bo mt cho trang ng dng v hn ch ch cho php qun tr vin site collection s dng, bn cn thay i on m sau y. 1. bo mt cho trang ng dng, thm on m sau vo code-behind ca file MyApplicationPage.aspx:

protected override bool RequireSiteAdministrator { get { return true; } } 2. Trong file elements.xml c s dng to CustomAction, hy thm thuc tnh sau y vo trong element CustomAction: RequireSiteAdministrator=true Khi trin khai v kch hot li feature, truy cp vo trang ng dng s b t chi nu bn khng phi l qun tr vin site collection. Mt cch khc, nu mun hn ch bng cch s dng mt chui quyn truy cp, bn phi ghi property RightsRequired trong code-behind v xc nh cc thuc tnh right trong element CustomAction. Mt cch khc ti mun bn th thc hin trc khi ri bi tp ny l v hiu ha feature v xa mt gii php t Central Administration. Ch vic v hiu ha thnh cng mt feature cng ng thi loi b custom action trong menu site actions. Tng t, vic loi b mt gii php cng loi b lun trang ng dng khi h thng file. iu th v l site page trong content database v cc lin kt trn thanh iu hng khng b loi b khi feature b v hiu ha v gii php b loi b. Do , xa b hon ton cc artifact ca site page, bn phi vit mt feature receiver ty chnh v ghi s kin FeatureDeactivating. K thut ny c minh ha trong Chng 3. Hy nh ti tng ni, c mt quy tc thc nghim l nhng th c trin khai vo content database bn s phi t xa chng, cn nhng th c trin khai vo h thng file thng t ng c xa b. Di y tm lc li mt s im khc bit c bn gia trang ng dng v site page: Trang ng dng c trin khai vo h thng file v SitePage c trin khai vo content database.

Trang ng dng yu cu mt gii php farm, cn SitePage c th c trin khai bng mt gii php sandbox. nht. Trang ng dng c dng chung trn ton b trang tin snh nhng v tr ca mt SitePage l duy

Mt SitePage c th c ty chnh d dng thng qua SharePoint Designer, nhng trang ng dng thng phi s dng Visual Studio. dng. b loi b. Mt cu hi c t ra l khi no th s dng trang ng dng, khi no s dng site page? Chng c s dng trong trng hp no? Cc trang ng dng thng thng c s dng cho cc chc nng qun tr. V d, tt c cc trang layout (nm trong _layouts URLs) l cc trang ng dng m Microsoft vit sn. ng bao gi chnh sa nhng trang c sn ca Microsoft hoc cc file c sn khc. Nhng nu mun trin khai cc trang ng dng ty chnh, bn c th to th mc ring ca bn trong th mc layouts trin khai cc trang ng dng . Ngc li, cc site page rt ph hp trnh by ni dung v tnh nng ti ngi dng. Chng cng d dng thay i hnh thc v tri nghim bng cch p dng default.master cho web site SharePoint. Cc trang WebPart l nhng v d c bit cho SitePage. Chng n gin l cc SitePage cha cc vng WebPart. WebPart manager nm trong trang master. Do , vic t cc WebPartZone vo mt site page cho php to ra mt trang bn c th t cc WebPart ln trong sut qu trnh kch hot feature hoc sau khi feature c kch hot. Trong mc tip theo, ti s cp chi tit cch vit v trin khai mt WebPart s dng mt site page cha WebPartZones. Cc trang ng dng phi c bo mt v PageParserPaths cho cc sitepage phi c trnh s Cc feature site page cn ti cc s kin Feature Receiver xa nhng th lin quan sau khi n b v hiu ha. Cc artifact ca trang ng dng t ng c loi b khi h thng file khi gii php

Vit mt WebPart
Trong phn trc, bn vit mt Visual WebPart. Cc Visual WebPart rt tuyt bi bn c th chnh sa mt cch trc quan trong sut thi gian pht trin. Tuy nhin nhc im ln nht ca Visual WebPart l chng i hi phi thay i h thng file, do phi c trin khai bng mt gii php farm. Nh cp trong Chng 3, bn nn cung cp cc chc nng bng gii php

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

sandbox. Do , ti mun bn vit cc WebPart thng thng hn l s dng cc Visual WebPart. Mt WebPart thng thng l mt server control (iu khin pha server), trong khi Visual WebPart da trn mt UserControl. Nh ni, WebPart l cc widget c th ko th ln mt trang web, v chng biu din cho mt chc nng duy nht cung cp cho ngi dng. i khi cc WebPart c th cho php chnh sa. Qun tr vin c th ty chnh WebPart cn c nhn ngi dng c th c th ha chng theo nhu cu. Ngoi ra, i khi cc WebPart cn c th giao tip vi nhau. Ti s hng dn bn tng bc xy dng mt WebPart thu thp d liu, sau chy n. 1. Bn s bt u bng cch vit mt WebPart hin th RSS feed. Sau bn s trin khai WebPart ny s dng mt site page cha WebPartZones. (Ti s ch ra mt cc n gin thit lp mt tri nghim cu hnh ti thi im chy bng cch cho php ngi dng xc nh URL ca RSS feed.) Hy gi WebPart ny l RSSFeed WebPart. 2. Tip theo, bn s vit mt WebPart th hai, cho php cha mt s RSS URL. ( cha cc RSS URL, ti s minh ha cc vit mt trnh son tho ty chnh cho WebPart. Hy gi WebPart ny l OPML WebPart.) 3. Cui cng, bn s kt ni OPML WebPart vi RSSFeed WebPart. iu ny s cho php OPML WebPart giao tip vi RSS URL ca RSS Feed c chn, n c th c hin th trong RSSFeed WebPart .

Vit RSSFeed WebPart


Bt u bng cch to mt project SharePoint trng trong Visual Studio 2010 v t tn cho project l "FeedReader". Tip theo ti s thm RSS WebPart v OPML WebPart vo project. C th, RSS WebPart s gi ti mt web service (dch v web) bn ngoi. Ti c th (c l l nn) vit mt full trust proxy thc hin iu ny, nhng cho n gin ti s vit WebPart ny bng mt gii php farm. Tip theo, click chut phi vo node Features v chn Add feature, sau i li tn cho Feature1 bng mt tn khc c ngha hn, nh RSSWebParts. Nhn tin, bn hy cung cp cho feature mt tiu hp thc, mt s m t chung v mt ImageURL. Cui cng, trong ca s properties ca feature, hy chc chn rng phm vi ca feature l Site Collection. Bn c th truy cp ti cc thuc tnh ca feature bng cch click p vo feature v thay i thuc tnh Scope, ging nh trong Hnh 4-16.

Hnh 4-16. Cc thuc tnh ca feature RSSWebParts Tip theo, click chut phi vo project v chn add the new SharePoint item, sau chn thm mt WebPart mi c tn RSS WebPart, ging nh trong Hnh 4-17. Khi thm RSSWebPart cng ng thi thm mt feature i km, c tn l Feature1 vo gii php. Do bn s ng gi RSSWebPart vo feature RSSWebParts va mi to, cho nn hy xa feature Feature1 i. Ch cn click chut phi vo node Feature1 v chn Delete.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-17. Thm mt WebPart mi Tip theo, ng gi RSSWebPart WebPart vo trong feature RSSWebParts. thc hin iu ny, click chut phi vo feature RSSWebParts m ca s feature designer. Bn s thy RSSWebPart WebPart trong cc phn t ca khung solution bn tri. Hy chn RSSWebPart WebPart v di chuyn n sang cc phn t nm trong khung feature bng cch s dng cc nt c cung cp. iu ny c ch ra trong Hnh 4-18.

Hnh 4-18. RSSWebPart webpart by gi l mt phn ca feature RSSWebParts

Tip theo, bn cn thm mt s m logic vo RSSWebPart WebPart. Chnh sa li lp RSSWebPart.cs thm vo on m trong Listing 4-5: Listing 4-5. M cho lp RSSWebPart.cs using System; using System.ComponentModel; using System.Runtime.InteropServices; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; using FeedReader.BO; namespace FeedReader.RSSWebPart { [ToolboxItemAttribute(false)]

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

public class RSSWebPart : WebPart { [WebBrowsable(true)] [Personalizable(PersonalizationScope.Shared)] public string RSSUrl { get; set; } protected override void RenderContents(HtmlTextWriter writer) { RSSFeed feed = new RSSFeed(RSSUrl); HyperLink newLink = new HyperLink(); foreach (RSSItem singleRssItem in feed) { newLink.Text = singleRssItem.Title; newLink.NavigateUrl = singleRssItem.Href; newLink.Target = "rssSite"; newLink.RenderControl(writer); writer.WriteBreak(); } base.RenderContents(writer); } } } Nh bn c th thy trong Listing 4-5, ti s dng cc i tng nghip v ty chnh l RSSFeed v RSSItem M ngun ca RSSFeed v RSSItem c ch ra trong Listing 4-6 v Listing 4-7. Listing 4-6. M ngun ca RSSFeed internal class RSSFeed : List<RSSItem> { internal RSSFeed(string RssURL) { try { XmlDocument rssDoc = new XmlDocument(); XmlTextReader xRead = new XmlTextReader(RssURL); rssDoc.Load(xRead); XmlNodeList xNodes = rssDoc.SelectNodes("./rss/channel/item"); foreach (XmlNode xNode in xNodes) { this.Add(new RSSItem(xNode)) ; } } catch (Exception) { this.Add(new RSSItem()); } } }

Listing 4-7. M ngun ca RSSItem internal class RSSItem { public string Title { get; internal set; } public string Href { get; internal set; } internal RSSItem() { Title = "Feed not available at this time" ; Href = "~" ; } internal RSSItem(XmlNode xNode) { Title = xNode.SelectSingleNode("./title").InnerText; Href = xNode.SelectSingleNode("./link").InnerText; } } Danh sch cc WebPart c sn trong site collection thng thng c kim sot bi WebPart gallery. WebPart gallery l mt document library nm site cp trn cng trong site collection. Bn s tm hiu document library ngay sau y. Vi WebPart ang nm trong site collection, bn cn trin khai mt file c phn m rng l .WebPart vo trong WebPart gallery. Mt file RSSWebPart.WebPart mu c to sn trong project. Hy tip tc bng cch chnh sa li file RSSWebPart.WebPart ging vi Listing 4-8.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Listing 4-8. File RSSWebPart.WebPart <?xml version="1.0" encoding="utf-8"?> <webParts> <webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> <metaData> <type name="FeedReader.RSSWebPart.RSSWebPart, $SharePoint.Project.AssemblyFullName$" /> <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage> </metaData> <data> <properties> <property name="Title" type="string">RSSWebPart</property> <property name="Description" type="string">This WebPart displays an RSS Feed rendered in the browser.</property> <property name="CatalogIconImageUrl" type="string">/_layouts/images/FeedReader/wslogo.gif</property> <property name="TitleIconImageUrl" type="string">/_layouts/images/FeedReader/wslogo.gif</property> <property name="RSSUrl" type="string">http://feeds.feedburner.com/winsmarts</property> </properties> </data> </webPart> </webParts>

3. Bn c th thy mt s thuc tnh th v ang c thit lp trong file RSSWebPart.WebPart. Nhng thuc tnh ny nm ri tc ti nhiu ni khc nhau trong SharePoint gip phn loi WebPart ca bn ng thi cung cp cc thng tin hu ch cho ngi dng v cch s dng WebPart. Chng c th c s dng cu hnh sn WebPart vi mt s gi tr cn thit ban u. Khi nhn thy hot ng ca WebPart ny, hy quay tr li Listing 4 -8 v so snh nhng g bn nhn thy trn mn h nh vi nhng g c thit lp trong file RSSWebPart.WebPart. Trc khi chy v trin khai gii php ny, hy tr li Listing 4-5 mt ln na. C th, hy quan st on m c ch ra dng di y: [WebBrowsable(true)] [Personalizable(PersonalizationScope.Shared)] public string RSSUrl { get; set; } Thuc tnh [WebBrowsable(true)] thng bo cho ASP.NET rng property WebPart c th chnh sa c t UI. Ti thi im chy (runtime), SharePoint s cung cp cho bn mt vn bn (textbox) chnh sa gi tr chui. Nu kiu ca property ny l enum, SharePoint s cung cp cho bn mt danh sch x xung. Thuc tnh Personalizable xc nh phm vi c th ha c th p dng cho property. Tuy nhin, PersonalizationScope.User ngha l cc ngi dng ring l c th c th ha thuc tnh ny theo nhu cu ring ca h. Hay ni cch khc, nhng thay i c thc hin bng cch c th ha ch ch c hin th vi bn m khng hin th cho cc ngi dng khc trn site. Qu trnh ny c gi l c th ha WebPart v thng c truy cp bng cch chn phn t menu "personalize this page", ging nh trong Hnh 4-19.

Hnh 4-19. C th ha mt trang SharePoint PersonalizationScope.Shared ngha l cc thay i p dng vi property c chia s gia cc ngi dng web site. iu ny cn c gi l ty chnh v thng c truy cp bng cch t trang trong ch chnh sa (edit mode) thng qua ribbon trong SharePoint. Do Property RSSUrl ch c nh du l PersonalizationScope.Shared, do property ny khng

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

cho php c th ha nhng li cho php ty chnh. Hy tip tc bng cch trin khai WebPart v xem hot ng ca n. iu ny c thc hin bng cch click chut phi vo project v chn Deploy. Khi ng trnh duyt v truy cp vo site SharePoint ca bn. Di chuyn ti site actions\site settings v bn di mc site collection administration hy click vo site collection features. Bn s thy feature RSSWebParts c kch hot, ging nh trong Hnh 4-10.

Hnh 4-20. Feature RSSWebParts c kch hot.

By gi hy quay tr li trang ch ca site collection v t trang ny trong ch chnh sa. Click vo WebPartZone bn tri v chn insert tab t ribbion. Click vo nt WebPart v bn di mc custom nm trong khung bn tri hy tm ti RSSWebPart. iu ny c ch ra trong Hnh 4-21.

Hnh 4-21. Thm RSSWebPart vo mt WebPartZone n thi im ny, ti mun bn hy nhn li Listing 4-8 v so snh nhng g bn nhn thy vi nhng g c xc nh trong Listing 4-8. Hy tip tc v thm RSSWebPart vo WebPartZone bn tri. Bn s thy hot ng ca RSSWebPart, nh trong Hnh 4-22.

Hnh 4-22. RSSWebPart ang chy trong SharePoint Mt ln na, hy nhn li Listing 4-8 v bn s thy rng theo mc nh, WebPart ny ang tr ti RSSFeed thuc trang blog ca ti. Ngoi ra, c th thy, ti vit rt nhiu bi blog v SharePoint 2010. Hy tip tc v tr WebPart ny ti CNN.com. Chn edit the WebPart nh trong Hnh 4-23.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-23. Chnh sa WebPart Khi editor zone (vng bin tp) m ra bn phi v nm bn di mc Miscellaneous, hy tr property RSSUrl ti http://rss.cnn.com/rss/cnn_topstories.rss. iu ny c ch ra trong Hnh 4-24.

Hnh 4-24. Xc nh mt RSSS Feed thay th

Tip theo, nhn OK v dng vic chnh sa trang. Bn c th dng vic chnh sa trang bng cch click vo tab Page trong ribbon, sau click tip vo nt stop editing. WebPart cui cng s hot ng nh trong Hnh 4-25.

Hnh 4-25. RSSWebPart tr ti CNN News Xin chc mng, bn vit v trin khai thnh cng RSSWebPart.

Cu hnh WebPart trong qu trnh pht trin


Trong v d trc, bn mi ch vit, trin khai v s dng thnh cng RSSWebPart. Tuy nhin, vic s dng v cu hnh RSSWebPart c thc hin bi ngi dng thng qua trnh duyt. i khi trong qu trnh pht trin, cng c th bn s mun thm mt SitePage ty chnh cha cc WebPartZone, cu hnh t ng cho WebPart trong khi pht trin v ko th n vo WebPartZone ca SitePage. Ti s m rng v d ny bng cch thm mt SitePage cha WebPartZone. Ti s cu hnh cho WebPart ny tr ti CNN RSS feed thay v trang blog ca ti, sau ko WebPart c cu hnh vo mt trong cc WebPartZone trn SitePage ty chnh. Quay tr li solution trong Visual Studio 2010, thm mt new SharePoint item mi v chn thm mt module mi tn l WebPartPage. i li tn file sampel.txt thnh WebPartPage.aspx. Ch rng file element.xml i km cng t ng thay i khi t li tn file sample.txt. Ngoi ra, hy chc chn rng feature RSSWebPart cha module WebPartPage m bn va thm vo. M file WebPartPage.ASPX v thay i n thm vo on m trong Listing 4-9.

Listing 4-9. M ca file WebPartPage.aspx cha cc WebPartZone <%@ Page language="C#" MasterPageFile="~masterurl/default.master" meta:WebPartpageexpansion="full" meta:progid="SharePoint.WebPartPage.Document" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage, Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> <table cellpadding="4" cellspacing="0" border="0" width="100%"> <tr> <td height="100%" width="50%"> <WebPartPages:WebPartZone runat="server" ID="Left" Title="Left"/> </td> <td height="100%" width="50%"> <WebPartPages:WebPartZone runat="server" ID="Right" Title="Right"/> </td> </tr> </table> </asp:Content> n lc ny, nu ng gi v trin khai solution, bn s c mt site page cha cc WebPartZone ti a ch http://sp2010/WebPartPages/WebPartPage.aspx. Nhng ng trin khai solution ny vi! Trc khi trin khai solution, s dng mt s

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

kin tip nhn feature (feature receiver), bn s cu hnh sn cho WebPartPage ny n cha mt th hin ca RSSWebPart hin th cc tin tc ni bt nht t CNN. thc hin iu ny, hy thm mt s kin feature receiver vo feature RSSWebParts v thm on m trong Listing 4-10 vo s kin ny. Listing 4-10. M cho s kin Feature Receiver [Guid("34ed6466-8f0e-4330-b910-5a7c8a7d0feb") public class RSSWebPartsEventReceiver : SPFeatureReceiver { public override void FeatureActivated(SPFeatureReceiverProperties properties) { SPFile file = (properties.Feature.Parent as SPSite).RootWeb.GetFile("/WebPartPage/WebPartPage.aspx"); SPLimitedWebPartManager lwpm = file.GetLimitedWebPartManager(PersonalizationScope.Shared); lwpm.AddWebPart( new RSSWebPart.RSSWebPart() { Title = "CNN News", RSSUrl = "http://rss.cnn.com/rss/cnn_topstories.rss " }, "Left", 1); }

public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { SPFolder folder = (properties.Feature.Parent as SPSite).RootWeb.GetFolder("/WebPartPage"); folder.Delete(); } } Now, go ahead and package and deploy the solution one more time. Sau khi trin khai xong hy truy cp vo http://sp2010/WebPartPage/WebPartPage.aspx. Bn s thy hot ng ca CNN News WebPart nh trong Hnh 4-26.

Hnh 4-26. Mt WebPart cu hnh sn c trin khai thnh cng Nhn chung, bn c th cu hnh v trin khai mt WebPart v thm n vo mt WebPartZone bng cch s dng mt s kin feature receiver.

Vit OPML WebPart v WebPart Editor


Bn va vit xong RSSWebPart. RSSWebPart yu cu mt s cu hnh ti thi im chy, c th hn l bn phi xc nh mt RSS URL cho RSSWebPart. Thuc tnh WebBrowsable(true) cung cp mt cch tin li cho php SharePoint a ra mt Editing UI (giao din chnh sa) cho property . Tip theo, bn s vit OPML WebPart. OPML WebPart cha mt s RSS URL v trnh by chng di dng cc nt radio nm bn cnh. tng y l ngi dng c th chn mt RSS URL bt k. Trong mc tip theo, ti s kt ni RSS WebPart v OMP WebPart vi nhau sao cho RSS URL c chn trong OPML editor s c hin th bi mt RSS feed tng ng trong

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

RSSWebPart. Mc d vic s dng vn bn n gin l cch tin hn chnh sa tng RSS feed URL n l, tuy nhin chnh sa mt s lng ln cc RSS Fedd ca OPML WebPart c l phi cn ti mt giao din khc. cho n gin thay v to ra cc vn bn trn mi dng, ti s to ra mt vn bn gm nhiu dng cho php ngi dng nhp nhiu RSS URL phn cch nhau bi du phy. vn bn nhiu dng ny s l mt trnh bin tp ty chnh cho OPML WebPart.

Trong mc ny, bn s xem xt qu trnh vit mt WebPart khc v kt ni n vi mt trnh bin tp ty chnh. Hy cng bt u. Quay tr li project Visual Studio, thm mt WebPart khc v t tn cho n l OPMLWebPart. Trong file OPMLWebPart.cs, hy thm vo on m trong Listing 4-11. Listing 4-11. M ca OPMLWebPart cha c Editor [ToolboxItemAttribute(false)] public class OPMLWebPart : WebPart { private RadioButtonList rbl; [Personalizable(PersonalizationScope.Shared)] public List<String> FeedURLS { get; set; } public OPMLWebPart() { FeedURLS = new List<string>(); } protected override void CreateChildControls() { rbl = new RadioButtonList() { AutoPostBack=true }; foreach (string rssFeed in FeedURLS) { rbl.Items.Add(new ListItem(rssFeed)); } this.Controls.Add(rbl); } } Nu nhn vo on m trong Listing 4-11, hy rng bn va to ra mt WebPart n gin vi mt property public l FeedURLs. iu bn cha thc hin y l cung cp cho ngi dng kh nng chnh sa gi tr ca cc FeedURL. Thuc tnh WebBrowsable(true) s khng lm vic v hai l do. u tin, giao din vn bn vi mt dng duy nht rt kh nhp nhiu RSS Feed URL, v th hai List<String> l mt i tng phc tp, kh s dng. N khng phi l mt chui n gin, hay mt enum, do , framework khng th serialize hoc deserialize n mt cch thng minh. chnh sa cc FeedURL, bn phi vit mt custom editor (trnh bin tp ty chnh).

Vit mt Custom Editor


Vit mt custom editor cho WebPart rt n gin v gm hai bc. u tin, WebPart cn thc thi interface IWebEditable, v th hai bn phi thc thi mt lp k tha t lp abstract c s l EditorPart. Lp k tha ny s l WebPart editor. Hy tip tc v thc thi interface IWebEditable trong OPMLWebPart. Thc thi interface IWebEditable yu cu thc hin thay i OPMLWebPart nh trong Listing 4-12. Listing 4-12. Thc thi interface IWebEditable #region IWebEditable Members EditorPartCollection IWebEditable.CreateEditorParts() { List<EditorPart> editors = new List<EditorPart>(); editors.Add(new OPMLEditor()); return new EditorPartCollection(editors); } object IWebEditable.WebBrowsableObject { get { return this; }

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

} #endregion Nh c th thy trong Listing 4-12, phng thc CreateEditorParts tr v mt EditorPartCollection. Do , nhiu editor c th hot ng cng mt lc trong cng mt WebPart. Nh vy c th c nhiu property trn WebPart v mi property c mt editor khc nhau. Thuc tnh th hai n gin tr v mt object, chnh l i tng ang c chnh sa. Trong trng hp ny WebPart ang c chnh sa, do bn n gin ch cn tr v t kha this. Trong phng thc CreateEditorParts, hy ch bn ang thm mt th hin ca lp OPMLEditor. y l editor thc s k tha t lp abstract c s EditorPart. Do , hy thm mt lp mi vo project v t tn l OPMLEditor.cs. M cho lp OPMLeditor.cs c ch ra trong Listing 4-13. Listing 4-13. Lp OPMLEditor public class OPMLEditor : EditorPart { private TextBox opmlCSV; public OPMLEditor() { this.ID = "MyEditorPart"; } protected override void CreateChildControls() { opmlCSV = new TextBox() { TextMode = TextBoxMode.MultiLine, Width = new Unit("300px"), Height = new Unit("100px") }; Controls.Add(opmlCSV); }

public override bool ApplyChanges() { EnsureChildControls(); OPMLWebPart part = WebPartToEdit as OPMLWebPart; if (part != null) { List<String> feeds = new List<String>(); string[] rssfeeds = opmlCSV.Text.Split(','); foreach (string rssfeed in rssfeeds) { feeds.Add(rssfeed.Trim()); } part.FeedURLS = feeds; } else { return false; } return true; } public override void SyncChanges() { EnsureChildControls(); OPMLWebPart part = WebPartToEdit as OPMLWebPart; if (part != null) { StringBuilder sb = new StringBuilder(); foreach (String rssFeed in part.FeedURLS) { sb.Append(rssFeed); sb.Append(","); } if (part.FeedURLS.Count != 0) sb.Remove(sb.Length - 1, 1); opmlCSV.Text = sb.ToString();

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

} } } Nh c th thy, lp abstract c s EditorPart yu cu phi thc thi hai phng thc. Phng thc ApplyChanges ly d liu c nhp vo EditorPar v p dng n cho WebPart. Phng thc SyncChanges li lm theo chiu ngc li. Khi Webpart dc t trong ch chnh sa, phng thc SyncChanges s c d liu t WebPart v p dng n cho giao din chnh sa ca ngi dng. Giao din chnh sa c th c nhn thy trong phng thc CreateChildControls ca CreateChildControls n lc ny, bn c th chnh sa s kin feature receiver thm mt th hin ca OPMLWebPart vo WebPartPage.aspx c to ra lc trc. V cc bc thc hin iu ny kh ging vi cc bc ti minh ha cho RSSWebPart, do ti s b qua chng. Nu mun, bn c th cu hnh cho OPMLWebPart ti thi im chy thng qua trnh duyt. Vi on m c thm, hy chy v trin khai project. Sau truy cp vo site trong trnh duyt v ko mt th hin ca OPMLWebPart vo mt WebPartZone. Hy thc hin chnh sa nhn thy mt vn bn nhiu dng xut hin, cho php nhp nhiu gi tr RSS Feed URL phn cch nhau bi du phy. iu ny c ch ra trong Hnh 4-27.

Hnh 4-27. Chnh sa OPMLWebPart s dng mt custom editor Cho n lc ny mi vic u rt tt v trang SharePoint ca chng ta hin th ng. Bn ang c hai WebPart, WebPart th nht hin th RSS feed v WebPart cn li cho php cha mt s RSS feed URL v bn c th la chn chng. S tt hn nu bn chn mt RSS feed URL t OPML WebPart v thng tin phn hi tng ng s c hin th trong RSSWebPart bn phi? chnh l iu bn s thc hin tip theo, thm mt s m cn thit cho hai WebPart ny c th ni chuyn c vi nhau.

Giao tip WebPart


i khi cc WebPart khc nhau trn cng trang cn phi ni chuyn vi nhau. Cc s kin trong mt WebPart cn phn nh nhng thay i trong WebPart khc. Vic thit lp qu trnh ny thng c gi l giao tip WebPart. Giao tip WebPart yu cu thc hin bn vic sau y: Xc nh cn giao tip ci g. y s l iu khon giao tip (communication contract), thng c thc thi bi mt interface. To ra mt provider WebPart, tr v mt th hin ca interface biu din cho contract.

To ra mt hoc nhiu consumer WebPart, n s ly th thin ca interface v thc hin cc hnh ng tng ng. Kt ni cc consumer v provider.

No, hy cng bt u. Trong RSS WebParts, RSS URL chnh l iu bn s mun giao tip. Do , communication contract s ging nh on m sau: public interface IRSSFeedContract { String RSSUrl { get; set; } } Hy tip tc v thm on m trn vo project di dng mt interface. Tip theo, bn cn phi xc nh provider l g? Trong trng hp ny, RSSWebPart nm gi mt th hin ca RSS URL, do n c v l ng vin ph hp cho provider. Trong file RSSWebPart.cs, hy thc thi interface IRSSFeedContract cho lp RSSWebPart. iu ny yu cu phi thc hin mt s thay i vi lp RSSWebPart . on m cui cng ca lp RSSWebPart c ch ra trong Listing 4-14. Listing 4-14. Lp RSSWebPart vi m giao tip [ToolboxItemAttribute(false)] public class RSSWebPart : WebPart, IRSSFeedContract

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

{ [WebBrowsable(true)] [Personalizable(PersonalizationScope.Shared)] public string RSSUrl { get; set; } protected override void RenderContents(HtmlTextWriter writer) { RSSFeed feed = new RSSFeed(RSSUrl); HyperLink newLink = new HyperLink(); foreach (RSSItem singleRssItem in feed) { newLink.Text = singleRssItem.Title; newLink.NavigateUrl = singleRssItem.Href; newLink.Target = "rssSite"; newLink.RenderControl(writer); writer.WriteBreak(); } base.RenderContents(writer); } [ConnectionProvider("Rss service Provider")] public IRSSFeedContract GetRssCommunicationPoint() { return this as IRSSFeedContract; } } Nu k, property RSSUrl ca RSSWebPart hot ng nh mt thc thi ca IRSSFeedContract. Ngoi ra, bn c th ti mt phng thc c p dng thuc tnh ConnectionProvider. Phng thc ny c SharePoint framework gi ti khi cn ly tham chiu ti provider. Tham chiu ny sau c cung cp cho tt c cc consumer trn trang . Do RSSWebPart thc thi interface IRSSFeedContract, do bn s phi tr v t kha this. Tip theo, hy thc hin thay i vi consumer. Trong trng hp ny, consumer l OPMLWebPart. Thm on m trong Listing 4-15 vo OPMLWebPart. Listing 4-15. M cho Consumner ca OPMLWebPart private IRSSFeedContract theProvider; [ConnectionConsumer("Rss service Consumer")] public void InitializeProvider(IRSSFeedContract provider) { theProvider = provider; } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); base.OnPreRender(e); { theProvider.RSSUrl = rbl.SelectedValue; } } Nh c th thy, phng thc InitializeProvider c gi bi framework sau khi n c mt tham chiu ti provider (tham chiu ny c c bng cch gi phng thc GetRssCommunicationPoint trong Listing 4-14). Th hin ca RSSFeedContract c truyn vo phng thc ny di dng tham s. Vi vic s dng tham s ny trong phng thc OnPreRender, WebPart c c hi thit lp gi tr RSSUrl ph hp. Thit lp gi tr RSSUrl s hin th ng RSS Fedd trong provider. Hy tip tc bng cch chy v trin khai WebPart. Trong trnh duyt, hy truy cp ti trang c hai WebPartZone. Ko mt th hin ca OPMLWebPart v RSSWebPart vo mi vng. Sau , cng ging nh trc y, hy chnh sa li OPMLWebPar v cung cp mt s RSS Feed URL. Tip theo l kt ni hai WebPart, nh trong Hnh 4-28.

CHAPTER 4 _ CC WEBPART V TRANG SHAREPOINT

Hnh 4-28. Kt ni hai WebPart thng qua trnh duyt. Bn s thy hot ng ca hai WebPart ny. C th thy rng khi chn mt URL t OPMLWebPart th RSS Feed trong RSSWebPart cng thay i tng ng. Cc WebPart by gi ang ni chuyn vi nhau.

Mt s ch cui cng v WebPart


Ch cui cng? C phi y l s nhm ln khi m bn mi ch bt u cun sch! Vng, hy ngh y ch l mt s tm ngh. Cc WebPart l mt ch vn c ca SharePoint. Bn khng th ni mnh l mt lp trnh vin SharePoint nu khng bit cch vit cc WebPart. Tuy nhin, WebPart khng phi l iu duy nht bn c th vit cho SharePoint. Mt du hiu nhn bit nhng ngi mi lp trnh SharePoint l anh ta thch gii quyt tt c cc vn gp phi bng cch s dng WebPart. Tip theo l nhng lp trnh vin SharePoint c cht kinh nghim, h thng thch vit cc lung cng vic (workflow) gii quyt cc vn . S thc th WebPart ch l mt trong s nhng la chn ca bn. SharePoint 2010 l mt ch ln. truyn t cc kin thc mt cch tht chi tit ch trong mt cun sch l iu khng th. Tuy nhin, c mt s im quan trng ni bt v WebPart m ti mun ch ra trc khi tip tc cc ch th v khc. WebPart l mt khi nim ca ASP.NET 2.0. Cc WebPart c gii thiu ln u tin trong SharePoint 2003, trc c ASP.NET 2.0. V l do tng thch ngc, cho nn bn s thy mt lp WebPart abstract c s nm trong namespace Microsoft.SharePoint v mt lp WebPart abstract c s khc nm trong namespace System.Web. Hin nay, khi vit cc WebPart bn khng c k tha t lp c s Microsoft.SharePoint, thay vo , bn phi k tha t lp WebPart abstract c s nm trong namespace system.web. Giao tip WebPart gy ra cc vn post back. C mt cch cho php cc WebPart giao tip vi nhau hon ton trn pha client. Cc WebPart c th c trin khai s dng cc gii php sandbox. Tuy nhin, cc WebPart c trin khai bng gii php sandbox c mt s hn ch, bn c th tm hiu nhng hn ch trong bi vit ti a ch http://blah.winsmarts. com/2009-12-You_can_deploy_WebParts_as_Sandboxed_solutions__but.aspx. Bn c th vit cc Visual WebPart hoc cc WebPart thng thng, nhng c nhn ti thch vit cc WebPart thng thng hn l vit cc Visual WebPart. Nu bn c chng ny trong vng mt vi gi, hy cho php bn thn c th gin vi mt ly caf, sau quay tr li c tip chng tip theo. Trong Chng 5, ti s cp ti mt s pht trin mi, th v hn trong SharePoint 2010 c tn l client object model. Ngoi ra, ti cng s cp ti nhng cng ngh tng t v lin quan nh ADO.NET REST hay WCF Da ta services v cch vit cc WCF Service ty chnh. Ti s kt hp nhng kin thc vi WebPart v Page vo trong cc v d ch cho bn thy cch nhng thnh phn ny hot ng vi nhau ra sao!

You might also like