Get the InternalName for a SharePoint List Column
This comes up all the time in the SPServices Discussions on Codeplex. When you are making most Web services calls to SharePoint, you have to use the InternalName rather than the DisplayName. This is true whether you are using SPServices, CSOM, or REST. You may see the InternalName referred to as the StaticName as well. They are a little different, but that doesn’t matter here.
When you create a column in a list or library, you give it a DisplayName. That name may be encoded to some degree – depending on the characters you use – to become the InternalName. The InternalName never changes, no matter how many times you change the DisplayName. (This is why we end up with abominations like a column with an InternalName of “Salary” which has a DisplayName of “Name of Customer”. Rapid prototyping can paint us into these messes if we aren’t careful.)
The DisplayName is the name you’re used to seeing for columns in lists and libraries. You see these names all over the place: on list forms, in list views, etc.
There are a few [relatively] easy ways to get the InternalName if you only know the DisplayName.
- Go to the List Settings and hover over each column’s name. You’ll see the InternalName after “&Field=” in the Status bar of your browser. Note that the name will be double encoded. For example, if a field’s DisplayName is “My Country”, you’ll see “My%5Fx0020%5FCountry”. The actual internalName is “My_x0020_Country”.
- Call GetList, which will return the list’s schema and inspect the results in a debugger. Example:
$().SPServices({ operation: "GetList", listName: "MyList" });
- Call SPGetStaticFromDisplay, with the list name and column name and SPServices will look up the Internal Name for you. Example:
var thisStaticName = $().SPServices.SPGetStaticFromDisplay ({ listName: "MyList", columnDisplayName: "My Country" });
Here’s a little table with some examples of how some column names end up:
DisplayName | InternalName | Double Encoded Name | Notes |
---|---|---|---|
Title | Title | Title | “Title” doesn’t have any special characters in it, so all three versions are the same. |
My Country | My_x0020_Country | My%5Fx0020%5FCountry | The space is encoded as _x0020_ The underscores are encoded as %5F |
My_Country | My_Country | My_Country | No extra encoding! Underscores are not special characters. |
My-Country | My_x002d_Country | My%5Fx002d%5FCountry | The dash is encoded as _x002d_ The underscores are encoded as %5F |
SharePoint also offers a GetByInternalNameOrTitle method that allows you to quickly switch between internal names or display names. You can for example use it in a REST call in SP 2013.
Useful in SharePoint 2013, but as always, there are lots of SharePoint 2007 and 2010 environments out there and will be for years.
M.
specific example how you would call this exactly?
Horray for SP2013.
/_api/web/lists/getbytitle(‘Tasks’)/fields/getbytitle(‘Created By’)/InternalName
I had much trouble in SP2010 trying to figure out the magic FriendlyName for ListData.svc I’m so glad MS made getbytitle-methods.
There was a record of that horror.
http://johnliu.net/blog/2012/5/31/sharepoint-why-is-listdata-service-using-strange-names.html
The 4th row, second col entry has 2 underscores after My – typo?
@Anonymous:
Thanks for the correction!
M.
in SharePoint Online is there a rest call I can use to retrieve ALL the Internal Names for a specific list? Could you show an example of how to call it and what comes back?
@Darion:
You can use the List endpoint for that. Just use
/_api/web/lists/getbytitle('Calendar')/fields
to get the fields in the list. You can then iterate through the response to find what you need.M.
Hi Marc, could you show an example of what you mean when you say “Call” a function? Where am I supposed to put those lines of code exactly to do this call? Powershell ISE?
@Darion:
No, this is JavaScript. You can embed it in a script tag in a page or simply run in the the console (assuming jQuery and SPServices are available in the current page.)
M.