Saturday 17 September 2011

Using Javascript (SP.js) in Web Parts in Sharepoint 2010

The other day, my work mate, Andy, asked to gave him a hand with one modal form he was building. The form was developed with InfoPath, so the limitations were quite high to do what he wanted to do. He asked me to be able to query a list with the current user is using the form.

Instead of creating a form I developed a simple Visual Web Part and one application page and copy and paste the code, to see the difference. After that I passed the solution to Andy so he can use the code for his modal form.

This article covers the basic of javascript development in Sharepoint 2010, from debugging to some of the most basic classes to the integration with ASP.NET controls.

I am going to concentrate more in the web part rather than the page to avoid confusion. Remember that the application page is a clon of the web part, so the fuctionality is exactly the same.

The web part should look like this anyway:

image

This Application page should look like this:

image

Let’s go for the step by step approach.

What do we need?:

  1. Visual Studio 2010.
  2. Sharepoint 2010.
  3. A list called Shared Documents with a Title field (this list comes by default).
  4. SP.js and SP.debug.js Path.
  5. 20 minutes of your time.
  6. Some knowledge of Javascript, C# or Java.

1- Go to Visual Studio 2010->New Project->Sharepoint –> 2010->Empty Sharepoint Project. Call the project netsourcecodeJavaScript.

2- Right click in the project netsourcecodeJavaScript and Add new item…-> Select -> Visual Web Part. Call it GetUserWebPart . Now do the same to create the application page, right click on your project –> Add new item…-> Select –> Application page. Call it GetUsers.

3- Let’s go to tidy up our project…go to features and rename Feature1 to JavaScriptFeature.

4- Your project should look like this now:

image 5- We are ready to start developing the project. Go to GetUserWebPartUserControl.ascx remove all the stuff is inside and copy this code.

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ 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" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="GetUserWebPartUserControl.ascx.cs" Inherits="netsourcecodeJavaScript.GetUserWebPart.GetUserWebPartUserControl" %>
<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true"
    Localizable="false" />
<SharePoint:FormDigest  runat="server" />
<script type="text/javascript">
    //ExecuteOrDelayUntilScriptLoaded(getWebUserData, "sp.js");
    var context = null;
    var web = null;
    var currentUser = null;
    var collListItems = null;
    var username = null;
    var loginname = null;
    var isgettinglist = false;
    function DisplayUser() {
        isgettinglist = false;
        GetUserData();
    }
    function DisplayList() {
        isgettinglist = true;
        GetUserData();
    }
    function GetUserData() {
        //## Getting the context
        context = new SP.ClientContext.get_current();
       
        //## Getting the web
        web = context.get_web();
       
        //## Getting the current user
        currentUser = web.get_currentUser();
        //## Load the query
        currentUser.retrieve();
        context.load(web);
        //## Execute the query Async
        context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));
    }
    function onSuccessMethod(sender, args) {
        //## Setting the object to get the current user...again...
        var userObject = web.get_currentUser();
        //## Adding the user into a Variable
        username = userObject.get_title();
        loginname=userObject.get_loginName();
        if (isgettinglist == false) {
            alert('User name:' + username + '\n Login Name:' + loginname);
        }
        if (isgettinglist == true) {
                //## Getting the results from the list
                GetListByName();
         }
    }
    function onFailureMethod(sender, args)
    {
        alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
    }
    function SayHello() {
        alert('Hello Word');
    }
    function GetListByName() {
       
        //## Get the context again
        context = new SP.ClientContext.get_current();
        //## Get the list
        var list = context.get_site().get_rootWeb().get_lists().getByTitle('Shared Documents');
        //## Builds a CAMEL querty to return items
        var query = new SP.CamlQuery();
        query.set_viewXml('<View><Query><Where><Eq><FieldRef Name="Author"/><Value Type="User">' + username + '</Value></Eq></Where></Query><ViewFields><FieldRef Name="Title"/><FieldRef Name="FileLeafRef"/></ViewFields></View>');
        //## Geting the items
        this.collListItems = list.getItems(query);
        context.load(collListItems);
        //## Execute the query Async
        context.executeQueryAsync(Function.createDelegate(this, this.mySuccessFunction), Function.createDelegate(this, this.myFailFunction));
    }
    function mySuccessFunction() {
        // Do something useful like loop through your returned list items and output them somewhere
        // create an enumerator to loop through the list with 
        var listItemEnumerator = this.collListItems.getEnumerator();
        var strHtml = "RESULTS:";
        while (listItemEnumerator.moveNext()) {
            var oListItem = listItemEnumerator.get_current();
            strHtml += oListItem.get_item('Title');
        }
        alert(strHtml);
    }
     function myFailFunction() { alert('Request fail'); }
   
  </script>
