Twitter Trends Webpart [Silverlight Version]

Jul 30 2010 Published by Shoban under MOSS 2010

Last week we saw how we can create a Twitter Trends Webpart for SharePoint 2010. Jhonny has developed a Silverlight version of this webpart. He will be posting how he developed the webpart. For the time being enjoy the Twitter Webpart in his blog ;-)

2 responses so far

Twitter Trends Webpart for SharePoint

Jul 25 2010 Published by Shoban under Downloads, MOSS 2010, Webpart

In this article we will see how we can develop a Twitter Web Part for Sharepoint. We are going to use jQuery and Twitter Search API along with our favorite c# code. The Web Part will be a simple Twitter Widget which will display latest tweets for a Hashtag. Below is a screenshot of how our Web Part will look like.

We are going to name our Web Part Twitter Trends ;-) Lets get started

Fireup Visual Studio 2010 (Oh Yeah we will be using Visual Studio 2010 for our project and you will notice how easy it is for developers to build and deploy SharePoint Projects in VS 2010) and Select File -> New Project and create a new Visual Web Part Project.


Click OK and you will see another Window which will ask you to enter the Local SharePoint site which we will use to Debug our Web Part. Enter your Test Site and Click Finish.

Instead of designing our widget we are going to use the design of a Twitter Widget Tutorial in Tutorialzine.

We will be making few changes in CSS to suit our needs. Please check the above link to learn how the Widget is designed. We will not be discussing what changes were made to the CSS files also download the source code as we will be using CSS Files, Images and Javascript files from that project.

Back to our project in Visual Studio, Right Click our Project and Click Add -> SharePoint “Layouts” Mapped folder.

If you notice, Visual Studio automatically added a folder for us under layouts folder to store our files. Now Create 3 new folders namely CSS, Images, Scripts. Add CSS Files, Images and JS files to these folders.

Now your solution explorer should look like this

Open the ASCX file and add the following code


<link rel="Stylesheet" type="text/css" href="/_layouts/TwitterTrends/css/demo.css" />
<link rel="Stylesheet" type="text/css" href="/_layouts/TwitterTrends/css/jScrollPane.css" />
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/_layouts/TwitterTrends/scripts/jquery.mousewheel.js" type="text/javascript"></script>

<script src="/_layouts/TwitterTrends/scripts/jScrollPane-1.2.3.min.js" type="text/javascript" ></script>

In the above code we have just referenced the proper CSS files and Javascript files including the jQuery file from Microsoft CDN.

Add the below code below the above lines of code. The code is self-explanatory also I have added comments so that it will be easy to understand.

<script language="javascript" type="text/javascript">
$(document).ready(function () {
$('#twitter-ticker').slideDown('slow'); //Slide down the Widget when the page has loaded
RefreshTweets(); //Function which does all the job
setTimeout("RefreshTweets()",60000); //Refresh the Tweets every 1 minute
});

function RefreshTweets() {
var container = $('#tweet-container');
if(hashtag == "") //Global variable declared through C# code
{
hashtag = "SharePoint"; //Set Default Hashtag
}
$.getJSON("http://search.twitter.com/search.json?q=%23" + hashtag + "&rpp=15&&callback=?", function (msg) {
container.html(''); //Remove the Loading GIF
for (i = 0; i < msg.results.length; i++) { //Build DIVs containing Tweets and add it to Container DIV
var str = '<div><div><a href="http://twitter.com/' + msg.results[i].from_user + '" target="_blank"><img src="' + msg.results[i].profile_image_url + '" alt="' + msg.results[i].from_user + '"/></a></div>';
str += '<div><a href="http://twitter.com/' + msg.results[i].from_user + '"target="_blank">' + msg.results[i].from_user + '</a></div>';
str += '<div>' + relativeTime(msg.results[i].created_at) + '</div>';
str += '<div>' + formatTwitString(msg.results[i].text) + '</div>';
container.append(str);
}

});
container.jScrollPane(); //Add Scrollbar

}

