SPNote

SharePoint Notes

SharePoint Object Model

안녕하세요?

Will 입니다.

이번에는 SharePoint2010 OM에 대해서 내용을 적기로 하겠습니다.

우선 OM(Object Model) SharePoint2010에서는 사용자 단에서 즉 클라이언트 단에서 돌아 갈 수 있도록 dll로 정의가 되어 있는데요, Windows 응용프로그램, Consol 응용프로그램, Silverligth 응용프로그램 그리고 Javascript 에서 클라이언트 스크립팅으로 사용을 할 수 있습니다.

 

1 .Clinet Object Model

 우선 VS2010으로 Window응용프로그램을 만들도록 하겠습니다. 응용프로그램을 만드실 때 .net 3.5를 베이스로 해주시고 만드시면은 되겠습니다.

그리고 폼에 각각의 컨트롤들을 그림과 같이 배치 하시면은 되겠습니다.

컨트롤

ID

Event

Text Box

txtUrl

 

List Box

lstCollection

 

Button

btnSearch

btnSearch_Click
  

 

그런 다음 참조를 통해서 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI 해당 경로에 잇는 Microsoft.SharePoint.Client.dll Microsoft.SharePoint.Client.Runtime.dll 을 추가해 줍니다.

  

그런 다음 해당 소스를 자신의 코딩에 맞춰서 넣습니다.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using Microsoft.SharePoint.Client;   

namespace SPNote.SharePoint.ObjectModel{   

public partial class ClientOM : System.Windows.Forms.Form    {       

public ClientOM()        {            

InitializeComponent();       

}        

private void btnSearch_Click(object sender, EventArgs e)        {           

//Create A Client Connection           

using (ClientContext clientCon = new ClientContext(txtUrl.Text))           

{                //Get the Site Collection               

Site csite = clientCon.Site;                

//Fill SharePoint Data               

clientCon.Load(csite);               

 clientCon.ExecuteQuery();                

lstCollection.Items.Add(csite.Url);                

//Get the Site                

Web cWeb = clientCon.Web;                

//Fill SharePoint Data               

clientCon.Load(cWeb);               

clientCon.ExecuteQuery();                 

lstCollection.Items.Add(cWeb.Title);                

//Load Lists               

clientCon.Load(cWeb.Lists);               

clientCon.Load(cWeb, x => x.Lists.Where(l => l.Title != null));               

clientCon.ExecuteQuery();                 

foreach (List list in cWeb.Lists)               

{                   

lstCollection.Items.Add(list.Title);               

}           

}       

}   

}//class

}//namespace  

그리고 실행을 하면은 해당 값들을 확인 할 수 있습니다.

  

 

2. ECMAScript Client Object Model

 Script단에서 SharePoint 컨트롤을 사용 할 수 있도록 정의가 되어 있는 것이다. 우선 Project를 새로 생성 하는데 SharePoint 의 빈 SharePoint 프로젝트를 선택하고 생성 한 다음 Applicationpage를 추가 한다. 그럼 Layouts 밑에 해당 페이지가 생성 되게 된다.

  

그리고 나서 해당 소스를 집어 넣고 돌려 본다. 첫번째 했던 ClientOM과 비슷한 소스 이다. 보고 이해 하시기 바랍니다. 그럼 해당 컨트롤을 통해서 Ajax처리가 되어서 해당 사이트의 타이틀을 읽어 올 수 있습니다.

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>

<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>

<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Import Namespace="Microsoft.SharePoint" %><%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ECMAScript.aspx.cs" Inherits="EcmascriptClientOM.Layouts.EcmascriptClientOM.ECMAScript" DynamicMasterPageFile="~masterurl/default.master" %> 

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">

<SharePoint:ScriptLink ID="SPScriptLink" runat="server" LoadAfterUI="true" Localizable="false" Name="sp.js" /> 

<script language="javascript" type="text/jscript" >   

function eClientOM(){       

var context = new SP.ClientContext.get_current();       

this.site = context.get_web();       

context.load(this.site);       

context.executeQueryAsync(Function.createDelegate(this,this.rSuceess),Function.createDelegate(this,this.rFailure));   

}    

function rSuceess(senger, args){       

alert("site title" + this.site.get_title());   

}       

function rFailure(sender, args){       

alert("Request failed " + args.get_message());   

}</script>

</asp:Content> 

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">   

<input type="button" onclick="eClientOM()" value="Ecmas" />

</asp:Content> 

<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">Application Page</asp:Content> 

<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >My Application Page</asp:Content>   

 

3. Silverlight Client Object Model

 해당 dll의 오류가 있어서 지금 작업은 하지 못하였으나 조만간 작업을 하여서 올리도록 하겠습니다.

 

좋은 한해 보내시고 질문 사항이 있으면은 메일을 주시거나 코멘트를 달아 주시면은 답변을 드리도록 하겠습니다.

 

  

SP.js (379.92 kb)

Popup Description balloon for Calendar Items

Calendar List can be used to share information about events, appointments, meetings and etc.


While I was using this list, I found that it will be better to popup its Description value when a user mouse over to each item cause it basically doesn't. Here's what the common columns of Calendar List are.

Column Name Description
Title (required) Single line of text
Location Single line of text
Start Time (required) Date and time
End Time (required) Date and time
Description Multiple lines of text


Unfortunately, Description column type is "Multiple lines of text" which means this column contains HTML tags that this have to be processed to remove HTML tags before showing its value. Here is a Display Item image and a raw value of Description column. 


  # Display Item

ex) Raw? Description Value
[code:html;ln=off]