<asp:Button ID="Button1" runat="server" Text="Get User" />
<asp:Button ID="Button2" runat="server" Text="Query List" />
<asp:Button ID="Button3" runat="server" Text="Say Hello" />

6- Now do the same with GetUser.ascx, double click and remove all the stuff. Just copy and paste the code below.


<%@ 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="GetUsers.aspx.cs" Inherits="netsourcecodeJavaScript.Layouts.netsourcecodeJavaScript.GetUsers" DynamicMasterPageFile="~masterurl/default.master" %>
<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
<% #if SOME_UNDEFINED_CONSTANT %>
    <script type="text/javascript" src="/_layouts/SP.debug.js" ></script>
    <script type="text/ecmascript" src="/_layouts/SP.js" ></script>
    <script type="text/ecmascript" src="/_layouts/SP.Core.js" ></script>
    <script type="text/ecmascript" src="/_layouts/SP.Runtime.Debug.js" ></script>
<% #endif %>
<script language="ecmascript" type="text/ecmascript">
    //ExecuteOrDelayUntilScriptLoaded(getWebUserData, "sp.js");
    var context = null;
    var web = null;
    var currentUser = null;
    var collListItems = null;
    var username = null;
    var loginname = null;
    var isgettinglist = false;
    function DisplayUser() {
        isgettinglist = false;
        GetUserData();
    }
    function DisplayList() {
        isgettinglist = true;
        GetUserData();
    }
    function GetUserData() {
        //## Getting the context
        context = new SP.ClientContext.get_current();
        //## Getting the web
        web = context.get_web();
        //## Getting the current user
        currentUser = web.get_currentUser();
        //## Load the query
        currentUser.retrieve();
        context.load(web);
        //## Execute the query Async
        context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));
    }
    function onSuccessMethod(sender, args) {
        //## Setting the object to get the current user...again...
        var userObject = web.get_currentUser();
        //## Adding the user into a Variable
        username = userObject.get_title();
        loginname = userObject.get_loginName();
        if (isgettinglist == false) {
            alert('User name:' + username + '\n Login Name:' + loginname);
        }
        if (isgettinglist == true) {
            //## Getting the results from the list
            GetListByName();
        }
    }
    function onFailureMethod(sender, args) {
        alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
    }
    function SayHello() {
        alert('Hello Word');
    }
    function GetListByName() {
        //## Get the context again
        context = new SP.ClientContext.get_current();
        //## Get the list
        var list = context.get_site().get_rootWeb().get_lists().getByTitle('Shared Documents');
        //## Builds a CAMEL querty to return items
        var query = new SP.CamlQuery();
        query.set_viewXml('<View><Query><Where><Eq><FieldRef Name="Author"/><Value Type="User">' + username + '</Value></Eq></Where></Query><ViewFields><FieldRef Name="Title"/><FieldRef Name="FileLeafRef"/></ViewFields></View>');
        //## Geting the items
        this.collListItems = list.getItems(query);
        context.load(collListItems);
        //## Execute the query Async
        context.executeQueryAsync(Function.createDelegate(this, this.mySuccessFunction), Function.createDelegate(this, this.myFailFunction));
    }
    function mySuccessFunction() {
        // Do something useful like loop through your returned list items and output them somewhere
        // create an enumerator to loop through the list with 
        var listItemEnumerator = this.collListItems.getEnumerator();
        var strHtml = "RESULTS:";
        while (listItemEnumerator.moveNext()) {
            var oListItem = listItemEnumerator.get_current();
            strHtml += oListItem.get_item('Title');
        }
        alert(strHtml);
    }
    function myFailFunction() { alert('Request fail'); }
   
  </script>
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<SharePoint:FormDigest ID="FormDigest1"  runat="server" />
<asp:Button ID="Button1" runat="server" Text="Get User" />
<asp:Button ID="Button2" runat="server" Text="Query List" />
<asp:Button ID="Button3" runat="server" Text="Say Hello" />
</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>

