Another side of my life...

Blogging ? why not...
See also: Other Geeks@INDC

October 2010 - Posts

SPEntitiesGenerator - LINQ to Sharepoint Entity Generator

Holaaaaaa alelooo.... hahaha

Disela-sela kemacetan dan banjir yang sedang jadi trending topic, mari sejenak kita lepaskan semua beban itu dengan berbagi dengan sesama. :D

Kawan, ingatkah dengan SPMetal.exe, tools buat generate entity yang digunakan buat LINQ to Sharepoint. Nah, sebelom ogut jelasin tentang tool ini ada baiknya kita sedikit bercerita tentang kehadiran LINQ 2 Sharepoint ini.

LINQ mulai dikembangin tahun 2003, tujuannya mempermudah kerjaan developer buat berinteraksi dengan SQL dan XML karena berbeda dengan model programming sebelumnya. Hasilnya adalah sebuah query language yang bisa bekerja dengan berbagai sumber data (SQL, XML, Files, SharePoint Lists).

Di sharepoint 2007, untuk melakukan kuery ke list biasanya kita pakai CAML. Penggunaannya agak sulit karena terbatas untuk development di sharepoint doang.CAML juga tidak punya compile-time checking karena ditulis sebagai string di dalam source code untuk objek SPQuerydan SPSiteDataQuery, karena alasan itulah sekarang LINQ 2 Sharepoint dikembangkan. LINQ2Sharepoint ini merepresentasikan sharepoint list ke dalam class-class entity. Class entity ini bersifat strongly-typed,di dukung intellisense, dan ada compile-time checking.

Berikut alur proses penggunaan LINQ 2 Sharepoint.


1.       Bikin class entity dengan SPMetal

2.       Deklarasikan data konteks

3.       Dan Membuat kuery-nya

Oke, cukup segitu teorinya, mari kita hangatkan jari dengan sedikit praktek latihan menggunakan LINQ2Sharepoint ini.

Ikuti langkah berikut.

1.       Bukalah sharepoint site. Buatlah Sebuah custom list dengan nama "Nilai". Tambah beberapa kolom:


a.       Nama = single teks

b.      Pelajaran = single teks

c.       Nilai = number

2.       Abis itu isikan dengan data dummy.

3.       Kemudian kita generate class entity dengan SPMetal, caranya :

Jalankan syntax berikut di run.

C:\Program Files\Common Files\Microsoft Shared\web server extensions\14\bin\SPMetal.exe /web:http://site-kamu /code:Entities.cs /language:csharp

Atau kalau ga mau riweuh pake SPEntitiesGenerator.

Jalankan toolsnya, masukan nama site kamu kemudian klik "Check" trus langsung generate deh... haha inget yah "worksmart" = kerja cepet duit cepet.


4.       Nanti hasilnya berupa class entity.


5.       Sekarang buat project baru di Visual Studio 2010. File -> New -> Project.

6.       Pilih installed template yang Sharepoint > 2010. Dan pilih "Visual Webpart". Kasih nama "TestSPLINQ"

7.       Ok, dan pilih site kamu buat debug (url site pas buat list diatas).

8.       Kemudian masukan reference. Project -> Add Reference. Pilih tab Browse. Masukin ini C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.SharePoint.Linq.dll

9.       Kemudian masukan class entity yang digenerate tadi.  Project -> Add Existing Item. Pilih file (.cs) tadi

10.   Buka VisualWebPart1UserControl.ascx masukan kode ini :

<%@AssemblyName="$SharePoint.Project.AssemblyFullName$"%>
<%@AssemblyName="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@RegisterTagprefix="SharePoint"Namespace="Microsoft.SharePoint.WebControls"Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@RegisterTagprefix="Utilities"Namespace="Microsoft.SharePoint.Utilities"Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@RegisterTagprefix="asp"Namespace="System.Web.UI"Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"%>
<%@ImportNamespace="Microsoft.SharePoint"%>
<%@RegisterTagprefix="WebPartPages"Namespace="Microsoft.SharePoint.WebPartPages"Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ControlLanguage="C#"AutoEventWireup="true"CodeBehind="VisualWebPart1UserControl.ascx.cs"Inherits="TestSPLINQ.VisualWebPart1.VisualWebPart1UserControl"%>
<asp:GridViewID="GridView1"runat="server"BackColor="White"
BorderColor="#336666"BorderStyle="Double"BorderWidth="3px"CellPadding="4"
EnableModelValidation="True"GridLines="Horizontal">
<FooterStyleBackColor="White"ForeColor="#333333"/>
<HeaderStyleBackColor="#336666"Font-Bold="True"ForeColor="White"/>
<PagerStyleBackColor="#336666"ForeColor="White"HorizontalAlign="Center"/>
<RowStyleBackColor="White"ForeColor="#333333"/>
<SelectedRowStyleBackColor="#339966"Font-Bold="True"ForeColor="White"/>
</asp:GridView>

11.   Buka VisualWebPart1.csmasukin kode ini :

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Text;
using System.Linq;
using System.Data;

