Sharepoint 2016 : REST API Calls fail with error Column doesnot exists
Symptom : Rest API call fails when first character of column starts with underscore “_” https://sp2016/_api/web/lists/getbytitle('Documents')/items/?$select=_Enddate
Using Internet explorer , we can see the response as 400 Bad request
You may see a different error message when the same URL is accessed using a non-IE browser.
eg:
The corresponding SharePoint ULS shows the following stack
Exception occured in scope Microsoft.SharePoint.SPListItemEntityCollection ._SerializeToOData. Exception=Microsoft.SharePoint.SPException: Column '_EndDate' does not exist. It may have been deleted by another user.at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilder.SetFieldRef(XmlWriter writer, String fieldPath, FieldRefUsage fieldRefUsage, Action`1 attributeAction)at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilderUtilities.SetWhereBinaryOp[T](XmlWriter writer, EdmParserNode parseNode, SetFieldRefDelegate`1 setFieldRef, SetValueDelegate`1 setValue, GetConvertedValueDelegate getConvertedValue)at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilderUtilities.SetWhereInternal[T](XmlWriter writer, EdmParserNode parseNode, SetFieldRefDelegate`1 setFieldRef, SetValueDelegate`1 setValue, GetConvertedValueDelegate getConvertedValue)at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilderUtilities.SetWhereBinaryOp[T](XmlWriter writer, EdmParserNode parseNode, SetFieldRefDelegate`1 setFieldRef, SetValueDelegate`1 setValue, GetConvertedValueDelegate getConvertedValue)at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilderUtilities.SetWhereInternal[T](XmlWriter writer, EdmParserNode parseNode, SetFieldRefDelegate`1 setFieldRef, SetValueDelegate`1 setValue, GetConvertedValueDelegate getConvertedValue)at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilderUtilities.SetWhere[T](XmlWriter writer, EdmParserNode parseNode, SetFieldRefDelegate`1 setFieldRef, SetValueDelegate`1 setValue, GetConvertedValueDelegate getConvertedValue)at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilder.SetViewQuery(SPQuery query, XmlWriter writer, StringBuilder sb)at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilder.BuildCamlQuery()at Microsoft.SharePoint.SPListItemEntityCollectionCamlQueryBuilder..ctor(SPList list, RESTfulQuery restQuery, Nullable`1 itemId)at Microsoft.SharePoint.SPListItemEntityCollectionQuery..ctor(SPList list, RESTfulQuery restQuery, Nullable`1 itemId)at Microsoft.SharePoint.SPListItemEntityCollection.TryWriteAsOData(ServerStub serverStub, ODataWriter writer, RESTfulQuery query, ProxyContext proxyContext)at Microsoft.SharePoint.Client.ServerStub.Write(Object value, Uri path, ODataWriter writer, RESTfulQuery query, ProxyContext proxyContext) |
Cause /Reason:
This is a limitation of OData protocol which does not allow “_” to be the first character. Therefore, SharePoint prefixes OData_ to the internal name, if the field name starts with an underscore and workaround is to do the same manually in our rest api query.
Workaround:
Prefix OData_ manually in the rest api query
The sample query will look like following https://sp2016/_api/web/lists/getbytitle('Documents')/items/?$select=OData__Enddate
Note: There are 2 underscores in above query OData__Enddate
Note : Some of the OOB columns which starts with underscore and rest call to them fails
_DCDateModified |
_Author |
_dlc_Exempt |
_Level |
_Enddate |
_UIVersionString |
_vti_ItemDeclaredRecord |
_dlc_DocId |
_EditMenuTableStart2 |
_UIVersion |
_Status |
_dlc_DocIdUrl |
_EndDate |
_Relation |
_Identifier |
_HasCopyDestinations |
_CopySource |
_ResourceType |
_CheckinComment |
_Contributor |
_dlc_DocIdPersistId |
_dlc_ExpireDateSaved |
_Revision |
_SourceUrl |
_Photo |
_Publisher |
_Version |
_EditMenuTableStart |
_Coverage |
_Comments |
_LastPrinted |
_vti_ItemHoldRecordStatus |
_RightsManagement |
_Category |
_Source |
_Format |
_dlc_ExpireDate |
_DCDateCreated |
_vti_ItemIsLocked |
_IsCurrentVersion |
_SharedFileIndex |
_ModerationComments |
_ModerationStatus |
_EditMenuTableEnd |
POST By : Brijesh Poddar [MSFT]