7- Go back to GetUserWebPartUserControl.ascx.cs double click remove all the code and paste this one. (This code is basically three ASP.NET buttons calling javascript functions ).


using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace netsourcecodeJavaScript.GetUserWebPart
{
    public partial class GetUserWebPartUserControl : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Button1.Attributes.Add("onclick", "DisplayUser()");
            Button2.Attributes.Add("onclick", "DisplayList()");
            Button3.Attributes.Add("onclick", "SayHello()");
        }
      
    }
}

8- Go to GetUser.ascx.cs and paste this code.(This code is basically three ASP.NET buttons calling javascript functions ).


using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace netsourcecodeJavaScript.Layouts.netsourcecodeJavaScript
{
    public partial class GetUsers : LayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Button1.Attributes.Add("onclick", "DisplayUser()");
            Button2.Attributes.Add("onclick", "DisplayList()");
            Button3.Attributes.Add("onclick", "SayHello()");
        }
    }
}

9- Notice that in the webpart I have used:


<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true"
    Localizable="false" />

instead of calling javascript functions. The result is the same, so you choose what you prefer. On the page I have added the Intellisense for the class SP.js to do it just place this code in the content holder in the PageHead of GetUser.ascx, so what you get is nice things like this:


image


Notice as well we use Asynchronous events for our methods. This is the way that has to be done, just because that delay of a Sp.js call, it will never work in a Synchronous scope.


//## Execute the query Async
context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));

Conclusion: As you can see you can achieve almost anything you want with the SP.js class, if you are working with JavaScript. Because we have the client context available for more complex solutions, this approach is perfect for modal forms where you can not refer the Sharepoint.ClientContext.dll. REST is another approach , but that is perfect when you have to work with your farm from the outside world.


image

