Showing posts with label SharePoint 2010. Show all posts
Showing posts with label SharePoint 2010. Show all posts

Friday, May 11, 2012

SharePoint 2010: Using the SharePoint Client Model to populate a jQuery AutoComplete box

Intro

It's been a while since I did some coding - I've been playing more of a Business Consulting role, but sometimes still get to have some fun :)


My favourite thing about jQuery, is the jQuery UI Toolkit. Amongst it is an Autocomplete menu control as described here - http://jqueryui.com/demos/autocomplete/. You can download the tool kit, and even style it using the themeroller. 






The ingredients include:
1. Getting jQuery to run on a SharePoint Page/Custom Web Part
2. Getting the HTML and jQuery working
3. Getting the SharePoint Client Object Model (OM) working
4. Getting the jQuery Autocomplete to work together with the SP Client OM.


Benefits

Why should we use this approach? If you have a need for an autocomplete menu, and need it to be loaded on the fly whilst typing, then this may most likely be your solution!

Getting Started

To start, there are a couple of options:
A. Create a HTML file and save the code on this page into this file. Upload the file into the Site Assets library, and on any web part zone in SharePoint, add a Content Editor web part. In the web part properties, add a Content Link to this html file. I find this approach to be quickest whilst developing.



B. Directly place the HTML+jQuery code into a Content Editor web part using the "Edit HTML Source" option from the Ribbon (SP will tend to change your HTML for you in this option)
C. Write a custom web part to render this HTML+jQuery, including features that deploys delegate controls to register <link> lines to the jQuery library, etc. (Production quality)



1. Running JQuery on a SharePoint Page

I've tried to add jQuery on a SharePoint page so many times, however the jQuery just doesn't run at times. What do we do?


The trick is to have the JavaScript initiation code inside the following code block:



<script type="text/javascript">
    JSRequest.EnsureSetup();
    $(document).ready(function () {
        ExecuteOrDelayUntilScriptLoaded(EntryPointFunction, "SP.js");
    });
</script>



This block will allow any scripts (EntryPointFunction in the example aboveto run after any SharePoint JavaScript.


2. JQuery AutoComplete Menu

This is an awesome control - The code required includes the  jQuery, and the HTML:


<script type="text/javascript">
$("#tags").autocomplete({ source: dataSourceArray });
</script>


<input type="text" id="tags" />


There are many options to setting up this autocomplete control, however it's all documented in the jQueryUI link above, so I'll skip through that.



3. SharePoint Client OM Script to query list data

And below, is the JQuery to get the SharePoint Client OM to query data from the list "Data". It returns the values from the "Title" field where the title contains "Test". Notice the CAML query on the line query.set_viewXml. 

When the query values are returned from the call after ctx.executeQueryAsync, the getDataWithQuerySuccess function will run - this is where our fun starts.

There's a while loop which helps us build up an array of Titles. If you need multiple dimensions (which the autocomplete box will support), you can use this instead:

 availableTags.push(
label: listEnumerator.get_current().get_item("Title"), 
id: listEnumerator.get_current().get_item("ID") 
});

But you will need to change the jQuery to handle this. Anyhow the Code will now look like this:

<script type="text/javascript">
    JSRequest.EnsureSetup();
    $(document).ready(function () {
        ExecuteOrDelayUntilScriptLoaded(loadData, "SP.js");
    });

    function loadData() {
        var selectedItems;
        filterData();
    }

    function filterData() {
        var ctx = new SP.ClientContext.get_current();
        var lst = ctx.get_web().get_lists().getByTitle('Data');
        var query = new SP.CamlQuery();
        query.set_viewXml("<View><Query><Where><Contains><FieldRef Name='Title'/><Value Type='Text'>Test</Value></Contains></Where></Query></View>");
        selectedItems = lst.getItems(query);
        ctx.load(selectedItems);
        ctx.executeQueryAsync(getDataWithQuerySuccess, getDatasWithQueryFailure);
    }

    function getDataWithQuerySuccess(sender, args) {
        var availableTags = new Array();
        var listEnumerator = selectedItems.getEnumerator();
        while (listEnumerator.moveNext()) {
            availableTags.push(listEnumerator.get_current().get_item("Title"));
        }
    }
    
    function getDatasWithQueryFailure(sender, args) {
    /*Error Logic here*/
    }
</script>


4. JQuery AutoComplete Menu with SP Client OM Script


The last step is to combine the SP Client OM code with the jQuery AutoComplete Menu. I've included the whole piece with the styles, and script references as well below:



<link href="/_layouts/SPSix/css/ui-lightness/jquery-ui-1.8.20.custom.css" rel="stylesheet" />
<script src="/_layouts/SPSix/js/jquery-1.7.2.min.js"></script>
<script src="/_layouts/SPSix/js/jquery-ui-1.8.20.custom.min.js"></script>
<style type="text/css">
    .inputwarning
    {
        border: 1px solid #F75D59;
        padding: 2px;
    }
    .ui-autocomplete
    {
        max-height: 200px;
        overflow-y: auto; /* prevent horizontal scrollbar */
        overflow-x: hidden; /* add padding to account for vertical scrollbar */
        padding-right: 20px;
    }
    /* IE 6 doesn't support max-height
* we use height instead, but this forces the menu to always be this tall
*/
    * html .ui-autocomplete
    {
        height: 200px;
    }
</style>
<script type="text/javascript">
    JSRequest.EnsureSetup();
    $(document).ready(function () {
        ExecuteOrDelayUntilScriptLoaded(loadData, "SP.js");
    });


    function loadData() {
        var selectedItems;
        $('#tags').keyup(function (event) {
            filterData();
        });
    }


    function filterData() {
        var ctx = new SP.ClientContext.get_current();
        var lst = ctx.get_web().get_lists().getByTitle('Data');
        var query = new SP.CamlQuery();
        query.set_viewXml("<View><Query><Where><Contains><FieldRef Name='Title'/><Value Type='Text'>" + $('#tags').val() + "</Value></Contains></Where></Query></View>");
        selectedItems = lst.getItems(query);
        ctx.load(selectedItems);
        ctx.executeQueryAsync(getDataWithQuerySuccess, getDatasWithQueryFailure);
    }


    function getDataWithQuerySuccess(sender, args) {
        var availableTags = new Array();
        var listEnumerator = selectedItems.getEnumerator();
        while (listEnumerator.moveNext()) {
            availableTags.push(listEnumerator.get_current().get_item("Title"));
        }
        $("#tags").autocomplete({ source: availableTags });
    }
    
    function getDatasWithQueryFailure(sender, args) {
    /*Error Logic here*/
    }
</script>
<span>Enter Keywords: </span><input type="text" id="tags" />



5. Now what?


What's next? Using the AutoComplete Menu Select event, you can add additional functionality when the user selects the autocomplete box. Some examples of how I've used this:



  • As a replacement of default SharePoint drop downs that only support a begins with type ahead.
  • As a filter for custom web parts that require special query strings or parameters.
  • And more... Share your ideas with me below!

Basically the options are endless!

Have fun!






Thursday, October 27, 2011

SharePoint 2010: Tip of the Day - Finding what level of SharePoint 2010 is installed?

This is a quick tip bought to by SharePoint Six!

Tip 1: To quickly find out the build level of SharePoint 2010 using Powershell, use the following commands:
$farm = Get-SPFarm
$farm.BuildVersion


Tip 2: For a list of build numbers, go to Joe's blog: http://blogs.technet.com/b/sharepointjoe/archive/2011/02/01/sp2010-sharepoint-2010-build-level-and-version-numbers.aspx

Tip 3: For the latest patches, go to this site: http://technet.microsoft.com/en-us/sharepoint/ff800847.aspx

Tuesday, August 02, 2011

SharePoint: I'm presenting at SharePoint Saturday Sydney 2011

I'm so excited! I'm presenting at SharePoint Saturday Sydney 2011!



I'll be discussing about "Applying Content Type Hubs and Managed Metadata To Improve Document Management in the real world". Hope to see you all there on the day for a fruitful session!

The abstract for the session is below:
"SharePoint 2010 offers a suite of new and enhanced capabilities, which if utilised effectively in select business scenarios can bring enormous value to organisations. Document Management is one area where SharePoint 2010 offers many new features and benefits. This session covers two new document management capabilities: The Content Type Hub and Managed Metadata. Douglas will walk through the anatomy of Content Type Hubs and Managed Metadata, recommended approaches, constraints and how to best work around these constraints. A number of typical document management scenarios will be used throughout the session to demonstrate the concepts and keep it real. If time permits, he will also share some C# code snippets which support the scenarios described."
For more information:
http://www.sharepointsaturday.org/sydney/Pages/meetings.aspx

Thursday, April 14, 2011

SharePoint 2010: PSConfiguration issues with GetUserPropertyFromAD call

Problem
As I was installing SharePoint 2010 at client site, I came across an error I've never seen previously. During the SharePoint 2010 "Configuration Wizard Step 3 - creating configuration database",  the operation failed.


Symptoms
The error in the Configuration Wizard was:
Failed to create the configuration database.
An exception of type System.Collections.Generic.KeyNotFoundException was thrown. Additional exception information: The given key was not present in the dictionary.
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
Matching Error in the installation logs was:

04/14/2011 10:51:06  9  ERR                    Task configdb has failed with an unknown exception
04/14/2011 10:51:06  9  ERR                    Exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.   at System.ThrowHelper.ThrowKeyNotFoundException()   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)   at Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD(SPWebApplication webApplicaiton, String loginName, String propertyName)
   at Microsoft.SharePoint.Administration.SPManagedAccount.GetUserAccountControl(String username)   at Microsoft.SharePoint.Administration.SPManagedAccount.Update()   at Microsoft.SharePoint.Administration.SPProcessIdentity.Update()   at Microsoft.SharePoint.Administration.SPApplicationPool.Update()   at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, SPProcessAccount processAccount, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)   at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, IdentityType identityType, String applicationPoolUsername, SecureString applicationPoolPassword, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)   at Microsoft.SharePoint.Administration.SPAdministrationWebApplication.CreateDefaultInstance(SqlConnectionStringBuilder administrationContentDatabase, SPWebService adminService, IdentityType identityType, String farmUser, SecureString farmPassword)   at Microsoft.SharePoint.Administration.SPFarm.CreateAdministrationWebService(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)   at Microsoft.SharePoint.Administration.SPFarm.CreateBasicServices(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)   at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword, SecureString masterPassphrase)   at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, String farmUser, SecureString farmPassword, SecureString masterPassphrase)   at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.CreateOrConnectConfigDb()   at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.Run()   at Microsoft.SharePoint.PostSetupConfiguration.TaskThread.ExecuteTask()

The cure 
I checked the permissions for the SharePoint installation account on the MS SQL Database - it seemed to already have the correct security roles assigned (dbcreator and securityadmin).


I then noticed this line in the error logs: "Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD"


It's now apparent that psconfig is failing when trying to read a User Property from Active Directory. It turned out the domain had been setup so that domain accounts do not have access to read AD Properties. I simply gave the "Setup Administrator" and "Farm Account" accounts read permissions.

Friday, July 16, 2010

SharePoint 2010 - SharePoint 2010 just got quicker. The latest patch is doing it’s job!

I’m running Windows 7 on a Dell Latitude E4300 4GB RAM with SharePoint Server 2010 installed for development and demo purposes. In the beginning SharePoint was running with an acceptable performance, but sometimes there would be a little wait here and there.

A few days ago Microsoft released an update for SharePoint Foundations 2010, which it claimed would improve stability and performance.

Guess what? After it was installed, I browsed my SharePoint sites using Chrome – man, it was lightning fast! Was it Chrome? Don’t think so. Same quick response in Internet Explorer 8! The performance is noticeably MUCH quicker. Great job guys!

This is the patch I installed:
Update for Office SharePoint Foundations 2010 (KB2032588)

“Microsoft has released an update for Office SharePoint Foundation 2010, 64-bit Edition. This update provides the latest fixes to Microsoft WSS 2010, 64-bit Edition. Additionally, this update contains stability and performance improvements.”

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=f6f1d567-a21f-4770-80ba-f7d6e05f11aa

Wednesday, June 09, 2010

SQL Versions – Tip of the day

I was installing SharePoint 2010 – wait, what about the pre-requisites?
- SQL 2005 SP3 with Cumulative update package 3
- OR SQL 2008 SP1 with Cumulative update package 2

So what version have we got? Here’s the tip of the day (for me and to you to share), run this SQL Query to find out:

SELECT serverproperty('productversion'),
       serverproperty('productlevel'),
       serverproperty('edition') 


This should give you information to determine the version number, the release level (RTM or Service Pack), and the edition (Express, Standard or Enterprise).

For convenience, I’ve added the version numbers required for SharePoint 2010:
- SQL 2005 SP3  - 2005.90.4035
- SQL 2008 SP1 – 2007.100.2531.0


For more version numbers go to http://support.microsoft.com/kb/321185.

Referenced from this Microsoft KB http://support.microsoft.com/kb/321185

Thursday, March 11, 2010

Microsoft SharePoint Server 2010 – Certifications?

I just read an official note that there will be new four SharePoint 2010 certifications – and they are not specific to either SharePoint Foundation 4 or SharePoint Server 2010.

These exams are:

  • 70-667: TS: Microsoft SharePoint 2010, Configuring
  • 70-668: PRO: Microsoft SharePoint 2010, Administrator
  • 70-573: TS: Microsoft SharePoint 2010, Application Development
  • 70-576: PRO: Designing and Developing Microsoft SharePoint 2010 Applications

According to this blog post, the exams are expected to be available in June/July timeframe. More details here.

Tuesday, December 08, 2009

Microsoft SharePoint Server 2010 Beta 2 – How to recover data from an unattached content and restore it to a (or another) site

A new feature in SharePoint 2010 is the ability to recover content from an unattached database (also tested to work for attached databases). The following are steps to do this (in case I forget in the future).
Note of warning: Screen shots and directions in this entry are based on SharePoint 2010 Beta (v. 14.0.4536.1000) and may change without notice.
I. Export from Database
1. Within Central Administration v4, browse to “Backup and Restore” section in the Quick Launch
image
2. Click “Recover data from an unattached content database”:
image
3. On the “Unattached Content Database Data Recovery” Page, enter the database server and database name of the source database to restore from, select “Browse content”, and click Next:
image
4. Select the Site Collection from the Database, the site from the database and the List as required, select “Export site or list”, and click Next (Note – this screen shot is based on a Beta version, and it appears that even though you have the correct site collection selected, the URL shows the central administration url. Only the relative URL is correct here):
image
5. Type in a file share location (ensure the SharePoint Farm account has owner access to this folder in Windows), and click Start Export:
image
6. Wait for the job to complete:
image
image
7. Files will be created in the share directory (Note: Contents of the .cmp file can be opened as a cab file – just like most other wsp packages):
image
II. Import to new Site
1. Open up the SharePoint 2010 Management Shell
image

2. Let’s assume we have already created a blank site to be restored to @ dougleung.com. We will now restore to that SharePoint Site:
Run this command in the Management Shell:
Import-SPWeb –Identity [url] –path [path]
eg. Import-SPWeb –Identity http://dougleung.com –path \\servername\folder\exportfile.cmp
image
3. Your contents from your export file (in this case the exported Announcements list) will be imported to the dougleung.com site.

Thursday, October 22, 2009

Microsoft SharePoint 2010 Beta – Developer Resources

I was browsing around to dig more on SharePoint 2010 developer resources trying to get my head around more SharePoint 2010 knowledge. Some very useful resources for starters:

Get Started Developing on SharePoint 2010
http://msdn.microsoft.com/en-au/sharepoint/ee513147.aspx
This page includes 10 series of video tutorials on SharePoint 2010 development with topics including Building SP 2010 Web Parts, SharePoint 2010 concepts, Accessing SP 2010 data with server/client side APIs, Access external data with BCS, SP 2010 Workflows, Creating Silverlight UIs for SP 2010 solutions, Sandboxed solutions and Dialogs and Ribbon controls for SP 2010.

SharePoint Foundation 2010 and SharePoint Server 2010 SDK:
http://msdn.microsoft.com/en-us/library/dd776256.aspx
This SDK has been publicly online since the SharePoint 2010 Sneak Peak web site was available.

The main important links I want to put up for myself are:
What’s New in SharePoint Foundation 2010:
http://msdn.microsoft.com/en-us/library/ee539826%28office.14%29.aspx

What’s New in SharePoint Server 2010:
http://msdn.microsoft.com/en-us/library/ee557323%28office.14%29.aspx


Looks like I am on a steep learning curve… yet exciting and worth while!

Tuesday, July 14, 2009

Time Capsule 2006 to 2009 - The Technologies of a technical consultant

I was sitting on the train today, thinking about the technologies I have worked with in the last three years. And you know what? I have to say web technologies have developed extremely quickly (Well of course it is!). Being a consultant allows me to indulge myself into the latest technologies, and most of the time, take the latest technologies for granted.

Sometimes I think it is actually quiet an effort to keep up (yet I have to for my passion and profession). What I mean for example is say, you install an SDK for Silverlight 2.0, work with it a little while, then you will find yourself installing the SDK for Silverlight 3.0 (And of course with that Visual Studio 2010)! It is hard work to keep up, but it is worth it!

I've worked with SharePoint 2003, I'm working with SharePoint 2007 technologies and now with the sneak peak at the exciting SharePoint 2010, I have to say being a techy guy is the best job in the world! It is very rewarding to see Microsoft listening to customers, giving them what they want. I dig the new BCS, I dig the new ribbon within the web browser, I dig multi-item checkouts, I dig the new developer tools, I dig the new backup and restore tools, I dig the new central admin.....I dig it, I dig it, I dig it! Then again, it is hard work to keep up, but it is worth it!

Anyways, the purpose of this is to keep a time capsule of the (non beta) technologies I have played within the 3 yr period. Who knows how many of these technologies will stay in my list? Here goes...

2006-2009:
Microsoft Technologies
  • C#/VB
  • ASP.NET
  • .NET 1.0, 1.1, 2.0, 3.0, 3.5
  • SQL 2000, SQL 2005, SQL 2008
  • Windows 2000, Windows 2003, Windows 2008, Windows XP, Windows Vista, Windows 7
  • Microsoft CRM 3.0
  • Microsoft CRM 4.0
  • WSS 2
  • SharePoint Portal 2003
  • WSS 3
  • MOSS 2007
  • MS Office 2003/2007
  • Microsoft Search Server 2008 and FAST
  • Silverlight 1.0
  • Silverlight 2.0
  • Internet Explorer 6.0/7.0/8.0

Third Party
  • Javascript and AJAX
  • JQuery
  • Flash
  • DotNetNuke
  • SugarCRM
  • Meridio
  • HP Trim