We will also be using 2 functions which is used to Format Tweet and Time (you can find this function in script.js which you have downloaded from Tutorialzine website)

function formatTwitString(str)
{
str=' '+str;
str = str.replace(/((ftp|https?):\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1" target="_blank">$1</a>');
str = str.replace(/([^\w])\@([\w\-]+)/gm,'$1@<a href="http://twitter.com/$2" target="_blank">$2</a>');
str = str.replace(/([^\w])\#([\w\-]+)/gm,'$1<a href="http://twitter.com/search?q=%23$2" target="_blank">#$2</a>');
return str;
}

function relativeTime(pastTime)
{
var origStamp = Date.parse(pastTime);
var curDate = new Date();
var currentStamp = curDate.getTime();

var difference = parseInt((currentStamp - origStamp)/1000);

if(difference < 0) return false;

if(difference <= 5)                return "Just now";
if(difference <= 20)            return "Seconds ago";
if(difference <= 60)            return "A minute ago";
if(difference < 3600)            return parseInt(difference/60)+" minutes ago";
if(difference <= 1.5*3600)         return "One hour ago";
if(difference < 23.5*3600)        return Math.round(difference/3600)+" hours ago";
if(difference < 1.5*24*3600)    return "One day ago";

var dateArr = pastTime.split(' ');
return dateArr[4].replace(/\:\d+$/,'')+' '+dateArr[2]+' '+dateArr[1]+(dateArr[3]!=curDate.getFullYear()?' '+dateArr[3]:'');
}
</script>

Next, Add the below code which will add the required DIVs and containers


<div id="main">
<div id="twitter-ticker">
<div id="top-bar">
<div id="twitIcon"><img src="/_layouts/TwitterTrends/images/twitter_64.png" width="64" height="64" alt="Twitter"/></div>
<h2>Twitter Trends</h2>
</div>
<div id="tweet-container"><img id="loading" src="/_layouts/TwitterTrends/images/loading.gif" width="16" height="11" alt="Loading.." /></div>
<div id="scroll"></div>
</div>
</div>

Now it’s time to add our Custom Property to the Web Part so that users will be able to enter their own hashtag.

Open VisualWebpart1.cs and change


[ToolboxItemAttribute(false)] to [ToolboxItemAttribute(true)]

Add the below code which will add a Textbox under a custom category.


[WebBrowsable(true),
Category("Twitter Trends"),
Personalizable(PersonalizationScope.User),
DefaultValue(""),
WebDisplayName("Hash Tag"),
WebDescription("Please enter a hashtag")]

public string TwitterTrendsProperty
{
get { return HashTag; }
set { HashTag = value; }
}
public static string HashTag;

Next, Open the code behind file for the user control which will show the Tweets and add the below code under Page Load event.


string strHashTag;
strHashTag = VisualWebPart1.HashTag;
Response.Write("<input type='hidden' value='" + strHashTag + "' id='hashtag'/>");
ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptBlock(GetType(), "hashtag", "<script>var hashtag='" + strHashTag + "';</script>");

In the above code we declare a new Javascript variable and set its value based on the Value entered in our custom property “Hashtag”

That’s it! Now it’s time to test our Twitter Trends Web Part ;-) Right click the project and select Deploy. Yes it is that simple!

Wait for Visual Studio to deploy the solution. You should see the status in the status bar

To test our new Web Part, open the site and add the Web Part. You should find your webpart under “Custom” Category.

After adding the Web Part, Click “Edit Webpart” to enter your own hastag and see our new Twitter Web Part in action ;-)

Download : Twitter Trends [Source Code] Twitter Trends [WSP]

5 responses so far

Read data from a content editor webpart

Jun 11 2010 Published by Hojo Clement under MOSS 2007, Webpart

In this article we will see how we can to get data from a content editor webpart from one page and display it in another page using a custom webpart.

If you are new to webpart development you can check out my previous post about Hello world SharePoint Web Part for Beginners
Add the following code in the RenderWebPartmethod of the webpart you are creating. The code and comments are self explanatory. Please pose a comment if you have any problem in understanding the code.

SPSite site = new SPSite("http://mysite">http://mysite"); // create object of the site
SPWeb web;
Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager mgr = null;
web = site.OpenWeb();
mgr = web.GetLimitedWebPartManager("Pages/mypage.aspx", System.Web.UI.WebControls.WebParts.PersonalizationScope.User);//http://mysite/Pages/mypage.aspx will be the URL of the source page
foreach (System.Web.UI.WebControls.WebParts.WebPart wp in mgr.WebParts)
{
if (wp.Title ==  "My RichTextEditor") //My RichTextEditor is the webpart title
{
SPWebPartPages.ContentEditorWebPart webPart =    (SPWebPartPages.ContentEditorWebPart)wp;
output.Write(webPart.Content.InnerText);
}
}

No responses yet

Hide Breadcrumb on a single page in MOSS 2007 without using SharePoint Designer

Jun 02 2010 Published by Radhika under MOSS 2007, SharePoint Design Customisation, Tips

In this article we will see how we can hide the BreadCrumb in a single page. We are also going to do it without using the SharePoint Designer. We are going to do it by using a content editor web part.
1. Go to Site Actions –> Edit Page –> Add a Content editor web part

2.  Write following code in to content editor web part


<style rel="stylesheet" type="text/css" />

.ms-pagebreadcrumb{display:none; }

</style>

Save the changes and exit edit mode or publish the page

Step 3 :  Now your page should look like this

One response so far

3 ways to edit SharePoint page properties

May 19 2010 Published by Hojo Clement under MOSS 2007, PowerShell, Tips

Here comes another post in the series of “3 ways to do….”. Here is how you can edit the properties of a page in Sharepoint

using browser

1. Go to the pages library of the site.
2. Click Checkout menu of the page
3. Click property menu of the page
4. Edit property and save
5. Finally checkin that page
using Object model

SPSite site = new SPSite("http://mysite");
SPWeb web = site.OpenWeb();
SPFile file = web.GetFile("./pages/default.aspx");
file.CheckOut();
file.Item["Title"] = "new title";
file.Item.Update();
file.CheckIn("title edited");

using PowerShell

[system.reflection.assembly]::loadwithpartialname("microsoft.sharepoint")
$site= New-Object Microsoft.SharePoint.SPSite ("http://mysite")
$web=$site.OpenWeb()
$page =  $web.GetFile("./Pages/default.aspx")
$page.CheckOut()
$page.Item["Title"] = "new title"
$page.item.update()
$page.CheckIn("title edited")

No responses yet

Hide a required field in SharePoint list while adding new item

May 13 2010 Published by Hojo Clement under MOSS 2007, PowerShell, Tips

There may be cases when we need to a hide required field while adding a new item to a list but at the same time you may want to show it while editing the item.

The above case looks tricky but it is easily achievable using some extra bit of code or PowerShell

C#

string siteUrl = "http://mysite";
SPSite site = new SPSite(siteUrl);
SPWeb web = site.OpenWeb();
site.AllowUnsafeUpdates = true;
web.AllowUnsafeUpdates = true;
SPList list = web.Lists["mylist"];
SPField fldName = list.Fields["Name"];
fldName.ShowInNewForm = false;
fldName.Update();
list.Update();

PowerShell

[system.reflection.assembly]::loadwithpartialname("microsoft.sharepoint")
$site= New-Object Microsoft.SharePoint.SPSite ("http://d-dev1:1234/gp")
$web=$site.OpenWeb()
$list=$web.Lists["mylist"]
$field = $list.Fields["Name"]
$field.ShowInNewForm = $false
$field.Update()

If you want to hide this field in edit form, you can use below command

fldName.ShowInEditForm = false;

If you want to hide this field in display form, you can use below command

fldName.ShowInDisplayForm = false;

If you want to hide this field in list settings, you can use below command

fldName.ShowInListSettings = false;

If it is not a required filed then you can hide the item using Jquery in client side.

<script type="text/javascript">// <![CDATA[
$(document).ready(function() {
$('nobr:contains("Name")').closest('tr').hide();
});
// ]]></script>

No responses yet

3 ways for adding new column in SharePoint list

May 12 2010 Published by Hojo Clement under MOSS 2007, MOSS 2010, PowerShell, Tips

In this post we will see 3 different methods for adding columns in SharePoint list or document library or discussion board.

using browser
Go to the list which you want to add column
On the page that displays the list, click list’s settings and create columns.
Type a name for the column, choose the column type and click OK.

using Object model


SPSite site = new SPSite(siteUrl);
SPWeb web = site.OpenWeb();

site.AllowUnsafeUpdates = true;
web.AllowUnsafeUpdates = true;

SPList list = web.Lists["mylist"];
SPFieldText fldName = (SPFieldText)list.Fields.CreateNewField(SPFieldType.Text.ToString(), "mycolumn");
fldName.Required = true;
fldName.MaxLength = 50;
list.Fields.Add(fldName);
list.Update();

site.AllowUnsafeUpdates = false;
web.AllowUnsafeUpdates = false;

using PowerShell


[system.reflection.assembly]::loadwithpartialname("microsoft.sharepoint")
$site= New-Object Microsoft.SharePoint.SPSite ("http://mysite")
$web=$site.OpenWeb()
$list=$web.Lists["mylist"]
$list.Fields.Add("mycolumn", "Text", 0)

No responses yet

3 ways to find SharePoint list field’s Internal name

May 11 2010 Published by Hojo Clement under MOSS 2007, PowerShell, Tips

While working with caml query there may be cases where we may need to refer internal name of a sharepoint list and in some of the cases the display name and internal name may be different. If you try to access this list we will get object not found error.

We can find out the sharepoint field’s internal name using any of the following ways
1. Using browser (it applies to custom fields only)
Go to list settings -> Edit column. Then you can see field name from the query string

2. Object model (it applies for custom fields as well as system fields)

string siteUrl = "http://mysite";
SPSite site = new SPSite(siteUrl);
SPWeb web = site.OpenWeb();
SPList list = web.Lists["my forum"];
for (int i = 0; i < list.Fields.Count; i++)
Console.WriteLine(list.Fields[i].Title + "..." + list.Fields[i].InternalName + "...");
Console.ReadLine();

3. Powershell (it applies for custom fields as well as system fields)

[system.reflection.assembly]::loadwithpartialname("microsoft.sharepoint")
$site= New-Object Microsoft.SharePoint.SPSite ("http://mysite")
$web=$site.OpenWeb()
$list=$web.Lists["my forum"]
$list.Fields |select title, internalname| more

One response so far

Display all Lists in a SharePoint site using PowerShell

May 09 2010 Published by Shoban under MOSS 2007, MOSS 2010, PowerShell

In this tutorial we will see how we can list out all the Lists in a SharePoint site using Windows PowerShell.

Open Powershell and Enter the following cmdlets one by one.

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$spsite = New-Object Microsoft.SharePoint.SPSite("http://shoban")
$spsite.AllWebs | foreach { $_.Lists | ft $_.URL, Title }

In the first line we load the Microsoft.SharePoint assembly. In the second line we create a new SPSite object for our SharePoint site. In this case the url of the site is http://shoban

In the last line we List out all the Lists in the site. We also use the ft cmdlet to Format the Output.

If you want to write the output to a text file simply replace the last line with the following

$spsite.AllWebs | foreach { $_.Lists | ft $_.URL, Title } > Lists.txt

To open the new Text file created use the Invoke-Item cmdlet.

No responses yet

Silverlight Timeline control for SharePoint

Apr 30 2010 Published by Shoban under MOSS 2010, Webpart

How about a Silverlight control which shows the time line of a project? Check out the blog post to know more.

The other day I wanted to have a timeline control in Sharepoint so that I could easily know where each project is in its lifecycle. Yeah, you could easily use Visio or some other diagramming tool but it does take effort. So a timeline control would be nice. In Sharepoint 2010, you can host a Silverlight webpart – so there you go…

No responses yet

Older posts »