Microsoft WebCamp 2014: Working with AngularJS

Last week I delivered a session at Microsoft WebCamp 2014 event. A full-day event, with 3 simultaneous session tracks, focused on web technologies, not only from Microsoft but also open source, and design/communication topics. A lot of good stuff was shown, from node.js to service stack.

My session was about Working with AngularJS, a fantastic Single Page Application framework in JavaScript. It’s an introductory session, meant to give attendees a basic understanding of the framework and its components. I had a packed room, with around 200 people, and the feedback was great so I felt it might be worth sharing the slides and demos I wrote for the session:

You’re probably wondering why would I, a SharePoint guy, be talking about AngularJS. SharePoint guys are not exactly known for embracing the latest and greatest web technologies, mostly because when a new SharePoint version is released, it’s already one .Net version behind, not to mention all the new JavaScript frameworks. With SharePoint 2013, all that is changed. The new SharePoint App Model allows us to build our apps in any technology we want, and that means we can use all the big boys toys now such as ASP.NET MVC and, of course, AngularJS.

Also presenting a session on WebCamp about KnockoutJS was my good friend and colleague João “Jota” Martins, which is a great JavaScript data-binding library. Although they share some concepts, Knockout and Angular are very different technologies, on very different abstraction levels, so it’s good to know when to use one or the other. Checkout his slides and code samples here.

European SharePoint Conference 2014

The European SharePoint Conference 2014, Europe’s largest SharePoint-focused conference, took place last week (May 5th to May 8th) in Barcelona, and it was a great! I was fortunate to be a part of the Programme Team and contribute, although just a little bit, to the success of this huge event. A few statistics about the conference:

  • 6 pre-conference full-day tutorials by SharePoint all stars like Dan Holme, Rafal Lukawiecki and Joel Oleson.
  • 4 keynotes by Simon Skaria, Dan Holme, Christian Buckley, Mark Kashman and Rafal Lukawiecki
  • 110 breakout sessions over 8 simultaneous tracks
  • Over 80 speakers
  • More than 1200 attendees from all around the world
  • 55 sponsors

Each day was focused on a specific theme based on the main trends in the industry:

  • The first day was focused on Cloud and Office 365
  • The second day’s theme was Enterprise Social, Enterprise Content Management and Best Practices
  • The third day was about Solutions and Devices

Without getting into too much detail, here are the general trends around SharePoint and Office 365, some of which were already shared in Microsoft’s SharePoint Conference, last March:

  • The future is the cloud but SharePoint on-premise is not going away anytime soon. Next year a new version of SharePoint Server will be released and, after that, there are plans for an additional one. However, all the new features will first appear on SharePoint Online (Office 365) and some might never be released on-premises.
  • When developing for SharePoint on-premises, always try to use the cloud-proof App Model to allow your solution to be used in SharePoint Online. Only go for Full Trust Code (old school solutions) if there is no other way.
  • SharePoint Social will not be developed further because Yammer will end up replacing it completely.
  • Yammer will be integrated into all Office collaborative experiences, from Outlook to Word, both Online and On Premises. Outlook will feature Yammer groups, Office documents will have an associated Yammer thread, and Yammer groups will have an associated calendar.
  • The “Codename Oslo” Experience will bring us a new way of working, where the information you need is brought too you automatically through the power of the Office Graph, FAST-based search technology and the use of machine learning. It will be available through Office 365 and my guess is that it will become the new Office 365 homepage – an personalized information hub tailored to each user’s needs.
  • Microsoft’s Business Intelligence stack continues to evolve. PowerBI, PowerPivot, PowerQuery, PowerMap and PowerView are all very impressive pieces of technology and I hear there will be announcements soon around these topics…
  • SharePoint development is now achieving a maturity level that allows real Application Lifecycle Management. Source control, continuous integration, automated testing, automated code analysis and continuous deployment, are concepts that can currently be applied to SharePoint projects.

The Expo Hall featured the sponsors’ booths where everyone could meet their products and services, and meet some familiar faces such as Mike Fitzmaurice (Nintex), Edin Kapic (Beezy), Chris McNulty (HiSoftware) and Christian Buckley (Metalogix). The Community Area was also located in the Expo Hall, and a lot was happening here, especially during breaks:

  • Soapbox sessions were being delivered by some of the SharePoint all stars (Dan Holme, Michael Noel, Mike Fitzmaurice, Joel Oleson, Jeremy Thake, Geoff Evelyn, Paolo Pialorsi, Agnes Molnar, Edin Kapic and Eric Overfield)
  • The ShareMentor program was kicked off by Agnes Molnar
  • Book signings
  • Prize draws