<div>OCS R2 Verification Call for VSP</div>
<div>I support OC engineers to get it done successfully!</div>
<div>&nbsp;</div>
<div>Bold:<strong>&nbsp;Bold</strong> </div>
<div><font color="#ff9900"><font color="#000000">Font Color:</font> Orange</font></div>

[/code]


So, I need to remove HTML tags and I used Regular Expression.
ex) System.Text.RegularExpressions.Regex.Replace(Description Column Value, "<[^>]*>", string.Empty)


But where should I edit for this??? The answer is DefaultTemplates.ascx under
12 Hive\TEMPLATE\CONTROLTEMPLATES\... You can change this directly or override into new one. Calendar List has 3 ways "Day", "Week", "Month" to show Items and you need to change three Templates and they are.

  1. 2477: CalendarViewMonthItemTemplate
  2. 2539: CalendarViewDayItemTemplate
  3. 2617: CalendarViewWeekItemTemplate

    [Line Number: Template Name]


It is time to edit this template. Find A tag and put the title attribute with this codes and execute IISRESET.

[code:html;ln=off]

title="<%# System.Text.RegularExpressions.Regex.Replace(DataBinder.Eval(Container,"DataItem.Description",""), "<[^>]*>", string.Empty)%>"

[/code]


Now you can see the poping up Description value if you mouse over to any item that has Description value.



  # Demo poping up Description value

Custom Resource Provider for SharePoint Localization

 At first, I simply implemented 1. Custom Resource Provider which reads browser preference only but tricky customers wanted 2. Toggle Languages function. I used Cookie and Database for each user's localization data store and I described here how it's implemented.

* Click images below to see larger ones. 
 

1. Custom Resource Provder


2. SharePoint Localization to support a toggle function for two languages

SharePoint Search Visibility

My customer asked me whether it's possible to hide search results on the specific site or sites. That moved tome to the linke “Search Visibility” in Site Settings which you can set to allow this web to appear in search results or not.

What I have concerned about this is “Can I optionally set this?” even though it has been cralwed already. I mean after crawled (which is I configured “True” on this and “Start full crawl” job has done), can I just set it False and it will work as I expected? The answer is “YES!!!” (if you don’t crawl again, the answer is NO!!!). I thought it won’t happen cause when the index has crawled, it must be searched but when you crawl again after you set it False, those crawled items will be deleted by gatherer.

Q. How the Search Visibility works?
depends on how to set whether the Indexing Site Content is True or Not.

1) Search Visibility > Indexing Site Content is True
  When you do “Start Full Crawl” => it will crawl for this web.
2) Search Visibility > Indexing Site Content is False
  When you do “Start Full Crawl” => it won’t crawl for this web.
  but if there are crawled indexes, it will delete them.

I’ll show you images about each result.
1) True
  Success items: 493, Warnings: 4


2) False (crawled first after set the site to True and again after set it to False)
  Success items: 281, Warnings: 216 (497 - 281)

As you can see, the status of Crawled Content Status has changed…
and if you closely look on 2) False image, you can find out the items are deleted.
(Deleted by the gatherer…)

- Refer these pages
  1) Plan to crawl content (Office SharePoint Server)
  http://technet.microsoft.com/en-us/library/cc262926.aspx
  2) Security considerations for search (Windows SharePoint Services)
  http://technet.microsoft.com/en-us/library/cc287898.aspx

I didn’t test all menus about it that I don’t know whether it will work same.

What is SharePoint?

What is SharePoint?

Microsoft Office SharePoint Server 2007 is an integrated suite of server capabilities that can help improve organizational effectiveness by providing comprehensive content management and enterprise search, accelerating shared business processes, and facilitating information-sharing across boundaries for better business insight. Additionally, this collaboration and content management server provides IT professionals and developers with the platform and tools they need for server administration, application extensibility, and interoperability.

# Passage from Microsoft SharePoint web site and resources you can get almost everything from here.

You can refer official or useful urls here.
1. Microsoft Office Online > Products > Microsoft Office SharePoiknt Server
2. SharePoint Magazine

 

SharePoint 에 대하여..

 SharePoint란  

 - 기업의 협업 작업을 편리 하게 하여, 회사의 사원들 끼리 정보 공유 및 문서관리의 편의성 과 정보 액세스 공급이 용이한 솔루션 이다.

   

  SharePoint의 기능

1.     협업 : 문서를 게시를 할 수 있는 라이브러리를 제공을 하여서 권한이 있는 사용자들 간에 문서를 다운로드 및 수정 등을 할 수 있으며, 또한 변경 된 사항들을 버전 별로 관리가 되기 때문에 언제든지 내용이 잘못 되었을 때 롤백이 용이 하고 DB에 데이터가 자동으로 들어가서 쌓이게 되므로 문서관리 등에 용이함.

 

2.     포털 기능 : 각 각의 부서 및 팀 별로 사이트 생성이 가능 하며 사용자들에 권한에 맞게 팀 사이트의 접근이 가능 하며, 또한 개개인의 내 사이트 포털을 생성 할 수 있으며 다른 부서원들과 정보 공유 및 의사 소통에 용이 하며, 개인 사이트에 개인들의 작업들을 배치해서 한눈에 볼 수 있음.

   

3.     기업 검색 : 자체적으로 검색 기술이 있기 때문에 SharePoint에서 쌓여 있는 문서 및 사람 콘텐츠 들의 검색이 용이 합니다.

 

4.     비즈니스 프로세스 및 양식 : 워크 플로 와 전자 양식을 제작이 용이 함.

  5.     비즈니스 인텔리전스 : 비즈니스 정보를 보기 쉽게 하기 위해서 Office제품의 표와 차트 형태로 데이터를 가공 하여 보여줌으로써 의사 결정권자 들이 보다 쉽게 의사 결정을 할 수 있도록 도와줍니다.