Workflow Failed On Start

by Håvard Hebnes 26. June 2009 14:48

Recently I tried to create a custom approval workflow using VS2008 with wspbuilder. I successfully deployed the wsp and added the workflow to a custom list, but when I started the workflow I got an error saying: Failed on Start (retrying)

In the SharePoint logfile I found this error:
Engine RunWorkflow: System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException: The
workflow failed validation. at System.Workflow.Runtime.WorkflowDefinitionDispenser.ValidateDefinition(Activity
root, Boolean isNewType, ITypeProvider typeProvider) at System.Workflow.Runtime.WorkflowDefinitionDispenser.LoadRootActivity(Type workflowType, Boolean createDefinition, Boolean initForRuntime) at System.Workflow.Runtime.WorkflowDefinitionDispenser.GetRootActivity(Type
workflowType, Boolean createNew, Boolean initForRuntime)
at System.Workflow.Runtime.WorkflowRuntime.InitializeExecutor(Guid instanceId,
CreationContext context, WorkflowExecutor executor, WorkflowInstance workflowInstance)

After debugging my workflow I noticed that the error occured in a while loop where I used “Declarative Rule Condition”. The solution for this problem was to edit the Visual Studio project file (using notepad) and add the second line below:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Windows Workflow Foundation\v3.5\Workflow.Targets" />

Then I reloaded the project and redeployed the wsp and everything worked :)

Using LINQ with SharePoint

by Håvard Hebnes 20. June 2009 16:46

If you're looking for a specific item in a list, there are many ways you can get it.

You could go through the whole list using a loop (not recommended):

foreach (SPListItem item in list.Items) 
{ 
    if(item.Title == "Title1892") 
        return item; 
}

You could use a SPQuery:

var tmpQuery = new SPQuery 
                   { 
                       Query = 
                           @"<Where> 
                              <Eq> 
                                 <FieldRef Name='Title' /> 
                                 <Value Type='Text'>Title1892</Value> 
                              </Eq> 
                           </Where>" 
                   }; 
list.GetItems(tmpQuery);

or you could use LINQ:

Method 1:

List<SPListItem> q = (from SPListItem item in list.Items 
        orderby item.Title 
            ascending 
        where item.Title == "Title1892" 
        select item).ToList();

Console.WriteLine(q[0].Title);

Method 2:

var query = from SPListItem item in list.Items 
                      orderby item.Title 
                          ascending 
                      where item.Title == "Title1892" 
                      select item;

Console.WriteLine(query.ElementAt(0).Title);

Access is denied crawl SharePoint 2007 webapplications

by Håvard Hebnes 19. June 2009 07:35

If you're using host headers when creating new webapplications in SharePoint, you'll probably get this error when you're trying to run the search crawler:

"Access is denied. Verify that either the Default Content Access Account has access to this repository, or add a crawl rule to crawl this repository. If the repository being crawled is a SharePoint repository, verify that the account you are using has "Full Read" permissions on the SharePoint Web Application being crawled. (The item was deleted because it was either not found or the crawler was denied access to it.)"

To fix this you can create the webapplications without hostheaders or you can try this:
http://support.microsoft.com/kb/896861

I've used the first method:
- run regedit
- goto HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
- add a new Multi-String Value named BackConnectionHostNames and press enter
- edit the new key and type the host headers you would like (seperate by newline)
- exit regedit and restart the IISAdmin service

More details can be found at Tommy Segoros blog.


Powered by BlogEngine.NET 1.6.0.0
Theme by Mads Kristensen