89 comments:

  1. You're so awesome! I don't think I have read through something like that before.
    So nice to discover somebody with original thoughts on
    this subject. Seriously.. thanks for starting this up.
    This website is something that's needed on the internet, someone with a bit of originality!

    my blog; Lifestyle Diet

    ReplyDelete
  2. I really like your blog.. very nice colors & theme. Did you make this website yourself or did you
    hire someone to do it for you? Plz reply as I'm looking to construct my own blog and would like to know where u got this from. kudos

    my web-site; precision manufacturing

    ReplyDelete
  3. Ahaa, its pleasant dialogue on the topic of this piece of writing here at this
    webpage, I have read all that, so now me also commenting here.


    Have a look at my homepage - home articles

    ReplyDelete
  4. Hi just wanted to give you a brief heads up and let you know a few of the images aren't loading properly. I'm not sure why but I think its a linking issue.
    I've tried it in two different web browsers and both show the same results.

    Here is my page :: Plastics manufacturing

    ReplyDelete
  5. I have read a few good stuff here. Certainly price bookmarking for
    revisiting. I wonder how much effort you set to create such a excellent
    informative site.

    Also visit my webpage - real estate information

    ReplyDelete
  6. Hi there, i read your blog from time to time and i own a similar one and i was just wondering if
    you get a lot of spam comments? If so how do you protect
    against it, any plugin or anything you can recommend? I get so much lately it's driving me mad so any assistance is very much appreciated.

    Feel free to surf to my webpage :: www.Kifaklb.com

    ReplyDelete
  7. Hello! Quick question that's entirely off topic. Do you know how to make your site mobile friendly? My web site looks weird when browsing from my iphone4. I'm trying to find a theme or plugin that might be able to correct this problem.
    If you have any recommendations, please share. Cheers!


    Also visit my web site: public relations news

    ReplyDelete
  8. I know this site offers quality dependent articles or reviews and other
    stuff, is there any other web page which offers these information in
    quality?

    Also visit my page latest entertainment news

    ReplyDelete
  9. I love reading a post that can make people think.
    Also, many thanks for allowing for me to comment!

    Here is my web site ... food articles

    ReplyDelete
  10. This site was... how do I say it? Relevant!! Finally I've found something which helped me. Many thanks!

    My website - Food news

    ReplyDelete
  11. I could not resist commenting. Well written!

    my web-site ... government news

    ReplyDelete
  12. I always used to read piece of writing in news papers but now
    as I am a user of internet so from now I am using
    net for content, thanks to web.

    Have a look at my homepage - restaurants news

    ReplyDelete
  13. I like that which you guys usually are up too.
    This kind of clever work and reporting! Keep up the awesome works guys I’ve incorporated you guys to my own weblog.


    my web blog - real estate latest news

    ReplyDelete
  14. Thanks to my father who told me on the topic of this web site,
    this blog is actually awesome.

    Also visit my web page :: health food news

    ReplyDelete
  15. I enjoy everything you guys are usually up too. This kind of
    clever work and reporting! Continue the awesome works guys I’ve incorporated you guys to our web log.


    Here is my blog; http://www.faceonline.pl/index.php?do=/blog/23376/start-up-a-home-based-business-as-being-a-public-relations-expert/add-comment/

    ReplyDelete
  16. It's appropriate time to make some plans for the future and it is time to be happy. I've read this
    post and if I could I wish to suggest you some interesting things or tips.
    Perhaps you can write next articles referring to this article.
    I want to read more things about it!

    my weblog; real estate market news

    ReplyDelete
  17. Helpful info. Fortunate me I discovered your web site accidentally, and I am shocked why this twist of fate didn't came about in advance! I bookmarked it.

    Feel free to surf to my homepage :: home news

    ReplyDelete
  18. With havin so much content do you ever run into any issues of
    plagorism or copyright violation? My blog has a lot of unique content I've either written myself or outsourced but it looks like a lot of it is popping it up all over the web without my authorization. Do you know any solutions to help prevent content from being stolen? I'd
    truly appreciate it.

    Visit my blog :: lizaslounge.co.za

    ReplyDelete
  19. Hello friends, how is everything, and what you wish for to say regarding this post, in my view its really amazing in favor of me.


    Also visit my blog post daily home news

    ReplyDelete
  20. If you desire to get a great deal from this article then you
    have to apply these methods to your won blog.

    Also visit my web blog cellsbee.com

    ReplyDelete
  21. It's awesome to pay a visit this website and reading the views of all colleagues about this post, while I am also zealous of getting knowledge.

    My site - finance articles

    ReplyDelete
  22. I am regular reader, how are you everybody?
    This piece of writing posted at this web site is in fact fastidious.


    Feel free to visit my weblog: Shatop.ru

    ReplyDelete
  23. When I initially commented I seem to have clicked the -Notify me when new comments are added- checkbox and from now on each time a comment is added I get four emails with the exact same comment.

    Perhaps there is a way you are able to remove me from that service?

    Many thanks!

    Stop by my blog - video games news

    ReplyDelete
  24. I was suggested this website by my cousin.
    I am not sure whether this post is written by him as nobody else know such detailed about
    my problem. You're incredible! Thanks!

    Also visit my website finance article

    ReplyDelete
  25. These are really enormous ideas in concerning blogging.
    You have touched some good points here. Any way keep
    up wrinting.

    Also visit my blog: gaygtime.com

    ReplyDelete
  26. Heya i'm for the first time here. I came across this board and I to find It really useful & it helped me out a lot. I hope to provide something again and aid others such as you helped me.

    Have a look at my web site news environment

    ReplyDelete
  27. The main reason I ask is really because your style seems different then most blogs and I’m trying to find something unique.

    P. S My apologies for getting off-topic but I had to ask!


    my blog post: www.californianos.com.mx

    ReplyDelete
  28. Hi, its good piece of writing concerning media print, we all understand media is a fantastic source of information.


    Feel free to visit my web site; solar energy news

    ReplyDelete
  29. Have you got a spam problem on this web site; I also am a blogger, and I was curious about your position;
    we've created some nice methods and we have been looking to trade strategies with others, please shoot me a message if interested.

    Here is my blog; http://sipya.com/blog/32640/tips-on-how-to-market-your-small-company-along-with-pr-campaigns

    ReplyDelete
  30. Do you mind if I quote a few of your articles as long as I provide credit and sources back to your weblog?
    My website is in the exact same niche as yours and my visitors would
    genuinely benefit from some of the information you provide here.
    Please let me know if this ok with you. Thanks a lot!



    my site Butchraw.com

    ReplyDelete
  31. If you want to obtain much from this piece of writing then you have to apply these techniques to your won web site.


    My webpage: wind Energy Facts

    ReplyDelete
  32. There’s a lot of people who I do believe would enjoy your
    content. Please i want to know. Thank you

    Also visit my site - elucidly.com

    ReplyDelete
  33. Right away I am going away to do my breakfast, later than having my
    breakfast coming again to read other news.

    My web site :: daily news real estate

    ReplyDelete
  34. Howdy I am so thrilled I discovered your website, I really found you by error, while I was searching on Yahoo for something different,
    Nonetheless I am here now and would the same as to
    say kudos for a significant post and a over-all entertaining web log (I also love
    the theme/design), I don’t have time for you to look over it all at the
    minute but I've bookmarked it and in addition added your RSS feeds, when I've time I will
    be back again to read much more, Please do maintain the awesome job.


    Here is my webpage; http://www.comixaid.com/blog/75237/may-quot-healthy-quot-meals-be-making-you-body-fat/

    ReplyDelete
  35. Hey! This is my first visit to your blog! We are a
    group of volunteers and starting a new initiative in a community
    in the same niche. Your blog provided us useful information to work on.

    You have done a extraordinary job!

    My webpage: sustainability news

    ReplyDelete
  36. Hi, I think your blog might be having browser compatibility issues.

    When I look at your blog in Firefox, it looks fine but when opening in Internet Explorer,
    it has some overlapping. I just wanted to give you a quick heads up!

    Other then that, wonderful blog!

    Review my website; food articles news

    ReplyDelete
  37. An outstanding share! I have just forwarded this onto a co-worker who was doing a little research on
    this. And he in fact ordered me dinner due to the fact that I stumbled upon it for
    him... lol. So allow me to reword this.... Thanks for the meal!
    ! But yeah, thanx for spending the time to talk about this topic here on your website.


    My weblog; digital publishing

    ReplyDelete
  38. Can I simply just say what a comfort to find someone that genuinely knows what they're talking about on the net. You definitely know how to bring an issue to light and make it important. More people need to read this and understand this side of your story. It's surprising you are not more popular given that you definitely have
    the gift.

    Feel free to visit my blog post fowssocial.com

    ReplyDelete
  39. Have you ever considered about including more than simply your documents?

    After all, everything you say is valuable and every thing.
    But think of in the event that you added some great graphics
    or videos to offer your posts more, "pop"!
    Your content is very good but with pics and videos, this
    website could truly be among the best in its niche.

    Great web log!

    Feel free to visit my webpage: entertainment articles

    ReplyDelete
  40. Nice blog here! Also your web site loads up very fast! What host are
    you using? Can I get your affiliate link to your host?
    I wish my web site loaded up as quickly as yours lol

    Also visit my web site real estate services

    ReplyDelete
  41. Good way of explaining, and nice post to get data about my presentation subject matter, which i
    am going to convey in college.

    My blog financial and business news

    ReplyDelete
  42. I comment whenever I especially enjoy a post on a website or I have
    something to add to the conversation. It is triggered
    by the passion displayed in the post I looked at. And after this post "Using Javascript (SP.js) in Web Parts in Sharepoint 2010".
    I was actually moved enough to post a thought ;) I actually do have
    a couple of questions for you if you usually do not mind.
    Is it just me or does it appear like some of the comments
    come across like they are left by brain dead folks? :-P And, if you are posting at other
    sites, I'd like to follow everything fresh you have to post. Would you list every one of all your public sites like your linkedin profile, Facebook page or twitter feed?

    Here is my website www.souldao.com

    ReplyDelete
  43. Wonderful beat ! I wish to apprentice while you amend your website, how can i subscribe for a blog website?
    The account helped me a acceptable deal. I had been a little bit acquainted of this
    your broadcast offered bright clear idea

    Here is my website electric articles

    ReplyDelete
  44. You actually make it seem really easy along with your presentation but I to find this matter to be actually one thing which I believe I
    might never understand. It seems too complex and extremely extensive for me.

    I am taking a look forward in your next post, I will try to get the grasp of
    it!

    Feel free to visit my site sidebest.com

    ReplyDelete
  45. That is really attention-grabbing, You are a very skilled blogger.
    I've joined your rss feed and look forward to seeking extra of your great post. Also, I have shared your site in my social networks

    Here is my web blog: free dating website

    ReplyDelete
  46. Great post but I was wondering in the event
    that you could write a litte more with this topic? I’d be very grateful in the event that
    you could elaborate a little bit more. Kudos!

    my blog post :: financial articles

    ReplyDelete
  47. Hello every one, here every person is sharing such familiarity, therefore it's nice to read this blog, and I used to pay a visit this web site every day.

    my web page site for dating

    ReplyDelete
  48. After exploring a number of the blog articles on your website, I really like your way of blogging.
    I bookmarked it to my bookmark site list and will be checking
    back in the near future. Take a look at my website too and tell me your opinion.


    Here is my webpage :: entertainment news today

    ReplyDelete
  49. Hi there I am so thrilled I found your site, I really found you by mistake, while I was researching on Google for something else, Anyways
    I am here now and would just like to say kudos for a tremendous
    post and a all round exciting blog (I also love the theme/design), I don't have time to read through it all at the minute but I have saved it and also added in your RSS feeds, so when I have time I will be back to read more, Please do keep up the superb work.

    my website ... champions-of-light.com

    ReplyDelete
  50. Great work! That is the type of info that are meant
    to be shared across the internet. Shame on Google for
    not positioning this put up higher! Come on over
    and visit my web site . Thanks =)

    My webpage -

    ReplyDelete
  51. I’m not that much of a internet reader to be honest but your sites really nice, keep it up!
    I'll go ahead and bookmark your site to come back in the future. All the best

    Feel free to surf to my web site communication and marketing

    ReplyDelete
  52. Woah! I'm really loving the template/theme of this blog. It's simple, yet effective.
    A lot of times it's tough to get that "perfect balance" between superb usability and appearance. I must say that you've done a great job with this.
    Also, the blog loads super fast for me on Opera.
    Superb Blog!

    my web site :: dating news

    ReplyDelete
  53. Hi this is somewhat of off topic but I was wondering if blogs use WYSIWYG editors or if
    you have to manually code with HTML. I'm starting a blog soon but have no coding knowledge so I wanted to get guidance from someone with experience. Any help would be greatly appreciated!

    My web blog Www.Welcometorealsworld.Com

    ReplyDelete
  54. Hi, this weekend is pleasant for me, for the reason that this point in time i am
    reading this enormous educational piece of writing here at my home.


    Look at my web site ... textile manufacturing

    ReplyDelete
  55. After checking out a number of the blog posts on
    your web page, I seriously like your technique of writing a blog.
    I saved as a favorite it to my bookmark site
    list and will be checking back soon. Please check out my website too and let me know how you feel.


    my web page: Metal Manufacturing

    ReplyDelete
  56. I don't drop a lot of responses, however i did some searching and wound up here "Using Javascript (SP.js) in Web Parts in Sharepoint 2010". And I do have a couple of questions for you if you don't mind.
    Could it be just me or does it appear like a few of these comments appear like left by brain
    dead folks? :-P And, if you are posting on other social sites, I'd like to keep up with everything fresh you have to post. Would you make a list of all of your communal sites like your twitter feed, Facebook page or linkedin profile?

    my web-site; Education university

    ReplyDelete
  57. Hey there! I've been reading your blog for a long time now and finally got the courage to go ahead and give you a shout out from Houston Texas! Just wanted to mention keep up the fantastic job!

    My blog; dating women

    ReplyDelete
  58. Greetings from Colorado! I’m bored to tears at work
    and so i decided to browse your site on my iphone
    during lunch break.

    Review my page real Estate articles

    ReplyDelete
  59. I enjoy reading through an article that can make people think.
    Also, thank you for allowing for me to comment!


    my website ... connectartist.com

    ReplyDelete
  60. Hello could you mind sharing which web log platform you’re using?


    Here is my site - http://ultranect.ultrawebexpert.com/members/jeannescr/activity/26340

    ReplyDelete
  61. Everything is very open with a precise clarification of
    the challenges. It was truly informative. Your site is very useful.
    Thank you for sharing!

    Feel free to surf to my blog post game News

    ReplyDelete
  62. Wow that was strange. I just wrote an incredibly long comment but after I clicked submit my comment didn't show up. Grrrr... well I'm not writing all that over again.
    Regardless, just wanted to say superb blog!

    Also visit my website - articles On international business

    ReplyDelete
  63. Hello, i feel that i saw you visited my weblog thus
    i came to return the desire?.I am trying to to find things to
    improve my web site!I guess its adequate to make use of some of your
    ideas!!

    my blog post Wholesale Patio Furniture ()

    ReplyDelete
  64. of course like your web site however you need to test the spelling on quite a few of your posts.
    A number of them are rife with spelling issues
    and I to find it very bothersome to inform the reality however I will certainly come back again.


    My web-site ... Horse Gifts

    ReplyDelete
  65. I really like looking through an article that can make people
    think. Also, thanks for allowing me to comment!

    Feel free to visit my website :: Hair Tinsel (hair-tinsel.fashionarticles.eu)

    ReplyDelete
  66. Howdy would you mind stating which blog platform you're using? I'm planning to start my own blog in the near future but I'm having a tough time making a decision between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your layout seems different then most blogs and I'm looking for something completely unique.
    P.S My apologies for being off-topic but I had to ask!



    Have a look at my web site - Adidas Shoes ()

    ReplyDelete
  67. Hey there! I just want to offer you a big thumbs up for the great info you have right here on this
    post. I will be coming back to your website for more soon.


    Look at my website - Cheap Shoes ()

    ReplyDelete
  68. great issues altogether, you just won a emblem new
    reader. What might you suggest about your submit that
    you just made some days in the past? Any positive?



    Also visit my website ... Baby Shower Gifts

    ReplyDelete
  69. Hi! Do you know if they make any plugins to safeguard against hackers?
    I'm kinda paranoid about losing everything I've worked
    hard on. Any suggestions?

    My webpage Cheap Fashion Jewelry Online

    ReplyDelete
  70. Can you tell us more about this? I'd want to find out some additional information.

    Here is my page :: Hairdressing Supplies ()

    ReplyDelete
  71. It's really a nice and helpful piece of information. I'm
    glad that you simply shared this helpful information with us.
    Please keep us up to date like this. Thank you for sharing.


    Here is my blog post :: Beautiful Black Women (beautiful-black-women.fashionarticles.eu)

    ReplyDelete
  72. Hey There. I discovered your weblog the use of msn.
    This is a really well written article. I'll be sure to bookmark it and return to learn extra of your helpful information. Thank you for the post. I'll definitely comeback.



    Here is my webpage Best Man Gifts ()

    ReplyDelete
  73. I do not even know how I ended up here, but I thought this
    post was good. I don't know who you are but definitely you are going to a famous blogger if you are not already ;) Cheers!

    my weblog :: Gifts For Dad

    ReplyDelete
  74. Hurrah! After all I got a weblog from where I
    be able to in fact get useful information regarding my study and knowledge.


    Also visit my web-site justin bieber gifts

    ReplyDelete
  75. It's difficult to find knowledgeable people on this topic, however, you seem like you know what you're talking
    about! Thanks

    my web site - http://decorating-home-ideas.fashionarticles.
    eu -
    -

    ReplyDelete
  76. Great article ...Thanks for your great information, the contents are quiet interesting. I will be waiting for your next post.

    ReplyDelete
  77. First of all i would like to thank you for the great and informative entry.I have to admit that I have never heard about this information I have noticed many new facts for me. Thanks a lot for sharing this useful and attractive information and I will be waiting for other interesting posts from you in the nearest future.keep it up.
    Intraday Tips|Intraday Trading Tips|Intraday Stock Tips

    ReplyDelete
  78. Information was good,i like your post.
    Looking forward for more on this topic
    Lahir

    ReplyDelete
  79. Thank you for your article on Outsourcing . I am From Bangladesh .
    I would like to learn how to do outsourcing . But I didn't know where and when to start . Can you please tell me where
    I get Outsourcing training in Bangladesh . please help me to find a suitable institution
    in My country , or if any other way to learn then please infor me . I am waiting for your response .

    ReplyDelete
  80. Hello, I read your blog every once in a while and I claim a comparable one and I was recently thinking about whether you get a considerable measure of spam remarks? In the event that so how would you secure against it, any module or anything you can suggest? I get so much of late it's making me frantic so any help is especially valued.

    ReplyDelete

  81. This blog is really interesting. .. Happy Blogging
    job News

    ReplyDelete
  82. Attractive custom favor boxes help customers buy products easily. Therefore, we recommend to go with custom packaging suppliers while introducing new products in the market.

    ReplyDelete
  83. Thanks for sharing a piece of informative information. It would be kind for newbies, keep posting. I appreciate your efforts.

    ReplyDelete
  84. Thanks for sharing an interesting and very useful blog. I always appreciate the quality content. There is a great mixture of details. keep posting. Click here

    ReplyDelete
  85. Click This Link navigate to this web-site wikipedia reference Chloe Dolabuy useful site Dolabuy Gucci

    ReplyDelete