- No SPSecurity – RunWithElevatedPrivileges cannot be used inside Sandboxed Solutions.
- No GAC Deployment – It can't be deployed to Global Assembly Cache(GAC)
- No Email Support - No support to SPUtility.SendEmail namespace for sending mails.
- No Visual Web parts can be deployed
- No Global folders access– No access to folders like “_layout” & “resources”.
- Can be only Deployed at site collection level and sub site level.
- No Feature stapling – New Feature cannot be added to the existing Feature.
- No custom Timer jobs
- ADO.NET connectivity cannot be implemented and you cannot directly connect to a database.
- No access to taxonomy fields.
- You can't read or write from/to web.config file.
- No full trust solutions can be deployed.
- Accessing the Objects in another Site Collection.
- No support to Microsoft.SharePoint.WebPartPages namespace.
- Making web service (external) calls over the internet, or accessing code that is not marked to allow partially trusted callers are not supported.
Monday, 26 November 2012
Limitations of SharePoint 2010 Sandboxed Solutions
Thursday, 22 November 2012
Content Type Hub FAQ and Limitations
Below are some of the limitations/FAQ about content type hubs:
1. Which field types are supported? Custom fields and external data columns are not supported(you cannot create external data columns in the content type gallery).
2. What happens if a web application is member of two different Content Type Hubs? The default Managed Metadata Service(MMS) gets the priority and will be your content type hub. However, if you customize the service application associations for the web application, you can select the appropriate MMS application proxy for the content type hub.
2. What happens if a web application is member of two different Content Type Hubs? The default Managed Metadata Service(MMS) gets the priority and will be your content type hub. However, if you customize the service application associations for the web application, you can select the appropriate MMS application proxy for the content type hub.
3. What happens if a user changing a synchronized Content Type inside the Target Site Collection? The subscribed content types are marked 'read only' in the target site collection. Users are unable to manage/change the synchronized content types inside the target site collection. Changes to the content type should always be made in the content type hub and republihsed to push the changes to the subscribed sites.
4. What happens with content types within the sub-site structure?
Content type subscription is a site collection level feature, so you consume the content types in the top root web and it flows down the sub-sites.
Content type subscription is a site collection level feature, so you consume the content types in the top root web and it flows down the sub-sites.
5. Are Workflows supported and if yes what are the limitations? Unfortunately workflows are not supported. However, once you have your content type published to the target site collection, you can create and associate workflows to the subscribed content types in the target site. But doing so, I have encountered issues such as the workflow association being removed once the content type is republished. A simple workaround is to create list workflows in the target site collection and not associate with the content types.
Update: Read the following blog post on associating workflows with published content types. As always, you are able to still create list workflows in the target site collection instead of associating with the content type if required.
6. What happens with document templates? Document templates associated with the content type are also published along with the subscribed content type.
7. What happens with Document Set content Types? Yes, you can subscribe to document set content types. In this case, all the dependent content types with the document set & the document set itself will be published to the target site. However, you should have the Document set feature activated in the target site.
6. What happens with document templates? Document templates associated with the content type are also published along with the subscribed content type.
7. What happens with Document Set content Types? Yes, you can subscribe to document set content types. In this case, all the dependent content types with the document set & the document set itself will be published to the target site. However, you should have the Document set feature activated in the target site.
8. What about feature dependencies? Feature dependencies are not activated automatically in the target site collection. Thus, they need to be activated manually before the subscription process, else the content type publishing job will fail in the target site collection for that subscribed content type. Best example is when you subscribe to document set content types. See 7.
9. Why cannot I publilsh my content type created in a (deployed) solution package (.wsp)? Content types created via object model should use the new SPContentType constructor to create content types which allows you to specify the SPContentTypeId for the new content type. Visit Nick's blog post for more info on this. You can also script the creation of content types using PowerShell, which is another option.
Apologies for the confusion. You are able to publish content types deployed from a solution package (.wsp) - whether you use CAML or server object model or client object model.
SharePoint 2010 Content Type Hub
New feature in SharePoint Server 2010 called Content
Type Hub, which allows the centralization and sharing of Content Types
through the Metadata Service Application. You will understand how it works, how
to configure it, how to publish and consume Content Types and also some
troubleshooting.
How it works
Widely discussed when using MOSS 2007, the Content Type Sharing
was always problematic, because once the Content Types are created in a single
Site Collection, they cannot be shared among other Site Collections (there is
no OOTB resource for that).
This new feature is available through the Metadata Services
Application, which maps the Site Collection in which the Content Types are
shared, working like a Hub.
The Figure 1 below displays how a Content Type Hub works:
Figure 1 – The operation of a Content Type Hub (Publisher x Subscribers)
The concept of its operation is very simple, basically the
Content Type Hub publishes the Content Types and through the Metadata Service
Application they are replicated to the Subscribers. These subscribers can be
Site Collections that are in different Web Applications even in different Farms
(if you wish it).
Content Types Synchronism is done by 2 Timer Jobs that are
executed in the background. They are:
·
Content Type Hub –
Responsible for managing the Content Types to be published.
·
Content Type Subscriber –
Responsible for publishing the Content Types from the Hub to the Content Type
Gallery of the Site Collection.
Configuration
Site
Collection (Content Type Hub)
A Site Collection needs to be created firstly to serve as the
Content Type Hub, in order to do that go to the Central Administration
> Application Management > Create Site Collections and create a
new Site Collection, according the Figure 2:
Figure 2 – Site Collection Creation
Shortly after that, enable the Feature Content Type
Syndication Hub for the Site Collection in the Site Actions
> Site Settings > Site collection features, according the Figure 3:
Figure 3 – Feature Activation - Content Type Syndication Hub
Note: At the moment this Feature is activated
the Site Collection is provisioned as the Content Type Hub.
Metadata
Service Application
The Metadata Application Service is a service for sharing
metadata, whose main feature is the storage of keywords and term sets (which is
not discussed in this paper) and as optional feature to serve as a Hub for
Content Types.
In the Farm is possible to have zero or more Metadata Service
Applications and this criterion depends entirely on the Design of your
solution. In this approach we need only one running service application whose
connection will consume only one Content Type Hub. In order to consume more
than one Content Type Hub, you need to create another service application for
that. This is applicable in case you want to create different scopes for
Content Types, e.g. the separation of Content Type Hubs for consumption in an
Intranet Web Site and the other one in an Internet Web Site.
Here we are addressing only the planning of the Metadata
Application Service as a Hub for Content Types, but if you're interested in
exploring more about this service application, see the references in this
article.
The Metadata Service Application can be created through Central
Administration > Application Management > Manage Service Applications
> New > Managed Metadata Service. The Figures 4 and 5 display the
necessary data for that:
Figure 4 – Creating a new Metadata Service Application (1/2)
Figure 5 – Creating a new Metadata Service Application (2/2)
Note: An important point to be commented is
that once the URL Configuration for the Content Type Hub is set, this cannot be
changed by the user interface. If you want to change it after the Service
Application is created, use thisapproach for
updating the Metadata Service Application.
As we will not use the Metadata Service Application for storing
keywords and term sets, disable the default storage location of this service
application in Central Administration > Application Management >
Manage Service Applications by selecting the Managed Metadata Service
Connection and clicking Properties, according the Figure 6:
Figure 6 – Settings of the Metadata Service Connection (1/2)
Shortly after that, uncheck the checkboxes according the Figure
7:
Figure 7 – Settings of the Metadata Service Connection (2/2)
OBS: Only one default storage location for
keywords and term sets is allowed in a Web Application, thus let these options
available until you decide to use them.
Publishing
The Site Columns and Content Types referenced in the posts Creating Site Columns Programmatically via XML andCreating Content Types Programmatically via XML are
going to be used in the Hub, because they will serve us as examples of Content Types
to be published.
Note: Just deploy the Site Columns using the
script provided. Use another approach for deploying the Content Types,
according to this post SharePoint Lesson Series – Lesson 2 – Content Types –
Part I (not migrated yet. Ask me for the material if you are interested.)
Once these objects are created, start publishing the Content
Types. This task can be done manually or programmatically. I'll show you both.
It is worth remembering that, only for purposes of
understanding, Content Type Syndication is the definition to
the way that Content Types are organized and shared between Lists and
Libraries, which is precisely what we are doing with their publishing using the
Content Type Hub.
Manual
In this type of publishing go to Site Actions > Site
Settings > Site Content Types and for each Content Type created,
under the Settings go to Manage publishing for this content type as
shown in the Figure 8 below:
Figure 8 – Manual Publishing of Content Types (1/2)
Shortly after that, one of the options for publishing is
available, according the Figure 9:
Figure 9 – Manual Publishing of Content Types (2/2)
Note: Because we are publishing it for the
first time, only the Publish option is available. If you have already published
the Content Type, the other two options are available and the current disabled.
Just for clarification, I am commenting on the publishing
options:
·
Publish – The Content Type
is delivered for being consumed in other Site Collections that reference it.
·
Unpublish – The Content Type
is retracted. Its copy remains in the other Site Collections, however its
status changes to be no longer Read-Only.
·
Republish – Redo the Content
Type Publishing. It should be applied in cases where there was some change in
it.
Coding
If you prefer to automate the publishing process (especially if
you have multiple Content Types), use the code below for this task.
Code Snippet
1.
using System;
2.
using System.Collections.Generic;
3.
using System.Linq;
4.
using System.Text;
5.
using System.IO;
6.
using CommonLibrary;
7.
using Microsoft.SharePoint;
8.
using Microsoft.SharePoint.Taxonomy;
9.
using Microsoft.SharePoint.Taxonomy.ContentTypeSync;
10.
using System.Configuration;
11.
12.
namespace PublishingContentTypes
13. {
14.
public class Program
15. {
16.
public static void Main()
17. {
18.
try
19. {
20.
string url = ConfigurationManager.AppSettings["Url"].ToString();
21. bool publish
= bool.Parse(ConfigurationManager.AppSettings["Publish"].ToString());
22.
23. using (SPSite site
= new SPSite(url))
24.
{
25. using (SPWeb web
= site.RootWeb)
26.
{
27. string contentTypeXml
= Path.GetFullPath("ContentTypes.xml");
28.
29. List<string>
list = XMLHelper.ReadXML(contentTypeXml);
30.
31. foreach (string item in list)
32.
{
33. SPContentType ctype
= web.ContentTypes[item];
34.
if (ctype != null)
35. {
36.
if (publish)
37. {
38.
// Publishing
39. ContentTypeHelper.ContentTypePublish(site,
ctype);
40.
}
41. else
42.
{
43. //
Unpublishing
44.
ContentTypeHelper.ContentTypeUnPublish(site, ctype);
45. }
46.
}
47. }
48.
}
49. }
50.
}
51. catch (Exception ex)
52.
{
53. Console.WriteLine(ex.ToString());
54.
}
55. }
56.
}
57. }
Note: Be aware of the utilisation of the
namespace Microsoft.SharePoint.Taxonomy, which refers to the assembly
Microsoft.SharePoint.Taxonomy.dll, which is only available in SharePoint Server
2010 (directory 14\ISAPI).
I have also created some libraries to facilitate the publishing,
as you can see it in the solution below:
Figure 10 – Content Types Publishing Solution
The code below refers to the class ContentTypeHelper.cs and
shows the details for publishing and unpublishing Content Types:
Code Snippet
1.
using System;
2.
using System.Collections.Generic;
3.
using System.Linq;
4.
using System.Text;
5.
using Microsoft.SharePoint;
6.
using Microsoft.SharePoint.Taxonomy;
7.
using Microsoft.SharePoint.Taxonomy.ContentTypeSync;
8.
9.
namespace CommonLibrary
10.
{
11. public static class ContentTypeHelper
12.
{
13. public static void ContentTypePublish(SPSite hubSite, SPContentType ctype)
14.
{
15. //
Check to see whether the site is a valid hub site.
16.
if (ContentTypePublisher.IsContentTypeSharingEnabled(hubSite))
17. {
18.
ContentTypePublisher publisher = new ContentTypePublisher(hubSite);
19.
20.
Console.WriteLine("Publishing the content type: " +
ctype.Name);
21.
22.
// Check to see whether this content type has been published.
23. if (publisher.IsPublished(ctype))
24.
{
25. Console.WriteLine(ctype.Name
+ " is a published content type.");
26.
}
27.
28.
publisher.Publish(ctype);
29. }
30.
else
31. {
32.
// The provided site is not a valid hub site.
33. Console.WriteLine("This
site is not a valid hub site");
34.
}
35. }
36.
37. public static void ContentTypeUnPublish(SPSite hubSite, SPContentType ctype)
38.
{
39. if (ContentTypePublisher.IsContentTypeSharingEnabled(hubSite))
40.
{
41. ContentTypePublisher publisher
= new ContentTypePublisher(hubSite);
42.
43. Console.WriteLine("Unpublishing
the content type: " + ctype.Name);
44.
45. //
Check to see whether this content type has been published.
46.
if (!publisher.IsPublished(ctype))
47. {
48.
Console.WriteLine(ctype.Name + " is not a published
content type.");
49. }
50.
else
51. {
52.
publisher.Unpublish(ctype);
53. }
54.
}
55. else
56.
{
57. //
The provided site is not a valid hub site.
58.
Console.WriteLine("This site is not a valid hub site");
59. }
60.
}
61. }
62.
}
How
to consume Content Types
In order to consume the Content Types of the Content Type Hub,
make sure you are referencing the Metadata Service Application that offers the
service application. This applies only if you are using another Web Application
as Hub, otherwise you're already entitled to use it within your Web
Application.
Make sure you have referenced the service application in
the Central Administration > Application Management > Configure
service application associations. The Figure 11 displays the scenario that
I have just commented:
Figure 11 – Configuring the service application association
Note: Notice that I have two Web Applications,
the 81 serves as Publisher and the 80 as Subscriber. Both use the same
service Managed Metadata Service.
In the beginning of this article I quickly commented on the
Timer Jobs that are responsible for the Content Types Synchronism, now just
exploring a little more, if you want to trigger them after publishing or
unpublishing Content Types for a quick check, go to the Central
Administration > Monitoring > Check job status and select the
desired job definition according the Figures 12 and 13:
Figure 12 – Triggering Timer Jobs (1/2)
Figure 13 – Triggering Timer Jobs (2/2)
Note: By forcing the execution of the Timer
Jobs above, always trigger the Content Type Hub (Publisher) first and then the
Subscribers. The execution is asynchronous, so despite the status changes
quickly after triggering the job, probably it will still be running.
Note that there are two Subscribers consuming
the Content Types (port 80 and 81) even though the Hub is on port 81, just
because other Site Collections within the same Web Application can take
advantage of Content Types.
After the asynchronous execution, you have the option to check
at the Site Collection Subscribers whether the Content Types were successfully
replicated. One possible way is to access the Content Types via Site
Actions> Site Settings> Site content types (Group Galleries) and
check whether the Content Type is there, according Figure 14:
Figure 14 – Content Types published :)
Another possible way is exemplified in the section
“Troubleshooting” below.
Troubleshooting
Nothing is perfect, you will always face problems that appear in
the middle of the road. Welcome to the Real World!
In order to check the publishing errors there are two ways, both
can be checked at the Publisher or at the Subscriber sides, the first way is
available on the Hub Site in Site Actions> Site Settings> Content
type service application error log (Site Collection Administration group) according
Figure 15 below:
Figure 15 – Checking the publishing errors at the Publisher side
The second way is available at the Site Collections Subscribers
side in Site Actions > Site Settings > Content Type Publishing
(Site Collection Administration group) according Figure 16:
Figure 16 – Checking the publishing errors at the Subscriber side (1/2)
NOTE: The figure above shows a successful
outcome, because all the Content Types were published correctly (what should
happen in your environment). This figure is only used to display where to find
the possible publishing errors.
Another point to be reviewed is regarding the
Refresh of all the Content Types published. If you wish to force an update of
the Subscriber, which has changed for some reason, leave this option selected.
This will overwrite the current Content Types with the version of the
Publisher.
Visit the link for the publishing error log, there you can also
see the publishing errors (the same as the Publisher) as shown in Figure 17:
Figure 17 – Checking the publishing errors at the Subscriber side (2/2)
Subscribe to:
Posts (Atom)