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:

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

My website - Food news

Anonymous said...

I could not resist commenting. Well written!

my web-site ... government news

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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/

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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/

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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 -

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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


my website ... connectartist.com

Anonymous said...

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


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

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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 ()

Anonymous said...

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

Anonymous said...

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)

Anonymous said...

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 ()

Anonymous said...

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 ()

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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

Here is my page :: Hairdressing Supplies ()

Anonymous said...

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)

Anonymous said...

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 ()

Anonymous said...

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

Anonymous said...

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

Anonymous said...

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 -
-

Mcx Tips | Free Mcx Tips | Mcx Tips Provider said...

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

Unknown said...

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

Staygreen Academy said...

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

robert mukdon said...

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 .

chenmeinv0 said...

mavericks jerseys
canada goose sale
abercrombie kids
nike roshe run pas cher
ugg outlet stores
oakley sunglasses sale
oakley vault
air jordan shoes
michael kors outlet online
cheap mlb jerseys
2016.12.17xukaimin

elmendorf tear tester said...

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.

Malik Jarrar said...

Good Work and keep it up!!
WordPress Tutorials

Unknown said...


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

Mikel lee said...

Great post I like it very much keep up the good work
Retail boxes Canada
lip gloss boxes Canada

Mikel lee said...

I appreciate your post thanks for sharing the information.
afforadable Soap boxes new jersey
affordable custom packaging boxes

Mary Davies said...

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.

Visitor said...

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

Emily Anders said...

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

Anonymous said...

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