簡體   English   中英

Sharepoint 2010應用程序頁面的問題

[英]Issue with Sharepoint 2010 application page

我對C#和Sharepoint都相當陌生,並且有一段非常基本的代碼,表現異常。 我顯然這里缺少一些基本的故障排除技能,希望有人能夠為我指明正確的方向。

我有一個帶有一個按鈕和一個標簽的應用程序頁面。 我在頁面加載事件中有一些代碼,可以從外部列表中檢索一些信息,這很好用。 我在按鈕中返回了錯誤的代碼的確切副本。 我想知道當pageload事件中的相同代碼看起來很好時,為什么按鈕返回錯誤。

C#代碼:

using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.Text;

namespace farmBDCProj2.Layouts.farmBDCProj2
{
    public partial class TestGetInfo : LayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder output = new StringBuilder();
            output.Append("<h2>Generated by PageLoad event</h2>");
            SPContext context = SPContext.Current;
            using(SPSite site = context.Site)
            using (SPWeb web = site.AllWebs["BDC_SQL"])
            {
                SPList list = web.Lists["BDC_SQL"];
                foreach (SPListItem item in list.Items)
                {
                    output.AppendFormat("<br>item: {0}", item["ADName"]);
                }
            }
            Label1.Text = output.ToString();
        }

        public void btn_click(object sender, EventArgs e)
        {
            StringBuilder output = new StringBuilder();
            output.Append("<h2>Generated by button click event</h2>");
            SPContext context = SPContext.Current;
            using (SPSite site = context.Site)
            using (SPWeb web = site.AllWebs["BDC_SQL"])
            {
                SPList list = web.Lists["BDC_SQL"];
                foreach (SPListItem item in list.Items)
                {
                    output.AppendFormat("<br>item: {0}", item["ADName"]);
                }
            }
            Label1.Text = output.ToString();
        }
    }
}

ASPX頁:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestGetInfo.aspx.cs" Inherits="farmBDCProj2.Layouts.farmBDCProj2.TestGetInfo" DynamicMasterPageFile="~masterurl/default.master" %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">

</asp:Content>

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <asp:Button ID="Button1" runat="server" Text="Click Here" OnClick="btn_click" />
    <br />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</asp:Content>

<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Application Page
</asp:Content>

<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
My Application Page
</asp:Content>

我得到的錯誤是在btn_click事件的'foreach'階段,錯誤文本如下:

Microsoft.SharePoint.SPException was unhandled by user code
  Message=Access denied by Business Data Connectivity.
  Source=Microsoft.SharePoint
  ErrorCode=-2146232832
  StackTrace:
       at Microsoft.SharePoint.SPListDataSource.GetEntityInstanceEnumerator(XmlNode xnMethodAndFilters)
       at Microsoft.SharePoint.SPListDataSource.GetFilteredEntityInstancesInternal(XmlDocument xdQueryView, Boolean fFormatDates, Boolean fUTCToLocal, String firstRowId, Boolean fBackwardsPaging, String& bdcidFirstRow, String& bdcidNextPageRow, List`1& lstColumnNames, Dictionary`2& dictColumnsUsed, List`1& mapRowOrdering, List`1& lstEntityData)
       at Microsoft.SharePoint.SPListDataSource.GetFilteredEntityInstances(XmlDocument xdQueryView, Boolean fFormatDates, Boolean fUTCToLocal, String firstRowId, Boolean fBackwardsPaging, String& bdcidFirstRow, String& bdcidNextPageRow, List`1& lstColumnNames, Dictionary`2& dictColumnsUsed, List`1& mapRowOrdering, List`1& lstEntityData)
       at Microsoft.SharePoint.SPListItemCollection.EnsureEntityDataViewAndOrdering(String& bdcidFirstRow, String& bdcidNextPageFirstRow)
       at Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData()
       at Microsoft.SharePoint.SPListItemCollection.get_Count()
       at Microsoft.SharePoint.SPEntityInstanceEnumerator.System.Collections.IEnumerator.MoveNext()
       at farmBDCProj2.Layouts.farmBDCProj2.TestGetInfo.btn_click(Object sender, EventArgs e)
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: Microsoft.BusinessData.Infrastructure.AccessDeniedException
       Message=Access denied by Business Data Connectivity.
       Source=Microsoft.SharePoint
       StackTrace:
            at Microsoft.SharePoint.BusinessData.Runtime.DataClassRuntime.ExecuteInternal(IDataClass thisDataClass, ILobSystemInstance lobSystemInstance, ILobSystem lobSystem, IMethodInstance methodInstanceToExecute, IMethod methodToExecute, IParameterCollection nonReturnParameters, Object[]& overrideArgs)
            at Microsoft.SharePoint.BusinessData.Runtime.EntityRuntime.ExecuteInternal(IDataClass thisDataClass, ILobSystemInstance lobSystemInstance, ILobSystem lobSystem, IMethodInstance methodInstanceToExecute, IMethod methodToExecute, IParameterCollection nonReturnParameters, Object[]& overrideArgs, IFilterCollection filters)
            at Microsoft.SharePoint.BusinessData.Runtime.EntityRuntime.ExecuteFiltered(IEntity this, IFilterCollection filterCollection, IMethodInstance methodInstanceToExecute, ILobSystemInstance lobSystemInstance)
            at Microsoft.SharePoint.BusinessData.Runtime.EntityRuntime.<FindFiltered>b__3(IEntity e, IMethodInstance mi, IFilterCollection fc, ILobSystemInstance lsi)
            at Microsoft.SharePoint.BusinessData.Runtime.EntityInstanceEnumeratorFactory.CreateEntityInstanceEnumerator(IEntity entity, IMethodInstance methodInstance, IFilterCollection filters, ILobSystemInstance lobSystemInstance, ExecutionCallBack executionCallBack)
            at Microsoft.SharePoint.BusinessData.MetadataModel.Static.Entity.FindFiltered(IFilterCollection filterCollection, String finderName, ILobSystemInstance lobSystemInstance)
            at Microsoft.SharePoint.SPListDataSource.GetEntityInstanceEnumerator(XmlNode xnMethodAndFilters)
       InnerException: 

任何和所有幫助將不勝感激。

謝謝,馬特。

如ScottE所述,您已經放置了由SPContext提供的Web和Site實例。 錯了 您不得處置它們。

在另一個站點上,您經常執行代碼方式。 看一下ASP.NET生命周期。 在回發(單擊按鈕)的情況下,您的邏輯在“加載方法”(Page_Load_Stage)和單擊處理程序(Event_stage)中執行。 除了這兩件事,您還必須確保正在瀏覽到此ApplicationPage的用戶至少對該外部內容類型具有讀取權限。

異常表示,當前用戶無權讀取與BDC_SQL列表關聯的請求的外部內容類型。

索斯滕

遲來的貢獻,但對其他人仍可能有用: http : //troyscott.ca/2010/07/09/setting-permissions-for-an-external-content-type/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM