SharePoint Experts, Information Architects, Expert Witness

We provide consulting in a broad array of business and technology from architecture to design to deployment of global systems with a focus on surfacing data in the enterprise. Specialists in Microsoft, we are a premier provider of SharePoint Expertise (including 2016 and Office 365). We also provide Expert Witness/Legal Expert in eDiscovery, source discovery, patent infringement, piracy and more! We also have established SICG DLDS s.a. - our counterpart in Costa Rica that specializes in water systems (http://www.crwatersolutions.com) - Contact me direct: david_sterling@sterling-consulting.com or call 704-873-8846 x704.

Search This Blog

Thursday, December 30, 2010

Failure trying to use SharePoint GetUserProfileByName via web services in WCF or Silverlight

Recently came across an error that seems to have creeped into the SharePoint Web Services - I've checked against 2007 and will against 2010 but I believe the problem is still there. Specificaly when using the UserProfilesService.asmx, I was trying to use the GetUserProfileByName in Silverlight...lo and behold, I get a beaut of an error:

{System.ServiceModel.Dispatcher.NetDispatcherFaultException: The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter
http://microsoft.com/webservices/SharePointPortalServer/UserProfileService:GetUserProfileByNameResponse. The InnerException message was 'Error in line 1 position 375. 'Element' 'IsPrivacyChanged'
from namespace 'http://microsoft.com/webservices/SharePointPortalServer/UserProfileService' is not expected. Expecting element 'Name | Privacy'.'.  Please see InnerException for more details. ---> System.Runtime.Serialization.SerializationException: Error in line 1 position 375. 'Element' 'IsPrivacyChanged' from namespace 'http://microsoft.com/webservices/SharePointPortalServer/UserProfileService' is not expected. Expecting element 'Name | Privacy'.

Spent a good deal of time tracking this one down - fortunately, came across a post so a thanks to Ben McClaren for finding/fixing the problem: The problem is in the WSDL of the Service - the parameters are in the wrong order.

After adding the service reference, open the Reference.CS file that was created - You'll see the parameters that are specified in the wrong order:

1. Name (order not specified)
2. Privacy (order not specified)
3. Values  (order not specified)
4. IsPrivacyChanged  (order specified as 3)
5. IsValueChanged  (order specified as 4)

They need to be:
1. IsPrivacyChanged
2. IsValueChanged
3. Values
4. Name
5. Privacy

Replace the existing code (or simply update as I did) so that it looks like this (note the Order):
 [System.Runtime.Serialization.DataMemberAttribute(IsRequired = true, Order = 1)]
    public bool IsPrivacyChanged
    {
      get
      {
        return this.IsPrivacyChangedField;
      }
      set
      {
        if ((this.IsPrivacyChangedField.Equals(value) != true))
        {
          this.IsPrivacyChangedField = value;
          this.RaisePropertyChanged("IsPrivacyChanged");
        }
      }
    }
    [System.Runtime.Serialization.DataMemberAttribute(IsRequired = true, Order = 2)]
    public bool IsValueChanged
    {
      get
      {
        return this.IsValueChangedField;
      }
      set
      {
        if ((this.IsValueChangedField.Equals(value) != true))
        {
          this.IsValueChangedField = value;
          this.RaisePropertyChanged("IsValueChanged");
        }
      }
    }
    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 3)]
    public SharePointProfileViewer.UserProfileServiceReference.ValueData[] Values
    {
      get
      {
        return this.ValuesField;
      }
      set
      {
        if ((object.ReferenceEquals(this.ValuesField, value) != true))
        {
          this.ValuesField = value;
          this.RaisePropertyChanged("Values");
        }
      }
    }
    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 4)]
    public string Name {
      get {
        return this.NameField;
      }
      set {
        if ((object.ReferenceEquals(this.NameField, value) != true)) {
          this.NameField = value;
          this.RaisePropertyChanged("Name");
        }
      }
    }
    [System.Runtime.Serialization.DataMemberAttribute(IsRequired = true, Order = 5)]
    public SharePointProfileViewer.UserProfileServiceReference.Privacy Privacy {
      get {
        return this.PrivacyField;
      }
      set {
        if ((this.PrivacyField.Equals(value) != true)) {
          this.PrivacyField = value;
          this.RaisePropertyChanged("Privacy");
        }
      }
    }

FYI AS AN UPDATE:
The above fixes WCF but sadly, not Silverlight....In Silverlight the Service reference returns Null values for everything (Web service works, but service ref does not which leaves little choice in Silverlight) - I'll keep you posted if I find that answer.

Free Web Parts for 2007 and 2010

Stumbled on this site and found some cute web parts that are free - I've been asked for some of these by clients - free is a good price! Most are somewhat silly, but a lot are pretty useful.

Company is Amrein Engineering...

http://www.amrein.com/apps/page.asp?Q=5728

Tuesday, December 7, 2010

That Pesky "Missing Server Side Dependencies" - SharePoint 2010

On just about every install, I've come across the SharePoint Health Analyzer indicating "Missing Server Side Dependencies" - this is a known problem in 2010 (I'm just repeating here for others and my own benefit when I get the question from a client).

Easy fix:

Go to Central Administration > General Application Settings > Farm Search Administration
Click on the Search Service Application to open it (not the Proxy link)

Note: if the Search Service hasn't been set up, it must be before you can do this.

Once opened, close the browser window and run (from Runr or the Command line: IISReset -noforce

Open Central Administration, click on the Health Analyzer link, view the "Missing Dependencies..." message and click the link to Rerun health - problem should be corrected.

Monday, November 29, 2010

Binding within Silverlight DataGrids and Controls

When trying to bind to controls and cells within DataGrids (particularly when using DataTemplates), it can be hard to figure out when you are not getting a value when you have a properly formed control as in:

<TextBlock Text="{Binding MyTextField}"...

If the value is not appearing (and you are not getting an error), this could mean that you have to preface the binding so Silverlight can 'find it' - this is done using either CellValue or RowValue as in:

<TextBlock Text="{Binding CellValue.MyTextField}"...

or

<TextBlock Text="{Binding RowValue.MyTextField}"...

Have fun...

Troubles using Dialog Boxes in Silverlight

I've often come across this but after working on a long project, often forget the basics - as in using Dialog boxes for File operations. The stanard error is "Dialogs must be user-initiated" which is a little off from the point - you'd expect that a click event could also open a dialog however it is because the threading (context) of the Dialog would be lost in the event.

The solution is simple - simply put all of the Dialog logic in its own method and call the method from the click event:

private void ExportFile_Click(object sender, RoutedEventArgs e)
{
              ExportTheFile();
}

private void ExportTheFile();
{
     SaveFileDialog SFD = new SaveFileDialog();
     SFD.DefaultExt = "*.txt";
     SFD.Filter = "Text (*.txt) | *.txt|All files (*.*)|*.*";
     if (SFD.ShowDialog())
     {
            StreamWriter OutStream = new StreamWriter(SFD.OpenFile());
            ...
      }
}

Thursday, November 18, 2010

Using Properties in Silverlight User Controls

When you are using Silverlight User Controls (or custom controls) you may have a need to pass properties between the main control and the user control (i.e. Main.xaml to MyCustom.xaml). If you are used to traditional SharePoint development, you are familiar with defining properties as so:
//// Resource Start Date:
private string _resrcStartDate = "";
public string ResourceStartDateIn
{
    get
    {
         return _resrcStartDate;
    }
    set    
    {
        _resrcStartDate = value;
    }
}

You will find that this works fine when you create a control via code or even if passing a 'hard coded' value to it - for example:
<local:MyCustomControl x:Name="CustControl" ResourceStartDateIn="01/01/2011" />

However, if you want to use this control for binding, for example using it in a DataGrid (or AgDataGrid), you'll find this does NOT work - in fact, in most cases, the project will simply crash without any indication of what is what. For example:

<local:MyCustomControl x:Name="CustControl" ResourceStartDateIn="{Binding Path=ResStartDate}" />

OR:

<local:MyCustomControl x:Name="CustControl" ResourceStartDateIn="{Binding Path=ResStartDate, Converter={StaticResource dateConverter}}" />

Note: the use of the dateConverter simply returns the date as a string - the first one assumes a true date.
The fix is really quite simple - Silverlight objects can pass values back and forth, but binding is another matter; in order to do this, Silverlight needs a "Dependency Property" it can use to maintain the information. To do this, simply change the way you define the property as so:

//
// Resource Start Date:
public static readonly DependencyProperty ResourceStartDateInProperty = DependencyProperty.Register("ResourceStartDateIn", typeof(string), typeof(MyCustomControl), null);
public string ResourceStartDateIn
{
    get { return (string)GetValue(ResourceStartDateInProperty); }
    set { SetValue(ResourceStartDateInProperty, value); }
}
//

NOTE: There is much more to the dependency property - this example is simply a quick and dirty for the SharePoint folks doing development.

Sunday, November 7, 2010

Debugging Silverlight and SharePoint

If you are like me, you've had lots of fun trying to debug Silverlight projects combined with WCF and SharePoint. The problem is that unless Silverlight is 'hosted' from the SharePoint site itself, you cannot debug it if you directly access the SharePoint API in the WCF code (it fails because you are not authenticated, alal the double hop issue). Errors include "No Cross Domain policy found" or failing on returning data (the Async call fails).

After much screwing around, I finally came up with a short way to do it reliably:

SIDE NOTE: Look into the Winsmarts tool for enabling Silverlight - I didn't need it for this but have used in the past - see : http://spwcfsupport.codeplex.com/ - as it turns out, that is only required for WCF. I found that using SharePoint web services gives you a big bang for the buck; in most cases you don't have to worry about authentication (users usually have the rights needed to run SP Web services) and you get great access (not as much as the API granted) to SharePoint lists, files, etc.

1) First off, create a new folder in the SharePoint site - i.e. c:\inetpub\wwwroot\wss\VirtualDirectories\70 (I'm using 70 as the sample port - this is whatever port you are using); name is not important but I use "SilverLtApps" (you can alternately use a SharePoint library but for debug, that requires you to upload changes each time). In practice, I've started out using the directory but when complete, simply deleted the direcotry and created a library of the same name (thus not having to change the URL in the content editor web part as you will see below).

2) Next, create your Silverlight Application using the standard setup (sellect Host the Silverlight application in a new Web Site).

3) After the project loads, create a new HTML file in the Silverlight that does a redirect to the SharePoint Site where Silverlight is to be used:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta HTTP-EQUIV="REFRESH" content="0; url=http://myspsite:70/Pages/default.aspx">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
</head>
<body>
</body>
</html>
4) Next, right click on the Solution and Set Startup Projects. Change the Startup Project to 'Single startup project' to the Silverlight project (not the .Web project).

5) Next, right click on the Silverlight Project and select Properties; on the Debug tab under Start Action, click Specific Page and select the HTML page you created in step 3. ALTERNATELY - Right click on the HTML file and select "Set as Start page".

6) Still in properties, click the Build tab - set the Output path to the folder created in Step 1.

7) Now create a clientaccesspolicy.xml file for the site - this can be generic (wide open) as so:

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain url="*" />
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true" />
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

OR You can set it specific to the domain/site:

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain url="http://MySPSite" />
      </allow-from>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="http://MySPSite" />
        <domain uri="https://MySPSite" />
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true" />
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>
If you want to use a CrossDomain.xml file as well (this is a fall back to Adobe Flash time), it looks like this:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>
8) VERY IMPORTANT: Using SharePoint Designer, open the site and upload the file(s) to the ROOT of the site - you can add the files to the actual file root as well but this depends on if you have access to the file system or not - if you can use Designer, do so.

9) Next, upload the Silverlight.js file that is included in the .WEB project (or copy to the root folder if you have access).

10) If you hit F5 or Debug > Start Debugging, the site should come up as expected.

11) Now, to test your Silverlight, edit the page in SharePoint and add a Content Editor Web Part - in the Source simply put in the required settings for the control (note that the Script inclusion is optional but I generally use it - it also allows you to point to the Silverlight.js file if you have to upload it to a SharePoint Library instead of using the file system):

    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript">
        function onSilverlightError(sender, args) {
            var appSource = "";
            if (sender != null && sender != 0) {
              appSource = sender.getHost().Source;
            }
           
            var errorType = args.ErrorType;
            var iErrorCode = args.ErrorCode;
            if (errorType == "ImageError" || errorType == "MediaError") {
              return;
            }
            var errMsg = "Unhandled Error in Silverlight Application " +  appSource + "\n" ;
            errMsg += "Code: "+ iErrorCode + "    \n";
            errMsg += "Category: " + errorType + "       \n";
            errMsg += "Message: " + args.ErrorMessage + "     \n";
            if (errorType == "ParserError") {
                errMsg += "File: " + args.xamlFile + "     \n";
                errMsg += "Line: " + args.lineNumber + "     \n";
                errMsg += "Position: " + args.charPosition + "     \n";
            }
            else if (errorType == "RuntimeError") {          
                if (args.lineNumber != 0) {
                    errMsg += "Line: " + args.lineNumber + "     \n";
                    errMsg += "Position: " +  args.charPosition + "     \n";
                }
                errMsg += "MethodName: " + args.methodName + "     \n";
            }
            throw new Error(errMsg);
        }
    </script>

    <div id="silverlightControlHost">
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="800" height="320">
    <param name="source" value="/SilverLtApps/TestSPService.xap"/>
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="3.0.40624.0" />
    <param name="autoUpgrade" value="true" />

    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
      <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
    </a>
     </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>

Note the location of the .XAP file points to the relative folder created in step 1 - be aware that if you are using subsites, the url may need to be the full URL less the http://<site> part - example: http://site/subsite/subsite/ would be /subsite/subsite/. Close the content editor part and save/publish the page.

12) Add a button or some code and set a few brakepoints in your Silverlight app and happy debugging!!!!

Setting Service Reference URL in Silverlight

Like I'm sure some of you have, I spent a good half day trying to find out the best way to dynamically assign a service reference in Silverlight. In my case, it happened to be using the SharePoint Lists service wherein, the URL to the service will change in every environment. In addition, this is a production system with no access.

After much searching (and weeding through every WCF explaination that was of no help), I discovered a comment in a post that answers the problem. When you establish the service, you simply need to specify the proper URL (I pass it to the code using Silverlight Initparams) - PROBLEM SOLVED!!

NOTE: Notice that I enabled it to pull the actual Service Path in the event I just want to change the primary URL.

//
// SETUP THE SOAP CLIENT:
//
SPListsRef.ListsSoapClient ListRefSoapClient = null;
//
bool FullServiceURLPassed = true;
string ServiceOrSiteURL = "http://paspdev1x64:70/_vti_bin/Lists.asmx";

if (FullServiceURLPassed)
{
string url = new Uri(Application.Current.Host.Source, ServiceOrSiteURL).AbsoluteUri;
ListRefSoapClient = new SPListsRef.ListsSoapClient("ListsSoap", url);
}
else
{
string SetServiceURL = "http://paspdev1x64:70/";
//
// Get the existing service URL:
//
SPListsRef.ListsSoapClient sr = new SPListsRef.ListsSoapClient();
//
// Fix the channel:
//
string ServiceURL = sr.InnerChannel.Via.ToString();
sr = null;
//
int LocOf = ServiceURL.IndexOf("/", 8);
string SvcURLOnly = ServiceURL.Substring(LocOf, ServiceURL.Length - LocOf);
if (SetServiceURL.LastIndexOf("/") == (SetServiceURL.Length - 1))
{
SetServiceURL = SetServiceURL.Substring(0, SetServiceURL.Length - 1);
}
//
SetServiceURL = SetServiceURL + SvcURLOnly;
string url = new Uri(Application.Current.Host.Source, ServiceOrSiteURL).AbsoluteUri;
ListRefSoapClient = new SPListsRef.ListsSoapClient("ListsSoap", url);
}

Saturday, November 6, 2010

Publishing Error in SharePoint 2010 - The form cannot be rendered

I've found this around in various forms - How to correct Publishing Error in SharePoint 2010:

