- I have created one external list and using BCS i am fetching data from SQL server and showing into "Externallist" perfectly.
- Now i have to read data from external list to my "High trust App"
- I have written down below mentioned code.
At the below line
listItemCollection.Include(listItemExpressions));
clientContext.ExecuteQuery();
in "Bindexternallist()" method i am getting error -- Access denied. You do not have permission to perform this action or access this resource
Please suggest how to solve this error........
-----------------------------------------------------------------------Code--------------------------------------------
{
string TargetSiteUrl = hostWeb.ToString();// ConfigurationManager.AppSettings["SiteURL"];
string TargetListName ="externallistabc";
using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity))
{
List listOrganisationHierarchy = clientContext.Web.Lists.GetByTitle(
TargetListName);
clientContext.Load(
listOrganisationHierarchy.Views,
viewCollection => viewCollection.Include(
view => view.ViewFields,
view => view.HtmlSchemaXml));
clientContext.Load(clientContext.Site,
s => s.MaxItemsPerThrottledOperation);
clientContext.ExecuteQuery();
Microsoft.SharePoint.Client.
View targetView = listOrganisationHierarchy.Views[0];
string method = ReadMethodFromViewXml(
targetView.HtmlSchemaXml);
ViewFieldCollection viewFields = targetView.ViewFields;
CamlQuery vlQuery = CreateCamlQuery(
clientContext.Site.MaxItemsPerThrottledOperation,
method,
viewFields);
Expression<Func<Microsoft.SharePoint.Client.ListItem,object>>[] listItemExpressions =
CreateListItemLoadExpressions(viewFields);
Microsoft.SharePoint.Client.
ListItemCollection listItemCollection =
listOrganisationHierarchy.GetItems(vlQuery);
IEnumerable<Microsoft.SharePoint.Client.ListItem> resultData = clientContext.LoadQuery(
listItemCollection.Include(listItemExpressions));
clientContext.ExecuteQuery();
tblOrganisationHierarchy.Columns.Add(
"Level");
foreach (Microsoft.SharePoint.Client.ListItem li in resultData)
{
tblOrganisationHierarchy.Rows.Add(li[
"Level"]);
}
DataView OrganisationHierarchyview =newDataView(tblOrganisationHierarchy);
DataTable distinctValuesOrganization = OrganisationHierarchyview.ToTable(true,"Level");
ddlOrganizationLevel.DataSource = distinctValuesOrganization;
ddlOrganizationLevel.DataTextField =
"order";
ddlOrganizationLevel.DataValueField =
ddlLevel.DataBind();
ddlLevel.Items.Insert(0,
}
}
privatestaticstring ReadMethodFromViewXml(string viewXml)
{
XmlReaderSettings readerSettings =newXmlReaderSettings();
readerSettings.ConformanceLevel =
ConformanceLevel.Fragment;
XmlReader xmlReader =XmlReader.Create(
newStringReader(viewXml), readerSettings);
while (xmlReader.Read())
{
switch (xmlReader.NodeType)
{
caseXmlNodeType.Element:
if (xmlReader.Name =="Method")
{
while (xmlReader.MoveToNextAttribute())
{
if (xmlReader.Name =="Name")
{
return xmlReader.Value;
}
}
}
break;
}
}
thrownewException("Unable to find Method in View XML");
}
privatestaticCamlQuery CreateCamlQuery(
uint rowLimit,string method,ViewFieldCollection viewFields)
{
CamlQuery query =newCamlQuery();
XmlWriterSettings xmlSettings =newXmlWriterSettings();
xmlSettings.OmitXmlDeclaration =
true;
StringBuilder stringBuilder =newStringBuilder();
XmlWriter writer =XmlWriter.Create(
stringBuilder, xmlSettings);
writer.WriteStartElement(
"View");
writer.WriteAttributeString(
"Scope","RecursiveAll");
writer.WriteStartElement(
"Method");
writer.WriteAttributeString(
"Name", method);
writer.WriteEndElement();
if (viewFields.Count > 0)
{
writer.WriteStartElement(
"ViewFields");
foreach (string viewField in viewFields)
{
if (!string.IsNullOrEmpty(viewField))
{
writer.WriteStartElement(
"FieldRef");
writer.WriteAttributeString(
"Name", viewField);
writer.WriteEndElement();
}
}
writer.WriteEndElement();
}
writer.WriteElementString(
"RowLimit", rowLimit.ToString(CultureInfo.InvariantCulture));
writer.WriteEndElement();
writer.Close();
query.ViewXml = stringBuilder.ToString();
return query;
}
privatestaticExpression<Func<Microsoft.SharePoint.Client.ListItem,object>>[]
CreateListItemLoadExpressions(
ViewFieldCollection viewFields)
{
List<Expression<Func<Microsoft.SharePoint.Client.ListItem,object>>> expressions =
newList<Expression<Func<Microsoft.SharePoint.Client.ListItem,object>>>();
foreach (string viewFieldEntry in viewFields)
{
string fieldInternalName = viewFieldEntry;
Expression<Func<Microsoft.SharePoint.Client.ListItem,object>>
retrieveFieldDataExpression =
listItem => listItem[fieldInternalName];
expressions.Add(retrieveFieldDataExpression);
}
return expressions.ToArray();
}