Just like in previous years, one of the highlights of the ESPC is always the Gala Dinner. A social event that mixes attendees, speakers and organizers, and where the European SharePoint Community Awards winners are announced, as well as the Top 25 SharePoint Influencers. As expected, it was a great occasion to meet new people and the fact that |create|it| won an ESPC award for the third consecutive year only made it better.

Overall, it was a great experience and I just hope I get to attend it next year.

SharePoint Conference 2014: Keynote Takeaways

Microsoft’s SharePoint Conference 2014 started yesterday in Las Vegas with a keynote by Bill Clinton, followed by the usual suspects, Jared Spataro, Jeff Teper and Arpan Shah, presenting all the new stuff. This year I was unable to attend the Conference in person, but I got to watch the keynote live on Channel 9, and here’s what I’ve learned from it (and from a bunch of additional sources such as tweets, blog posts, and the like).

As the conference started, a few posts were published on Office Blogs:

Cloud vs On-Prem

Make no mistake – feature-wise, SharePoint On-Premise will start to lag behind SharePoint Online / Office 365. The only way is up. Here are some facts that support this claim:

  • The next SharePoint Server version will be out in 2015. Meanwhile, Office 365 is getting updates almost on a weekly basis, and maintaining a very impressive 99,98% uptime.
  • SharePoint “2015” will still include Social features but these will remain unchanged from SharePoint 2013. No investment will be made to improve it (more on this below).
  • SharePoint SP1 (released in February 2014) adds support for hybrid scenarios where an on-premise SharePoint farm can have personal sites stored on OneDrive for Business (formerly SkyDrive Pro) in the cloud, and better Yammer integration with Yammer feeds instead of SharePoint Social feeds (more information here).
  • Office 365 will have a new site template for Video Portal which will allow you to create a YouTube-like experience for your enterprise based on Azure Media Services.
  • Elastic scale will come to Office 365, which will support site collections of up to 1TB (additional fees apply) and infinite scale per tenancy.
  • OneDrive for Business will be released as a standalone service, competing directly with Dropbox and similar services (more information here).

Social

Yammer will eventually replace SharePoint’s native social features so, according to Jared Spataro, we should all “Go Yammer”.

  • Yammer is now integrated into Dynamics CRM
  • Yammer is now accessible directly from the suite bar on Office 365, without requiring additional authentication
  • Yammer conversations will be completely integrated with Outlook.com showing up as you click on a document, email or contact.
  • Yammer will be a part of Office 365 Academic and Midsize Business Plans. It was already part of all Enterprise Plans.
  • Microsoft expanded Yammer’s Enterprise Graph and built the Office Graph, which maps relationships between people and information by recording posts, likes, emails, replies, shares and uploads.
  • A new app named Oslo will unleash the Office Graph potential and allow you to navigate through these relationships and discover new information.
  • Yammer groups will become a cross-Office 365 concept. Creating a group anywhere on Office 365 will automatically provision a corresponding inbox, social feed, calendar and document library that group members can use. This new feature effectively replaces SharePoint’s workspaces.
  • Yammer will be integrated with Lync and Skype.

Office Apps

With Office 2013 Service Pack 1, Office Apps gain additional features:

  • PowerPoint and Access now support the new App Model.
  • Outlook now supports a new type of App – Compose App – which allow you to interact will email messages or appointments when you are creating them.
  • New Office Web Widgets, ListView and PeoplePicker, available as a NuGet package (more information here).

Tooling and Development

  • New APIs for Office 365 focused on files/folders, calendar and contacts (more information here). It will also be possible to provision site collections on Office 365 programmatically.
  • New open source Android SDK for Office 365 to help developers access data in Office 365 from Android Apps (more information here).
  • New Cloud Business App project template on Visual Studio 2013 helps you create SharePoint Apps that leverage Windows Azure.
  • Office Developer Tools for Visual Studio 2013 – March 2014 Update (get it here).
  • Napa Development Tools were updated and improved

Forms Solutions

At the Conference, Joel Oleson organized a funeral procession for InfoPath, and that was about all I heard about Microsoft’s new approach to form solutions. I read somewhere that Access will have an important role in InfoPath’s replacement but, so far, nothing specific. Since this is one of the topics that SharePoint professionals and clients are most worried about, I was expecting it to be addressed during the keynote. I believe there will be, at least, one breakout session on this topic so let’s wait and see.

User License Enforcement in SharePoint 2013

Note: this post was first published in the European SharePoint Community blog.

Amongst the several new features included in SharePoint 2013, there is one that I have unfairly overlooked until just recently and that is User License Enforcement. I say unfairly because it’s a feature that has been requested for a long time and I believe it deserves more attention than it has been receiving.

Up until now, any user that accessed a SharePoint farm would have access to all the features included in the installed SharePoint SKU, regardless of the CAL (Client Access License) level assigned to her. This means that, if a company had a SharePoint farm with an Enterprise license, any user would be able to access all Enterprise features, even if it was assigned a Standard CAL.

On most large companies, for cost saving purposes, it’s quite common to find scenarios where only some of the users are assigned an Enterprise CAL, while every other user is assigned a Standard CAL. One way to ensure that each user can only access the features included in his license, is to have two separate SharePoint farms, one with a Standard SKU and the other with an Enterprise SKU. However, this is hardly an acceptable solution.

SharePoint 2013 solves this with the new User License Enforcement capability, which enables the mapping of licenses with specific users or Active Directory security groups. When User License Enforcement is enabled, users can only access the SharePoint features included with their license, otherwise they are blocked. When it’s disabled, which is the default, SharePoint behaves the same as in previous versions.

User License Enforcement management is performed exclusively through PowerShell cmdlets in SharePoint 2013 Management Shell. There are eight cmdlets which are explained in detail in the following sections:

  • Get-SPUserLicensing
  • Enable-SPUserLicensing
  • Disable-SPUserLicensing
  • Get-SPUserLicense
  • Get-SPUserLicenseMapping
  • New-SPUserLicenseMapping
  • Add-SPUserLicenseMapping
  • Remove-SPUserLicenseMapping

Enabling and Disabling User License Enforcement

To check if this feature is enabled, use the Get-SPUserLicensing cmdlet in SharePoint 2013 Management Shell. It will return true if the feature is enabled, and false otherwise (see Figure 1). As stated before, User License Enforcement is disabled by default.

Figure 1 – Usage of Get-SPUserLicensing cmdlet

To enable it, execute the Enable-SPUserLicensing cmdlet. To disable it, execute the Disable-SPUserLicensing cmdlet. Both cmdlets require no parameters and return no values (see Figure 2).

Figure 2 – Using the Enable-SPUserLicensing and Disable-SPUserLicensing cmdlets

Now that you know how to enable and disable it, I should advise you to keep it disabled until you have configured it properly. Otherwise you might involuntarily block access to Enterprise features for users that should have access to them or allow access to features that users should not be allowed to use.

Checking Available User Licenses

To check what licenses are available in your SharePoint farm, you can use the Get-SPUserLicense cmdlet (see figure 3).

Figure 3 – Using the Get-SPUserLicense cmdlet

There are five license types (although on my farm there are only four):

  • Enterprise
  • Standard
  • Project
  • OfficeWebAppsEdit
  • Duet

The Enterprise and Standard licenses are the two SharePoint Server editions, which have been around for several versions already. You can check the differences between the two in TechNet: http://technet.microsoft.com/en-us/library/sharepoint-online-service-description.aspx#bkmk_FeaturesOnPremise.

As for the others: the Project license is used to allow access to Project Server features, the OfficeWebAppsEdit license is used to allow users to edit documents in Office Web Apps, and the Duet license is used to allow access to Duet features (integration between SharePoint and SAP).

Mapping User Licenses

Mapping users to licenses is, in fact, mapping claims to rights. To create a new mapping you must execute the New-SPUserLicenseMapping cmdlet which can be used in a few different ways, depending on the type of claim you are mapping.

You can map an Active Directory security group to a license, executing the following command:

$mapping = New-SPUserLicenseMapping
–SecurityGroup “Enterprise Users”
–License “Enterprise”

You can also map a Forms-based Role to a license by using the –RoleProvider and –Role parameters instead of the –SecurityGroup parameter:

$mapping = New-SPUserLicenseMapping
–RoleProvider “MyRoleProvider”
–Role “Enterprise Users”
–License “Enterprise”

Finally, you can map a claim to a license by using the –ClaimType, –OriginalProvider and –Value parameters, or just the –Claim parameter with a reference to a SPClaim object.

Figure 4 – Using the New-SPUserLicenseMapping cmdlet

When creating the mapping you can also specify which Web Application the mapping applies to, allowing you to configure user licenses on a per-web application basis. If you don’t specify a web application, the mapping will be applied to the whole farm.

After creating the mapping, you must call the Add-SPUserLicenseMapping to add it to the farm:

Add-SPUserLicenseMapping –Mapping $mapping

Checking User License Mappings

To check which mappings are configured in the farm, you can use the Get-SPUserLicenseMapping cmdlet without any additional parameters. Note that any mappings defined on a web application level will not be returned when retrieving the farm level mappings.

Figure 5 – Using Get-SPUserLicenseMapping cmdlet

To list the mappings configured for a specific web application, add the –Web Application parameter with the respective URL value.

Removing User License Mappings

To remove a mapping, you can use the Remove-SPUserLicenseMapping cmdlet. The only required parameter is the identity of the mapping (a GUID) which you can easily get by executing the Get-SPUserLicenseMapping cmdlet.

Enforcement Effects

Two common questions regarding User License Enforcement are:

  • Where is the user license enforced?
  • What happens when a user tries to access a feature that is not available to his license type?

Regarding the first question, the user license enforcement will be used in the following situations:

  • When accessing a page with web parts that require a specific license (e.g. Excel Viewer Web Part or InfoPath Form Viewer);
  • Accessing the web part gallery to add a new web part to a page;
  • Selecting a site template when creating a new site;
  • Trying to edit a document in Office Web Apps.

As for what happens in these situations, two things can happen:

  • A user without the required license won’t see the components he has no access to (web parts and site templates); or
  • SharePoint will deny access to a component the user has no license for, presenting a message explaining why the user cannot access the component.

Additional Notes

There are a few additional notes I believe are important to keep in mind:

  • User License Enforcement is available only for On Premise SharePoint 2013 deployments. SharePoint Online uses a per-user licensing model hence it does not require this capability to control access to specific features.
  • User License Enforcement works only with Web Applications that use Claims-based Authentication.
  • Once enabled, every user has to be assigned a license, even service accounts. If you forget to assign a license to a user, it will be logged as Unlicensed and will be denied access to most SharePoint features.

References

You can find additional information on the PowerShell cmdlets on TechNet: http://technet.microsoft.com/en-us/library/jj219609.aspx.

I’m Coming Back!

I’ve just noticed that I haven’t posted anything for more than a year now and I have no good excuses for this absence. It’s actually a bit unfair to this blog, since I’ve been publishing some new content elsewhere. Anyway, I intend to make it right by means of a comeback so here’s what I’ve been up to recently.

I’ve published an article on What’s New in Search in SharePoint 2013 on two Portuguese magazines, Revista Programar (February 2013) and PC Guia (April 2013). You can get the first one here, if you can read Portuguese. If not, I will be posting that same article in English here, in the coming weeks.

Last September I’ve recorded an How-To Video for the European SharePoint Community on How to Use Host-Named Site Collections. If you’re interested you can check it out here.

Also, for the European SharePoint Community, I’ve recently published an article on User License Enforcement in SharePoint 2013. I’ll post it here in the coming weeks, but you can also read it on the SharePoint Community Blog.

Finally, I’ve been invited to be a part of the European SharePoint Conference 2014 Programme Team so, if you’re planning on attending the conference in May 2014, I’ll meet you there!

Happy SharePointing!

SharePoint Conference 2012

The SharePoint Conference is always a great event, but when it matches the launch of a new SharePoint version it rises to a whole other level. According to Jeff Spataro, this is the largest SharePoint Conference to date with:

  • 10,000 attendees
  • From 85 countries
  • Over 200 sponsors and exhibitors
  • Over 300 breakout sessions
  • 45 hands-on labs

The Mandalay Bay Resort is the perfect venue for such a massive event, and Microsoft really knows how to take advantage of all the space in the Convention Centre. I’ve been here for the 2009 SharePoint Conference, and I can tell you it gets better every year.

Here are some of the new stuff they came up with:

  • Your badge can be customized using up to 3 stickers that describe what are your main areas of interest (Search, Websites, Collaboration, …), what kind of attendee you are (IT Pro, Developer, Business) or some other SharePoint related expression.
  • Your backpack can also be customized using a sticker with your attendee profile.
  • There is an enormous Community Wall where you can leave your thoughts on what community means to you. But get this: you don’t to write it down on the wall. Instead, one of the professional designers will include your phrase in the wall and will draw something related to your home country. This ensures the whole wall will have a consistent and artistic look & feel. I can tell you it’s looking really great!
  • There is also a SharePoint Timeline, where each attendee writes his signature on his SharePoint freshman year. One guy wrote he was a SharePoint newbie in 1979 because “he was born to work with SharePoint” :)
  • A Photo Booth where you can use a few props to take silly pictures and e-mail them to your friends.
  • Possibility to complete, on the spot, the two SharePoint 2013 beta certification exams for free, and other certification exams with a discount price.

The Keynote was delivered with plenty of music and videos, and a well known ensemble of presenters, for the usual wow effect in this kind of events. It started with Jared Spataro saying that “SharePoint is not just a product, it is a way of life”. He went on thanking the huge SharePoint community (both developers, administrators and customers) for all the support and enthusiasm. Throughout the keynote’s two hours of length, a great number of features were announced or presented, from the new version of SharePoint Online in Office 365 to Yammer, and through all the new stuff in Search, Web Content Management, Enterprise Content Management, Social and, finally, the new Office and SharePoint App model.

The Breakout Sessions were split into three groups, according to the intended audience: IT Professionals, Developers and Business Decision Makers. Each of these groups of sessions took place in a different floor of the convention center, which made it quite simple to go from one to the next, provided they belonged to the same track (i.e. audience).

Besides learning about the new features of the product, one of the main goals of this is event is, of course, Networking. The organization also thought about that and gave the attendees a great number of opportunities to do so:

  • The Conference Reception – Sunday before the start of the conference.
  • Club SPC / Lounge SPC – Two simultaneous parties on Monday evening in two of the bars of the resort.
  • Attendee Party – Mega party in the Mandalay Beach with dinner and live music by Jon Bon Jovi and the Kings of Suburbia, on Tuesday evening.
  • Ask the Experts – Specific period, on Wednesday after the breakout sessions are over, where you can find experts on all subjects related to SharePoint. Maybe it’s not a networking event, but you always end up meeting new people.
  • The Community Lounge – a specific area inside the Exhibition Hall with a bunch of fun stuff and where you could always find people.
  • Avepoint’s Red Party – a partner hosted party, by invitation only and with limited entries, on Monday evening.
  • Axceler’s Party – also a partner hosted party, by invitation only and with limited entries, on Wednesday evening.
  • MySPC website/app allowed you to find attendees that shared the same interests as you, as well as attendees which are connected to your Facebook, Twitter or LinkedIn networks, and setup meetings.
  • Finally, the expo floor was always packed sponsors and exhibitors which would actively engage you in conversation, even if only to scan your badge and tell you about their products or services.

Overall it was a fantastic conference, well worth the time and money. Here are my key takeaways:

  • SharePoint 2013 was designed for the cloud first. This means that, although SharePoint Server 2013 (on premise) and SharePoint Online (in Office 365) are currently equivalent feature-wise, this will probably not be the case in a near future. This is because SharePoint Online will have much shorter update cycles (around 90 days, I was told) and, for that reason, will always get the new features first. Keep this in mind when deciding if you go for SharePoint Online or On Premise.
  • SharePoint Apps are the new and preferred development model for SharePoint. And also in this matter, everyone directs you to hosting your apps in the cloud (although that is not an absolute requirement).
  • JavaScript is starting to emerge as a first class citizen in SharePoint and Office (not to mention Windows 8). So, stop fighting it and start embracing it. You can always use TypeScript to make your life easier as well as a bunch of JavaScript frameworks that can really help you out.
  • Search is everywhere and in the middle of everything.

Over the next few week I’ll be posting more specific articles about the new features.

Office 2013 and SharePoint 2013 reached RTM

Microsoft has just announced (okay, it was three days ago…) that the new Office 2013 family of applications reached the RTM (Release to Manufacturing) milestone. If you’re not familiar with the term, this means the development and testing phases of the product are finished.

According to Microsoft, this is their most ambitious Office release to date since it includes not only the Office client applications, but also the servers and cloud services, which means:

  • Office 2013
  • SharePoint 2013
  • Lync 2013
  • Exchange 2013
  • Office 365