The form cannot be rendered. This may be due to a misconfiguration of the Microsoft SharePoint Server State Service. For more information, contact your server administrator.

To fix this, login to the server running Central Administration, click Start > Microsoft SharePoint 2010 Products > SharePoint 2010 Management Shell OR Start > Administrative Tools > Windows Powershell Modules

In the Powershell, type in the following to create a new Service Application:

$serviceApp = New-SPStateServiceApplication -Name “State Service”

Next, create the State Service Database and associate it with a service application:

New-SPStateServiceDatabase -Name ”StateServiceDatabase” -ServiceApplication $serviceApp

Last, create a State Service Application Proxy and associate it with the service application:

New-SPStateServiceApplicationProxy -Name ”State Service” -ServiceApplication $serviceApp -DefaultProxyGroup
Exit the Powershell and run reset IIS - Start > Run > IISReset /noforce

Thursday, November 4, 2010

Setting Script, Execute Folder Permissions in IIS 7.5

Was working on an issue with Silverlight the other day and wanted to verify the folder settings in IIS 7.5 and it occurred to me I'd forgotten. I checked around and it took a few minutes to find - but too long so here's the short of it:

Open Internet Information Services Manager (IIS)
Expand the web site in the left hand panel
Locate the folder and click on it to select it
Double click 'Handler Mappings' in the middle panel
On the right hand panel, click 'Edit Feature Permissions...'
Set permissions as desired

Was simple, but they've made it a four step process in 7/7.5...

Thursday, October 21, 2010

Vista Whole Computer Backup Nightmares

I recently had a Vista laptop drive go south on me (one of the Raid channels failed). I struggled a bit but managed to get a full system backup both to disk and to DVD. Note: I HIGHLY suggest you use a separate USB drive - if you backup to CD or DVD, there's no guarantee you'll be able to find the driver to load during a restore!

Laptop returned with a fresh drive and the OEM installation setup (Sony FYI). It took me forever to find out where the "Complete" restore for Vista is - turns out you must actually have the original Vista installation drive, boot from it (you may have change your BIOS settings to do so), go through the starting page (language selection, etc.) then there is where the "Recovery" options are (lower left of the screen).

From the "System Recovery Options" you'll find "Windows Complete PC Restore" - it allows you to find the backup and attempt to do the restore.

Great post for the above: Getting to Vista System Recovery

Not feeling sure, I went ahead and did a whole system backup of the OEM installation - figured it all else failed at least I could get back there then went to the process (with the Vista DVD) to get to the recovery.

I thought I was good to go but wait....

First problem - Couldn't find the backup - it turns out that the DVD driver isn't loaded by the install so can't see it (even though it loaded Vista's install from there - argh!). Unless you have a DVD driver on a disk you are SOL. Fortunately, I had my USB drive backup - I hooked it up and viola, recovery correctly found it.

Oh but there's more...

Attempting to restore to the original system, I got the error "Disk too small" to handle the backup. What? This was the same system - did Sony give me a smaller disk?

I spent quite a while looking for the answers only to find out that every one had the problems I did but no answer - not from anyone (including Microsoft!).

I finally found the key - from the System Recovery there is a link to open a command line window; clicking on this you can access the "WBAdmin" utility; while most documenation around this is centered on Windows 2008, it actually works with Vista too...

The trick is to get the dang syntax straight and matching the correct name with the backup. In my case, the backup was on Drive G (my USB) and I was restoring Drive C. Note that instead of a USB Drive, you can use a network share as in \\server\sharename

First, you have to find the correct backup:

wbadmin get versions

In my case, the above finds nothing so I found out the drive location must be specified:

wbadmin get versions -backupTarget:G:

This got me the version name of the backup on G: - to do the recovery, I used:

wbadmin start recovery -version:10/05/2010-16:31 -itemtype:volume -items:C: -backupTarget:G: -recoverytarget:C:

NOTE: The Version MUST match exactly as 'get versions' shows and you cannot specify a 'path' as the backupTarget (use the drive letter only).

wbadmin start recovery -version:10/05/2010-16:31 -itemtype:volume -items:C: -backupTarget:G: -recoverytarget:C:

Also in my case, I had two different system backups on my USB - this requires you to add the machine name (the one I wanted was called VistaLaptop):

wbadmin start recovery -version:10/05/2010-16:31 -itemtype:volume -items:C: -backupTarget:G: -recoverytarget:C: -machine:VistaLaptop

Viola - after a few seconds, recovery started!

Ah...but we're not done yet - after the restore completed and I restarted, I got a nasty message:

0xc000000E error - unable to locate file \windows\system32\winload.exe

Text told me to reload the original Vista DVD, go through the start up then on the installation page, click the Repair Computer option.

When you do this, you get the System Recovery Options again - this time, I selected "Startup Repair", it seemed to run OK so I clicked Finish (NOTE: Be sure to remove your Vista DVD beforehand as it will automatically reboot on the click).

So again, I thought I was done but no..I tried running it again. No luck..

Finally found a post where they'd used this method:

Start from the DVD
Select your language and keyboard and click next
Select Recovery
Open the Command prompt.
x:\sources>Diskpart.exe
Diskpart> Select Disk=0
Diskpart> Select Partition=1
Diskpart> Active
Diskpart> exit

NOTE: MAKE SURE YOUR USB DRIVE IS NOT CONNECTED..

The post included using BCDEdit to make some changes - I DID NOT DO that; rather, after running the above, I rebooted on the CD and re-ran System Repair found the problem and fixed it!!!

Rebooted and happily running again!

Thursday, October 7, 2010

SharePoint Application Creation Error: One or more types failed to load

SharePoint Application Creation Error: One or more types failed to load

You might encounter this on either MOSS or SharePoint Server 2010 - the following are the solutions for this I've found:

1) The Database cannot be reached - it is either offline or cannot be accessed - in most cases the Event log will indicate this (may be a few messages down so check all errors) - Fix: First make sure the SQL Server is running then validate connectivity by checking the login (use the ODBC Data Connection) or try restarting the SQL Server
2) Office BETA is installed  - Fix: Remove it
3) Office 2010 installed with SharePoint 2007 - Fix: Remove it

Have fun!

Monday, September 20, 2010

SharePoint 2010 User Profile Connection Failure

When attempting to create a new Connection in the User Profile, you receive an error message similar to:

Unable to process Put message

When you return to the connection list, the connection will not have been made.

The problem here is the account you used to access the AD - this must be a farm administrator account (the SPFarm account) as it needs full permissions to update the user profile database. Enter the profile connection again with the correct account and it should work fine.

Wednesday, August 25, 2010

SharePoint Designer 2010 Error - The list of workflow actions on the server references an assembly that does not exist

When attempting to create a new workflow using SharePoint Designer 2010, I've encountered the error:

"The list of workflow actions on the server references an assembly that does not exist. Some actions will no be available. The assembly strong name is Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Contact your administrator for more information."

In investigating this, I did find a post answered by Paul Stork on the Microsoft site - in his reply to the problem, he inidcated that this would typically happen when someone had added a custom workflow DLL to the WSS.ACTIONS or MOSS.ACTIONS files located in the hive under Template\1033\Workflow.

That said, as you can see by the error above, "Microsoft.SharePoint" is hardly a custom DLL. I got the above to occur when trying to create a workflow in a team site type site collection in a full instance of SharePoint (Standard or Enterprise).

I found two ways that seem to fix this:

1) Close Designer and run an IISReset - reopen Designer and try again
2) Use Designer to open an existing SharePoint publishing site (or create one if necessary) and create a new workflow (you should not get the error). Don't save it, just simply close Designer. Reopen the original site and try again.

MOSS MA Not Found error in User Profile Synchronization or System.ServiceModel.EndpointNotFoundException occurred in OWSTIMER

When setting up a user profile service, connecting to AD or similar, when you try to complete the process, you get the very vauge error message "MOSS MA not found". A little confusing (after all, there's no more MOSS right?) but turns out the problem is that the Forefront Identity Management Service is not running.

OR - you see errors in the Event Application Log (Event ID 4096) showing:

An unhandled exception ('System.ServiceModel.EndpointNotFoundException') occurred in OWSTIMER.EXE.

Followed by "ResourceManagementService/MEX. TCP error code 10061".

NOTE: On a development machine, the second error will often open the Just In Time Debugger.

The issue is that the service is set to automatically start but if no connections are established, it shuts down.

To correct both issues, simply go to Start > Administrative Tools > Services then find "Forefront Identity Manager Service" and start it (make sure it actually starts). When done, return to Central Admin and try the sync again.

IMPORTANT NOTE: If you perform a restart of the Server and again, the ForeFront service does not start, use the Services and modify the properties to set the Startup type to be 'Automatic (Delayed Start)',

NOTE: As a related issue:

Fixing the user profile service may require a bunch of fixes; one may be that you simply can't open the Configure Synchronization Connections (you get an error page).

Here's one possible fix:

First, try to connect to the Forefront Identity Manager -
c:\Program Files\Microsoft Office Servers\14.0\Synchronization Service\UIShell\miisclient.exe

If you get an error it might be because of:

1) The service itself is not running - you have to go through Administrative Tools > Services  then start both FFI services
2) The account you are using is not a member of the local system group called FIMSyncAdmins

These aren't the only fixes - there may be others but the above might help! Sometimes a complete reboot is required.

Friday, August 13, 2010

SharePoint 2010 - InfoPath cannot generate a form template for the SharePoint list error

Common error new users might see when trying to edit a List/Libary Form using InfoPath:

InfoPath cannot generate a form template for the SharePoint list.

The SOAP response indicates that an error occurred on the server:

Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.
<detail><errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/">
List does not exist.
The page you selected contains a list that does not exist. It may have been deleted by another user.
</errorstring><errorcode xmlns="http://schemas.microsoft.com/sharepoint/soap/">0x82000006</errorcode></detail>

Nasty eh? Actually it simply means that the list is in Datasheet view - apparently, SharePoint doesn't know this....change back to the normal view and try again.

Thursday, August 12, 2010

Sharepoint 2010 Error - The list cannot be displayed in Datasheet view...

When you try to open a list in a datasheet view, you recieve:

The list cannot be displayed in Datasheet view for one or more of the following reasons:

- A datasheet component compatible with Microsoft SharePoint Foundation is not installed.
- Your Web browser does not support ActiveX controls.
- A component is not properly configured for 32-bit or 64-bit support.

Thanks to Malcon.com for this one for a solution on Windows 2008R2 x64 is to do the following:

1) Download and install the 2007 Office System Driver: Data Connectivity Components (AccessDatabaseEngine.exe) from http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en
(ALL FRONT END SERVERS)

