Brad's profileBrad Younge's BlogBlogLists Tools Help

Blog


    6/4/2007

    Profile Linked Content Query in MOSS 2007

    Earlier this year, I had the opportunity to create a MOSS 2007 web part for a client which integrates information from the current user's profile with a MOSS Search Query in order to find information most relevant to the current user (similar to the Personalized Content Objects in CMS). For example, the client has offices all over the world, and one of the things they wanted to do was have a "Most recent content additions" page which would show the most recent information added to the portal, filtered by the region that the information was targeted to (e.g. North America, Europe, Asia, Middle East, Africa, etc.). I accomplished this through the implementation of a web part that could be placed on any page and configured by the content manager for the site. The web part turned out pretty well, and the other day a couple guys I've worked with over the years from MCS, Henry Winkler and Matt Fangman, asked if I'd be up for blogging about it, so that brings me here.

    The Problem

    At first glance, we thought we'd use audiences, which seems to be the obvious choice, to target the content as described above, but when we dove a bit deeper into the customer's requirements, it was apparent that as soon as we started adding additional filter criteria such as current user job role and primary technology of interest, that the number of audiences which would be needed increased exponentially, making correct categorization of content extremely difficult (because when you post content, you need to choose each and every audience that the content should be targeted to). Let me give you an example:

    Let's say that we wanted to create a page which would be called "Recent Postings in your Region related to your Job". This page would display content with the following criteria:

    • Region = current user's region (North America, Europe, Asia)
    • Job Role = current user's job role (Project Manager, Engineer, Tester, Accounting)
    • Primary Technology = current user's primary technology (MOSS, Microsoft Dynamics, BizTalk, Portfolio Server)

    With just the example choices given above, if we wanted to use audiences to target this information, we would need to create 48 audiences (3*4*4) to cover all of the possible combinations. If we added just one more region, such as Africa, then the number or audiences would increase to 64 (4*4*4). In case this isn't entirely obvious, here are the first few audiences we would need:

    • North America Project Managers for MOSS
    • North America Project Managers for Dynamics
    • North America Project Managers for BizTalk
    • North America Project Managers for Portfolio Server
    • North America Engineer for MOSS

    Taking this one step further, if we had 12 regions, 8 job roles and 15 technologies, we'd need 1440 audiences, not going to happen.

    The Solution

    So, we needed to come up with a different solution. Without much discussion, it was obvious that the best thing to do was going to be looking up information from current user's profile and combining this with a MOSS SQL Search query to find the relevant information. Luckily for us, there was a parallel Microsoft Identity Integration Server project (see http://www.microsoft.com/miis) being implemented which would provide all of the profile information we were going to need, so we didn't have to worry about populating this information within the scope of our project.

    Now that we had a good approach, it was merely a matter of implementing the web part and providing the content manager a way to "match up" content metadata with the user's profile attributes. This was achieved relatively easily with the use of the MOSS Enterprise Search SQL Syntax (see http://msdn2.microsoft.com/en-us/library/ms493660.aspx) query capabilities and a little bit of code to structure the query appropriately before sending it off to the search server.

    So, for the example above, we can get the region, job role and primary technology out of the user's profile (e.g. Asia, Engineer & MOSS), inject the values into the search query, execute the search and then display the results.

    The resulting web part turned out very well and has been successfully deployed to a number of sites and site collections. Since initial deployment, the web part has been extended so that the content manager can further filter on things such as content type, search scope or keywords.

    The Result

    If you plan to read further through this blog, you'll probably want to download the Visual Studio Solution I've made available so you can follow my code examples (there's too much code to blog about everything, so I'm just going to focus on the things pertinent to this post). To download a Zip file of the Visual Studio 2005 Solution, go to my Office Live Site Download Page and click on the QueryForIt.img link (2 IMPORTANT NOTES: 1. I had to rename the file to have a *.img extension in order to get it to work, so after you download the QueryForIt.img file, rename it to QueryForIt.zip before opening. 2. When you build the solution, you must switch your build configuration to RELEASE or the post-build commands will fail – or you can go edit the DDF file).

    The code is spread across several files, but this is primarily due to the fact that I used some existing custom toolparts plus one just for this web part as well as a couple of helper classes to do some dirty work. Here's a breakdown of the code:

    • Visual Studio Project (Statera.Moss.Webparts.QueryForIt)
      • Source (directory)
        • LookupListAndChoiceHelpers (directory with helper classes)
        • Toolparts (directory with copies of the existing custom toolparts I created)
        • FilterChooserToolpart.cs (new custom toolpart created for this web part)
        • PersonalizedQueryHelper.cs (very small class used to bind to the SPGridView for display purposes)
        • QueryForIt.cs (the main code for the web part)
      • manifest.xml – Manifest file for deployment (see very end of post)
      • Statera.Moss.Webparts.QueryForIt.ddf – input file for the makecab utility in order to create a SharePoint solution (see very end of post)

    The Custom Toolparts

    In order to make configuration of the web part as easy as possible, I create a few custom toolparts to be used when modifying the web part. These custom toolparts' functionality include:

    1. Ability to select which Content Types should be searched
    2. Ability to select which Search Scope to be searched
    3. Ability to further filter results with an additional Query Phrase (keyword search)
    4. Ability to select which columns are displayed in the search results
    5. The column which the results should initially be sorted by and which direction
    6. An advanced query phrase (this is where you can link in information from the user profile)

    Here are some screenshots of what the toolparts look like:

    The third image above titled "Filter & Customize Output" is where the user can input a keyword, select the columns to display, and finally enter an "Advanced Query". The "Advanced Query" textbox is where the content manager would write the code which will be injected into the SQL Syntax Search Query. The syntax for this "Advanced Query" textbox is very specific and is explained in the comment below the textbox. (I know… this isn't very user friendly, but I wasn't expecting the typical content administrator to be modifying this web part. If you were expecting this, then this custom toolpart could be extended to be much more user friendly).

    Integrating User Profile Information with the Enterprise SQL Search

    Once the toolparts were created, the next step was to implement the actual web part which would integrate the current user's profile information with a basic SQL Query. I started with a base web part with properties to hold the information provided by the toolparts above and then wrote the code to create and then execute the query. Here are a few code snippets of how the query is created and executed (if you want to make fun of my variable naming techniques, go ahead… habits are hard to break):

    private PersonalizedQueryHelper GetPersonalizedQueryHelperClass()
    {
    DataSet mySearchQueryResultsDS = new DataSet("MyMetaDataDS");
    try

        //----------------------------------------------------------- 
        // Execute the query 
        //----------------------------------------------------------- 
        FullTextSqlQuery kRequest = new FullTextSqlQuery(ServerContext.Current); 
        kRequest.QueryText = SQLQueryToExecute
        kRequest.TrimDuplicates = false; 
        kRequest.ResultTypes |= ResultType.RelevantResults; 
        kRequest.RowLimit = _iResultLimit; 
        ResultTableCollection resultTbls = kRequest.Execute(); 
        if ((int)ResultType.RelevantResults != 0) 
        { 
            ResultTable tblResult = resultTbls[ResultType.RelevantResults]; 
            if (tblResult.TotalRows == 0) 
            { 
                // NO RESULTS 
                PersonalizedQueryHelper myPersonalizedQueryHelperEmpty = new PersonalizedQueryHelper(); 
                return myPersonalizedQueryHelperEmpty; 
            } 
            else 
            { 
                // Get the results, put them in a Datatable and create an instance of MetadataBrowserHelper 
                DataTable relResultsTbl = new DataTable(); 
                relResultsTbl.TableName = "TheSearchResults"
                mySearchQueryResultsDS.Tables.Add(relResultsTbl); 
                mySearchQueryResultsDS.Load(tblResult, LoadOption.OverwriteChanges, relResultsTbl); 
            } 
        }
    }
    catch (Exception myExc)

        _lblQueryResult.Text = String.Format("The following error occurred while trying to execute the search query for this web part. If the problem continues, please contact your administrator: {0}", myExc.Message);
    }

    }

    public string SQLQueryToExecute

        get 
        { 
            … 
            //----------------------------------------------------------- 
            // Create the Personal Query filter if applicable for the WHERE CLAUSE 
            //----------------------------------------------------------- 
            string sPersonalizedWhereClause = ""
            if (_sPersonalFilters != null) 
            { 
                foreach (string sFilter in _sPersonalFilters) 
                { 
                    if (sFilter.IndexOf(':') > 0) 
                    { 
                        string sMetaDataField = sFilter.Split(':')[0]; 
                        string sProfileField = sFilter.Split(':')[1]; 
                        string sProfileFieldValue = GetCurrentUserProfileProperty(sProfileField); 
                        if (sProfileFieldValue.Length > 0) 
                        { 
                            if (sPersonalizedWhereClause.Length == 0) 
                                sPersonalizedWhereClause += string.Format(" {0} = '{1}' ", sMetaDataField, sProfileFieldValue); 
                            else 
                                sPersonalizedWhereClause += string.Format(" AND {0} = '{1}' ", sMetaDataField, sProfileFieldValue); 
                        } 
                    } 
                } 
            } 
            string sKeywordsWhereClause = ""
            if (_sKeywords.Length > 0) 
            { 
                sKeywordsWhereClause += string.Format(" CONTAINS('\"{0}\"') ", _sKeywords); 
            }
    … 
        }
    }

    private string GetCurrentUserProfileProperty(string sKey)

        try 
        { 
            UserProfileManager profileManager = new UserProfileManager(ServerContext.Current); 
            UserProfile myCurrentUserProfile = profileManager.GetUserProfile(SPContext.Current.Web.CurrentUser.LoginName); 
            return myCurrentUserProfile[sKey].Value.ToString(); 
        } 
        catch 
        { 
            return string.Empty; 
        }
    }

     

    The first box of code above contains the code used to actually execute the Enterprise Search using the SQL syntax. The second box of code above contains the code which is used to generate the part of the SQL where clause containing information from the user's profile. And the third box of code shows the few lines it takes to actually retrieve the info from the current user's profile.

    Formatting of Search Results

    If you've gotten this far through this post, then you're here for the long haul, so I should point out that the results returned from the SQL Search are not quite ready for being displayed. When result content contains either site columns of type "Option" or "Lookup", the results returned from search are not always textual, but sometimes are integers (representing the ID of the actual choice that was made). Furthermore, if the possible values are Multi-select, then the results returned from the Search Query are delimitated with ';#'. In order to convert these results to more friendly strings, I had to write the FixLookupAndMultiChoiceColumns() method which exists in the Util.cs file (not shown in this post). If you look at this method, you'll notice that I look through all of the results returned from the search and correct the columns that need correcting. Something to note: when I first wrote this method I was a little concerned with performance, but once I got to testing it, it appeared to be just fine.

    Binding the Search Results to an SPGridView

    Now that I have the results, I wanted to display them in a grid which had both sorting and paging functionality. I've written a lot of .NET code over the years and this use to be kind of a pain in the butt task that we all had to do. Luckily, though, with the implementation of the GridView class in .NET 2.0, and the extension of this component by WSS 3.0 to the SPGridView class, I'm able to do this without writing any paging or sorting code. However, this isn't so straight forward when you have to write all of the code within a web part and don't have use of code-in-front, but I'm not going to get into it in detail here, but you can read my posting titled My Memberships Web Part for WSS 3.0 to get a bit more information about how I accomplished this with the use of an the SPGridView and an ObjectDataSource.

    Deploying the Web Part with a SharePoint Solution

    In addition to writing the code for the web part, I also setup the Visual Studio solution so that a SharePoint solution (.wsp) file would be created for easy deployment to SharePoint whenever you run a build. This was accomplished by doing the following:

    1. Create a Manifest file and place it in the Visual Studio Project (manifest.xml)
    2. Create a DDF file for the makecab utility to use and place it in the Visual Studio Project (Statera.Moss.Webparts.QueryForIt.ddf)
    3. Add the following two lines to the post build event command line (Build Event tab of the project properties) so that the WSP file specified in the DDF file gets created with every build:
      cd $(ProjectDir)
      makecab /f Statera.Moss.Webparts.QueryForIt.ddf

    Now, every time I run a build, the Statera.Moss.Webparts.QueryForIt.wsp file gets created.

    To add and deploy this solution to a SharePoint 2007 web, you need to follow these steps:

    1. Copy the wsp file (provided in the ZIP file I posted) to the SharePoint server and then execute the following STSADM commands from the command line:
      stsadm –o addsolution –filename Statera.Moss.Webparts.QueryForIt.wsp
      stsadm –o deploysolution –name Statera.Moss.Webparts.QueryForIt.wsp –immediate –allcontenturls \
      NOTE: for some reason, if you copy and paste the above two lines into a command prompt, it won't work. You need to type them out by hand.
      NOTE: when you deploy this solution, the you have to deploy it to a specific Web App, and the DLLs go into the web app's bin directory instead of the GAC – long story there… still trying to figure out the problem… something to do with my Namespace is too deep - I think)
    2. Add the web part to the list of web parts for the Site Collection
    3. Add the web part to a page
    4. Modify the web part and setup the properties. Most of these properties are self explanatory except for the "Advanced Query" textbox, but I've provided some instructions below it (as mentioned before).
      Note: in order to use a metadata property within the Advanced Query (e.g. "region" in the screenshots above), the metadata property must be added to the list of "Metadata Property Mappings" in the configuration of the Search Server for the SSP (go to "Shared Service Administration à Search Settings à Metadata property mappings" and add any and all properties you want to be able to query by to the list of properties).

    Bonus: From Date & To Date Connected Web Parts

    In addition to the functionality already mentioned, I also added the ability to connect up to two Date Filter web parts. You would do this if you wanted to limit the results to say, postings or modifications over the past 7 days. To do this, you would add two date filter web parts to the page, set their default values accordingly, and then connect them to the "FromDate" and "ToDate" properties on this web part.

    Conclusion

    Well… that pretty much covers it. Here's a screenshot of the final web part in use with the results sorted by the created date descending. Note that since I'm using the SPGridView, I didn't have to write any sort of formatting code within my web part, it all gets taken care of so the grid matches other grids within SharePoint (and if the CSS files are customized, those customizations will be applied to this web part as well).

    If you download the code and make any cool additions to it, I'd love to get a copy of what you did. Just send me an email at:

    Check out Wade Wegner's blog for great information on Commerce Server 2007.

    Comments (87)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    May 18
    May 18
    May 18
    May 10
    May 10
    May 10
    May 10
    May 10
    No namewrote:
    darkfall gold http://www.playerassist.com/darkfall/ darkfall online gold
    florensia gelt florensia gelts http://www.playerassist.com/florensia/
    florensia gelts
    talisman gold http://www.playerassist.com/talisman/ talisman online gold
    dofus powerleveling http://www.playerassist.com/dofus/dofus-power-leveling.php dofus power leveling
    lineage 2 powerleveling http://www.playerassist.com/lineage2/lineage2-power-leveling.php lineage 2 power leveling l2 powerleveling l2 power leveling

    Apr. 12
    No namewrote:

    darkfall gold http://www.playerassist.com/darkfall/ darkfall online gold
    florensia gelt florensia gelts http://www.playerassist.com/florensia/
    florensia gelts
    talisman gold http://www.playerassist.com/talisman/ talisman online gold
    dofus powerleveling http://www.playerassist.com/dofus/dofus-power-leveling.php dofus power leveling
    lineage 2 powerleveling http://www.playerassist.com/lineage2/lineage2-power-leveling.php lineage 2 power leveling l2 powerleveling l2 power leveling

    Apr. 10
    No namewrote:

    Gaia Gold GaiaOnline Gold http://www.playerassist.com/gaia/ Gaia Online Gold
    dofus kamas http://www.playerassist.com/dofus/buy dofus kamas cheap dofus kamas buy cheap dofus kamas
    eve isk eve online isk http://www.playerassist.com/eve/ eve isk on sale eve isk for sale, buy eve isk, cheap eve isk buy cheap eve online isk
    buy tibia money, cheap tibia gold, cheap tibia money, cheapest tibia gold, cheap tibia money, tibia gold for sale, tibia money for sale<a href="http://www.playerassist.com/maple-story/">maple story mesos</a>tibia gold, tibia money, buy tibia gold
    Apr. 10
    No namewrote:
    http://www.batterygoshop.co.uk/mitac/bp-8050.htm mitac bp-8050 battery ,
    http://www.batterygoshop.co.uk/mitac/minote-8080.htm mitac minote 8080 battery ,
    http://www.batterygoshop.co.uk/mitac/minote-8090.htm mitac minote 8090 battery ,
    http://www.batterygoshop.co.uk/mitac/8375.htm mitac 8375 battery ,
    http://www.batterygoshop.co.uk/mitac/e2000.htm mitac e2000 battery ,
    http://www.batterygoshop.co.uk/mitac/8x75.htm mitac 8x75 battery ,
    http://www.batterygoshop.co.uk/mitac/8575.htm mitac 8575 battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8089.htm mitac bp-8089 battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8089x.htm mitac bp-8089x battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8389.htm mitac bp-8389 battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8089p.htm mitac bp-8089p battery ,
    http://www.batterygoshop.co.uk/mitac/e680.htm mitac e680 battery ,
    http://www.batterygoshop.co.uk/mitac/winbook-w200.htm mitac winbook w200 battery ,
    http://www.batterygoshop.co.uk/mitac/winbook-w235.htm mitac winbook w235 battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8011.htm mitac bp-8011 battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8x11.htm mitac bp-8x11 battery ,
    http://www.batterygoshop.co.uk/mitac/black-bp-8011.htm mitac black bp-8011 battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8x99.htm mitac bp-8x99 battery ,
    http://www.batterygoshop.co.uk/mitac/bp-8599.htm mitac bp-8599 battery ,
    http://www.batterygoshop.co.uk/nec/op-570-75303.htm nec op-570-75303 battery ,
    http://www.batterygoshop.co.uk/nec/pc-vp-wp25.htm nec pc-vp-wp25 battery ,
    http://www.batterygoshop.co.uk/nec/pc-vp-wp44.htm nec pc-vp-wp44 battery ,
    http://www.batterygoshop.co.uk/nec/op-570-75901.htm nec op-570-75901 battery ,
    http://www.batterygoshop.co.uk/nec/m300.htm nec m300 battery ,
    http://www.batterygoshop.co.uk/nec/m500.htm nec m500 battery ,
    http://www.batterygoshop.co.uk/sony/pcga-bp2sa.htm sony pcga-bp2sa battery ,
    http://www.batterygoshop.co.uk/sony/pcga-bp2s.htm sony pcga-bp2s battery ,
    http://www.batterygoshop.co.uk/sony/pcga-bp2t.htm sony pcga-bp2t battery ,
    http://www.batterygoshop.co.uk/sony/pcga-bp2v.htm sony pcga-bp2v battery ,
    http://www.batterygoshop.co.uk/sony/pcg-z1.htm sony pcg-z1 battery ,
    http://www.batterygoshop.co.uk/sony/pcg-v505.htm sony pcg-v505 battery ,
    http://www.batterygoshop.co.uk/sony/pcga-bp2e.htm sony pcga-bp2e battery ,
    http://www.batterygoshop.co.uk/sony/vgp-bp2ea.htm sony vgp-bp2ea battery ,
    http://www.batterygoshop.co.uk/sony/pcg-gr100.htm sony pcg-gr100 battery ,
    http://www.batterygoshop.co.uk/sony/pcg-gr150.htm sony pcg-gr150 battery ,
    http://www.batterygoshop.co.uk/sony/pcg-gr250.htm sony pcg-gr250 battery ,
    http://www.batterygoshop.co.uk/sony/pcg-gr270.htm sony pcg-gr270 battery ,
    http://www.batterygoshop.co.uk/sony/vgp-bps2a.htm sony vgp-bps2a battery ,
    http://www.batterygoshop.co.uk/sony/vgp-bps2b.htm sony vgp-bps2b battery ,
    http://www.batterygoshop.co.uk/sony/vgp-bps2.htm sony vgp-bps2 battery ,
    http://www.batterygoshop.co.uk/sony/vgp-bps2b.htm sony vgp-bps2b battery ,
    http://www.batterygoshop.co.uk/sony/vgp-bps2c.htm sony vgp-bps2c battery ,
    http://www.batterygoshop.co.uk/sony/vgp-bpl2c.htm sony vgp-bpl2c battery ,
    http://www.batterygoshop.co.uk/toshiba/satellite-1200.htm toshiba satellite 1200 battery ,
    Apr. 8
    No namewrote:
    darkfall gold http://www.playerassist.com/darkfall/ darkfall online gold
    florensia gelt florensia gelts http://www.playerassist.com/florensia/
    florensia gelts
    talisman gold http://www.playerassist.com/talisman/ talisman online gold
    dofus powerleveling http://www.playerassist.com/dofus/dofus-power-leveling.php dofus power leveling
    lineage 2 powerleveling http://www.playerassist.com/lineage2/lineage2-power-leveling.php lineage 2 power leveling l2 powerleveling l2 power leveling
    Apr. 8
    No namewrote:
    darkfall gold http://www.playerassist.com/darkfall/ darkfall online gold
    florensia gelt florensia gelts http://www.playerassist.com/florensia/
    florensia gelts
    talisman gold http://www.playerassist.com/talisman/ talisman online gold
    dofus powerleveling http://www.playerassist.com/dofus/dofus-power-leveling.php dofus power leveling
    lineage 2 powerleveling http://www.playerassist.com/lineage2/lineage2-power-leveling.php lineage 2 power leveling l2 powerleveling l2 power leveling
    Apr. 7
    No namewrote:
    lineage 2 adena http://www.playerassist.com/lineage2/ l2 adena
    Gaia Gold GaiaOnline Gold http://www.playerassist.com/gaia/ Gaia Online Gold
    dofus kamas http://www.playerassist.com/dofus/buy dofus kamas cheap dofus kamas buy cheap dofus kamas
    eve isk eve online isk http://www.playerassist.com/eve/ eve isk on sale eve isk for sale, buy eve isk, cheap eve isk buy cheap eve online isk
    Apr. 7
    No namewrote:
    http://www.batteryfast.co.uk/toshiba/satellite-a55.htm toshiba satellite a55 battery
    http://www.batteryfast.co.uk/toshiba/pa3383u.htm toshiba pa3383u battery
    http://www.batteryfast.co.uk/toshiba/pa3383.htm toshiba pa3383 battery
    http://www.batteryfast.co.uk/toshiba/p30.htm toshiba p30 battery
    http://www.batteryfast.co.uk/toshiba/a70.htm toshiba a70 battery
    http://www.batteryfast.co.uk/toshiba/satellite-a70.htm toshiba satellite a70 battery
    http://www.batteryfast.co.uk/toshiba/satellite-a75.htm toshiba satellite a75 battery
    http://www.batteryfast.co.uk/toshiba/satellite-p30.htm toshiba satellite p30 battery
    http://www.batteryfast.co.uk/toshiba/satellite-p35.htm toshiba satellite p35 battery
    http://www.batteryfast.co.uk/toshiba/pa3420u.htm toshiba pa3420u battery
    http://www.batteryfast.co.uk/toshiba/satellite-l10.htm toshiba satellite l10 battery
    http://www.batteryfast.co.uk/toshiba/satellite-l100.htm toshiba satellite l100 battery
    http://www.batteryfast.co.uk/toshiba/satellite-l15.htm toshiba satellite l15 battery
    http://www.batteryfast.co.uk/toshiba/pa3395u-1brs.htm toshiba pa3395u-1brs battery
    http://www.batteryfast.co.uk/toshiba/pa3421u-1brs.htm toshiba pa3421u-1brs battery
    http://www.batteryfast.co.uk/toshiba/pa3431u.htm toshiba pa3431u battery
    http://www.batteryfast.co.uk/toshiba/satellite-m60.htm toshiba satellite m60 battery
    http://www.batteryfast.co.uk/toshiba/satellite-m65.htm toshiba satellite m65 battery
    http://www.batteryfast.co.uk/toshiba/pa3451u.htm toshiba pa3451u battery
    http://www.batteryfast.co.uk/toshiba/pa3457u.htm toshiba pa3457u battery
    http://www.batteryfast.co.uk/toshiba/satellite-a80.htm toshiba satellite a80 battery
    http://www.batteryfast.co.uk/toshiba/satellite-a85.htm toshiba satellite a85 battery
    http://www.batteryfast.co.uk/toshiba/pa3465u-1brs.htm toshiba pa3465u-1brs battery
    http://www.batteryfast.co.uk/toshiba/pabas069.htm toshiba pabas069 battery
    http://www.batteryfast.co.uk/toshiba/pa3536u.htm toshiba pa3536u battery
    http://www.batteryfast.co.uk/toshiba/satellite-x200.htm toshiba satellite x200 battery
    http://www.batteryfast.co.uk/toshiba/pa3536u-1brs.htm toshiba pa3536u-1brs battery
    http://www.batteryfast.co.uk/toshiba/satellite-p200.htm toshiba satellite p200 battery
    http://www.batteryfast.co.uk/toshiba/satellite-p205.htm toshiba satellite p205 battery
    http://www.batteryfast.co.uk/toshiba/pa3534u-1brs.htm toshiba pa3534u-1brs battery
    http://www.batteryfast.co.uk/toshiba/satellite-a205.htm toshiba satellite a205 battery
    http://www.batteryfast.co.uk/uniwill/un223.htm uniwill un223 battery
    http://www.batteryfast.co.uk/uniwill/223-3s4000-f1p1.htm uniwill 223-3s4000-f1p1 battery
    http://www.batteryfast.co.uk/uniwill/223-3s4000-s1p1.htm uniwill 223-3s4000-s1p1 battery
    http://www.batteryfast.co.uk/uniwill/bat-243s1.htm uniwill bat-243s1 battery
    http://www.batteryfast.co.uk/uniwill/un243.htm uniwill un243 battery
    http://www.batteryfast.co.uk/uniwill/un244.htm uniwill un244 battery
    http://www.batteryfast.co.uk/uniwill/255-3s4400-g1l1.htm uniwill 255-3s4400-g1l1 battery
    http://www.batteryfast.co.uk/uniwill/un255.htm uniwill un255 battery
    http://www.batteryfast.co.uk/uniwill/un258.htm uniwill un258 battery
    http://www.batteryfast.co.uk/uniwill/258-4s4400-s1p1.htm uniwill 258-4s4400-s1p1 battery
    http://www.batteryfast.co.uk/uniwill/258-4s4400-s2m1.htm uniwill 258-4s4400-s2m1 battery
    http://www.batteryfast.co.uk/hp/mini-1000.htm hp mini 1000 battery
    http://www.batteryfast.co.uk/asus/al23-901.htm asus al23-901 battery
    http://www.batteryfast.co.uk/asus/al24-1000.htm asus al24-1000 battery
    Apr. 2
    No namewrote:
    http://www.batterygoshop.co.uk/gateway/s62066l.htm gateway s62066l battery ,
    http://www.batterygoshop.co.uk/gateway/squ-412.htm gateway squ-412 battery ,
    http://www.batterygoshop.co.uk/gateway/squ-413.htm gateway squ-413 battery ,
    http://www.batterygoshop.co.uk/gateway/squ-414.htm gateway squ-414 battery ,
    http://www.batterygoshop.co.uk/gateway/solo-1400.htm gateway solo 1400 battery ,
    http://www.batterygoshop.co.uk/gateway/solo-1450.htm gateway solo 1450 battery ,
    http://www.batterygoshop.co.uk/gateway/6500358.htm gateway 6500358 battery ,
    http://www.batterygoshop.co.uk/gateway/gt-6300l.htm gateway gt-6300l battery ,
    http://www.batterygoshop.co.uk/gateway/solo-9300.htm gateway solo 9300 battery ,
    http://www.batterygoshop.co.uk/gateway/bat0016.htm gateway bat0016 battery ,
    http://www.batterygoshop.co.uk/gateway/m1200.htm gateway m1200 battery ,
    http://www.batterygoshop.co.uk/gateway/m1300.htm gateway m1300 battery ,
    http://www.batterygoshop.co.uk/gateway/m500.htm gateway m500 battery ,
    http://www.batterygoshop.co.uk/gateway/m505.htm gateway m505 battery ,
    http://www.batterygoshop.co.uk/gateway/btp-68b3.htm gateway btp-68b3 battery ,
    http://www.batterygoshop.co.uk/gateway/btp-51b3.htm gateway btp-51b3 battery ,
    http://www.batterygoshop.co.uk/hp/hstnn-db11.htm hp hstnn-db11 battery ,
    http://www.batterygoshop.co.uk/hp/nc8230.htm hp nc8230 battery ,
    http://www.batterygoshop.co.uk/hp/nc8200.htm hp nc8200 battery ,
    http://www.batterygoshop.co.uk/hp/nw8200.htm hp nw8200 battery ,
    http://www.batterygoshop.co.uk/hp/nx8200.htm hp nx8200 battery ,
    http://www.batterygoshop.co.uk/hp/nc8430.htm hp nc8430 battery ,
    http://www.batterygoshop.co.uk/hp/pb992a.htm hp pb992a battery ,
    http://www.batterygoshop.co.uk/hp/nx7000.htm hp nx7000 battery ,
    http://www.batterygoshop.co.uk/hp/presario-x1000.htm hp presario x1000 battery ,
    http://www.batterygoshop.co.uk/hp/presario-x1100.htm hp presario x1100 battery ,
    http://www.batterygoshop.co.uk/hp/presario-x1200.htm hp presario x1200 battery ,
    http://www.batterygoshop.co.uk/hp/presario-x1300.htm hp presario x1300 battery ,
    http://www.batterygoshop.co.uk/hp/presario-x1400.htm hp presario x1400 battery ,
    http://www.batterygoshop.co.uk/hp/zt3000.htm hp zt3000 battery ,
    http://www.batterygoshop.co.uk/hp/zt3100.htm hp zt3100 battery ,
    http://www.batterygoshop.co.uk/hp/zt3200.htm hp zt3200 battery ,
    http://www.batterygoshop.co.uk/hp/zt3300.htm hp zt3300 battery ,
    http://www.batterygoshop.co.uk/hp/zt3400.htm hp zt3400 battery ,
    http://www.batterygoshop.co.uk/hp/nx6120.htm hp nx6120 battery ,
    http://www.batterygoshop.co.uk/hp/pb994a.htm hp pb994a battery ,
    http://www.batterygoshop.co.uk/hp/nc6100.htm hp nc6100 battery ,
    http://www.batterygoshop.co.uk/hp/nc6120.htm hp nc6120 battery ,
    http://www.batterygoshop.co.uk/hp/nx6100.htm hp nx6100 battery ,
    http://www.batterygoshop.co.uk/hp/nc6400.htm hp nc6400 battery ,
    http://www.batterygoshop.co.uk/hp/nc6230.htm hp nc6230 battery ,
    http://www.batterygoshop.co.uk/hp/nc6110.htm hp nc6110 battery ,
    http://www.batterygoshop.co.uk/hp/dv2000.htm hp dv2000 battery ,
    http://www.batterygoshop.co.uk/hp/dv2100.htm hp dv2100 battery ,
    Mar. 26
    No namewrote:
    http://www.adapterlist.com/compaq/presario-2100.htm compaq presario 2100 battery
    http://www.adapterlist.com/compaq/ze4000.htm compaq ze4000 battery
    http://www.adapterlist.com/compaq/f4809a.htm compaq f4809a battery
    http://www.adapterlist.com/compaq/f4812a.htm compaq f4812a battery
    http://www.adapterlist.com/compaq/hstnnib12.htm compaq hstnnib12 battery
    http://www.adapterlist.com/compaq/nc4200.htm compaq nc4200 battery
    http://www.adapterlist.com/compaq/nc4400.htm compaq nc4400 battery
    http://www.adapterlist.com/compaq/tc4200.htm compaq tc4200 battery
    http://www.adapterlist.com/compaq/tc4400.htm compaq tc4400 battery
    http://www.adapterlist.com/compaq/hstnnib12.htm compaq hstnnib12 battery
    http://www.adapterlist.com/compaq/310924-b25.htm compaq 310924-b25 battery
    http://www.adapterlist.com/compaq/pp2162s.htm compaq pp2162s battery
    http://www.adapterlist.com/compaq/pp2160.htm compaq pp2160 battery
    http://www.adapterlist.com/dell/d400.htm dell d400 battery
    http://www.adapterlist.com/dell/latitude-d400.htm dell latitude d400 battery
    http://www.adapterlist.com/dell/original-inspiron-1525.htm dell original inspiron 1525 battery
    http://www.adapterlist.com/dell/original-inspiron-1526.htm dell original inspiron 1526 battery
    http://www.adapterlist.com/dell/latitude-x200.htm dell latitude x200 battery
    http://www.adapterlist.com/dell/8u443.htm dell 8u443 battery
    http://www.adapterlist.com/dell/312-0058.htm dell 312-0058 battery
    http://www.adapterlist.com/dell/latitude-d810.htm dell latitude d810 battery
    http://www.adapterlist.com/dell/precision-m70.htm dell precision m70 battery
    http://www.adapterlist.com/dell/y4367.htm dell y4367 battery
    http://www.adapterlist.com/dell/1691p.htm dell 1691p battery
    http://www.adapterlist.com/dell/inspiron-8000.htm dell inspiron 8000 battery
    http://www.adapterlist.com/dell/inspiron-2500.htm dell inspiron 2500 battery
    http://www.adapterlist.com/dell/inspiron-3700.htm dell inspiron 3700 battery
    http://www.adapterlist.com/dell/inspiron-3800.htm dell inspiron 3800 battery
    http://www.adapterlist.com/dell/inspiron-4000.htm dell inspiron 4000 battery
    http://www.adapterlist.com/dell/inspiron-1100-series.htm dell inspiron 1100 series battery
    http://www.adapterlist.com/dell/inspiron-1150.htm dell inspiron 1150 battery
    http://www.adapterlist.com/dell/inspiron-5150.htm dell inspiron 5150 battery
    http://www.adapterlist.com/dell/inspiron-5100.htm dell inspiron 5100 battery
    http://www.adapterlist.com/dell/inspiron-1000.htm dell inspiron 1000 battery
    http://www.adapterlist.com/dell/inspiron-1200.htm dell inspiron 1200 battery
    http://www.adapterlist.com/dell/inspiron-2200.htm dell inspiron 2200 battery
    http://www.adapterlist.com/dell/e1405.htm dell e1405 battery
    http://www.adapterlist.com/dell/inspiron-630m.htm dell inspiron 630m battery
    http://www.adapterlist.com/dell/inspiron-640m.htm dell inspiron 640m battery
    http://www.adapterlist.com/dell/xps-m140.htm dell xps m140 battery
    http://www.adapterlist.com/dell/312-0566.htm dell 312-0566 battery
    http://www.adapterlist.com/dell/312-0567.htm dell 312-0567 battery
    http://www.adapterlist.com/dell/451-10473.htm dell 451-10473 battery
    http://www.adapterlist.com/dell/451-10474.htm dell 451-10474 battery
    http://www.adapterlist.com/dell/pu556.htm dell pu556 battery
    Mar. 24
    No namewrote:
    http://www.batteryfast.com.au/toshiba/pa3356u-1brs-002-battery.php 8.8ah Battery TOSHIBA PA3356U-1BAS PA3356U-1BRS PA3356U-2BRS laptop battery ,
    http://www.batteryfast.com.au/toshiba/pa3420u.php toshiba pa3420u-1brs l10 l15 l20 laptop battery ,
    http://www.batteryfast.com.au/toshiba/pa3421u-1brs.php Battery for Toshiba M30X M35X M40X PA3395U-1BRS PA3421U laptop battery ,
    http://www.batteryfast.com.au/toshiba/pa3431u-1brs.php TOSHIBA SATELLITE M65 BATTERY PA3431U-BRS PABAS068 laptop battery ,
    http://www.batteryfast.com.au/toshiba/pa3451u.php TOSHIBA PA3451U-1BRS PABAS067 laptop battery ,
    http://www.batteryfast.com.au/toshiba/pa3465u.php Genuine TOSHIBA PA3465U-1BRS Laptop Battery PABAS069 laptop battery ,
    http://www.batteryfast.com.au/toshiba/pa3536u-1brs-battery.php New PA3536U Battery for Toshiba Satellite P200 P205 laptop battery ,
    http://www.batteryfast.com.au/toshiba/pa3534u-1brs-battery.php NEW Genuine Toshiba Battery Satellite PA3534U-1BRS A205 laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/acer/acer-19V-3.16A-60w-5.5mm-1.5mm.php acer 19V 3.16A 60w 5.5mm*1.7mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/acer/acer-19V-3.16A-60w-5.5mm-2.5mm.php PA-1500-02 PA-1600-02 acer 19V 3.16A 60w 5.5mm*2.5mm laptop adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/acer/acer-19V-3.42A-65w-5.5mm-2.5mm-big-head.php PA-1700-02 PA-1650-02 acer 19V 3.42A 65w 5.5mm*2.5mm big head adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/acer/acer-19V-3.42A-65w-5.5mm-1.5mm-small-head.php acer 19V 3.42A 65w 5.5mm*1.7mm small head adapter SADP-65KB SADP-65DB laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/acer/acer-19V-7.1A-135w-5.5mm-2.5mm.php PA-1131-08 AP.13503.001 acer 19V 7.1A 135w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/apple/apple-24V-1.875A-45w-9.5mm-3.5mm-big-head.php apple 24V 1.875A 45w 9.5mm 3.5mm big head laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/apple/apple-24V-2A-48w-9.5mm-3.5mm-big-head.php apple 24V 2A 48w 9.5mm*3.5mm big head adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/asus/asus-19v-3.42A-65w-5.5mm-2.5mm.php asus A3 19v 3.42A 65w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/compaq/compaq-18.5V-2.7A-50w-4.8mm-1.7mm.php 387661-001 PPP005L compaq 18.5V 2.7A 50w 4.8mm*1.7mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/compaq/compaq-18.5V-4.9A-90w-4.8mm-1.7mm-bullet.php compaq 18.5V 4.9A 90w 4.8mm*1.7mm bullet adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/compaq/compaq-18.5V-6.5A-120w-5.5mm-2.5mm.php PA-1121-02H PA-1121-12H compaq 18.5V 6.5A 120w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/compaq/compaq-19V-3.16A-60w-5.5mm-2.5mm.php F4814A ADP-75FB compaq 19V 3.16A 60w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/compaq/compaq-19V-4.74A-90w-5.5mm-2.5mm.php compaq 19V 4.74A 90w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/dell/dell-19.5V-3.34A-65w-7.4mm-5.0mm-with-pin-pa-12.php PA-1650-05D2 AD-90195D dell 19.5V 3.34A 65w 7.4mm*5.0mm with pin pa-12 adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/dell/dell-19.5V-4.62A-90w-7.4mm-5.0mm-with-pin-pa-10.php PA-1650-05D2 PA-1900-02D dell 19.5V 4.62A 90w 7.4mm*5.0mm with pin pa-10 adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/dell/dell-19.5V-6.7A-130w-7.4mm-5.0mm-with-pin-pa-13.php dell 19.5V 6.7A 130w 7.4mm*5.0mm with pin pa-13 adapter laptop laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/dell/dell-19.5V-7.7A-150w-7.4mm-5.0mm-with-pin-pa-15.php PA-1151-06D dell 19.5V 7.7A 150w 7.4mm*5.0mm with pin pa-15 adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/dell/dell-19V-3.16A-60w-5.5mm-2.5mm.php PA-1600-06D1 PA-1600-06D2 dell 19V 3.16A 60w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/dell/dell-20V-3.5A-70w-horseshoe-style-special-for-dell-pa-6.php ADP-70E ADP-70EB dell 20V 3.5A 70w horseshoe style special dell pa-6 adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/delta/delta-19V-3.42A-65w-5.5mm-2.5mm.php ADP-65DB delta 19V 3.42A 65w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/delta/delta-19V-4.74A-90w-5.5mm-2.5mm.php ADP-90FB delta 19V 4.74A 90w 5.5mm*2.5mm adapter laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/fujitsu/fujitsu-19V-3.16A-60w-5.5mm-2.5mm.php A4190 fujitsu 19V 3.16A 60w 5.5mm*2.5mm adapter laptop laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/fujitsu/fujitsu-19V-4.74A-90w-5.5mm-2.5mm.php C2110 fujitsu 19V 4.74A 90w 5.5mm*2.5mm adapter laptop laptop battery ,
    http://www.batteryfast.com.au/laptop-ac-adapter/fujitsu/fujitsu-19V-4.22A-80w-5.5mm-2.5mm.php CA01007-0920 FMV-AC314 fujitsu 19V 4.22A 80w 5.5mm*2.5mm adapter laptop laptop battery ,
    Mar. 23
    No namewrote:
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/sb-l320.htm samsung sb-l320 battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/sb-l480.htm samsung sb-l480 battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/sbl480.htm samsung sbl480 battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/slb-10a.htm samsung slb-10a battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/m100.htm samsung m100 battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/m110.htm samsung m110 battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/p1000.htm samsung p1000 battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/slb-1137d.htm samsung slb-1137d battery
    http://www.batterygoshop.co.uk/camcorder-battery/samsung/slb1137d.htm samsung slb1137d battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fp70.htm sony np-fp70 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fh100.htm sony np-fh100 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fp50.htm sony np-fp50 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fp70.htm sony np-fp70 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fp71.htm sony np-fp71 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fp90.htm sony np-fp90 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fa50.htm sony np-fa50 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-fa70.htm sony np-fa70 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-ff50.htm sony np-ff50 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-ff51.htm sony np-ff51 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-qm70.htm sony np-qm70 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-qm71.htm sony np-qm71 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-qm71d.htm sony np-qm71d battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-qm90.htm sony np-qm90 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-qm91.htm sony np-qm91 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-qm91d.htm sony np-qm91d battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-f550.htm sony np-f550 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-f970.htm sony np-f970 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-f550.htm sony np-f550 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-f570.htm sony np-f570 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-f750.htm sony np-f750 battery
    http://www.batterygoshop.co.uk/camcorder-battery/sony/np-f960.htm sony np-f960 battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v107.htm jvc bn-v107 battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v114.htm jvc bn-v114 battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v114u.htm jvc bn-v114u battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v312.htm jvc bn-v312 battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v408u.htm jvc bn-v408u battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v408.htm jvc bn-v408 battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v416u.htm jvc bn-v416u battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v416.htm jvc bn-v416 battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v428u.htm jvc bn-v428u battery
    http://www.batterygoshop.co.uk/camcorder-battery/jvc/bn-v428.htm jvc bn-v428 battery
    Mar. 12

    Trackbacks (2)

    The trackback URL for this entry is:
    http://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!145.trak
    Weblogs that reference this entry