<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8155529690205240899</id><updated>2011-10-08T11:00:55.997-07:00</updated><category term='custom'/><category term='MOSS 2007'/><category term='Web part'/><category term='Target Application'/><category term='BCS'/><category term='Shared Services'/><category term='custom connector'/><category term='.Net Assembly Connector'/><category term='BDC'/><category term='SPD'/><category term='SharePoint'/><category term='Secure Store Service'/><category term='WCF Connector'/><category term='Profile Page'/><category term='BCS Secure Store SharePoint 2010'/><category term='Client OM'/><category term='ISystemUtility'/><category term='ISsoProvider'/><category term='SSO'/><category term='SharePoint 2010'/><category term='External List'/><category term='Microsoft.SharePoint.Client'/><category term='Installation'/><category term='Farm'/><title type='text'>Jardalu Inc</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-837688424460455514</id><published>2010-05-18T08:22:00.000-07:00</published><updated>2010-05-18T08:27:17.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SPD'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF Connector'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><title type='text'>SPD (WCF connection) - Cannot find any matching endpoint</title><content type='html'>When adding a WCF connection to SPD 2010, you will hit "Cannot find any matching endpoint configuration" error, if you did not know the service endpoint URL (see figure 2).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S_DxrjzNcXI/AAAAAAAAAKg/iOYepVA2XkY/s1600/WCF+Connector+-+unable+to+find.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S_DxrjzNcXI/AAAAAAAAAKg/iOYepVA2XkY/s320/WCF+Connector+-+unable+to+find.png" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 1: Cannot find any matching endpoint.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/S_D4FqcUzfI/AAAAAAAAAKo/sEX_i-0mLmI/s1600/connection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/S_D4FqcUzfI/AAAAAAAAAKo/sEX_i-0mLmI/s320/connection.png" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 2: WCF connection properties&lt;/div&gt;&lt;br /&gt;If you look into the SharePoint ULS logs, you will see a corresponding error message "Could not initialize the endpoint components".&lt;br /&gt;&lt;br /&gt;If you are connecting to ASMX based web service, the "Service Endpoint URL" is the ASMX service url. For example, if the ASMX service is hosted at &lt;a href="http://myserver/service.asmx"&gt;http://myserver/service.asmx&lt;/a&gt; then the values for "Service Metadata URL" and "Service Endpoint URL" are as follows -&lt;br /&gt;&lt;br /&gt;Service Metadata URL - &lt;a href="http://myserver/service.asmx?wsdl"&gt;http://myserver/service.asmx?wsdl&lt;/a&gt;&lt;br /&gt;Service Endpoint URL - &lt;a href="http://myserver/service.asmx"&gt;http://myserver/service.asmx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you are connecting to WCF service, these values can get interesting. Now with WCF service, the service may not expose metadata endpoint, can expose WSDL endpoint or can expose MEX endpoint.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;a) Metadata endpoint not exposed&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When the metadata endpoint is not exposed by the WCF service, SPD (BCS) cannot consume that WCF service.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;b) Metadata endpoint exposed as WSDL&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When the WCF service exposes metadata as WSDL, its "Service Endpoint URL" can be determined by looking in the WSDL. Simply load the WSDL in the web browser ( &lt;a href="http://myserver/service.svc?wsdl"&gt;http://myserver/service.svc?wsdl&lt;/a&gt;) and search for soap12:address in the WSDL. Typically it will appear in the end of the WSDL (see figure 3).&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;wsdl:service name="Service"&amp;gt;&lt;br /&gt;&amp;lt;wsdl:port name="WSHttpBinding_IService" binding="tns:WSHttpBinding_Service"&amp;gt;&lt;br /&gt;&amp;lt;soap12:address location="http://myserver/Service.svc" /&amp;gt; &lt;br /&gt;&amp;lt;wsa10:EndpointReference&amp;gt;&lt;br /&gt;&amp;lt;wsa10:Address&amp;gt;http://myserver/Service.svc&amp;lt;/wsa10:Address&amp;gt; &lt;br /&gt;&amp;lt;Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity"&amp;gt;&lt;br /&gt;&amp;lt;Spn&amp;gt;host/myserver.com&amp;lt;/Spn&amp;gt; &lt;br /&gt;&amp;lt;/Identity&amp;gt;&lt;br /&gt;&amp;lt;/wsa10:EndpointReference&amp;gt;&lt;br /&gt;&amp;lt;/wsdl:port&amp;gt;&lt;br /&gt;&amp;lt;/wsdl:service&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 3: Service Endpoint URL in WSDL&lt;/div&gt;&lt;br /&gt;There can be more than one soap address in the WSDL, if the service exposes different bindings for these addresses. Depending on your requirement you can choose one of the service address.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;c) Metadata endpoint exposed as MEX&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When the metadata is exposed as MEX, you will need to read the endpoint addresses using svcutil.exe (&lt;a href="http://msdn.microsoft.com/en-us/library/aa347733.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa347733.aspx&lt;/a&gt;). When you execute svcutil.exe against the MEX endpoint, it will generate a config file. In the config file, search for "client" tag (it appears at the end of config file). Look at the addresses for the endpoint. &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;client&amp;gt;&lt;br /&gt;  &amp;lt;endpoint address="http://myserver/service.svc/basicHttpBinding"&lt;br /&gt;                binding="basicHttpBinding" bindingConfiguration="MyService"&lt;br /&gt;                contract="IServiceInterface" name="ConsoleService" /&amp;gt;&lt;br /&gt;&amp;lt;/client&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;Figure 4: Service Endpoint URL through MEX endpoint&lt;/div&gt;&lt;br /&gt;The addresses mentioned in the config file are the "Service Endpoint URL" that SPD will understand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-837688424460455514?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/837688424460455514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=837688424460455514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/837688424460455514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/837688424460455514'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/05/spd-wcf-connection-cannot-find-any.html' title='SPD (WCF connection) - Cannot find any matching endpoint'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_L-_bg80K5vQ/S_DxrjzNcXI/AAAAAAAAAKg/iOYepVA2XkY/s72-c/WCF+Connector+-+unable+to+find.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-8841427154570139280</id><published>2010-05-11T21:46:00.001-07:00</published><updated>2010-05-15T21:47:08.272-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BCS Secure Store SharePoint 2010'/><title type='text'>Secure Store and .Net Connectivity Assembly</title><content type='html'>Awesome post at BCS blog which shows how to use Secure Store API.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/bcs/archive/2010/05/11/how-do-i-leverage-secure-store-from-within-my-net-connectivity-assembly.aspx "&gt;http://blogs.msdn.com/bcs/archive/2010/05/11/how-do-i-leverage-secure-store-from-within-my-net-connectivity-assembly.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-8841427154570139280?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/8841427154570139280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=8841427154570139280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/8841427154570139280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/8841427154570139280'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/05/secure-store-and-net-connectivity.html' title='Secure Store and .Net Connectivity Assembly'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-1227821524996401000</id><published>2010-03-05T11:43:00.000-08:00</published><updated>2010-03-09T13:05:07.081-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom connector'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='ISystemUtility'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><title type='text'>Writing Custom Connector for BCS</title><content type='html'>BCS in SharePoint 2010 provides following connectors - Database, WebService, WCF, .NET and custom connector. This blog explains how you can write and deploy your own custom connector, if one of the BCS connectors do not meet your requirements.&lt;br /&gt;&lt;br /&gt;This documentation (&lt;a href="http://msdn.microsoft.com/en-us/library/ee554911%28office.14%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee554911(office.14).aspx&lt;/a&gt;) explains when to use .NET assembly connector and when to write your own custom connector.&lt;br /&gt;&lt;br /&gt;Assuming that you are required to write your own custom connector, lets look at the steps to achieve the goal.&lt;br /&gt;&lt;br /&gt;The steps for custom connectors are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Write code for custom connector&lt;/li&gt;&lt;li&gt;Deploy custom connector in SharePoint&lt;/li&gt;&lt;li&gt;Write model for custom connector&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;Writing Custom Connector&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Writing custom connector requires implementing ISystemUtility (&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.businessdata.runtime.isystemutility%28office.14%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.businessdata.runtime.isystemutility(office.14).aspx&lt;/a&gt;) interface. The simple most custom connector requires implementing ExecuteStatic method in the interface. Other methods/properties can be boiler plate code.&lt;br /&gt;&lt;br /&gt;Here is the simple most custom connector. Although the connector does not do anything, technically it can be deployed in SharePoint 2010.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;using Microsoft.BusinessData.MetadataModel;&lt;br /&gt;using Microsoft.BusinessData.Runtime;&lt;br /&gt;using Microsoft.BusinessData.Infrastructure;&lt;br /&gt;&lt;br /&gt;namespace SharePointConnector&lt;br /&gt;{&lt;br /&gt;    public class Connector : ISystemUtility&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        #region ISystemUtility Members&lt;br /&gt;&lt;br /&gt;        public IEnumerator CreateEntityInstanceDataEnumerator(object rawStream, &lt;br /&gt;            ISharedEntityState sharedEntityState)&lt;br /&gt;        {&lt;br /&gt;            // implement your enumerator&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public IConnectionManager DefaultConnectionManager&lt;br /&gt;        {&lt;br /&gt;            get { return null; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public ITypeReflector DefaultTypeReflector&lt;br /&gt;        {&lt;br /&gt;            get { return null; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void ExecuteStatic(IMethodInstance mi, &lt;br /&gt;            ILobSystemInstance si, &lt;br /&gt;            object[] args, &lt;br /&gt;            IExecutionContext context)&lt;br /&gt;        {&lt;br /&gt;            // implement your logic&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 1:&lt;/b&gt; Simple most custom connector&lt;/div&gt;&lt;br /&gt;Let's take a look at the various methods and properties in the ISystemUtility interface.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;CreateEntityInstanceDataEnumerator&lt;/pre&gt;This method converts line-of-business data stream into an enumerator of raw AdapterObjects. Implementing this method is necessary. If your connector gets IEnumerable as raw stream, you can just return the corresponding enumerator from the method.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;DefaultConnectionManager &lt;/pre&gt;This property allows you to manage connections for your external system. You can return null if you don't want connection management. BDC (Business Data Connectivity) will use its own default connection manager.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;DefaultTypeReflector &lt;/pre&gt;This property allows you manage the type reflection for your objects. For example, if your external system returns stream, BDC will unable to do a meaningful type reflection and you will have to write your own type reflection. If your external system returns .NET types than you don't need to provide any type reflection. For default implementation this property should return null.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;ExecuteStatic&lt;/pre&gt;This method is the most important method in the interface. In the method, you should implement CRUDQ (create, read, update, delete and query) stereotypes for the connector.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public void ExecuteStatic(IMethodInstance mi, &lt;br /&gt;            ILobSystemInstance si, &lt;br /&gt;            object[] args, &lt;br /&gt;            IExecutionContext context)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Lets take a look at the method parameters&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mi&lt;/b&gt; : This parameter represents the MethodInstance that is being executed by BDC. This parameter corresponds to the &lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;MethodInstance&amp;gt;&lt;/pre&gt;element with the LobSystem/Entity/Method in the BDC metadata model.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;si&lt;/b&gt; : This parameter represents the LobSystemInstance the method instance is being executed against. This parameter corresponds to the &lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;LobSystemInstance&amp;gt;&lt;/pre&gt;element with the LobSystem in the BDC metadata model.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;args&lt;/b&gt; : This parameter is the &lt;l&gt;Parameters&lt;/l&gt; of the MethodInstance that is being executed. The last item in the array is reserved for the return parameter for the method instance.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;context&lt;/b&gt; : This parameter sets the execution context of BDC. For all practical purposes this parameter can be ignored because External List in SharePoint does not set the execution context and you or BDC will not control this variable. The context can be different for BDC running under Office client.&lt;br /&gt;&lt;br /&gt;Ok, now that we understand ISystemUtility interface, lets do some fun stuff.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;Sample&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;In this sample, I will create a custom connector that will return "Movie" entity from an external system. For simplicity, the connector will support only "Finder" and "SpecificFinder" stereotypes. This sample will use in-memory data (external system).&lt;br /&gt;&lt;br /&gt;Since the external system returns .NET types, implementation of the custom connector is simple.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public IEnumerator CreateEntityInstanceDataEnumerator(object rawStream, &lt;br /&gt;    ISharedEntityState sharedEntityState)&lt;br /&gt;{&lt;br /&gt;    IEnumerable enumerableStream = rawStream as IEnumerable;&lt;br /&gt;    if (enumerableStream != null)&lt;br /&gt;    {&lt;br /&gt;        return enumerableStream.GetEnumerator();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    throw new InvalidOperationException("not valid stream returned");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 2:&lt;/b&gt; CreateEntityInstanceDataEnumerator implementation&lt;/div&gt;&lt;br /&gt;In the method CreateEntityInstanceDataEnumerator, the base Enumerator is returned. Off course, for a real external system you may have to write an enumerator.&lt;br /&gt;&lt;br /&gt;ExecuteStatic method will check what kind of stereotype is being executed and will execute corresponding methods on the external system. As said before, this connector just supports Finder/SpecificFinder stereotype, so it will throw for other stereotypes.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public void ExecuteStatic(IMethodInstance mi, &lt;br /&gt;    ILobSystemInstance si, &lt;br /&gt;    object[] args, &lt;br /&gt;    IExecutionContext context)&lt;br /&gt;{&lt;br /&gt;    // provide only read functionality&lt;br /&gt;    switch(mi.MethodInstanceType)&lt;br /&gt;    {&lt;br /&gt;        case MethodInstanceType.SpecificFinder:&lt;br /&gt;&lt;br /&gt;            IParameterCollection parameters = mi.GetMethod().GetParameters();&lt;br /&gt;&lt;br /&gt;            // make sure there is only one input parameter for the method&lt;br /&gt;            // and one return parameter.&lt;br /&gt;            if (parameters.Count != 2 )&lt;br /&gt;            {&lt;br /&gt;                string message = "Method " + mi.GetMethod().Name +" must have one input and one return parameter";&lt;br /&gt;                throw new InvalidMetadataObjectException(message);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // check if the input parameter is integer type&lt;br /&gt;            // and the return parameter is "Movie" type&lt;br /&gt;            Type param1Type = Type.GetType(parameters[0].GetRootTypeDescriptor().TypeName, false);&lt;br /&gt;            Type param2Type = Type.GetType(parameters[1].GetRootTypeDescriptor().TypeName, false);&lt;br /&gt;&lt;br /&gt;            if ( param1Type == null || param1Type != typeof(Int32))&lt;br /&gt;            {&lt;br /&gt;                string message = "Method " + mi.GetMethod().Name +" must contain input of type System.Int32";&lt;br /&gt;                throw new InvalidMetadataObjectException(message);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if ( param2Type == null || param2Type != typeof(Movie))&lt;br /&gt;            {&lt;br /&gt;                string message = "Method " + mi.GetMethod().Name +" must contain input of type " + typeof(Movie).ToString();&lt;br /&gt;                throw new InvalidMetadataObjectException(message);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            int id = (int)args[0];&lt;br /&gt;            args[1] = MovieData.GetMovie(id);&lt;br /&gt;&lt;br /&gt;            break;&lt;br /&gt;&lt;br /&gt;        case MethodInstanceType.Finder:&lt;br /&gt;            args[args.Length-1] = MovieData.GetMovies();&lt;br /&gt;            break;&lt;br /&gt;&lt;br /&gt;        default:&lt;br /&gt;            throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 3:&lt;/b&gt; ExecuteStatic implementation&lt;/div&gt;&lt;br /&gt;The method verifies the Finder/SpecificFinder signature in metadata model. This way the connector can ensure that the metadata model is not invalid. Finally it executes the external system and sets the return value in &lt;b&gt;args&lt;/b&gt; parameter.&lt;br /&gt;&lt;br /&gt;I have attached complete source code at the end of this post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Deploying Custom Connector in SharePoint&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Deploying custom connector in SharePoint 2010 is pretty straight forward. All you need is to GAC the assembly in all&amp;nbsp; the SharePoint machines. This includes web-front ends as well as application servers in the farm. If you have the requirement to execute custom connectors on Office client ( take External List to Outlook or Workspaces ) you will need to GAC the assembly in client machines as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Writing Models for Custom Connector&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that you have written the custom connector and have already deployed in the SharePoint, lets get a sample external list for the custom connector.&lt;br /&gt;&lt;br /&gt;The LobSystem Type for custom connector must specify&amp;nbsp; "Custom". When custom connectors are used, the model must contain the SystemUtilityTypeName property for LobSystem.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;LobSystems&amp;gt;&lt;br /&gt;    &amp;lt;LobSystem Type="Custom" Name="CustomLobSystem"&amp;gt;&lt;br /&gt;      &amp;lt;Properties&amp;gt;&lt;br /&gt;        &amp;lt;Property Type="System.String" Name="SystemUtilityTypeName"&amp;gt;SharePointConnector.Connector, SharePointConnector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dc97b363e814985e&amp;lt;/Property&amp;gt;&lt;br /&gt;      &amp;lt;/Properties&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 4:&lt;/b&gt; LobSystem properties for custom connector&lt;/div&gt;&lt;br /&gt;SystemUtilityTypeName is the fully qualified name for custom connector type. The following figure shows snippet of the metadata model.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S5Fbcd0d4iI/AAAAAAAAAKA/8eEZjhtaIsI/s1600-h/custom+connector+-+metadata+model.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S5Fbcd0d4iI/AAAAAAAAAKA/8eEZjhtaIsI/s320/custom+connector+-+metadata+model.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Figure 5:&lt;/b&gt; Metadata model snippet for custom connector &lt;/div&gt;&lt;br /&gt;The sample metadata model is also attached in the source code (see end of post).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Custom connector in action&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that we have our metadata model for custom connector, lets fire it up in the SharePoint. The following screen shots show the external list running against custom connector.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/S5FcPbKL2jI/AAAAAAAAAKI/CrRbUjl_hAM/s1600-h/custom+connector+-+choose+external+content+type.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/S5FcPbKL2jI/AAAAAAAAAKI/CrRbUjl_hAM/s320/custom+connector+-+choose+external+content+type.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Figure 6:&lt;/b&gt; Choosing external content type&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Figure 6 shows the external content type displayed for custom connector. At this point the custom connector is not being executed. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/S5Fch-pWroI/AAAAAAAAAKQ/wLOENWiEF2A/s1600-h/custom+connector+-+Finder+called+from+external+list.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/S5Fch-pWroI/AAAAAAAAAKQ/wLOENWiEF2A/s320/custom+connector+-+Finder+called+from+external+list.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Figure 7: &lt;/b&gt;Finder stereotype executed in custom connector (via External list)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S5FcrWH1svI/AAAAAAAAAKY/kwzToXWZ0w8/s1600-h/custom+connector+-+Specific+Finder+from+EL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S5FcrWH1svI/AAAAAAAAAKY/kwzToXWZ0w8/s320/custom+connector+-+Specific+Finder+from+EL.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Figure 8:&lt;/b&gt; SpecificFinder stereotype executed in custom connector &lt;/div&gt;&lt;br /&gt;Figure 7 and Figure 8 shows Finder and SpecificFinder stereotyped operations running in custom connector. Our custom connector executes the external system methods and returns appropriate data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Source Code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sample with complete source code can be downloaded from &lt;a href="http://docs.google.com/leaf?id=0B9yE8q3PVfjeNzFiODhkZjEtYjVmNC00ZDAxLWJjZTAtM2U4M2NlYjUyMWZk&amp;amp;hl=en"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;As-is&lt;/b&gt;&lt;br /&gt;The source code/software is provided "as-is". No claim of suitability, guarantee, or any warranty whatsoever is provided. Source Code and executable files can not be used in commercial applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-1227821524996401000?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/1227821524996401000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=1227821524996401000' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/1227821524996401000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/1227821524996401000'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/03/writing-custom-connector-for-bcs.html' title='Writing Custom Connector for BCS'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_L-_bg80K5vQ/S5Fbcd0d4iI/AAAAAAAAAKA/8eEZjhtaIsI/s72-c/custom+connector+-+metadata+model.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-4170487176454705731</id><published>2010-03-01T02:24:00.000-08:00</published><updated>2010-03-01T02:24:59.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>SharePoint - Non root site collection caution</title><content type='html'>SharePoint allows one to create non root site collection without having a root site collection. For example, you can create a site collection as "http://sharepoint/sites/" without having any site collection at "http://sharepoint".&lt;br /&gt;&lt;div style="color: red;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b style="color: red;"&gt;Caution&lt;/b&gt; : Even though SharePoint does not prevent you creating a non-root site collection without a root site collection, not having a root site collection is not a supported configuration. Some SharePoint features break without a root site collection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-4170487176454705731?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/4170487176454705731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=4170487176454705731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4170487176454705731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4170487176454705731'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/03/sharepoint-non-root-site-collection.html' title='SharePoint - Non root site collection caution'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-6550489632517249772</id><published>2010-01-24T03:48:00.000-08:00</published><updated>2010-01-24T03:50:41.176-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft.SharePoint.Client'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Client OM'/><title type='text'>Client OM (Microsoft.SharePoint.Client) Samples for SharePoint 2010</title><content type='html'>SharePoint 2010 introduces a new client side object model for retrieving data from SharePoint. The client OM is included in Microsoft.SharePoint.Client.dll and Microsoft.SharePoint.Client.Runtime.dll.&amp;nbsp;Library reference for client OM&amp;nbsp;is&amp;nbsp;at &lt;a href="http://msdn.microsoft.com/en-us/library/ee536622(office.14).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee536622(office.14).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Client OM is counterpart to the Server OM with notable differences&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Client OM works on both on SharePoint server and client&lt;/li&gt;&lt;li&gt;Client OM does not fetch data implicitly&lt;/li&gt;&lt;li&gt;Client OM is supported for .NET as well as for ECMA (javascript etc)&lt;/li&gt;&lt;/ul&gt;The essence of the Client OM lies in &lt;strong&gt;ClientContext&lt;/strong&gt; class ( Microsoft.SharePoint.Client.ClientContext ). This class allows you to get connected with the SharePoint server and then fetch data as required. &lt;br /&gt;&lt;br /&gt;In this blog, I will covering few samples on how to use the Client OM.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Basics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First you will need to reference Microsoft.SharePoint.Client.dll and Microsoft.SharePoint.Client.Runtime.dll and then use Microsoft.SharePoint.Client namespace.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;using Microsoft.SharePoint.Client;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To connect to the SharePoint server, you will need SharePoint URL and create a ClientContext object.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;ClientContext context = new ClientContext("http://sharepoint");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;At this moment the client context for SharePoint is defined but no connection has been made. Now lets initialize the Web object (equivalent to SPWeb in Server OM).&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;Web web = context.Web;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To connect/fetch data from the SharePoint, &lt;strong&gt;ExecuteQuery&lt;/strong&gt; needs to be call on ClientContext object.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;context.ExecuteQuery();&lt;br /&gt;Console.WriteLine("Web '{0}' [Id:{1}]",web.Title, web.Id);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you run the above code, it will throw&amp;nbsp;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;PropertyOrFieldNotInitializedException&lt;/span&gt; exception with following message &lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;The property or field has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The code throws exception because client OM does NOT fetch data implicitly. So, we will modify the code to fetch the data the data explicitly. Since we are only interested in Id and the Title of the Web, the code will explicitly request those data. &lt;strong&gt;Retreive&lt;/strong&gt; method in the Web class to tell the client OM which data needs to be fetched. The complete code will look like&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;ClientContext context = new ClientContext("http://sharepoint");&lt;br /&gt;Web web = context.Web;&lt;br /&gt;web.Retrieve(&lt;br /&gt;    WebPropertyNames.Id,&lt;br /&gt;    WebPropertyNames.Title&lt;br /&gt;);&lt;br /&gt;context.ExecuteQuery();&lt;br /&gt;&lt;br /&gt;Console.WriteLine("Web '{0}' [Id:{1}]",web.Title, web.Id);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The above code will print the title and the id for the Web.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ClientObject&lt;/strong&gt; class is the base class for all Client OM object. ClientObject exposes the following important methods that code will use again and again.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;IsPropertyAvailable(string propertyName)&lt;/span&gt;&amp;nbsp;- Returns a flag that indicates whether the specified property has been retrieved or set, or has not been retrieved or set.&lt;br /&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Retreive()&lt;/span&gt; - Retreives all properties associated with the object&lt;br /&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Retreive(params string[] propertyNames)&lt;/span&gt; - Retreives the specified properties associated with the object&lt;br /&gt;&lt;br /&gt;All classes deriving from ClientObject class has a property names&amp;nbsp;class ( for example, Web class has WebPropertyNames class ) which tells what properties can be fetched for the object.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Sample 1: Get all lists in web&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The following sample will get all the lists in a web. For the list, the code will fetch the list id, list title and the type of the list.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public void GetAllList()&lt;br /&gt;{&lt;br /&gt;    ClientContext context = new ClientContext("http://sharepoint");&lt;br /&gt;    ClientObjectPrototype allListsPrototype = context.Web.Lists.RetrieveItems();&lt;br /&gt;    allListsPrototype.Retrieve(&lt;br /&gt;        ListPropertyNames.Title,&lt;br /&gt;        ListPropertyNames.Id,&lt;br /&gt;        ListPropertyNames.BaseType);&lt;br /&gt;    context.ExecuteQuery();&lt;br /&gt;&lt;br /&gt;    foreach (SPClient.List list in context.Web.Lists)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine("List : {0}, Id: {1}, BaseType : {2}", list.Title, list.Id, list.BaseType);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Sample 2: Get list details&lt;/span&gt;&lt;br /&gt;In this sample, given a list the code gets the details for the list. The details include the Fields and Views of the list.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public void GetListDetails(string listName)&lt;br /&gt;{&lt;br /&gt;    ClientContext context = new ClientContext("http://sharepoint");&lt;br /&gt;    List list = context.Web.Lists.GetByTitle(listName);            &lt;br /&gt;&lt;br /&gt;    // get fields name and their types&lt;br /&gt;    ClientObjectPrototype allFieldsPrototype = list.Fields.RetrieveItems();&lt;br /&gt;    allFieldsPrototype.Retrieve( FieldPropertyNames.Id,&lt;br /&gt;        FieldPropertyNames.Title, &lt;br /&gt;        FieldPropertyNames.FieldTypeKind);&lt;br /&gt;&lt;br /&gt;    // get view title&lt;br /&gt;    ClientObjectPrototype allViewsPrototype = list.Views.RetrieveItems();&lt;br /&gt;    allViewsPrototype.Retrieve(&lt;br /&gt;        ViewPropertyNames.Id,&lt;br /&gt;        ViewPropertyNames.Title);&lt;br /&gt;&lt;br /&gt;    context.ExecuteQuery();&lt;br /&gt;&lt;br /&gt;    foreach (Field field in list.Fields)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine("Field '{0}', Type : {1}", field.Title, field.FieldTypeKind);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    ViewCollection views = list.Views;&lt;br /&gt;    foreach (View view in views)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine("View '{0}', Id : {1}", view.Title, view.Id);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Sample 3: Get list items&lt;/span&gt;&lt;br /&gt;The following code gets the list items in the given list.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public void GetListItems(string listName)&lt;br /&gt;{          &lt;br /&gt;    // build the CAML query to get ALL items&lt;br /&gt;    CamlQuery query = new CamlQuery();&lt;br /&gt;    query.ViewXml = "";&lt;br /&gt;&lt;br /&gt;    ClientContext context = new ClientContext("http://sharepoint");&lt;br /&gt;    List list = context.Web.Lists.GetByTitle(listName);&lt;br /&gt;    ListItemCollection items = list.GetItems(query);&lt;br /&gt;    items.RetrieveItems().Retrieve();&lt;br /&gt;    context.ExecuteQuery();&lt;br /&gt;&lt;br /&gt;    foreach (ListItem item in items)&lt;br /&gt;    {&lt;br /&gt;        // assumes that the list has a field with name 'Title'&lt;br /&gt;        Console.WriteLine("Item : {0}, Id : {1}", item.FieldValues["Title"], item.Id);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Sample 4: Add item to a list&lt;/span&gt;&lt;br /&gt;The following code adds a list item in the given list.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public void AddItemToList(string listName)&lt;br /&gt;{&lt;br /&gt;    ClientContext context = new ClientContext("http://sharepoint");&lt;br /&gt;&lt;br /&gt;    List list = context.Web.Lists.GetByTitle(listName);&lt;br /&gt;    ListItemCreationInformation lic = new ListItemCreationInformation();&lt;br /&gt;    ListItem item = list.AddItem(lic);&lt;br /&gt;&lt;br /&gt;    //add the item information&lt;br /&gt;    item["Title"] = "Adding a new Item";&lt;br /&gt;&lt;br /&gt;    // List has a field name Checkbox which is a checkbox type field&lt;br /&gt;    item["Checkbox"] = true;  &lt;br /&gt;&lt;br /&gt;    item.Update();&lt;br /&gt;    item.Retrieve(ListItemPropertyNames.Id);&lt;br /&gt;&lt;br /&gt;    context.ExecuteQuery();&lt;br /&gt;&lt;br /&gt;    Console.WriteLine("Id : {0}", item.Id);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Client OM is very useful however it takes time to understand how to use the API and get the best out of it. Enjoy !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-6550489632517249772?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/6550489632517249772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=6550489632517249772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/6550489632517249772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/6550489632517249772'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/01/client-om-microsoftsharepointclient.html' title='Client OM (Microsoft.SharePoint.Client) Samples for SharePoint 2010'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-2303998844889245610</id><published>2010-01-22T23:28:00.000-08:00</published><updated>2010-01-22T23:56:01.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='BDC'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net Assembly Connector'/><title type='text'>Reading BDC model properties in .NET Assembly Connector</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;Introduction&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;BDC in SharePoint 2010 support connectors for "Web Service", "Wcf Service", "Database", ".NET Assembly" and "Custom". ( BDC in MOSS 2007 has support for "Web Service" and "Database" only ).&lt;br /&gt;&lt;br /&gt;.NET Assembly Connector basically allows to host a virtual LobSystem. The concept for .NET assembly connector is very similar to my suggestions of hosting .NET assembly in MOSS 2007 - &lt;a href="http://jardalu.blogspot.com/2008/09/bdc-beyond-web-service-and-database.html"&gt;BDC : Beyond Web-Service and Database&lt;/a&gt;.&amp;nbsp; Since .NET assembly is natively supported in SharePoint 2010, it has way more capabilities than my suggested approach. The following article (&lt;a href="http://msdn.microsoft.com/en-us/library/aa868997.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa868997.aspx&lt;/a&gt;) explains how to create a .NET Assembly Connector in BDC.&lt;br /&gt;&lt;br /&gt;This blog explains how you can use BDC model properties within your .NET assembly code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;IContextProperty Interface&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To use the BDC model in the .NET assembly, lets first take a look at the IContextProperty interface [&lt;a href="http:///#r1"&gt;r1&lt;/a&gt;]. IContextProperty interface is defined in Microsoft.BusinessData.SystemSpecific namespace ( in Microsoft.BusinessData.dll )&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;namespace Microsoft.BusinessData.SystemSpecific&lt;br /&gt;{&lt;br /&gt;    public interface IContextProperty&lt;br /&gt;    {&lt;br /&gt;        IExecutionContext ExecutionContext { get; set; }&lt;br /&gt;        ILobSystemInstance LobSystemInstance { get; set; }&lt;br /&gt;        IMethodInstance MethodInstance { get; set; }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 1: IContextProperty interface&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;.NET assembly connector in BDC uses IContextProperty interface to communicate the context in which BDC is executing the method in the class. If your class implements IContextProperty interface, BDC will initialize the three properties of the interface. Here is an example how you can write your class to implement the interface.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;using Microsoft.BusinessData.SystemSpecific;&lt;br /&gt;&lt;br /&gt;namespace MyNamespace&lt;br /&gt;{&lt;br /&gt;    public class MyClass : IContextProperty&lt;br /&gt;    {&lt;br /&gt;        private IExecutionContext context;&lt;br /&gt;        private ILobSystemInstance lobSystemInstance;&lt;br /&gt;        private IMethodInstance methodInstance;&lt;br /&gt;&lt;br /&gt;        #region Implementing IContextProperty interface&lt;br /&gt;&lt;br /&gt;        public IExecutionContext ExecutionContext &lt;br /&gt;        { &lt;br /&gt;            get { return this.context; } &lt;br /&gt;            set { this.context = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public ILobSystemInstance LobSystemInstance&lt;br /&gt;        { &lt;br /&gt;            get { return this.lobSystemInstance; } &lt;br /&gt;            set { this.lobSystemInstance = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public IMethodInstance MethodInstance&lt;br /&gt;        { &lt;br /&gt;            get { return this.methodInstance; } &lt;br /&gt;            set { this.methodInstance= value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 2: IContextProperty implementation&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;At this time "MyClass" class is ready to get the context from BDC.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Defining properties in BDC Model&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Depending on what kind of information you need in the .NET code, you can define your property at appropriate element in the BDC model. For example, if your class needs to connect to different server for different region, LobSystemInstance would be a good place to define your property. In the case method needs to know which Locale is preferred by the user, it can look into the properties of Method or MethodInstance.&lt;br /&gt;&lt;br /&gt;In this example, the class connects to a different database server based on which region the code is getting executed.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;private string GetDbConnectionString(string region)&lt;br /&gt;{&lt;br /&gt;    string dbConnectionStringFormat = "Data Source={0};Initial Catalog=myDataBase;Integrated Security=SSPI;";&lt;br /&gt; &lt;br /&gt;    // default DB Server&lt;br /&gt;    string regionDbServer = "northamericaDBServer"; &lt;br /&gt;&lt;br /&gt;    if (region == "emea")&lt;br /&gt;    {&lt;br /&gt;        regionDbServer = "emeaDbServer";&lt;br /&gt;    }&lt;br /&gt;    else if (region == "asia")&lt;br /&gt;    {&lt;br /&gt;        regionDbServer = "asiaDbServer";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return string.Format(dbConnectionStringFormat, region);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 3: Customize connection string&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The above code relies on the region information to format DB connection string. Unfortunately, when the code gets executed in SharePoint, the method has no idea where it is being executed and would default to using north america db server.&lt;br /&gt;&lt;br /&gt;To solve this issue, you can define a property in the BDC model which tells the code which DB server to use. Lets say the property name is "Region" and is defined within the LobSystemInstance.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;LobSystemInstances&amp;gt;&lt;br /&gt;  &amp;lt;LobSystemInstance Name="NorthAmerica"&amp;gt;&lt;br /&gt;    &amp;lt;Properties&amp;gt;&lt;br /&gt;      &amp;lt;Property Name="Region" Type="System.String"&amp;gt;northamerica&amp;lt;/Property&amp;gt;&lt;br /&gt;    &amp;lt;/Properties&amp;gt;&lt;br /&gt;  &amp;lt;/LobSystemInstance&amp;gt;&lt;br /&gt;  &amp;lt;LobSystemInstance Name="Default"&amp;gt;&lt;br /&gt;    &amp;lt;Properties&amp;gt;&lt;br /&gt;      &amp;lt;Property Name="Region" Type="System.String"&amp;gt;northamerica&amp;lt;/Property&amp;gt;&lt;br /&gt;    &amp;lt;/Properties&amp;gt;&lt;br /&gt;  &amp;lt;/LobSystemInstance&amp;gt;&lt;br /&gt;  &amp;lt;LobSystemInstance Name="EMEA"&amp;gt;&lt;br /&gt;    &amp;lt;Properties&amp;gt;&lt;br /&gt;      &amp;lt;Property Name="Region" Type="System.String"&amp;gt;emea&amp;lt;/Property&amp;gt;&lt;br /&gt;    &amp;lt;/Properties&amp;gt;&lt;br /&gt;  &amp;lt;/LobSystemInstance&amp;gt;&lt;br /&gt;  &amp;lt;LobSystemInstance Name="Asia"&amp;gt;&lt;br /&gt;    &amp;lt;Properties&amp;gt;&lt;br /&gt;      &amp;lt;Property Name="Region" Type="System.String"&amp;gt;asia&amp;lt;/Property&amp;gt;&lt;br /&gt;    &amp;lt;/Properties&amp;gt;&lt;br /&gt;  &amp;lt;/LobSystemInstance&amp;gt;&lt;br /&gt;&amp;lt;/LobSystemInstances&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 4: BDC model properties&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In this example, different LobSystemInstances are used for each region, where the "Region" property is defined in LobSystemInstance. This is particularly useful when the user creates an external list. The user can choose the appropriate LobSystemInstance depending on its region.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Reading properties in the method&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So now that the properties are defined in the model, its time to read the property in the code. The class "MyClass" exposes a method ReadAllItems for Finder stereotype. In this method, LobSystemInstance property returns the LobSystemInstance (BDC context).&amp;nbsp; LobSystemInstance.GetProperties() method returns all the properties defined for the LobSystemInstance.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;public MyItems ReadAllItems()&lt;br /&gt;{&lt;br /&gt;   // get the LobSystemInstance properties via context from BDC&lt;br /&gt;   INamedPropertyDictionary properties = this.LobSystemInstance.GetProperties();&lt;br /&gt;&lt;br /&gt;   string region = null;&lt;br /&gt;&lt;br /&gt;   // search for "Region" property in model&lt;br /&gt;   if (properties.ContainsKey("Region"))&lt;br /&gt;   {&lt;br /&gt;        region = properties["Region"] as string;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //get the db connection string&lt;br /&gt;   string dbConnectionString = GetDbConnectionString(region);&lt;br /&gt;&lt;br /&gt;   //do normal db processing&lt;br /&gt;   //return the items for method&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 5: Use the BDC model property&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once we have all the properties, the code checks if the "Region" property has been defined or not and reads the "Region" property accordingly. Once the Region property is read, it is used to create the DB connection string and the DB query is executed against that particular DB server.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Conclusion&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;BDC model is the right place to define custom properties. These properties should be used in .NET assembly connector code to customize solutions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;References&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=8155529690205240899" name="r1"&gt;r1&lt;/a&gt;: IContextProperty interface: &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.businessdata.systemspecific.icontextproperty%28office.14%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.businessdata.systemspecific.icontextproperty(office.14).aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-2303998844889245610?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/2303998844889245610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=2303998844889245610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/2303998844889245610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/2303998844889245610'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/01/reading-bdc-model-properties-in-net.html' title='Reading BDC model properties in .NET Assembly Connector'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-4850054068145479345</id><published>2010-01-18T00:28:00.000-08:00</published><updated>2010-01-18T00:28:27.362-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Profile Page'/><category scheme='http://www.blogger.com/atom/ns#' term='External List'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><title type='text'>Business Connectivity Services (BCS) - Profile Pages</title><content type='html'>&lt;span style="font-size: large;"&gt;Profile Page&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A profile page in BCS (Business Connectivity Services) allows to display all the information for an external content (entity instance). For example, a profile page can display all the fields in a record for a specific customer. It can also display all the orders associated with the customer.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;NOTE: A profile page is different from user profile. User profile is a&amp;nbsp;SharePoint feature where as profile page is specific to BDC (Business Data Connectivity).&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Profile page has a unique url, as each entity (External Content Type)&amp;nbsp;has its own profile page.&amp;nbsp;Profile page in SharePoint 2010 is not created automatically anymore (it was created automatically in MOSS 2007).&lt;br /&gt;&lt;br /&gt;If the profile page is not enabled for the entity, clicking on the&amp;nbsp;entity instance will&amp;nbsp;load the view items page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/S1QDm-8GigI/AAAAAAAAAI8/xFYlpbo9Up8/s1600-h/profile+page+-+View+Item+-+Pic1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/S1QDm-8GigI/AAAAAAAAAI8/xFYlpbo9Up8/s320/profile+page+-+View+Item+-+Pic1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 1: View item for External Content Type&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S1QDyN_vvsI/AAAAAAAAAJE/Hwu2lww37ug/s1600-h/profile+page+-+View+Item+-+Pic2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S1QDyN_vvsI/AAAAAAAAAJE/Hwu2lww37ug/s320/profile+page+-+View+Item+-+Pic2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 2: View Item Page&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;To create a profile page for an entity, you will need to configure where the profile page will be hosted. To configure, click on the configure button in the BDC administration page/ribbon (figure 3).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S1QEa2kIXRI/AAAAAAAAAJM/JVlzkXno9I0/s1600-h/profile+page+-+Configure+-+Pic+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S1QEa2kIXRI/AAAAAAAAAJM/JVlzkXno9I0/s320/profile+page+-+Configure+-+Pic+3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 3: Configure profile page button&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This loads a wizard where you can enter the host location for the profile page. Profile page can only be hosted on SharePoint sites.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S1QFDd8KenI/AAAAAAAAAJU/h6qJ0vooaEw/s1600-h/profile+page+-+configure+-+pic4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S1QFDd8KenI/AAAAAAAAAJU/h6qJ0vooaEw/s320/profile+page+-+configure+-+pic4.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 4: Profile page host&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;At this time, you can enable your entity to have a profile page. To do so, click on the External content type and click "Create/Upgrade Profile Page". &lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/S1QFmNWmOaI/AAAAAAAAAJc/rDhxPaplOLg/s1600-h/profile+page+-+create+profile+page+-+pic5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/S1QFmNWmOaI/AAAAAAAAAJc/rDhxPaplOLg/s320/profile+page+-+create+profile+page+-+pic5.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 5: Create/Upgrade Profile Page&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/S1QF6AeVUsI/AAAAAAAAAJk/dMi_WPT7R78/s1600-h/profile+page+-+create+profile+page+ok+-+pic6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/S1QF6AeVUsI/AAAAAAAAAJk/dMi_WPT7R78/s320/profile+page+-+create+profile+page+ok+-+pic6.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 6: Profile page confirmation&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once the profile page has been created you will notice there is an default action associated with the external content type (figure 7).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/S1QG6y8NoRI/AAAAAAAAAJs/GbX_SHEX6_A/s1600-h/profile+page+-+default+action+-+pic7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/S1QG6y8NoRI/AAAAAAAAAJs/GbX_SHEX6_A/s320/profile+page+-+default+action+-+pic7.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 7: Default action&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Unfortunately, external list does not allow to go the profile page from the list (hopefully it gets fixed in RTM). To view the profile page load the default action URL in browser and set the ContactID.&lt;br /&gt;&lt;br /&gt;Profile page is particularly useful to view entity associations. Figure 8 shows a Contact profile page, where sales order from the contact is displayed along with the contact information.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/S1Qadf5v-EI/AAAAAAAAAJ0/h0ySnCxVs0U/s1600-h/profile+page+-+display+-+pic8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/S1Qadf5v-EI/AAAAAAAAAJ0/h0ySnCxVs0U/s320/profile+page+-+display+-+pic8.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Figure 8: Contact and its sales order&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Links&lt;br /&gt;&lt;br /&gt;Adding associations - &lt;a href="http://msdn.microsoft.com/en-us/library/ee558417(office.14).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee558417(office.14).aspx&lt;/a&gt;&lt;br /&gt;Associations Support in SPD - &lt;a href="http://blogs.msdn.com/bcs/archive/2010/01/15/tooling-associations-in-sharepoint-designer-2010.aspx"&gt;http://blogs.msdn.com/bcs/archive/2010/01/15/tooling-associations-in-sharepoint-designer-2010.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-4850054068145479345?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/4850054068145479345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=4850054068145479345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4850054068145479345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4850054068145479345'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/01/business-connectivity-services-bcs.html' title='Business Connectivity Services (BCS) - Profile Pages'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_L-_bg80K5vQ/S1QDm-8GigI/AAAAAAAAAI8/xFYlpbo9Up8/s72-c/profile+page+-+View+Item+-+Pic1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-1326436628810036328</id><published>2010-01-03T21:46:00.000-08:00</published><updated>2010-01-03T21:46:23.690-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Secure Store Service'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Farm'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><title type='text'>Secure Store Service - Installation (Farm mode)</title><content type='html'>This blog shows how Secure Store Service can be installed in farm mode. Please refer to &lt;a href="http://jardalu.blogspot.com/2009/12/secure-store-service-installation.html"&gt;blog&lt;/a&gt; for information on how to install Secure Store Service in standalone mode.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Figure 1, figure 7, figure 9 and figure 12&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;mentioned in this blog are the figures from &lt;a href="http://jardalu.blogspot.com/2009/12/secure-store-service-installation.html"&gt;"Secure Store Service -&amp;nbsp; Installation"&lt;/a&gt; blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Server Farm Installation&lt;/span&gt;&lt;br /&gt;To install SharePoint in server farm mode, first prerequisites installer needs to be run. After the prerequisite installer has installed all the prerequisites components, start the SharePoint installation (&lt;strong&gt;&lt;em&gt;figure 1&lt;/em&gt;&lt;/strong&gt;). Enter the product key in the next screen and then agree to license terms. On the next screen, click the “Server Farm” button (&lt;strong&gt;&lt;em&gt;figure 7&lt;/em&gt;&lt;/strong&gt;). This will start SharePoint installation in server farm mode. Setup will present a screen to do a “Complete” install or standalone install. Select “Complete - Install all components” checkbox (figure 21). &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0F75cAifgI/AAAAAAAAAHk/JdhGtDjPO0g/s1600-h/SharePoint+Beta+-+Choosing+Farm+Installation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0F75cAifgI/AAAAAAAAAHk/JdhGtDjPO0g/s320/SharePoint+Beta+-+Choosing+Farm+Installation.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Figure 21 : Selection Server Type&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Click “Install Now” button. Setup will show installation progress and after the installation is complete, setup&amp;nbsp;will give an option to run the configuration wizard (&lt;strong&gt;&lt;em&gt;figure 9&lt;/em&gt;&lt;/strong&gt;). Choose to run the configuration wizard.&lt;br /&gt;&lt;br /&gt;When the configuration wizard continues, it will warn about services being stopped (&lt;strong&gt;&lt;em&gt;figure 12&lt;/em&gt;&lt;/strong&gt;). &lt;br /&gt;&lt;br /&gt;In the server farm mode, the wizard gives an option to create a new server farm or join an existing server farm (figure 22).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0F9RxgAjWI/AAAAAAAAAHs/65yxTkjVbFo/s1600-h/SharePoint+Beta+-+New+Or+Existing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0F9RxgAjWI/AAAAAAAAAHs/65yxTkjVbFo/s320/SharePoint+Beta+-+New+Or+Existing.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 22: Connect to existing or new farm&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Choose to create a new server farm by selecting “Create a new server farm” checkbox. Click 'Next' button to continue. Installing SharePoint in farm mode requires a database server where SharePoint stores its configuration and content. In standalone mode, SharePoint installs the database automatically.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/S0F9ihkjzZI/AAAAAAAAAH0/mfvJbeeFm4g/s1600-h/SharePoint+Beta+-+Database+Settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/S0F9ihkjzZI/AAAAAAAAAH0/mfvJbeeFm4g/s320/SharePoint+Beta+-+Database+Settings.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 23: Database Settings&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the database settings screen (figure 23), enter the database server, name and the credentials for the domain user which has database creation rights. Click 'Next'. This will bring up the farm passphrase screen (figure 24). To create or join a farm, SharePoint administrator needs a passphrase. Choose a passphrase and store the passphrase in a safe location, as SharePoint does not store the passphrase.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/S0F-JPLgcbI/AAAAAAAAAH8/dFP7pQO0QMk/s1600-h/SharePoint+Beta+-+Passphrase.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/S0F-JPLgcbI/AAAAAAAAAH8/dFP7pQO0QMk/s320/SharePoint+Beta+-+Passphrase.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 24: SharePoint Passphrase&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Passphrase must meet complexity requirement. If the complexity requirement is not met, wizard will display an error (figure 25) and will let to enter a new passphrase.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0F-XDkfkkI/AAAAAAAAAIE/-kN8xbXi11U/s1600-h/SharePoint+Beta+-+Passphrase+Complexity.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0F-XDkfkkI/AAAAAAAAAIE/-kN8xbXi11U/s320/SharePoint+Beta+-+Passphrase+Complexity.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 25: Passphrase Complexity Requirement&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Once the passphrase has been entered, installation configuration will allow choosing a port on which central administration will be hosted as well as will allow configuring security settings (figure 26).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/S0F-oHHlDOI/AAAAAAAAAIM/nrNlHJiNlIk/s1600-h/SharePoint+Beta+-+Central+Admin+Port.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/S0F-oHHlDOI/AAAAAAAAAIM/nrNlHJiNlIk/s320/SharePoint+Beta+-+Central+Admin+Port.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 26: Central Admin Port and Security Settings&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Click 'Next' to continue. Configuration wizard will display the summary of the settings and let you to change any setting if required.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S0F-9Xq5VBI/AAAAAAAAAIU/4a0Oi5BkTJA/s1600-h/SharePoint+Beta+-+Install+Summary.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S0F-9Xq5VBI/AAAAAAAAAIU/4a0Oi5BkTJA/s320/SharePoint+Beta+-+Install+Summary.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 27: Configuration Summary&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;At this time, clicking ‘Next’ will start installation in farm mode. After SharePoint has been installed, the wizard will again display the summary. Click 'Finish' in the installation summary.&lt;br /&gt;&lt;br /&gt;When SharePoint is installed in farm mode, the wizard will not automatically configure SharePoint, instead it will launch the browser to configure SharePoint (figure 28).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S0F_nBsqoRI/AAAAAAAAAIc/jhSggsL4aJ4/s1600-h/SharePoint+Beta+-+Configure+SharePoint+Farm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S0F_nBsqoRI/AAAAAAAAAIc/jhSggsL4aJ4/s320/SharePoint+Beta+-+Configure+SharePoint+Farm.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 28: Initial Farm Configuration Wizard&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Select “Walk me through the settings using this wizard.” checkbox and click ‘Next’ (figure 28). In the next screen, SharePoint will need an account on which the shared services will run (figure 29). Choose an account which is different than the farm admin account. In the same screen (figure 30), SharePoint will give an option to select the services that will run on the server. Make sure “Secure Store Service” is selected (figure 31).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/S0GAHoQS-tI/AAAAAAAAAIk/QX5L5DEv6tI/s1600-h/SharePoint+Beta+-+Farm+Install+Configure+Services.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/S0GAHoQS-tI/AAAAAAAAAIk/QX5L5DEv6tI/s320/SharePoint+Beta+-+Farm+Install+Configure+Services.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 29: Service Account&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0GAO-58CDI/AAAAAAAAAIs/bJd9YZ25_ho/s1600-h/SharePoint+Beta+-+Farm+Install+Configure+Services+-+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/S0GAO-58CDI/AAAAAAAAAIs/bJd9YZ25_ho/s320/SharePoint+Beta+-+Farm+Install+Configure+Services+-+2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 30: Services&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;After making sure Secure Store Service is checked, click ‘Next’. The configuration wizard will install and start the services that were selected.&lt;br /&gt;&lt;br /&gt;Configuration wizard will also ask to create a site collection. At this time Secure Store Service is already installed on the server. You may choose to create a site collection.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/S0GAcn_o1nI/AAAAAAAAAI0/S-URHwz8g-o/s1600-h/SharePoint+Beta+-+Farm+Secure+Store+Service.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/S0GAcn_o1nI/AAAAAAAAAI0/S-URHwz8g-o/s320/SharePoint+Beta+-+Farm+Secure+Store+Service.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 31: Secure Store Service&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In the above figure, Secure Store Service has been installed and started by the configuration wizard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-1326436628810036328?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/1326436628810036328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=1326436628810036328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/1326436628810036328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/1326436628810036328'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2010/01/secure-store-service-installation-farm.html' title='Secure Store Service - Installation (Farm mode)'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_L-_bg80K5vQ/S0F75cAifgI/AAAAAAAAAHk/JdhGtDjPO0g/s72-c/SharePoint+Beta+-+Choosing+Farm+Installation.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-8039239013970962305</id><published>2009-12-20T08:47:00.000-08:00</published><updated>2010-01-03T21:49:51.513-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Secure Store Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Target Application'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Secure Store Service - Configuration ( SharePoint 2010 )</title><content type='html'>&lt;div style="text-align: left;"&gt;This blog is written for &lt;a href="http://msdn.microsoft.com/en-us/sharepoint/ee514561.aspx"&gt;Beta&lt;/a&gt; release of SharePoint 2010. As of Beta, Secure Store Service is available on SharePoint 2010 but is not available on SharePoint Foundation.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sy1HSfvEuyI/AAAAAAAAACM/N7zWG8nxpDY/s1600-h/central+admin.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sy1HSfvEuyI/AAAAAAAAACM/N7zWG8nxpDY/s200/central+admin.png" /&gt;&lt;/a&gt;Secure Store Service (&lt;a href="http://msdn.microsoft.com/en-us/library/ee557754(office.14).aspx"&gt;SSS&lt;/a&gt;) adminsitration can be done through the central administration of SharePoint. Central adminstration can be started from the Start &amp;gt; Microsoft SharePoint 2010 Products &amp;gt; SharePoint 2010 Central Adminstration ( see image 1 ).&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;In the Central Administration page, click Manage services on server (within System Settings block ) to load the Services on Server administration. Make sure the Secure Store Service is in Started mode. If the service is not in Started mode, click on Start&amp;nbsp;link for Secure Store Service. This would start the Secure Store Service.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sy1nPHbv72I/AAAAAAAAACU/JwT06HBLyEk/s1600-h/New+Secure+Store+Service.png" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sy1nPHbv72I/AAAAAAAAACU/JwT06HBLyEk/s200/New+Secure+Store+Service.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;SharePoint 2010 can host mutliple applications of&amp;nbsp; the same type within a farm. Secure Store Service is actually a Shared Service in SharePoint.&amp;nbsp;In the Central Administration,&amp;nbsp;click Manage&amp;nbsp;service applications&amp;nbsp;( within Application&amp;nbsp;Management block ) to load the service applications page. It shows all the Shared Services Application ( and Shared Services Application Proxy ) within the farm. To create a new Secure Store Application, click on New button and then select Secure Store Service ( see image&amp;nbsp;).&amp;nbsp;If you have installed SharePoint&amp;nbsp;in&amp;nbsp;standalone mode, there&amp;nbsp;should already&amp;nbsp;be a&amp;nbsp;Secure Store Application with the name "Secure Store Service"&amp;nbsp;running. &lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;In the Create New Secure Store Service Application dialog box, choose appropriate name for your secure store. When creating a secure store, you will need to choose a database server and database where secure store will store its information. Secure Store Service will automatically create database for secure store application . Secure Store Service supports both Windows authentication and SQL authentication for database creation. It is recommended that you use Windows authentication. When windows authentication is used, make sure the farm administrator has DB create permission on the database server.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy13dkay8lI/AAAAAAAAACc/zINQoZ0VU4M/s1600-h/new+sss+page1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy13dkay8lI/AAAAAAAAACc/zINQoZ0VU4M/s320/new+sss+page1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy13hedb4UI/AAAAAAAAACk/WxQCraXP6gA/s1600-h/sss-page2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy13hedb4UI/AAAAAAAAACk/WxQCraXP6gA/s320/sss-page2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;You will also need to choose a web application pool which secure store will use to host its service. You can choose one of the existing application pools or create a new application pool. For secure store, it is recommended that you always choose a new application pool. When creating a new application pool, choose a managed account which will be the owner of the application pool. Since secure store stores confidential information, always choose a managed account which is a non-interactive account ( account that does not have login privileges ). The account that is used in secure store application pool can decrypt confidential information from secure store database, so you should be very careful in choosing the account. Click OK to create the application.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Once the secure store application has been created ( or pre-existing application with Standalone installation ), you will need to set a passphrase for the application. This done by clicking on the application link ( Central Administration &amp;gt; Manage service applications ). This will bring the secure store application adminstration page.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sy2ArH07L7I/AAAAAAAAACs/bXMTniL-2E4/s1600-h/generate+key.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sy2ArH07L7I/AAAAAAAAACs/bXMTniL-2E4/s320/generate+key.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Click on "Generate New Key" to generate a new key for secure store application. Every secure store application needs a key to encrypt/decrypt the stored information in database.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sy2DVkmc1NI/AAAAAAAAAC0/kIL5UaAgoSs/s1600-h/generate+new+key.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sy2DVkmc1NI/AAAAAAAAAC0/kIL5UaAgoSs/s320/generate+new+key.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;When generating a new key, you will need to supply a pass phrase. Pass phrase is used by secure store to protect the key itself. Pass phrase must be atleast 8 characters long, must contain atleast one numberal, one capital alphabet and one special character. This pass phrase is not stored in the secure store, so make sure that you keep a copy of the pass phrase securely.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Now Target applications can be created on secure store. Target application is a secure store concept where the credentials of the users can be grouped together. Within target application you define what kind of information will be stored. For example, you may want to club all user&amp;nbsp;connecting to&amp;nbsp;CRM in one target application.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sy5Mo07d_yI/AAAAAAAAAC8/1tg9Mdk_P8o/s1600-h/target+app.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sy5Mo07d_yI/AAAAAAAAAC8/1tg9Mdk_P8o/s320/target+app.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;To start with, you need to&amp;nbsp;define the target application. Fill the information for target application as asked by the screen. Click Next.&amp;nbsp;On the next page, you can define what user information will be stored in the target application. For example, for CRM target application, we will be storing user name, password, system number, client number and language. To add a new field type, click on the "Add Field" link. At the user input time, if you want to mask any field, check the mask checkbox corresponding to the field.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy5PkYkaydI/AAAAAAAAADE/3MIozlEDvRU/s1600-h/crm+define.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy5PkYkaydI/AAAAAAAAADE/3MIozlEDvRU/s320/crm+define.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Each target application can be managed by its own administrator.&amp;nbsp;The next&amp;nbsp;page&amp;nbsp;asks you to define an administrator for the target application.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy5QYDIrgKI/AAAAAAAAADM/tPZtL1AeRDg/s1600-h/crm+define.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy5QYDIrgKI/AAAAAAAAADM/tPZtL1AeRDg/s320/crm+define.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Click OK to finish the creation of the target application. At this time the target application is ready to be consumed by applications such as web-part, external list, etc.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Farm administrator ( or target application administrator ) can now set user credentials/information for this particular target application. To set the user credentials, right click on the target application ( see next image ) to bring the entry form.&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sy5S5VOAMsI/AAAAAAAAADc/kjx1Fh5aPqQ/s1600-h/crm+define.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sy5S5VOAMsI/AAAAAAAAADc/kjx1Fh5aPqQ/s320/crm+define.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;The next page will ask you to enter the user credentials for CRM.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy5TYIR_MFI/AAAAAAAAADk/da86FFdIjgE/s1600-h/crm+define.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sy5TYIR_MFI/AAAAAAAAADk/da86FFdIjgE/s320/crm+define.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;Enter the CRM credentials on this page and click OK. This would save the credentials for the Credential Owner ( jardula\usera in the above page ). Note, the credential can be retreived by any application that runs on behalf of the credential owner.&lt;br /&gt;&lt;div align="right" class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="right" class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;Secure Store does not display the list of the credentials owner for a target application for security reasons. So in other words, there is no way to figure out if a credential has been set for a particular credential owner through Secure Store UI.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-8039239013970962305?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/8039239013970962305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=8039239013970962305' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/8039239013970962305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/8039239013970962305'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2009/12/secure-store-service-sharepoint-2010.html' title='Secure Store Service - Configuration ( SharePoint 2010 )'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_L-_bg80K5vQ/Sy1HSfvEuyI/AAAAAAAAACM/N7zWG8nxpDY/s72-c/central+admin.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-432563098853842622</id><published>2009-12-15T23:39:00.000-08:00</published><updated>2010-01-02T23:20:00.959-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><title type='text'>Secure Store Service - Installation</title><content type='html'>&lt;span style="font-size: large;"&gt;Installation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Secure Store Service installation is done by installing SharePoint 2010. SharePoint can be installed in Standalone mode and Server Farm mode. Secure Store Service is available in both Standalone and Farm configuration.&lt;br /&gt;In standalone configuration, SharePoint 2010 server is installed on one physical machine. Standalone configuration does not allow adding of new servers and thus has limited scaling. This configuration is best for development, test and demo purposes.&lt;br /&gt;&lt;br /&gt;In server farm configuration, SharePoint 2010 server can be installed on multiple machines. Server farm configuration allows choosing separate SharePoint database server, web front ends (WFE) and backend (application servers). This configuration also allows adding web front ends and backend to the existing farm.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Requirements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The basic software requirement for SharePoint 2010 is&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; 64-bit Windows Server 2008 or 64-bit Windows Server 2008 R2. &lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; 64-bit SQL Server 2008 or 64-bit SQL Server 2005&lt;br /&gt;&lt;br /&gt;To get a complete list of hardware and software requirement visit &lt;a href="http://technet.microsoft.com/en-us/library/cc262485%28office.14%29.aspx"&gt;http://technet.microsoft.com/en-us/library/cc262485%28office.14%29.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Prerequisites Installer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SharePoint 2010 installation comes with a prerequisites installer. To execute the prerequisites installer, double click OfficeServer.exe (Beta release can be downloaded from &lt;a href="http://sharepoint2010.microsoft.com/"&gt;http://sharepoint2010.microsoft.com/&lt;/a&gt;)&lt;br /&gt;This would bring the SharePoint Server 2010 installation screen (figure 1). On the installation screen, click “Install software Prerequisites” link.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz8JFNjtk7I/AAAAAAAAAEs/Hbk1Tx-C5vw/s1600-h/SharePoint+Beta+Install+Screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz8JFNjtk7I/AAAAAAAAAEs/Hbk1Tx-C5vw/s320/SharePoint+Beta+Install+Screen.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 1: SharePoint Server 2010 Installation Screen&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Clicking on the “Install software prerequisites” link will display the preparation tool. It displays the list of the software the prerequisites tool will install. Click on Next button.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz8L5Tlw3FI/AAAAAAAAAE0/XnN0ZLfs0iA/s1600-h/SharePoint+Beta+-+Prerequisites+installer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz8L5Tlw3FI/AAAAAAAAAE0/XnN0ZLfs0iA/s320/SharePoint+Beta+-+Prerequisites+installer.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 2: Prerequisites Installer (Preparation tool)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This would bring the license agreement screen (figure 3). Agree to the license terms (by checking the checkbox) and click Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz8L-LX5JLI/AAAAAAAAAE8/s1JrhHW4spk/s1600-h/SharePoint+Beta+-+License+Agreement.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz8L-LX5JLI/AAAAAAAAAE8/s1JrhHW4spk/s320/SharePoint+Beta+-+License+Agreement.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 3: License Agreement&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This would install all the perquisites for SharePoint 2010. If there is any error in installing the prerequisites, the tool will display a link to the log file (figure 4).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8MuVsPkZI/AAAAAAAAAFc/Jdbecg92BUg/s1600-h/SharePoint+Beta+-+Prereq+Logs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8MuVsPkZI/AAAAAAAAAFc/Jdbecg92BUg/s320/SharePoint+Beta+-+Prereq+Logs.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 4: Error reporting in prerequisites installation&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once the prerequisites have been installed, actual installation of the SharePoint server can be started. Click on “Install SharePoint Server” link (figure 1). It will bring the “Product Key” screen. Enter the product key for SharePoint sever and click continue button (figure 5).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sz8MH9dP2KI/AAAAAAAAAFE/Jv136l5hoNA/s1600-h/SharePoint+Beta+-+Product+Key.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sz8MH9dP2KI/AAAAAAAAAFE/Jv136l5hoNA/s320/SharePoint+Beta+-+Product+Key.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 5: Screen to enter product key&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Product key for Beta can be obtained from &lt;a href="http://technet.microsoft.com/en-us/evalcenter/ee391660.aspx"&gt;http://technet.microsoft.com/en-us/evalcenter/ee391660.aspx&lt;/a&gt;&lt;br /&gt;Agree to the Microsoft Software License Terms in the next screen by checking the checkbox and click continue button (figure 6).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8MOcOjXxI/AAAAAAAAAFM/ncI0Or0-m4U/s1600-h/SharePoint+Beta+-+Software+License+Agreement+Terms.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8MOcOjXxI/AAAAAAAAAFM/ncI0Or0-m4U/s320/SharePoint+Beta+-+Software+License+Agreement+Terms.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 6: Agreement to software license and terms&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;At this time the installer will present you an option to install SharePoint in “Standalone” or “Server Farm” configuration (figure 7). &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz8MckeFfwI/AAAAAAAAAFU/fpCIlLoAW5E/s1600-h/SharePoint+Beta+-+SharePoint+Installation+Configuration.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz8MckeFfwI/AAAAAAAAAFU/fpCIlLoAW5E/s320/SharePoint+Beta+-+SharePoint+Installation+Configuration.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 7: SharePoint Installation Configuration&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Standalone Installation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To install SharePoint 2010 in standalone mode, click the &lt;b&gt;Standalone&lt;/b&gt; button. This will start the installation (figure 8) in standalone mode. The installation process can take a while to finish depending on the machine configuration.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8QAZ5D1wI/AAAAAAAAAFk/yd7uWh9RkU0/s1600-h/SharePoint+Beta+-+Installation+Progress.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8QAZ5D1wI/AAAAAAAAAFk/yd7uWh9RkU0/s320/SharePoint+Beta+-+Installation+Progress.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 8: SharePoint installation in progress&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;When the installation is done, it gives an option to run the configuration wizard (figure 9). Configuration Wizard must be run before the SharePoint is useable. Click on Close button to continue the installation.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8QFQcriFI/AAAAAAAAAFs/sn6Zoa2WZ9s/s1600-h/SharePoint+Beta+-+Run+Configuration+Wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz8QFQcriFI/AAAAAAAAAFs/sn6Zoa2WZ9s/s320/SharePoint+Beta+-+Run+Configuration+Wizard.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 9: Configuration wizard&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If the checkbox was unchecked and the installation did not continue, the configuration wizard can be started from the Windows Start menu (figure 10). Configuration Wizard can also be used to repair SharePoint installations.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sz8Qdv8YLwI/AAAAAAAAAF0/dCSlff1EUsI/s1600-h/Sharepoint+Beta+-+Starting+Conf+wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sz8Qdv8YLwI/AAAAAAAAAF0/dCSlff1EUsI/s320/Sharepoint+Beta+-+Starting+Conf+wizard.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure10: Starting configuration wizard&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The installation will continue with configuration wizard. The first screen will be a welcome screen, click on Next button to continue.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-nTp33iuI/AAAAAAAAAF8/Sm1_v3Gbb5s/s1600-h/SharePoint+Beta+-+Conf+Wizard+Welcome+Screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-nTp33iuI/AAAAAAAAAF8/Sm1_v3Gbb5s/s320/SharePoint+Beta+-+Conf+Wizard+Welcome+Screen.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 11: Welcome screen&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;SharePoint configuration wizard stops few services in the installation process. It will warn about the services that will be stopped before the installation can continue. Click Yes.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz-nigrlB7I/AAAAAAAAAGE/HoJ502I6e5c/s1600-h/SharePoint+Beta+-+Wizard+Warning.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz-nigrlB7I/AAAAAAAAAGE/HoJ502I6e5c/s320/SharePoint+Beta+-+Wizard+Warning.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Figure 12: Warning for services being stopped&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;NOTE: If the configuration wizard was started to repair SharePoint, make sure no one is using the SharePoint; otherwise the site will unavailable till the repair is complete.&lt;br /&gt;&lt;br /&gt;When the configuration wizard resumes, it will complete its entire task. Depending on the machine’s configuration, wizard may take several minutes to complete.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-nmEe15PI/AAAAAAAAAGM/OQmPIRUzz3Q/s1600-h/SharePoint+Beta+-+Wizard+Continues.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-nmEe15PI/AAAAAAAAAGM/OQmPIRUzz3Q/s320/SharePoint+Beta+-+Wizard+Continues.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Figure 13: Configuration Wizard Continues&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;At the end of the process, the wizard will display a configuration successful screen.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-npe8UguI/AAAAAAAAAGU/IgjoOIr232Q/s1600-h/SharePoint+Beta+-+Conf+Wizard+Successful.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-npe8UguI/AAAAAAAAAGU/IgjoOIr232Q/s320/SharePoint+Beta+-+Conf+Wizard+Successful.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Figure 14: Successful Configuration&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Click on the finish button. The configuration wizard will close and open the explorer to select the template for the site. Chose the template based on the requirement.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz-oHKhHpBI/AAAAAAAAAGc/dVrzZOCkuVw/s1600-h/SharePoint+Beta+-+Template+Selection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz-oHKhHpBI/AAAAAAAAAGc/dVrzZOCkuVw/s320/SharePoint+Beta+-+Template+Selection.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Figure 15: Template Selection&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;When the template has been applied for the site, SharePoint gives an option to set up groups for the newly created site.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-oMp37HyI/AAAAAAAAAGk/CU31CClY5Xg/s1600-h/SharePoint+Beta+-+Group+Setup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-oMp37HyI/AAAAAAAAAGk/CU31CClY5Xg/s320/SharePoint+Beta+-+Group+Setup.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Figure 16: Setup Groups&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;At this time installation and configuration of the site is complete. SharePoint will automatically redirect to the site’s home page.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz-oQAY7sQI/AAAAAAAAAGs/0lhwe35Cpf4/s1600-h/SharePoint+Beta+-+Site+Page.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/Sz-oQAY7sQI/AAAAAAAAAGs/0lhwe35Cpf4/s320/SharePoint+Beta+-+Site+Page.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Figure 17: Site Welcome&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In standalone configuration a Secure Store Service is running by default and there will also be a Secure Store application running (default name for the Secure Store is “Secure Store Service”). To check Secure Store Services status, open the SharePoint central administration.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz-rLXKzjoI/AAAAAAAAAHM/EobyJ1Kuz4k/s1600-h/SharePoint+Beta+-+Central+Administration.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/Sz-rLXKzjoI/AAAAAAAAAHM/EobyJ1Kuz4k/s320/SharePoint+Beta+-+Central+Administration.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 18: Central Administration&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;Click on “Manager services on the server” link to check the services status (this link is within System Settings block). The “services on server” page contains the services status from where a particular service can be started or stopped. Make sure Secure Store Service is in started status (figure 19).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sz-rPd8NXhI/AAAAAAAAAHU/-wmNf4gwa94/s1600-h/SharePoint+Beta+-+Services+on+Server.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sz-rPd8NXhI/AAAAAAAAAHU/-wmNf4gwa94/s320/SharePoint+Beta+-+Services+on+Server.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 19: Services on SharePoint&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In the standalone install, SharePoint will create a default Secure Store Service application with the name “Secure Store Service”. This application can be viewed from Central Administration page (figure 18), by clicking on “Manage service applications” (Application Management block).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-rTLRF7VI/AAAAAAAAAHc/MfiIQ-0ph00/s1600-h/SharePoint+Beta+-+Applications.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz-rTLRF7VI/AAAAAAAAAHc/MfiIQ-0ph00/s320/SharePoint+Beta+-+Applications.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 20: Service Applications on SharePoint&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The default Secure Store application will be in Started status.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-432563098853842622?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/432563098853842622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=432563098853842622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/432563098853842622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/432563098853842622'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2009/12/secure-store-service-installation.html' title='Secure Store Service - Installation'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_L-_bg80K5vQ/Sz8JFNjtk7I/AAAAAAAAAEs/Hbk1Tx-C5vw/s72-c/SharePoint+Beta+Install+Screen.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-7686352586677172657</id><published>2009-12-10T00:50:00.000-08:00</published><updated>2009-12-30T03:09:36.898-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Secure Store Service'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Secure Store Service - Introduction</title><content type='html'>Secure Store Service is a shared service in SharePoint 2010 that provides functionality to store credentials [1]&amp;nbsp;securely and associate the credential to a specific identity or group of identities. The main objective of the service is to help SharePoint components and/or custom web-part perform Single Sign-On (SSO)[2].&lt;br /&gt;&lt;br /&gt;Consider a scenario where a web-part needs to authenticate with external system (such as database). Off course the web-part can ask the user credential when it loads to authenticate. Although it works fine, the user experience will not be that good. The user experience can be enhanced if the web-part stores the credential. To store the credential, web-part would need a secure storage and would have to provide functionality to manage the credential.&lt;br /&gt;&lt;br /&gt;What happens if the user does not have access to the credentials? Instead the credentials are managed by the system administrators? How would the web-part deal with expired credentials?&lt;br /&gt;&lt;br /&gt;A simple requirement of web-part authenticating with external system can become an extensive feature. This is where Secure Store can be utilized. SharePoint components such as Business Connectivity Services (BCS), Excel Service, Performance Point Service, Search and other services also use Secure Store to solve authentication issues with external system.&lt;br /&gt;&lt;br /&gt;Secure Store Service replaces Microsoft Office SharePoint Server 2007 (MOSS 2007) Single Sign-On feature. The name has rightfully changed from Single Sign-On to Secure Store, as this service does not provide the Single Sign-On functionality. Secure Store is available in SharePoint 2010 and SharePoint 2010 Search however is not available in SharePoint Foundation.&lt;br /&gt;&lt;br /&gt;Footnote &lt;br /&gt;[1] Credential: An information (such as username, password) that is verified when presented to a system before the system allows access to its resources. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;[2] Single Sign-On: A user can log in once into a system and can gain access to all systems (that he/she has access to) without being prompted to log in to all the systems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-7686352586677172657?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/7686352586677172657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=7686352586677172657' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/7686352586677172657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/7686352586677172657'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2009/12/secure-store-service-introduction.html' title='Secure Store Service - Introduction'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-1618180990445133741</id><published>2009-10-27T13:57:00.001-07:00</published><updated>2009-10-27T22:01:41.939-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shared Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Shared Services in SharePoint 2010</title><content type='html'>Shared Service Provider (SSP) in SharePoint 2007 has been replaced by Shared Services in SharePoint 2010. SSP in SharePoint 2007 was confusing and had its share of limitations which SharePoint 2010 seems to solve by introducing Shared Services.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Key differences between SSP and Shared Services&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;SSP in 2007&lt;br /&gt;&lt;/th&gt;&lt;th&gt;Shared Services in 2010&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MOSS only&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Available in WSS&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Different services shared the same db&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Services can have its own db&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Internal to MOSS&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Public APIs to create own Shared Services&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Only one application of service&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Multiple instances of service allowed&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Restricted to the farm&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Cross farm support&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;SharePoint 2010 provides the following Shared Services ( not an exhaustive list )&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Access Services&lt;/strong&gt; : Allows viewing, editing, and interacting with Access databases in a browser.&lt;br /&gt;&lt;strong&gt;Business Connectivity Service&lt;/strong&gt; : Provides read/write access to external data from line-of-business (LOB) systems, Web services, databases, and other external systems. &lt;em&gt;Also available in SharePoint Foundation.&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;Managed Metadata Service&lt;/strong&gt; : Provides access to managed taxonomy hierarchies, keywords, social tags and Content Type publishing across site collections.&lt;br /&gt;&lt;strong&gt;Secure Store Service&lt;/strong&gt; : Provides capability to store data (e.g. credential set) securely and associate it to a specific identity or group of identities.&lt;br /&gt;&lt;strong&gt;State Service&lt;/strong&gt; : Provides temporary storage of user session data for Office SharePoint Server components.&lt;br /&gt;&lt;strong&gt;Usage and Health data collection&lt;/strong&gt; : This service collects farm wide usage and health data and provides the ability to view various usage and health reports.&lt;br /&gt;&lt;strong&gt;Visio Graphics Service&lt;/strong&gt; : Enables viewing and refreshing of published Visio diagrams in a web browser.&lt;br /&gt;&lt;strong&gt;Web Analytics Service Application&lt;/strong&gt; : Enable rich insights into web usage patterns by processing and analyzing web analytics data .&lt;br /&gt;&lt;strong&gt;Word Conversion Service Application&lt;/strong&gt; : Provides a framework for performing automated document conversions&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-1618180990445133741?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/1618180990445133741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=1618180990445133741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/1618180990445133741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/1618180990445133741'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2009/10/shared-services-in-sharepoint-2010.html' title='Shared Services in SharePoint 2010'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-8576264415973583856</id><published>2009-10-17T08:10:00.000-07:00</published><updated>2009-10-17T08:27:55.492-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 and BDC</title><content type='html'>Very excited about BDC ( now renamed Business Data Connectivity ) in SharePoint 2010 (&lt;a href="http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/default.aspx"&gt;http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/default.aspx&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;BDC Model Schema in SharePoint 2010 - &lt;a href="http://msdn.microsoft.com/en-us/library/dd921790.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd921790.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Few exicting new things from BDC&lt;br /&gt;  - Full CRUD ( Create, Read, Update and Delete ) support (&lt;a href="http://msdn.microsoft.com/en-us/library/dd963707.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd963707.aspx&lt;/a&gt;)&lt;br /&gt;  - Support for .NET assemblies :) ( &lt;a href="http://msdn.microsoft.com/en-us/library/dd774467.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd774467.aspx&lt;/a&gt; )&lt;br /&gt;  - Now supports WCF ( &lt;a href="http://msdn.microsoft.com/en-us/library/dd953870.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd953870.aspx&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;Watch for this space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-8576264415973583856?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/8576264415973583856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=8576264415973583856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/8576264415973583856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/8576264415973583856'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2009/10/sharepoint-2010-and-bdc.html' title='SharePoint 2010 and BDC'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-959633302994124723</id><published>2009-03-02T17:06:00.000-08:00</published><updated>2009-05-02T20:39:09.680-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom'/><category scheme='http://www.blogger.com/atom/ns#' term='BDC'/><category scheme='http://www.blogger.com/atom/ns#' term='Web part'/><title type='text'>Custom Web Part using BDC Object Model</title><content type='html'>Sharepoint ( MOSS 2007 ) provides two BDC related web parts namely Business Data List Web Part and Business Data Related List Web Part. This blog will demonstrate writing custom web parts that read data through BDC APIs.&lt;br /&gt;&lt;br /&gt;In this example a simple web part reads data from BDC APIs and displays it in web part panel. The custom web part (XBdc) is shown in the following figure.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/SfzkHIp9MoI/AAAAAAAAABk/zXRJtdS4qt4/s400/XBdcView.GIF"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 602px; DISPLAY: block; HEIGHT: 141px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5331386870133502594" border="0" alt="" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/SfzkHIp9MoI/AAAAAAAAABk/zXRJtdS4qt4/s400/XBdcView.GIF" /&gt;&lt;/a&gt;&lt;strong&gt;Figure 1&lt;/strong&gt; : Custom web part reading data from BDC APIs&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;To create a custom web part, I will be using Visual Studio 2008 without Visual Studio .NET Extensions for SharePoint 3.0. If you download Visual Studio .NET Extensions for SharePoint, it will be a bit easier. Since extensions are not available ( as of March2009 ) for x64, I will create XBdc Web Part without using extensions.&lt;br /&gt;&lt;br /&gt;First create a Visual Studio project of "Class Library" type. Lets name the project "XBdc" for extended BDC. The name is not important and can be anything. After creating the project add references to &lt;em&gt;Microsoft.SharePoint.Portal.dll&lt;/em&gt; ( the dll can be found in %system drive%\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI folder ).&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_L-_bg80K5vQ/SfzpKnKRTyI/AAAAAAAAABs/kzCyM-R0DTo/s1600-h/XBdcVisualStudio.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 272px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5331392427419848482" border="0" alt="" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/SfzpKnKRTyI/AAAAAAAAABs/kzCyM-R0DTo/s400/XBdcVisualStudio.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Figure 2&lt;/strong&gt; : Class Library project in Visual Studio&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;You will also need to sign the assembly as the web part assembly will be deployed to GAC. For signing the assembly, load project properties and check the "Sign the assembly" checkbox and choose private key file.( see following figure ).&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/SfzvNZAkbbI/AAAAAAAAAB0/ZSeFW-gTVJc/s1600-h/XBdcSign.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 256px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5331399072230436274" border="0" alt="" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/SfzvNZAkbbI/AAAAAAAAAB0/ZSeFW-gTVJc/s400/XBdcSign.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Figure 3&lt;/strong&gt; : Signing custom web part assembly&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;The goal of the web part is to display BDC entities in a DataGrid. For this we will need references to &lt;em&gt;System.Data.dll&lt;/em&gt; and &lt;em&gt;System.Web.dll&lt;/em&gt; in the project.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Implementation&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;XBdc web part class needs to inherit from&lt;br /&gt;&lt;em&gt;System.Web.UI.WebControls.WebParts.WebPart&lt;/em&gt; . There is another WebPart class in SharePoint, but it should be avoided for the reasons listed &lt;a href="http://andrewconnell.com/blog/archive/2006/05/17/3115.aspx"&gt;here&lt;/a&gt;. Also XBdc class will override&lt;br /&gt;&lt;em&gt;CreateChildControls&lt;/em&gt; and &lt;em&gt;Render&lt;/em&gt; methods to attach DataGrid and populate it with BDC entities.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;[System.Xml.Serialization.XmlRoot(Namespace = &lt;span class="str"&gt;"http://jardalu/Samples"&lt;/span&gt;)]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; XBdc : System.Web.UI.WebControls.WebParts.WebPart&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateChildControls(){ ... }&lt;br /&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Render(System.Web.UI.HtmlTextWriter writer){ ... }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;To use BDC APIs, we will need to use the following namespaces&lt;br /&gt;&lt;br /&gt;&lt;em&gt;using Microsoft.Office.Server.ApplicationRegistry.MetadataModel;&lt;br /&gt;using Microsoft.Office.Server.ApplicationRegistry.Runtime;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;For simplicity sake, only these two namespaces are used. For complete list of APIs please visit MSDN site. Also, to keep things simple the Entity Name/Lob System Instance Name/Entity columns is hardcoded in the code.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;// hardcoded entity fields&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] headers = { &lt;span class="str"&gt;"Id"&lt;/span&gt;, &lt;span class="str"&gt;"Name"&lt;/span&gt;, &lt;span class="str"&gt;"Contact"&lt;/span&gt;, &lt;span class="str"&gt;"Phone"&lt;/span&gt;, &lt;span class="str"&gt;"Address"&lt;/span&gt; };&lt;/pre&gt;&lt;br /&gt;Method &lt;em&gt;LoadCustomersFromBdc()&lt;/em&gt; will read entities from BDC and create a DataTable that can be bounded to the DataGrid in the web part. In the method, &lt;em&gt;LobSystemInstance&lt;/em&gt; and &lt;em&gt;Entity&lt;/em&gt; is searched through &lt;em&gt;ApplicationRegistry&lt;/em&gt; object. Once entity is found, the method instance of type Finder is loaded. MethodInstance is executed to get all the entity instances for the finder. Finally instances are added in the data table using &lt;em&gt;EntityAsDataRow&lt;/em&gt; method. Please note BDC also provides &lt;em&gt;EntityAsDataTable&lt;/em&gt; property to create the data table itself.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; DataTable LoadCustomersFromBdc()&lt;br /&gt;{&lt;br /&gt;    DataTable dt = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; header &lt;span class="kwrd"&gt;in&lt;/span&gt; headers)&lt;br /&gt;    {&lt;br /&gt;        dt.Columns.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DataColumn(header));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// hardcoded LobSystemInstance and Entity name&lt;/span&gt;&lt;br /&gt;    LobSystemInstance lsi = ApplicationRegistry.GetLobSystemInstanceByName(&lt;span class="str"&gt;"CustomerLobSystemInstance"&lt;/span&gt;);&lt;br /&gt;    Entity entity = lsi.GetEntities()[&lt;span class="str"&gt;"Customer"&lt;/span&gt;];&lt;br /&gt;    MethodInstance mi = entity.GetFinderMethodInstance();&lt;br /&gt;    IEntityInstanceEnumerator enumerator = entity.FindFiltered(mi.GetFilters(), lsi);&lt;br /&gt;    &lt;span class="kwrd"&gt;while&lt;/span&gt; (enumerator.MoveNext())&lt;br /&gt;    {&lt;br /&gt;        IEntityInstance instance = enumerator.Current;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (instance == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;continue&lt;/span&gt;;&lt;br /&gt;        instance.EntityAsDataRow(dt);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; dt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Its time now to create the DataGrid control and attach the control to Web Part ( see method &lt;em&gt;CreateChildControls()&lt;/em&gt; )&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateChildControls()&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataGrid();&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.Width = &lt;span class="kwrd"&gt;new&lt;/span&gt; Unit(100, UnitType.Percentage);&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.HeaderStyle.Font.Size = 10;&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.HeaderStyle.Font.Bold = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.AlternatingItemStyle.BackColor = Color.Gray;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; header &lt;span class="kwrd"&gt;in&lt;/span&gt; headers)&lt;br /&gt;    {&lt;br /&gt;        BoundColumn column = &lt;span class="kwrd"&gt;new&lt;/span&gt; BoundColumn();&lt;br /&gt;        column.HeaderText = header;&lt;br /&gt;        column.DataField = header;&lt;br /&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.Columns.Add(column);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.AutoGenerateColumns = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Controls.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.grid);&lt;br /&gt;    &lt;span class="kwrd"&gt;base&lt;/span&gt;.CreateChildControls();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Finally DataGrid is bond to the BDC entities&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Render(System.Web.UI.HtmlTextWriter writer)&lt;br /&gt;{        &lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.DataSource = &lt;span class="kwrd"&gt;this&lt;/span&gt;.LoadCustomersFromBdc();&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.DataBind();&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.RenderControl(writer);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Once the custom Web Part is compiled, its time to hook it up in the SharePoint. Before hooking the XBdc Web Part, we will upload the "Customer" application definition file as the custom Web Part has hardcoded entity/lob system instance names ( see accompaning source code for model file and LOB code ).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Uploading Customer Model&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Compile the project CustomersLob accompanying in the source code&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;GAC the assembly using gacutil tool&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Upload the accompaning model (customer.xml) into BDC&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Registering XBdc Web Part in SharePoint&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;GAC the Web Part assembly using gacutil. Please note the public key token for the assembly.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Locate the virtual directory for SharePoint web site ( in the IIS Manager ). Typically the virtual directory is %system drive%\INETPUB\WWROOT\WSS\80 ( assuming web site is on port 80 )&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In the virtual directory, edit the web.config and add XBdc custom part in SafeControls section ( choose appropriate assembly and namespace ).&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SafeControl&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;Assembly&lt;/span&gt;&lt;span class="kwrd"&gt;="XBdcWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def61931772d3147"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;Namespace&lt;/span&gt;&lt;span class="kwrd"&gt;="Jardalu.Samples.XBdcWebPart"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;TypeName&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;Safe&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;span class="attr"&gt;AllowRemoteDesigner&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then browse to the WebSite, and go to Site Actions -&gt; Site Settings -&gt; Modify All Site Settings. Under that, click on "Web Parts" under Galleries.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click on "New" in the toolbar, and find the XBdc custom webpart as shown below&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sf0RoEsM_jI/AAAAAAAAACE/XJMdH_mZrX8/s1600-h/XBdcWebPartsNew.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 31px;" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/Sf0RoEsM_jI/AAAAAAAAACE/XJMdH_mZrX8/s400/XBdcWebPartsNew.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5331436914028117554" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Check the checkbox, go to the top, click on "Populate Gallery".&lt;/li&gt;&lt;br /&gt;&lt;li&gt;At this time XBdc custom web part is ready to be consumed.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Source Code&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Sample with complete source code can be downloaded from &lt;a href="http://rapidshare.com/files/228496623/XBdc.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;As-is&lt;/strong&gt;&lt;br /&gt;The source code/software is provided "as-is". No claim of suitability, guarantee, or any warranty whatsoever is provided. Source Code and executable files can not be used in commercial applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-959633302994124723?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/959633302994124723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=959633302994124723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/959633302994124723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/959633302994124723'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2009/05/custom-web-part-using-bdc-object-model.html' title='Custom Web Part using BDC Object Model'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_L-_bg80K5vQ/SfzkHIp9MoI/AAAAAAAAABk/zXRJtdS4qt4/s72-c/XBdcView.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-4480576831025928898</id><published>2009-01-13T01:31:00.000-08:00</published><updated>2009-01-18T22:40:50.863-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ISsoProvider'/><category scheme='http://www.blogger.com/atom/ns#' term='BDC'/><category scheme='http://www.blogger.com/atom/ns#' term='SSO'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS 2007'/><title type='text'>Implementing custom SSO Provider</title><content type='html'>Single Sign-On (SSO*) is a feature in MOSS that provides storage and mapping of credentials.  BDC and SSO are two different components in MOSS, however, SSO discussions in this article is tied with BDC and how SSO is used in BDC.&lt;br /&gt;&lt;br /&gt;Following article (&lt;a href="http://technet.microsoft.com/en-us/library/cc262932.aspx"&gt;http://technet.microsoft.com/en-us/library/cc262932.aspx&lt;/a&gt;) shows how SSO can be configured in MOSS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Limitations of SSO:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;a) SSO works when MOSS is installed in domain ( SSO does not work when SharePoint is installed in Workgroup ).&lt;br /&gt;b) SSO does not work when MOSS is configured in Forms Based Authentication mode ( FBA ).&lt;br /&gt;c) Master key backup is allowed only on a floppy disk (A:)&lt;br /&gt;d) No localization&lt;br /&gt;e) No tools for bulk upload (credentials)&lt;br /&gt;&lt;br /&gt;Fortunately, MOSS allows us to write our own "SSO" by implementing ISsoProvider interface. ISsoProvider interface is defined in Microsoft.SharePoint.SingleSignOn namespace and Microsoft.SharePoint.Portal.SingleSignOn.dll assembly ( url: &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.portal.singlesignon.issoprovider.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.portal.singlesignon.issoprovider.aspx&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Implementing ISsoProvider:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rather than iterating the implementation of the ISsoProvider, here is a walkthrough (&lt;a href="http://msdn.microsoft.com/en-us/library/ms566925.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms566925.aspx&lt;/a&gt;) of implementing ISsoProvider.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Registering SSO with BDC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MOSS allows only one default SSO provider ( default is SpsSsoProvider ), however BDC can work with multiple SSO providers. SSO provider for BDC is defined in BDC metadata model.&lt;br /&gt;&lt;br /&gt;In the metadata model, register your SSO provider with the following code&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;&amp;lt;Property Name="SsoApplicationId" Type="System.String"&gt;AppId&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;/Property&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;Property Name="SsoProviderImplementation" Type="System.String"&gt;MySsoProvider, My.SingleSignon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=71e9def111e9429c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255); font-family: courier new;"&gt;/Property&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The above code assumes that your SSO provider is "MySsoProvider" and is present in "My.SingleSignOn" assembly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notes:&lt;/span&gt;&lt;br /&gt;* SSO in MOSS is a misnomer. From the name, Single Sign-On, it appears that SSO will automatically log user into other systems. However, in reality, it only provides storage, retrieval and mapping of credentials. Other components ( such as BDC, Excel Services, Access Services etc. ) logs the user to other systems by retrieving user credentials from SSO.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-4480576831025928898?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/4480576831025928898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=4480576831025928898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4480576831025928898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4480576831025928898'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2009/01/implementing-custom-sso-provider.html' title='Implementing custom SSO Provider'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-4044572641629036709</id><published>2008-10-19T17:00:00.000-07:00</published><updated>2008-10-19T14:46:36.164-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='BDC'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS 2007'/><title type='text'>BDC : Beyond Web-Service and Database</title><content type='html'>As discussed in the previous &lt;a href="http://jardalu.blogspot.com/2008/09/business-data-catalog.html"&gt;post&lt;/a&gt;, Business Data Catalog only supports LOB of type web-service and database. What if you want to display your business data from your LOB through adapters ?&lt;br /&gt;&lt;br /&gt;A little known fact of BDC is, its support of web-service through GACed proxy. Typically BDC generates web-service proxy at runtime from the &lt;span style="font-family:courier new;color:#3333ff;"&gt;WsdlFetchUrl&lt;/span&gt; property specified in the metadata. Instead of using &lt;span style="font-family:courier new;color:#3333ff;"&gt;WsdlFetchUrl&lt;/span&gt; property if&lt;br /&gt;&lt;span style="font-family:courier new;color:#3333ff;"&gt;WebServiceProxyType&lt;/span&gt; property is used, BDC loads the proxy from GAC. The property &lt;span style="font-family:courier new;color:#3333ff;"&gt;WebServiceProxyType&lt;/span&gt; is specified at the LOBSystem level.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Sample&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this sample, an entity Employee will be displayed in the Business Data List where the entity is is fetched from local assembly ( GACed assembly ).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/SPrtZFJ2PtI/AAAAAAAAAA8/kTl4_Y903dA/s1600-h/Employee+BDL.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5258776530044468946" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/SPrtZFJ2PtI/AAAAAAAAAA8/kTl4_Y903dA/s320/Employee+BDL.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Figure 1:&lt;/span&gt; Employee Business Data List&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Employee entity contains the following fields as described below&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Employee&lt;br /&gt;    Id - int&lt;br /&gt;    LoginId - string&lt;br /&gt;    FirstName - string&lt;br /&gt;    LastName - string&lt;br /&gt;    Title - string&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;AdventureWorks class (data fetched from AdventureWorks sample database) defines finder and specific finder (namely GetEmployees and GetEmployee methods).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class AdventureWorks : HttpWebClientProtocol&lt;br /&gt;{&lt;br /&gt;    public IList&lt;employee&gt; GetEmployees(string filterName){ ... }&lt;br /&gt;    public Employee GetEmployee(int id){ ... }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The point to note is AdventureWorks is a subclass of HttpWebClientProtocol. Once the assembly is created with AdventureWorks class and Employee class and GACed, its time to hook Employee entity with BDC.&lt;br /&gt;&lt;br /&gt;Assuming the namespace of the AdventureWorks and Employee class to "Beyond" and FullName of the assembly is "BeyondAdvWorks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=22c970e70e320837".&lt;br /&gt;&lt;br /&gt;The following metadata defines a LobSystem of type WebService and registers Beyond.AdventureWorks class as the proxy for the webservice using WebServiceProxyType property.&lt;br /&gt;&lt;br /&gt;Click on the following figure to see the LobSystem definition.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/SPsKw_pE4nI/AAAAAAAAABM/hTSLcfTP-ZY/s1600-h/LobSystemXml.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5258808826718904946" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/SPsKw_pE4nI/AAAAAAAAABM/hTSLcfTP-ZY/s400/LobSystemXml.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Figure 2 :&lt;/span&gt; LobSystem &lt;p&gt;&lt;br /&gt;&lt;br /&gt;Entity Employee is defined in the metadata, with identity "Id" of type int ( see following figure ).&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_L-_bg80K5vQ/SPsL-Q2tYmI/AAAAAAAAABU/QG71DX51PZc/s1600-h/EntityXml.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5258810154189415010" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/SPsL-Q2tYmI/AAAAAAAAABU/QG71DX51PZc/s400/EntityXml.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Figure 3 :&lt;/span&gt; Entity&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Finally the two methods are modeled in the metadata ( the figure contains Finder method, download the sample for complete metadata ).&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_L-_bg80K5vQ/SPsMzFIZjoI/AAAAAAAAABc/GY-wGNR_8oo/s1600-h/MethodXml.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5258811061575454338" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_L-_bg80K5vQ/SPsMzFIZjoI/AAAAAAAAABc/GY-wGNR_8oo/s400/MethodXml.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Figure 4 :&lt;/span&gt; Methods&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;In the methods, fully qualified name is used to define the TypeDescriptor for Employee class.&lt;br /&gt;&lt;br /&gt;After hooking the Employee entity with Business Data List, the following figure shows the individual Employee.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_L-_bg80K5vQ/SPr_rc5Tj9I/AAAAAAAAABE/h45a15b5mGo/s1600-h/Employee+Details.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5258796636864483282" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/SPr_rc5Tj9I/AAAAAAAAABE/h45a15b5mGo/s320/Employee+Details.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Figure 5 :&lt;/span&gt; Individual entity page&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;See the previous &lt;a href="http://jardalu.blogspot.com/2008/09/business-data-catalog.html"&gt;post&lt;/a&gt; for how to hook finder and specific finder methods to the Business Data List.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Source Code&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Sample with complete source code can be downloaded from &lt;a href="http://rapidshare.com/files/155640286/Beyond.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;As-is&lt;/strong&gt;&lt;br /&gt;The source code/software is provided "as-is". No claim of suitability, guarantee, or any warranty whatsoever is provided. Source Code and executable files can not be used in commercial applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-4044572641629036709?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/4044572641629036709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=4044572641629036709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4044572641629036709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/4044572641629036709'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2008/09/bdc-beyond-web-service-and-database.html' title='BDC : Beyond Web-Service and Database'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_L-_bg80K5vQ/SPrtZFJ2PtI/AAAAAAAAAA8/kTl4_Y903dA/s72-c/Employee+BDL.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8155529690205240899.post-5659595773233188883</id><published>2008-09-19T00:13:00.000-07:00</published><updated>2008-09-24T01:34:38.098-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='BDC'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS 2007'/><title type='text'>Business Data Catalog</title><content type='html'>&lt;span style="font-size:100%;"&gt;Business Data Catalog (BDC) is a feature of Microsoft Office SharePoint Server ( MOSS 2007) which provides a mechanism to bring and display business data on SharePoint. BDC is simple yet powerful to use because of its no-code solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Power of BDC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Consider this, there is a web-service (or database) which exposes your Line of Business (LOB) data and you want to see the data on SharePoint. This can be done by writing a custom web-part. You will need a developer to write that custom web-part. Now assume the web-service requires credentials based authentication. Hopefully the developer can still handle that. If the web-service requires unique credentials for each SharePoint user, you will require a smart developer. What about you want to search the data fetched by the web-part ?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;BDC's goal is to enable you to surface business data (some of the aspects described above) in Office SharePoint Server 2007 with minimal coding effort. BDC requires one to write [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8155529690205240899&amp;amp;postID=5659595773233188883#n1"&gt;n1&lt;/a&gt;] XML based metadata.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BDC Web Part - Adventure Works Sample&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;MOSS 2007 comes with five Business Data Web Parts [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8155529690205240899&amp;amp;postID=5659595773233188883#r3"&gt;r3&lt;/a&gt;] which can display a list of entity instances, display details of an entity instance, display list of related entity instances, display a list of actions associated with an entity and create a Business Data item.&lt;br /&gt;&lt;br /&gt;In this sample, a list of entity instances are displayed using Business Data List (BDL) with Adventure Works [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8155529690205240899&amp;amp;postID=5659595773233188883#r4"&gt;r4&lt;/a&gt;] database as LOB.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_L-_bg80K5vQ/SNa3i_68fXI/AAAAAAAAAAM/dJbte-E1s44/s1600-h/Bdc-+AdWorks+-+ProductListSearch.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/SNa3i_68fXI/AAAAAAAAAAM/dJbte-E1s44/s320/Bdc-+AdWorks+-+ProductListSearch.GIF" alt="List of Products" id="BLOGGER_PHOTO_ID_5248584227648994674" border="0" /&gt;&lt;/a&gt;&lt;span style="margin: 0px auto 10px; display: block; text-align: center;font-size:100%;" &gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Figure&lt;/span&gt;&lt;span style="font-size:100%;"&gt; - List of Products in Adventure Works.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;Steps in displaying the products list&lt;br /&gt;Step 1 : Install the adventure works 2000 database [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8155529690205240899&amp;amp;postID=5659595773233188883#r4"&gt;r4&lt;/a&gt;]&lt;br /&gt;Step 2 : Install SharePoint Server 2007 SDK [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8155529690205240899&amp;amp;postID=5659595773233188883#r5"&gt;r5&lt;/a&gt;]&lt;br /&gt;Step 3 : Upload BDC metadata model for Adventure Works from SDK&lt;br /&gt;- Open MOSS Central Administration&lt;br /&gt;- Goto Shared Services Administration page for your shared service&lt;br /&gt;- Click on "Import application definition" in the Business Data Catalog block&lt;br /&gt;- Browse the adventure works model XML from SDK (C:\Program Files\2007 Office System Developer Resources\Samples\Business Data Catalog\AdventureWorks Samples\AdventureWorks2000.xml)&lt;br /&gt;- Click upload&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_L-_bg80K5vQ/SNbMB34yS8I/AAAAAAAAAAU/mt9XGSZhxaM/s1600-h/Bdc+-+AdWorks+-+Upload+Model.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/SNbMB34yS8I/AAAAAAAAAAU/mt9XGSZhxaM/s320/Bdc+-+AdWorks+-+Upload+Model.GIF" alt="" id="BLOGGER_PHOTO_ID_5248606748300954562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin: 0px auto 10px; display: block; text-align: center;font-size:100%;" &gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure&lt;/span&gt; - Model for Adventure Works uploaded.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;At this step the BDC application definition for adventure works  is uploaded.&lt;br /&gt;&lt;br /&gt;Step 4 : Add BDL for AdventureWorks products.&lt;br /&gt;- Goto your site (MySite)&lt;br /&gt;- Click on Site Actions &gt; Edit Page&lt;br /&gt;- Choose to add a new Web Part&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_L-_bg80K5vQ/SNbT10m1BkI/AAAAAAAAAAc/DTAgg0SLg48/s1600-h/Bdc-+AdWorks+-+AddWebPart.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_L-_bg80K5vQ/SNbT10m1BkI/AAAAAAAAAAc/DTAgg0SLg48/s200/Bdc-+AdWorks+-+AddWebPart.gif" alt="" id="BLOGGER_PHOTO_ID_5248615337354921538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;- Select Business Data List and Click OK&lt;br /&gt;- A Business Data List will appear within the "Add a web part" block&lt;br /&gt;- Click on "Open the tool pane"&lt;br /&gt;- A Business Data List tool bar will open on the right side&lt;br /&gt;- Click on the picker button and choose "Product"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_L-_bg80K5vQ/SNbYrALrA7I/AAAAAAAAAAs/RmT1QeTL4aw/s1600-h/Bdc-+AdWorks+-+BDL+Selection.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_L-_bg80K5vQ/SNbYrALrA7I/AAAAAAAAAAs/RmT1QeTL4aw/s320/Bdc-+AdWorks+-+BDL+Selection.gif" alt="" id="BLOGGER_PHOTO_ID_5248620649041822642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;- Click OK in BDL pane&lt;br /&gt;- Exit the edit mode&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_L-_bg80K5vQ/SNbZaamUr8I/AAAAAAAAAA0/pkmOw0tXY1g/s1600-h/Bdc-+AdWorks+-+BDL+Search.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_L-_bg80K5vQ/SNbZaamUr8I/AAAAAAAAAA0/pkmOw0tXY1g/s320/Bdc-+AdWorks+-+BDL+Search.gif" alt="" id="BLOGGER_PHOTO_ID_5248621463586779074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;- In the search criteria, enter your criteria where you will get all the products associated with the criteria.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Limitation of BDC&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;BDC only allows read functionality on business data. That means BDC does not support CUD (Create, Update, Delete) on business entities.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;BDC metadata XML is tough to understand. If one is not using tools, model is hard to manage and will not necessarily qualify as "no code" solution.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;BDC supports only web-service and database based LOB.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="r1"&gt;r1&lt;/a&gt; : Business Data Catalog Overview [&lt;a href="http://msdn.microsoft.com/en-us/library/ms546541.aspx"&gt;link&lt;/a&gt;]&lt;br /&gt;&lt;a name="r2"&gt;r2&lt;/a&gt; : SharePoint 2007: BDC - The Business Data Catalog [&lt;a href="http://blah.winsmarts.com/2007-4-SharePoint_2007__BDC_-_The_Business_Data_Catalog.aspx"&gt;link&lt;/a&gt;]&lt;br /&gt;&lt;a name="r3"&gt;r3&lt;/a&gt; : Business Data Web Parts [&lt;a href="http://msdn.microsoft.com/en-us/library/ms521389.aspx"&gt;link&lt;/a&gt;]&lt;br /&gt;&lt;a name="r4"&gt;r4&lt;/a&gt; : Adventure Works [&lt;a href="http://msdn.microsoft.com/en-us/library/ms519241.aspx"&gt;link&lt;/a&gt;]&lt;br /&gt;&lt;a name="r5"&gt;r5&lt;/a&gt; : SharePoint Server 2007 SDK [&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6D94E307-67D9-41AC-B2D6-0074D6286FA9"&gt;link&lt;/a&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Notes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="n1"&gt;n1&lt;/a&gt; : There are tools (Microsoft and Third parties) that help write BDC metadata XML.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8155529690205240899-5659595773233188883?l=jardalu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jardalu.blogspot.com/feeds/5659595773233188883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8155529690205240899&amp;postID=5659595773233188883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/5659595773233188883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8155529690205240899/posts/default/5659595773233188883'/><link rel='alternate' type='text/html' href='http://jardalu.blogspot.com/2008/09/business-data-catalog.html' title='Business Data Catalog'/><author><name>Jardalu Inc</name><uri>http://www.blogger.com/profile/03716775088255299358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_L-_bg80K5vQ/SNa3i_68fXI/AAAAAAAAAAM/dJbte-E1s44/s72-c/Bdc-+AdWorks+-+ProductListSearch.GIF' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