namespace TestSPLINQ.VisualWebPart1
{
public partial class VisualWebPart1UserControl : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadData();
}

}
private void LoadData()
{
try
{
using (BlackDiamondDataContext dc =
new BlackDiamondDataContext("http://black-diamond"))
{

var q = from itm in dc.Nilai
where itm.Nilai > 50
select new { itm.Title, Pelajaran = itm.Pelajaran, Nilai = itm.Nilai };

DataTable dt = new DataTable("Nilai");
dt.Columns.Add("Nama");
dt.Columns.Add("Pelajaran");
dt.Columns.Add("Nilai");

foreach (var itm in q)
{
string[] Data = { itm.Title, itm.Pelajaran.ToString(), itm.Nilai.ToString() };
dt.Rows.Add(Data);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
catch (Exception x)
{
Response.Write(x.Message);
}

}
}
}

12.   Tulisan BlackDiamondDataContext  dan http://black-diamond diatas silakan disesuaikan dengan data context dan url site punya kamu. Kode diatas berfungsi untuk menarik data dari list nilai dimana kolom nilai lebih besar dari 50. Kemudian hasilnya di populate ke gridview.

13.   Kemudian compile. Build -> Build TestSPLINQ.

14.   Dan deploy. Build -> Deploy TestSPLINQ.

15.   Kemudian tambahkan webpart ke page sharepoint kamu. Site Actions -> Edit Page. Klik Add a Webpart di web part zone yang tersedia. Di bagian custom pilihVisualWebPart1. Klik Add


Tadaaa.... asoooiii....


Selalu belajar dan kreatif kawan.  :D

 

Salam.

Share this post: | | | |
ListToExcel using Client Object Model for Sharepoint 2010

Holaaaaaa...... :D

Yapps, pada kesempatan yang berbahagia ini kita berkumpul dan sama-sama belajar apa itu client object model... *kok kayak pembukaan pidato yah..* wee :P

Kita flashback dulu ke tahun 2007 pas saya masih muda dulu, sharepoint 2007 di dukung API yang disebut SOM - sharepoint object model. Nah API ini berjalan di server, sedangkan untuk aplikasi client kudu make web services untuk mengakses jeroan (list, web, site, dsb) sharepoint. Apa sih alasannya musti ada client object model ?, ni dia :

1.       User sharepoint 2007 dulu pada minta tambahan web service lagi buat kebutuhan-kebutuhan lain yang belum terdapat pada web services yang tersedia. *Nah lho kalau clientnya ngambek gimana ?*

2.       Client Object Model menyediakan API yang lebih lengkap daripada musti bikin tambahan web service lagi.

3.       Menyediakan abstraction layer yang me-return SharePoint objects, jadi lebih mudah daripada make web services yang return-nya bukan sharepoint object.

4.       Ini dapat dipake di macem-macem platform (.NET, ECMAScript, Silverlight)

Ini area yang didukung oleh API ini :

  • Site Collections and Sites
  • Lists, List Items, Views, and List Schemas
  • Files and Folders
  • Web, List, and List Item Property Bags
  • Web Parts
  • Security
  • Content Types
  • Site Templates and Site Collection Operations

Banyak khaaaannn ? asyiiiikk...


Nah ini yang ogut bilang tadi, ada ekuivalensi antar objek yang sejenis di platform berbeda. Jadi buat yang biasa pake SOM bisa gampanglah pake COM.


Mekanisme transport data-nya seperti ini. Semua komunikasi data pada dasarnya lewat Client.svc - WCF Service. Manage client OM = .NET / Silverlight. Kemudian tool code generator menghasilkan client OM assemblies dan javascript.

Dibawah ini sampel code penggunaannya :

ClientContextclientContext = new ClientContext("http://server");

//Load method

clientContext.Load(clientContext.Web);

clientContext.Load(clientContext.Web.Lists);

//LoadQuery method

var q1 = from list

incontext.Web.Lists

wherelist.Title != null

select list;

var r1 = context.LoadQuery(q1);

Disini ogut ga jelasin cara makenya di silverlight or ECMA Script, mungkin lain waktu yah...

Kemudian berikut adalah tool sampel yang bisa dihasilkan dengan Client Object Model ini, namanya "ListToExcel". Simpelnya kita mo narik data list dari web ke excel. Berikut adalah list sampel yang akan ditarik :


Setelah itu kita jalankan tool-nya. Isi site url dengan sharepoint site kamu, klik "Check". Dan pilih list yang mo di export.


Pjit Save dan tadaa... hasilnya...


Oke, tetap berkarya dan sehat selalu... :D

Share this post: | | | |
ReturnOfSmartpart for Sharepoint 2010

Hai hai semua...

Sudah lama tidak posting disini nich, maklum faktor umur...hahaha...

Oke kawan, masih inget ga dulu pas masih make sharepoint 2007 ada wrapper/loader web part buatan Jan Tielens di smartpart.codeplex.com yang memudahkan kita mempublish webpart kita ke sharepoint. Cukup bikin usercontrol-nya (.ascx) trus langsung dengan mudah diload oleh Smartpart ini ke webpart page sharepoint. Ya tentunya dengan ini kita bisa "worksmart" alias kerja cepet duit cepet..holaaa...

Nah, Jangan kecewa, lebih baik kecewe ajah... Sekarang sudah ada versi ReturnOfSmartpart untuk sharepoint 2010.

Bisa di download di http://smartpart2010.codeplex.com

Tinggal deploy langsung pake, asyiiikkk khaann....

Oke buat temen-temen yang blom pernah pakai, coba kita jajal gimana cara pakenya yapp... Ikutin langkah dibawah yah...

Pertama, pastikan kawan udah install sharepoint 2010 di kompienya yapp. Mau yang versi foundation atau SPS terserah Anda...

Kedua, download ReturnOfSmartpart buat SP2010.

Ketiga, Deploy Solusi.


a.       Ektrak filenya dan buka proyekna di Visual Studio 2010. Ubah site url ke sharepoint site kamu. Cth : http://mycomputer:8080

b.      Kemudian Build and Deploy solutionnya. Build -> Build Smartparts. Build -> Deploy SmartParts.

c.       Kemudian buka web.config di folder site kamu,C:\inetpub\wwwroot\wss\VirtualDirectories\[siteport]\web.config

Lihat di dalam tag <SafeControls>tambah baris ini : (kalau uda ada di replace aja)

<SafeControlAssembly="SmartParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e07dad8271c64e74"Namespace="SmartPart"TypeName="*"Safe="True"SafeAgainstScript="False" />

Dan cari juga tag "trust" set ke "Full". Seperti ini :

<trustlevel="Full"originUrl="" />

Keempat, Bikin sampel user control.

a.       Buka visual studio 2010, bikin website baru. File -> New -> Web Site.

b.      Pilih aja ASP.NET Empty Website


c.       Tambah item baru, Website > Add New Item. Pilih Web User Control. Namain aja "AJAXPage.ascx"


d.      Buka AJAXPage.ascx, masukin kode ini :

<%@ControlLanguage="C#"AutoEventWireup="true"CodeFile="AJAXPage.ascx.cs"Inherits="AJAXPage"%>
<br/>
<div>
<asp:LabelID="Label1"runat="server"Text="Label"Width="249px"></asp:Label><br/>
<br/>
<asp:LiteralID="Lit1"runat="server"/>
<asp:UpdatePanelID="UpdatePanel1"runat="server">
<ContentTemplate>
<hr/>
<asp:LabelID="Label2"runat="server"Text="Label"Width="249px"></asp:Label>
<asp:LiteralID="Lit2"runat="server"/>
<hr/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTriggerControlID="Button1"EventName="Click"/>
</Triggers>
</asp:UpdatePanel>
<br/>
&nbsp;<asp:ButtonID="Button1"runat="server"Text="Refresh"Width="233px"OnClick="Button1_Click"/></div>

e.      Buka AJAXPage.ascx.cs, masukin kode ini :

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

public partial class AJAXPage : System.Web.UI.UserControl
{
protectedvoid Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
Label2.Text = DateTime.Now.ToString();
Lit1.Text = getImages();
Lit2.Text = getImages();
}
protectedvoid Button1_Click(object sender, EventArgs e)
{

}
privatestring getImages()
{
string HTML = "";
try
{
SPWeb web = null;
SPSecurity.RunWithElevatedPrivileges(delegate
{
HttpContext Context = HttpContext.Current;
web = SPControl.GetContextWeb(Context);
});

string QueryStr = @"<Query></Query>";
SPPictureLibrary list = (SPPictureLibrary)web.Lists["MyPics"];
SPQuery query = newSPQuery();
query.Query = QueryStr;
HTML = "<table><tr>";
SPListItemCollection listItems = list.GetItems(query);
foreach (SPListItem listItem in listItems)
{
string Links = web.Url + "/" + listItem.Url;
string FileName = listItem.Name;
HTML += string.Format(@"<td><img alt=""{0}"" width=""120px"" height=""90px"" src=""{1}"" /></td>", FileName, Links);

}
HTML += "</tr></table>";

}
catch
{

}
return HTML;
}
}

f.        Save, kemudian buat folder baru namanya "usercontrols" di C:\inetpub\wwwroot\wss\VirtualDirectories\[siteurl]\usercontrols

g.       Kopi file AJAXPage.ascx dan AJAXPage.ascx.cs ke folder tsb.

Kelima, tampilkan di sharepoint site.

a.       Buka site kamu, dan bikin (http://[site:url]/_layouts/create.aspx):

-          Document Library beri nama "MyForm"

-          Picture Library beri nama "MyPics", tambahkan beberapa gambar ke dalamnya.


b.      Bikin web part page beri nama "TestPart", masukan ke document library "MyForm"


c.       Buka MyForm -> TestPart. Tambahkan web part. Site Actions > Edit Page. Pilih Add a Web Part. Masukan "Smartparts" dari categories "Custom".


d.      Buka tool pane. Pada bagian dropdown smartparts, pilih "usercontrols_ajaxpage_ascx"


e.      Tadaaaa... Selamat menikmati. Mudah khaan ??


 

Tetep kreatif dan tampan...

Suwun.Smile

 

Share this post: | | | |