General availability is planned for the first quarter of 2013 but, starting in mid-November, volume licensing customers, developers and IT professionals with TechNet and MSDN subscriptions, will also be able to download the latest bits.

Add that to the Windows 8 launch later this month, and this is shaping up to be a busy last quarter for 2012.

Office 2013 and SharePoint 2013 Preview

Just in case you’ve been disconnected from the outside world for the past 24 hours (and for some reason you can still read this blog), Microsoft has just released the Preview Version of Office 2013 and SharePoint 2013 so that everyone can try it.

The past few months have been filled with rumors and guesses about the new features of Office and SharePoint. Well, no need for rumors anymore. You can actually try all the shinny new bells and whistles. Start here:

Microsoft did it the right way this time, and also released a ton of documents to help us get up to speed with the new features. I’m just starting to browse through all the documentation, blogs, samples and downloads, but I’ll be sure to post my findings here throughout the next few months.

FAST Search Tip #1: Enabling Stemming in PowerShell

Recently, I’ve been working with FAST Search for SharePoint 2010 and, although it’s a great search platform with pretty impressive features, I believe there are still too many manual installation and configurations steps, and too many of those features are only accessible through PowerShell. Don’t get me wrong, PowerShell is great and, by far, the best way to deploy your solution to the client’s environment, but a little more graphical UI wouldn’t hurt.

According to FAST Search’s TechNet documentation, you can use the Set-FASTSearchMetadataManagedProperty cmdlet to configure the main settings of a managed property. Among other things, you can enable stemming for a specific managed property. Here’s how it’s done:

$title = Get-FASTSearchMetadataManagedProperty –Name title
Set-FASTSearchMetadataManagedProperty –ManagedProperty $title –StemmingEnabled $true

The problem is that this doesn’t work. The StemmingEnabled argument is actually ignored by the cmdlet so, we need to use a different approach. This is the right way:

$title = Get-FASTSearchMetadataManagedProperty –Name title
$title.StemmingEnabled = 1
$title.update()

Although Microsoft is yet to update TechNet’s documentation, it has published a support article in its knowledge base (KB2468430) which describes this very solution.

SharePoint Tip #27: Choice Columns and DataSheet Views

Using features to create Choice site columns is pretty straightforward (check this post for additional information). See below a sample feature element for that purpose.

<Field

    ID="{538c71e4-8650-4ce7-b021-920effa66346}"

    Type="Choice"

    Name="Publishing_x0020_Status"

    StaticName="Publishing_x0020_Status"

    DisplayName="Publishing Status"

    Required="FALSE

    Format="Dropdown"

    FillInChoice="FALSE"

    Group="Custom Columns">

    <Default>Not Published</Default>

    <CHOICES>

       <CHOICE>

          Not Published

       </CHOICE>

       <CHOICE>

          Pending

       </CHOICE>

       <CHOICE>

          Published

       </CHOICE>

       <CHOICE>

          Error

       </CHOICE>

    </CHOICES>

</Field>

Although the XML is well formed and all the attributes and values are correct, this field definition has a problem. If you create a site column using this definition, here is what happens:

  • If you check the site column configuration in SharePoint, everything will look fine
  • If you add this site column to a list (either through a content type, or directly) and you edit an item using the default list forms, everything will work as expected.
  • If you try to edit the list items using a DataSheet View, you won’t be able to select any value from this choice field and SharePoint will always throw a validation error.

The problem here are the invisible characters (spaces, newlines and tabs) between the <CHOICE> and </CHOICE> tags and their inner values. Apparently, when using list forms these characters are trimmed from the valid choices, but when using the datasheet view they are not, causing a strange behavior when editing an item in that view.

The correct definition for this field would be:

<Field

    ID="{538c71e4-8650-4ce7-b021-920effa66346}"

    Type="Choice"

    Name="Publishing_x0020_Status"

    StaticName="Publishing_x0020_Status"

    DisplayName="Publishing Status"

    Required="FALSE

    Format="Dropdown"

    FillInChoice="FALSE"

    Group="Custom Columns">

    <Default>Not Published</Default>

    <CHOICES>

       <CHOICE>Not Published</CHOICE>

       <CHOICE>Pending</CHOICE>

       <CHOICE>Published</CHOICE>

       <CHOICE>Error</CHOICE>

    </CHOICES>

</Field>

SharePoint, Office, FAST Search, .NET