2) Download and install the Microsoft Office Access Runtime and Data Connectivity 2007 Service Pack 2 (SP2) (accessruntimeanddataconnectivity2007sp2-kb957262-fullfile-en-us.exe) from http://www.microsoft.com/downloads/details.aspx?FamilyId=6F4EDEED-D83F-4C31-AE67-458AE365D420&displaylang=en
(ALL FRONT END SERVERS)

Run IISReset to reset and try again.

SharePoint 2010 Error - Event ID 7043

SharePoint front end Application Event Log shows error 7043 over and over relating to the TaxonomyPicker.ascx - located in c:\Program files\common files\microsoft shared\web server extensions\14\template\Controltemplates

Update: Applies to SharePoint 2010 (2013 not confirmed yet)

This file is a left over file from the 2007 version for compatibility - there is not only a typo in it, the file itself is not required. Since SharePoint manages this folder, it detects it and tries to load it.

Fix is simple - navigate to the folder using Windows Explorer and rename the file from from taxonomypicker.ascx to taxonomypicker.hold_ascx


Friday, July 2, 2010

SharePoint 2010 Error - This Report failed to load because session state is not turned on

This appears when attempting to access one of the SharePoint 2010 Reporting features like the Issues site, etc.

The problem is that during the configuration, it is not turned on by default. The fix is quite simple - open the SharePoint 2010 Management Shell (Powershell...reminds me of DEC's command line language!). Enter in the command enable-SPSessionStateService and hit return (no space between the hypen). This will prompt you for a database name, enter something like SPSessDB - this name will be used internally.

Do an IISReset and you should be all set.

Wednesday, June 23, 2010

Cannot open SharePoint Site - "Cannot Complete Action" SharePoint Site

Creating a site or after making adjustments in IIS, you cannot load a SharePoint Site or get to the http:///_layouts/settings.aspx (settings) page and receive an error:


Cannot complete action.

Please try again.

at Microsoft.SharePoint.Library.SPRequestInternalClass.OpenWebInternal

While I've heard of many causes, one common one most miss - check IIS and ensure that ASP.NET Impersonation is enabled (Administrative Tools > Internet Information Services (IIS) Manager - expand the sites, select the site you are working with and click Authentication under the IIS group - enable ASP.NET Impersonation), run IISReset and you should be good to go!

FYI - MOSS 2007 and SharePoint 2010 have the same issue (msg is diff in 2010).

Tuesday, April 27, 2010

Exception form HRESULT: 0x80040e14

While I've seen it posted elsewhere, this is another place! This error usually occurs when running an STSADM command, typically attempting to do a Restore of a backup. This error indicates that SQL Server does not have enough space to provision the data. Two fixes: 1) remove some files from the Hard Drive to free up some space - 2) Verify you have enough space and run the command again. One or the other should fix you up.

Wednesday, April 14, 2010

Trying to Test SharePoint Cache for 2007???

I recently came into an issing when trying to test the SiteMapProvider cache in MOSS 2007 and using GetCachedListItemsByQuery; in specific, I was testing it a class using an Application and came across an odd error with this line of code:

PortalWebSiteMapNode portalNode = (PortalWebSiteMapNode)portalSiteMapProvider.FindSiteMapNode(web.ServerRelativeUrl);

Which returned:

Unable to cast object of type 'Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapNode' to type 'Microsoft.SharePoint.Publishing.Navigation.PortalWebSiteMapNode'.

This common routine is based on the following code:

public static SiteMapNodeCollection GetCache(string listName, SPQuery query, string siteUrl)
{
try
{
SiteMapNodeCollection portalItems;
SPWeb web = new SPSite("http://site").RootWeb;
// Commented out to run in App:
//SPWeb web = SPContext.Current.Site.RootWeb;
PortalSiteMapProvider portalSiteMapProvider = PortalSiteMapProvider.WebSiteMapProvider;
PortalWebSiteMapNode portalNode = (PortalWebSiteMapNode)portalSiteMapProvider.FindSiteMapNode(web.ServerRelativeUrl);
portalItems = portalSiteMapProvider.GetCachedListItemsByQuery(portalNode, listName, query, web);
return portalItems;
}
catch (Exception ex)
{
WriteEventLog(ex, "Navigation Control - Error attempting to get Cache from the PortalSiteMap Provider", "ERROR", 1000, "");
return null;
}
}

After scratching my head for a bit, tracing the object model and knowing the code Should work, I exhausted searching and found nothing like this had been covered.

The problem is that you cannot run this code unless you are in the context of the site - that is, running as a control or web part.

While this is highly contrary to the way it should be in simple .net (after all, we have full access to the SharePoint API via an app and a type is a type right?), this object model can't do it.

Friday, March 19, 2010

WCF Service cannot be tested under SharePoint

Using WCF with SharePoint? Finding that the service can't be checked though it is working? Check the IIS 7.0 Application Pool setttings for the "Managed Pipeline Mode" - if it is set to "Classic" (as SharePoint demands), you'll get:

Server Error in '/' Application.


--------------------------------------------------------------------------------

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: //.svc

To check it, change the Mode to be "Integrated" and the service (if installed correctly) will render as it is supposed to. When done, change it back.

Note: As I mentioned in my previous post, this setting will prevent you from getting to the SharePoint site; after you have tested and made sure it is working, be sure that t

You receive a Server Application Unavailable in MOSS/WSS using IIS 7.0

Recently came across a clients problem - on attempting to render the SharePoint Site, they received:

Server Application Unavailable


The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request.
Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.

After some checking, it turns out that it was due to the Application Pool - while properly setup (the site had been operating just fine), the "Managed Pipeline Mode" was set to Integrated - changing this back to Classic (SharePoint 2007 requires this) fixes the problem.

Monday, March 15, 2010

Installing SharePoint 2010 using a SQL Named Instance

When doing the setup for SharePoint and connecting to the database for the first time and you are using a named instance, for example: SQLx64\SP2010SQL, you must specify the full path. Note however, you have to be sure the text case is exact as it is in SQL Server.

Doing a new install the other day, the error message displayed was quite alarming - protocol errors or some such. I had inadvertantly entered the name in uppercase as in: SQLX64\SP2010SQL.

Thursday, March 11, 2010

Windows Data Execution Prevention detected an add-on - Windows 2008, IE8, SharePoint, Office

In a development VM system running Windows Server 2008 R2, I had inadvertantly left the Automatic Updates to On. Naturally, they downloaded and rebooted overnight so the next morning, I logged on in had the unpleasant surprise of ALL of my SharePoint sites crashing (including Central Admin). On attempt to open the page, it would partially display then immediately redirect to a new URL:

res://ieframe.dll/acr_depnx_error.htm#http://

This page displays the default message:
Windows Data Execution Prevention detected an add-on trying to use system memory incorrectly. This can be caused by a malfunction or a malicious add-on

Checking the event log, I found this:

Faulting application name: iexplore.exe, version: 8.0.7600.16385, time stamp: 0x4a5bc69e

Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0xc0000005
Fault offset: 0x00000000
Faulting process id: 0x388
Faulting application start time: 0x01cac155f16f8d64
Faulting application path: C:\program files (x86)\internet explorer\iexplore.exe
Faulting module path: unknown
Report Id: 465927c2-2d49-11df-8e60-000c29c0b5a1
 
I also happened to try to open Word - bam - application fault as well. Event log showed:
 
Faulting application name: WINWORD.EXE, version: 12.0.6514.5000, time stamp: 0x4a89d533

Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0xc0000005
Fault offset: 0x00000000
Faulting process id: 0x10ac
Faulting application start time: 0x01cac156e171c287
Faulting application path: C:\Program Files (x86)\Microsoft Office\Office12\WINWORD.EXE
Faulting module path: unknown
Report Id: 21b31ab7-2d4a-11df-8e60-000c29c0b5a1
 
All solutions I looked at indicated either DEP, removing add-ons or somehow related to flash. Not the case - I followed all of them to no avail. I revereted to a backup and ran Windows Update manually and lo and behold, two Microsoft Office Security Updates, when removed, corrected the problem:

Security Update for the 2007 Microsoft Office System (KB969613)

Download size: 1.9 MB
Update type: Important
A security vulnerability exists in the 2007 Microsoft Office System and the Microsoft Office Compatibility Pack that could allow arbitrary code to run when a maliciously modified file is opened. This update resolves that vulnerability.

More information:

http://www.microsoft.com/downloads/details.aspx?FamilyId=63BD8F14-E736-46CE-AF66-D30F17461E5A&displaylang=en

Security Update for the 2007 Microsoft Office System (KB974234)
Download size: 525 KB
Update type: Important

This update resolves a problem that can cause programs that use the Outlook View Control with Forms 2.0, such as Microsoft Office Outlook with Business Contact Manager, to stop functioning as expected after Security Update for Microsoft Office Outlook 2007 (KB972363) is installed.

http://support.microsoft.com/kb/974234

Note that when I tested Word with the patches removed, I received an odd install message:



After this, Word started normally.

So to verify, I tried adding them back - while I suspected KB969613 was the problem, adding both back, one at a time corrected the problem completely.

NOTE: As an update, I repeated this on another system with the same problem; I ended up removing all of the Security Updates that occurred (approx release date 3/9/2010) - this included:

Office updates:

969559
978380
973704
972581

Security updates:
977724
969693
957789
973709
978382

Update for Junk Email Filter:
979895

As always...good luck!

Wednesday, February 24, 2010

The binding at system.serviceModel/bindings/basicHttpBinding does not have a configured binding named

Odd message you might encounter using WCF bindings in Visual Studio 2008; I came up with this one and took awhile to figure out what it was exactly - to save you some time. This error occurs when your are trying to debug a WCF Service project - when you attach to the process, a pop up box appears with the Binding name and the nice message "error" shown next to it. Clicking on this will display a better message in a window below - this starts out with:

The binding at system.serviceModel/bindings/basicHttpBinding does not have a configured binding named ''.

This occurs when the 'bindingConfiguration=""' tag is set on your binding in the App.config file of the WCF Service. If you look at the detail of the error, it will indicate the line number, etc. in the file .dll.config - this is a copy of the App.Config file so you map one to one. If not using it simply remove it and the error will go away.

Saturday, February 20, 2010

How to fix AG_E_UNKNOWN_ERROR in Silverlight Control

This one stumped me when I first started out on Silverlight and in searching for answers, had much difficulty in finding an actual answer; I'd forgotten to post this at the time but...

The problem with this error is that it is simply telling you there is something wrong with the XAML code - personally, they could have made it easier but that is another story. It is usually that the target control cannot be located from the XAML.

First, double check the way you are defining the xmlns for the control - by default this is:

xmlns:CustomControls="clr-namespace:MyControl"

This should also include the assembly name as:

xmlns:CustomControls="clr-namespace:MyControl;assembly=MyControl"


The other is to check your Control Template TargetType - be sure that the CLASS name is specified:


If nether of the above help, the problem is in the XAML sytax - comment out as much as possible then introduce new elements one at a time until you determine the cause.

Monday, February 15, 2010

Silverlight WrapPanel and DockPanel

As we all know, Silverlight incorporated into SharePoint is an excellent way to update the UI and provide very lightweight controls.

However, like most folks (so I've found), the WrapPanel and DockPanel namespaces can be difficult to find for a beginner. WrapPanels are so necessary for SharePoint's pages and web parts and DockPanel is cool for app development.

I stumbled on this (as everyone else) then did the usual searching...I did find some posts but the examples were incomplete and some, including one from Microsoft that are incorrect (on CodePlex!).

To access this control, you have to do the following:

First, make sure that a) You have Silverlight 3 (or 4) installed and b) that you have downloaded and installed the Silverlight Toolkit from CodePlex.

Next, in your Silverlight project, add a Reference to System.Windows.Controls.Toolkit (I usually include System.Windows.Controls too).


Now in your control, you add the Namespace for the Toolkit with the other name spaces as so:


<usercontrol x:class="SomeControl.MainPage">
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"


...


Now you can add your control:

....
<controls:wrappanel x:name="AWrapPanel" horizontalalignment="Left" scrollviewer.horizontalscrollbarvisibility="Auto" scrollviewer.verticalscrollbarvisibility="Auto" verticalalignment="Top" width="200" />
....

Have fun!

Wednesday, February 10, 2010

Service Application Failure in SharePoint 2010

I've seen a number of posts on this - just to save some folks time, I'm reposting:

During the SharePoint 2010 installation, you may encounter an error when first setting up the central administration similar to this:

The service application proxy "User Profile Service Application" could not be provisioned because of the following error....

To fix, download the Hotfix from Microsoft:

http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=23806


Note: this is also known as KB976462

Unfortunately, the settings will be off in your installation so to be on the safe side, you have to completely uninstall SharePoint from the web server. When complete, you must also go to SQL Server and delete all of the databases that were created (alas, 2010 does not remove them automatically with an uninstall).

Office Server 2010 Configuration Error "errorData"

When connecting to the Database during the installation of SharePoint, you might come across this:

"An error has occurred while validating the configuration settings. An exception of type System.ArgumentNullException was thrown. Additional exception information: The errorData argument cannot be null or zero length.

Parameter name: errorData"

Like all of you, I googled and binged my way to figure out what was wrong - however, none of them saved me.

DON'T worry! This error only means that SharePoint cannto connect to the database.

If you look into the event log, you'll see the error:

"Unkown SQL Exception 53 occurred. Addtional error information from SQL Server is included below.

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error 40 - Could not open a connecto SQL Server)"


Here's the checklist for fixing the problem - after each of these, try to connect:

1) Verify you can connect to the database using DataSources (Start > Administrative Tools > Data Sources (ODBC)) - setup a new System DSN and supply server name, etc. however when you go to connect, be sure that "Connect to SQL Server to obtain..." is NOT checked. Also, click on Client Configuration to check that TCP/IP is selected and the correct port is set (or set to Auto).

SIDE NOTE: Using the Datasource setup is the way to set a different port than the standard 1433.

2) On the SQL Server, verify using the SQL Server Configuration Manager - for each Named Pipes is enabled as a protocol for the SQL Native Client 10.0 Configuration and under the SQL Server Network Configuration.

3) On the SQL Server, verify that the SQL Agent and SQL Browser services are running and set to Automatic (Start > Administrative Tools > Services). If they are not started, start them.

4) On the SQL Server, check the services themselves and ensure that the account used for running the SQL Server is correct and in the Local Administrators group on all servers. In my case, the SQL Browser service was running as Local System - I changed that to the correct account and rebooted.

5) Last - and this was my environment - using VM's with DHCP addresses, I added the SQL Server to the HOSTS file (c:\windows\system32\drivers\etc\hosts).

Opening Firewall Ports for SQL Server 2008

Installing SQL Server 2008 requires opening a number of ports for applications like SharePoint to use it. Having searched a bit myself, here's the Microsoft instuctions:

http://support.microsoft.com/kb/968872

While dated, the script still works - paste the commands into a command file (.bat or .cmd) and run from the command line.

Tuesday, February 9, 2010

Unable to install SharePoint 2010 due to SQL 2008 Version

You might encounter an error when you attempt to install SharePoint Foundation or Server 2010 using SQL Server 2008. In the message displayed, you'll see a link to Microsoft - this is the Hotfix page where you can register for the hotfix and Microsoft will email it to you.

Be aware however that you will get two hotfix files - password protected Zip files that extract an executable - to save you sometime, only the patch file 398850_intl_x64_zip.exe is necessary. In over ten installs, the other patch, 381569_intl_x64_zip.exe will not run; it fails when starting setup.

Monday, January 4, 2010

Now available for new projects

Expert in Corporate Networking/Collaboration Systems and Enterprise Information Architecture. Subject matter expert in Microsoft Technologies with emphasis on SharePoint (SharePoint Server, SharePoint Foundation and Versions 2-3), SQL Server and .NET/Silverlight Technologies. Expert in all aspects of SharePoint implementations and conversions (2003-2007 and 2007 to 2010).

Noted technical author including MOSS 2007 The Complete Reference.

Direct contact: david_sterling@sterling-consulting.com - +1 704-202-2282.