Hi again,
Finaly I found a published recommendation for this scenario.
I have faced sometimes that SharePoint package installation failed due to an access denied or blocked dll. In this scenarios UAc is involved. And so follow this recommendation for server configuration:
http://support.microsoft.com/kb/2526083
Bye!
Just for my own reference and better indexing ;)
Is co-authoring in SharePoint 2010 configurable? yes it does.
Be aware of requirements, and its incompatibility with checkout state. Indeed this behavior should be highlighted
Ciao!
Nice Spring,
I wasn't aware of current state (W3C Candidate Recommendation) for Media Queries so seeing different scenarios to benefit from this information was a pretty one :)
IE9 supports them, so you may test it in a Windows Slate. Of course you can maximize your iPad and SharePoint too:
http://mike-greene.com/2010/10/enhancing-the-sharepoint-2010-ui-ipad-orientation-detection/
It would be nice to get support in the upcoming update for Windows Phone 7!
Bye
Hi,
I go this request from a customer, and as you may get multiple alternatives; it would be nice to get an official link.
You will search for custom mobile redirection in your favorite search engine and get to How to: Customize the Mobile Home Page Through Redirection this will help you to change redirection within mobile pages (aka application pages), but not to publishing pages. There you can understand the current process (even an old reference to the previous system), however I would recommend you to read the SPMobileWebUrlRedirect Class (Remarks section). This system won't work as it appends ?Mobile=1 to every page and this parameter redirects to Collaboration mobile lists views.
But although you know how it works,you still needs to redirect to your publishing page! And then search again finding alternatives:
https://www.nothingbutsharepoint.com/sites/devwiki/articles/Pages/How-we-did-it---Mobile-View.aspx
http://blog.drisgill.com/2009/11/sp2010-branding-tip-6-mobile-browsers.html
Those are nice samples, but you should follow approved & officials steps ;)
http://technet.microsoft.com/en-us/library/ff393836.aspx
Namaste
You (and your users/customers) may have noticed that working with SharePoint 2010 lists clicking on the icon does not launch the document (as it was the case in SharePoint 2007). You may have implemented a workaround as described here. Just be aware of a package published at codeplex that includes this workaround:
http://docicon.codeplex.com/
Did you were developing with SharePoint 2010 and found this error when working with Search Query?
This seems WCF service, isn't it? But you have no clue about the real problem, only a short "Property doesn't exist or is used in a manner inconsistent with schema settings" with an exception in Microsoft.Office.Server.Search.Query.InvalidPropertyException Stack = at Microsoft.Office.Server.Search.Query.FullTextSqlQueryInternal.Execute() .
Jsut don't get mad, we found that this exception (InvalidPropertyException) is related to a managed property that doesn't exist. So you should review the query and find if there are any missing managed properties.
Shouldn't this error be more descriptive?
Sure
This has been a recurring problem in SharePoint: Although you add a publishingImage field to your layout and it gets indexed, the managed property mapped to this crawled property has no value.
This is related to two issues:
There are several solutions to resolved this scenario, but all they seem too complex (ex.: create a second field and update it with the url with an event receiver). Finally we get a simple solution without changing the product ;)
A sample of the webcontrol code:
using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; using Microsoft.SharePoint.Utilities; using Microsoft.SharePoint; using Microsoft.SharePoint.Publishing.Fields; namespace Microsoft.Services.WebControls { [DefaultProperty("Text"), ToolboxData("<{0}:IndexableImage runat=\"server\" />")] public class IndexableImage : WebControl { private static string getImageUrl(){ ImageFieldValue imgField = null; if (SPContext.Current.ListItem["metaImage"] != null) { imgField = (ImageFieldValue)SPContext.Current.ListItem["metaImage"]; if (imgField != null) { return imgField.ImageUrl; } } return string.Empty; } protected override void Render(HtmlTextWriter output) { output.Write("<meta"); output.WriteAttribute("name", "metaImage"); output.WriteAttribute("content", getImageUrl()); output.Write("/>"); output.WriteLine(); } } }
Namaste!
You may face that altough:
You still can't change the layout. This seems a bug, as the layout button is enable by the querystring EditMode. So try to add ControlMode=Edit parameter in the querystring, and page layout should be enabled if the prerequisites are met.
In order to delete a out of the box content type from a list/Library (item, document, etc..), you need to delete it from name as the associated Id in the list is a child of the site contentType.
When you add a site content type to a list or library, SharePoint Foundation makes local copies of any columns that are referenced by the content type and adds them to the list's fields
So to delete for example the item content type, you will need to:
SPContentTypeId ListitemContentTypeId = list.ContentTypes[web.ContentTypes[SPBuiltInContentTypeId.item].Name].Id;list.ContentTypes.Delete(ListitemContentTypeId);
You have tried to order the content type list for a list and you are not able to do it. You always receive an error when UniqueContentTypeOrder is set. Take a look at the following steps in order to resolve the issue.
SPFolder folder = list.RootFolder; IList<SPContentType> contentTypeCollection = new List<SPContentType>(); contentTypeCollection = folder.ContentTypeOrder; contentTypeCollection.RemoveAt(0); folder.UniqueContentTypeOrder = contentTypeCollection; folder.Update();
in the code above the rootfolder for the list is updated with a new content type collection without the first item. This will update fine the list. the differences:
Historically developers has been using tricks to get to SharePoint Root Path, as Shortcut to 12/14 hive. With Windows Server 2008 R2 or Windows 7, we can start using jump lists to get a short cut in windows explorer.
That's all!
I have faced this twice, so it needs a post :) it is really a minor clarification, but here it is.
You will find, after creating a SharePoint 2010 project, that Replaceable Parameters are used in Visual Studio projects. For example when you deploy a feature the $SharePoint.Project.FileNameWithoutExtension$_$SharePoint.Feature.FileNameWithoutExtension$ token appears as the name of the folder.
Then you realized that it is not your best name, and you want to change it. You search for it but with no luck. You try in the feature properties but it is not there!!
And then you double click on it, and that's it, in all its glory the features properties appear aka DeploymentPath
This was easy ;)
Hi all,
These recently published documents are really a must reading for everyone that wants to understand better SharePoint as a platform and specifically that plan to manage and deploy the 14 wave servers.
I would recommend "Designing Large List Maximizing List Performance" as an evolution of the previous whitepaper about this topic, and the Throttling and limits section.
The document shows you the huge scalability of the platform and how to benefit from it in your applications design.
Two weeks ago I received an email asking how my SharePoint 2007 ratings work in order to include totals. Indeed is simple, but perhaps not clear, that there is a cross lookup between both lists:
This can be made manually or through a SharePoint feature, in that scenario it will need to get the list id to get the connection.
But wait, didn't the title of this post talk about other thing? True, be patient. The server with that customization was migrated to SharePoint 2010 (RC at this time), and after some issues, we prepared the migration to the OOB ratings features coming inside SharePoint 2010.
I don't have physical access to the server, so the first idea was to use the REST API, but it was not available/configured :(. So I selected SharePoint Client Object Model. In this scenario there has been many approaches, but the most relevant was Hubkey client API (hey remember RPC is deprecated!). Opening this way a lot of multiple scenarios and tools working "oustside" the farm.
The overall thing was pretty easy and fast, but the most trickiest (some minutes :)) thing was the value of that lookup column. As that column was the total number of items on the other list, I need to include the LookupId property not the value.
And here it is the sample code:
// Copyright © Microsoft Corporation. All Rights Reserved.
// This code released under the terms of the
// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)
using System;
using Microsoft.SharePoint.Client;
using System.Xml.Linq;
using System.Linq;
using System.Collections.Generic;
using System.Configuration;
namespace FeedbackMigration
{
class Program
static string feedbackSourceSite = ConfigurationManager.AppSettings["urlSource"];
static string feedbackTargetSite = ConfigurationManager.AppSettings["urlTarget"];
static string feedbackList = "feedback";
static string usage = "Please enter migration mode: export = 1, import = 2\nUsage: FeedbackMigration <num>";
static void Main(string[] args)
if (args.Length == 0)
Console.WriteLine(usage);
}
else
switch (int.Parse(args[0]))
case 1:
ReadFeedback();
break;
case 2:
WriteFeedback();
default:
static void ReadFeedback() {
try
ClientContext clientContext = new ClientContext(feedbackSourceSite);
List list = clientContext.Web.Lists.GetByTitle(feedbackList);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = @"<View>
<RowLimit>200</RowLimit>
</View>";
ListItemCollection listItems = list.GetItems(camlQuery);
IEnumerable<ListItem> feedbacks = clientContext.LoadQuery(
listItems.Include(
feedback => feedback.Id,
feedback => feedback["Title"],
feedback => feedback["Author"],
feedback => feedback["Feedback"],
feedback => feedback["Manager"],
feedback => feedback["points"],
feedback => feedback["votes"],
feedback => feedback["Quarter"],
feedback => feedback["Speciality"],
feedback => feedback["Manager_x0020_Review"],
feedback => feedback["Region"]));
clientContext.ExecuteQuery();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Started read process feedback list");
XElement xml = new XElement("feedbacks",
from f in feedbacks
orderby f.Id
select new XElement("feedback",
new XAttribute("id", f.Id),
new XElement("title", f["Title"]),
new XElement("author", ((FieldUserValue)f["Author"]).LookupValue),
new XElement("description", f["Feedback"]),
new XElement("manager", ((FieldUserValue)f["Manager"]).LookupValue),
new XElement("points", f["points"]),
new XElement("votes", ((FieldLookupValue)f["votes"]).LookupId),
new XElement("quarter", f["Quarter"]),
new XElement("cluster", f["Speciality"]),
new XElement("review", f["Manager_x0020_Review"]),
new XElement("region", f["Region"]))
);
xml.Save(String.Format("feedback-{0}.xml", DateTime.Now.ToString("yyMMddHHmmss")));
Console.WriteLine("Finish");
Console.ResetColor();
Console.ReadKey();
catch (System.Net.WebException ex)
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Not able to connect to the server: \n{0}", ex.ToString());
catch (Exception ex)
Console.WriteLine("Error: \n{0}", ex.ToString());
static void WriteFeedback() {
Console.WriteLine("Started write process from feedback xml");
XDocument loaded = XDocument.Load(@"feedback.xml");
ClientContext clientContext = new ClientContext(feedbackTargetSite);
foreach (XElement f in loaded.Root.Nodes()){
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
ListItem listItem = list.AddItem(itemCreateInfo);
listItem["Title"] = f.Element("title").Value;
listItem["Author"] = FieldUserValue.FromUser(f.Element("author").Value);
listItem["Feedback_x0020_description"] = f.Element("description").Value;
listItem["Manager"] = FieldUserValue.FromUser(f.Element("manager").Value);
listItem["Quarter"] = f.Element("quarter").Value;
listItem["Cluster"] = f.Element("cluster").Value;
listItem["Manager_x0020_Review"] = f.Element("review").Value;
listItem["Region"] = f.Element("region").Value;
listItem.Update();
Console.WriteLine("Item added {0}", f.Element("title").Value);
catch (System.IO.FileNotFoundException ex)
Console.WriteLine("Not able to find the file: \n{0}", ex.ToString());
Today I get a request from a partner who were experiencing the following error:
Error: No item exists at http://server/site/Pages/pagename.aspx?id=37. It may have been deleted or renamed by another user. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: Microsoft.SharePoint.SPException: No item exists at http://server/site/Pages/pagename.aspx?id=37 It may have been deleted or renamed by another user. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace: [SPException: No item exists at http://server/site/Pages/pagename.aspx?id=37. It may have been deleted or renamed by another user.]Microsoft.SharePoint.SPContext.get_Item()Microsoft.SharePoint.SPContext.get_ListItem()Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ComputeRedirectionVirtualPath(TemplateRedirectionPage basePage)Microsoft.SharePoint.Publishing.TemplateRedirectionPage.get_RedirectionUrl()Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ProcessRequest(HttpContext context)System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Error: No item exists at http://server/site/Pages/pagename.aspx?id=37. It may have been deleted or renamed by another user.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: Microsoft.SharePoint.SPException: No item exists at http://server/site/Pages/pagename.aspx?id=37 It may have been deleted or renamed by another user.
Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace: [SPException: No item exists at http://server/site/Pages/pagename.aspx?id=37. It may have been deleted or renamed by another user.]Microsoft.SharePoint.SPContext.get_Item()Microsoft.SharePoint.SPContext.get_ListItem()Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ComputeRedirectionVirtualPath(TemplateRedirectionPage basePage)Microsoft.SharePoint.Publishing.TemplateRedirectionPage.get_RedirectionUrl()Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ProcessRequest(HttpContext context)System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
this happens in the following context: they created a page to update list items, and they were showing the list information in the page. Well, I realized that it was an old error (LuisRac :)) the problem is related to the reserved word ID. You should not use ID in your querystring outside the Form pages. So rename it with a different name or change your implementation to use a Custom Form
Occasionally I like to design solutions that extend our product, just as part of my motto. So I would like to start a series that raises at least the first objective Imagine ;)
As you may know we have a packet analyzer that enables capturing, viewing and analyzing network data and deciphering network protocols. The most important thing from it: You can troubleshoot network problems and applications on the network [Wikipedia].
In order to download it you need to go to http://www.microsoft.com/downloads/details.aspx?FamilyID=983b941d-06cb-4658-b7f6-3088333d062f&displaylang=en checking additional information in its related resources section. In fact one that is not to be forgotten is the Network Monitor Parsers at codeplex.
Some times when you troubleshoot a SharePoint problem in your environment, you would like to launch NetMon and let it parse what is going on. Moreover I would like to not install it in my environment. Well the last point is resolved as you may know through OneClick Netmon. But the first is one of my forgotten ideas.
Good news are NetMon team is implementing what we have published through our Open Specification initiative, at least through the Windows/SQL Programs. Would you like to add SharePoint there? Me do!
For some time now, I'm interesting in our search products, and so tools related. You can reach some of them, but I would definitely like to work on search parsers. For example:
[MS-SITEDATS]: Site Data Web Service Protocol Specification
[MS-CIPROP]: Index Propagation Protocol Specification
to mention two. FAST would be nice here too.
I have found this question to be trickier than expected, so I wanted to put together my favorites links.
Let's start with oficial published information:
Other scenarios as security trimming (search related) are not been considered.
Although those articles seem a good starting point, there may be ambiguous general guidance when a customer tries to implement it. Overall I will simplify with: use Active Directory Groups, take into account boundaries, do not target max limits and understand manageability vs business requirements.
These articles from Joel Oleson and Eli Robillard are great summaries .
Finally, it is very important to be able to manage this security configuration efficiently, and here the main recommendation is to complement SharePoint with third parties or published tools as:
For the next SharePoint version, I will bet on ASP.NET Routing as a main technology adoption. Upgrading VirtualPathProvider implementation would benefit the platform in many ways, even the following adoption of ASP.NET MVC.
Today I remember my main wishlist: friendly urls.
http://server/blog/posts instead of http://server/blog/_layouts/listfeed.aspx?List=<GUID
http://server/services/docid/CUSTOM-1-1 instead of http://server/_layouts/DocIdRedir.aspx?ID=CUSTOM-1-1
It would be great to have friendly urls for services (example Document ID), or RSS Feeds or <put your requirements here>. Of course it should consider extended managed paths for keywords or services and the adoption of some existing de facto standards (microformats).
In this scenario I would recommend reading Windows Live Lessons learned in the adoption of ASP.NET MVC
moving to a RESTful world?
Today, remembering the steps and some solutions made to manage security policies or accounts, I realized that when you make the underlying platform better and smarter, the overall ecosystem moves forward.
Looping about how to Manage and Sync Secure Data
So, just do not forget to add in you "plan for security" managed accounts
Just a comment about my pausecrawl powershell script. Although it seems clear the pausecrawl command pauses an active crawl for the content source; I get last week some questions about it.
On the other hand, the PauseBackgroundActivity pauses all content-related activity for a Shared Services Provider's search service.
local vs global.
adios!
Today I received a request about SEO recommendations in your SharePoint deployment. Well you should care about it always, no matter if it is SharePoint or not (although it would be better :)) In case you came from other dimension, search is the technology behind everything.
Just to the spec, I wanted to share that information:
"I would start caring about the content (SEO is content quality), and resolve features SharePoint doesn't have. You have a good pointer at http://blog.mastykarz.nl/tag/seo/ , http://blogs.technet.com/vedant/archive/2009/06/24/search-engine-optimization-in-sharepoint.aspx or http://www.thesug.org/Blogs/sharepointseo/default.aspx
On the other hand I would work with tools as IIS SEO Toolkit to monitor the site."
Finally it is recommended to check third partner solutions and any generic SEO recommendations
Nice to ReadSearch Engine Optimization Starter Guidehttp://www.google.com/webmasters/docs/search-engine-optimization-starter-guide.pdfHow to Optimize SharePoint Server 2007 Web Content Management Sites for Search Engineshttp://msdn.microsoft.com/en-us/library/cc721591.aspx
Yesterday I faced a problem with a PoC I did some months ago. I added a ratings feature to SharePoint 2007 Lists using JQuery.
There were a conflict caused by sp.js and jquery.js using prototype methods. I just followed the recomendations to avoid it.
As I had put everything in my document ready area, I just reassigned JQuery, and use the new variable at that level:
var $j = jQuery;
$j(document).ready(function(){ $j('div.rating').rating();});
This should remind us to double check our client code in SharePoint 2007 migration scenarios.
Do you remember my Astoria Blog Publishing post? well now you can check that my crystal ball is up and running!
Cool to see that any SharePoint Server 2010 acts as a Data Services Server
So moving forward that vision would look like this, after installing latest ADO.NET Data Services in your SharePoint 2010 sandbox, imagine you create a blog site /carloshm, then you will be able to get the categories at /carloshm/_vti_bin/ListData.svc/Categories. That simple.
Check this article, as it would be worth reading! to start using it
Yesterday after my vacations, I was reviwing Scott posts and I found that we have announced the Microsoft Ajax CDN. A collegue then remembered me our activex.microsoft.com url.
Don't you feel we are walking in a wonderful circle :D
Last week I was asked to create a sample to include in a SharePoint list rating functionality without any server code. That means only SharePoint Designer and client script.
First was how to store those ratings. Based on experience the obvious solution was to store scores in a separate list, and aggregate afterwards totals. This avoids locks at list level and improve scalability (at the end the aggregation was done from the self user).
So to accomplish this demo, you will need:
Step 4.1
<TD Class="{$IDAEG2RE}"> <DIV ALIGN="RIGHT" class="rating" title="{@ID}_{@Puntos}"></DIV> </TD>
<TD Class="{$IDAEG2RE}">
<DIV ALIGN="RIGHT" class="rating" title="{@ID}_{@Puntos}"></DIV>
</TD>
Step 4.2
This will give us the ability to build the UI through JQuery and associate the code to manage list items. Final result: