다음을 통해 공유


연습: 응용 프로그램 페이지 만들기

응용 프로그램 페이지는 특수한 형태의 ASP.NET 페이지입니다. 응용 프로그램 페이지에는 SharePoint 마스터 페이지와 병합되는 콘텐츠가 포함되어 있습니다. 자세한 내용은 SharePoint를 위한 응용 프로그램 페이지 만들기를 참조하십시오.

이 연습에서는 응용 프로그램 페이지를 만든 다음 로컬 SharePoint 사이트를 사용하여 이 페이지를 디버깅하는 방법을 보여 줍니다. 현재 사용자는 이 응용 프로그램 페이지에서 서버 팜의 모든 사이트에서 만들거나 수정한 모든 항목을 볼 수 있습니다.

이 연습에서는 다음 작업을 수행합니다.

  • SharePoint 프로젝트 만들기

  • SharePoint 프로젝트에 응용 프로그램 페이지 추가

  • 응용 프로그램 페이지에 ASP.NET 컨트롤 추가

  • ASP.NET 컨트롤의 코드 숨김 파일 추가

  • 응용 프로그램 페이지 테스트

참고

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 설치한 Visual Studio 버전과 사용하는 설정에 따라 이러한 요소가 결정됩니다. 자세한 내용은 설정에 대한 작업을 참조하십시오.

사전 요구 사항

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

  • 지원되는 Microsoft Windows 및 SharePoint 버전. 자세한 내용은 SharePoint 솔루션 개발 요구 사항을 참조하십시오.

  • Visual Studio 2010 Professional 또는 Visual Studio ALM(Application Lifecycle Management)의 버전

SharePoint 프로젝트 만들기

먼저 빈 SharePoint 프로젝트를 만듭니다. 나중에 이 프로젝트에 응용 프로그램 페이지 항목을 추가합니다.

SharePoint 프로젝트를 만들려면

  1. Visual Studio 2010를 시작합니다.

  2. 새 프로젝트 대화 상자를 열고 사용할 언어 아래의 SharePoint 노드를 확장한 다음 2010을 클릭합니다.

  3. Visual Studio에 설치되어 있는 템플릿 창에서 빈 SharePoint 프로젝트를 선택합니다. 프로젝트의 이름을 MySharePointProject로 지정한 다음 확인을 클릭합니다.

    SharePoint 사용자 지정 마법사가 나타납니다. 이 마법사를 사용하면 프로젝트를 디버깅하는 데 사용할 사이트와 솔루션의 신뢰 수준을 선택할 수 있습니다.

  4. 팜 솔루션으로 배포를 선택한 다음 마침을 클릭하여 기본 로컬 SharePoint 사이트를 그대로 사용합니다.

응용 프로그램 페이지 만들기

응용 프로그램 페이지를 만들려면 프로젝트에 응용 프로그램 페이지 항목을 추가합니다.

응용 프로그램 페이지를 만들려면

  1. 솔루션 탐색기에서 MySharePointProject 프로젝트를 선택합니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 클릭합니다.

  3. 새 항목 추가 대화 상자에서 응용 프로그램 페이지를 선택합니다.

  4. 페이지 이름을 SearchItems로 지정한 다음 추가를 클릭합니다.

    Visual Web Developer 디자이너의 소스 뷰에 응용 프로그램 페이지가 표시되며 여기서 페이지의 HTML 요소를 볼 수 있습니다. 디자이너에 여러 Content 컨트롤의 태그가 표시됩니다. 각 컨트롤은 기본 응용 프로그램 마스터 페이지에 정의되어 있는 ContentPlaceHolder 컨트롤에 매핑됩니다.

응용 프로그램 페이지의 레이아웃 디자인

응용 프로그램 페이지 항목을 추가하면 디자이너를 사용하여 응용 프로그램 페이지에 ASP.NET 컨트롤을 추가할 수 있습니다. 이 디자이너는 Visual Web Developer에서 사용되는 디자이너와 같습니다. 표준 ASP.NET 페이지를 디자인할 때와 같은 방식으로 레이블, 라디오 단추 목록 및 표를 디자이너의 소스 뷰로 끌어오고 속성을 설정할 수 있습니다.

Visual Web Developer의 디자이너를 사용하는 방법에 대한 자세한 내용은 Visual Web Developer 콘텐츠 맵을 참조하십시오.

응용 프로그램 페이지의 레이아웃을 디자인하려면

  1. 보기 메뉴에서 도구 상자를 클릭합니다.

  2. 도구 상자표준 그룹에서 Label, DropDownListTablePlaceHolderMain 콘텐츠 컨트롤의 본문으로 끌어옵니다.

  3. 디자이너에서 레이블 컨트롤의 Text 특성 값을 모든 항목 표시로 변경합니다.

  4. 디자이너에서 <asp:DropDownList> 요소를 다음 XML로 바꿉니다.

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"
     OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
        <asp:ListItem Text="Created by me" Value="Author"></asp:ListItem>
        <asp:ListItem Text="Modified by me" Value="Editor"></asp:ListItem>
    </asp:DropDownList>
    

페이지에 있는 컨트롤의 이벤트 처리

ASP.NET 페이지와 같은 방식으로 응용 프로그램 페이지의 컨트롤을 처리합니다. 이 절차에서는 드롭다운 목록의 SelectedIndexChanged이벤트를 처리합니다.

페이지에 있는 컨트롤의 이벤트를 처리하려면

  1. 보기 메뉴에서 코드를 클릭합니다.

    코드 편집기에서 응용 프로그램 페이지 코드 파일이 열립니다.

  2. SearchItems 클래스에 다음 메서드를 추가합니다. 이 코드는 이 연습의 뒷부분에서 만들 메서드를 호출하여 DropDownListSelectedIndexChanged 이벤트를 처리합니다.

     Protected Sub DropDownList1_SelectedIndexChanged _
    (ByVal sender As Object, ByVal e As EventArgs) _
    Handles DropDownList1.SelectedIndexChanged
         SPSecurity.RunWithElevatedPrivileges(AddressOf GetItems)
     End Sub
    
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SPSecurity.RunWithElevatedPrivileges(GetItems);
    
    }
    
  3. 응용 프로그램 페이지 코드 파일의 맨 위에 다음 문을 추가합니다.

    Imports System.Web.UI.WebControls
    Imports Microsoft.SharePoint.Administration
    Imports System.Collections
    
    using System.Web.UI.WebControls;
    using Microsoft.SharePoint.Administration;
    using System.Collections;
    
  4. SearchItems 클래스에 다음 메서드를 추가합니다. 이 메서드는 서버 팜의 모든 사이트를 반복하여 현재 사용자가 만들거나 수정한 항목을 검색합니다.

    Private Sub GetItems()
        Dim CurrentUser As New SPFieldUserValue _
            (Me.Web, Me.Web.CurrentUser.ID, Me.Web.CurrentUser.Name)
    
        Dim ResultsList As New ArrayList()
    
        Dim ThisFarm As SPFarm = SPFarm.Local
        Dim Service As SPWebService = _
            ThisFarm.Services.GetValue(Of SPWebService)("")
    
        Dim WebApp As SPWebApplication
        For Each WebApp In Service.WebApplications
            Dim SiteCollection As SPSite
            For Each SiteCollection In WebApp.Sites
                Dim Web As SPWeb
                For Each Web In SiteCollection.AllWebs
                    Dim Lists As SPListCollection = Web.Lists
                    Dim List As SPList
                    For Each List In Lists
                        Dim Item As SPListItem
                        Try
                            For Each Item In List.Items
                                If Item(DropDownList1.SelectedValue).ToString() = _
                                    CurrentUser.ToString() Then
                                    ResultsList.Add(Item)
                                End If
                            Next Item
                        Catch exception As Exception
                            'Error in list. Move on to the next list.
                        End Try
                    Next List
                Next Web
            Next SiteCollection
        Next WebApp
        CreateResultsTable(ResultsList)
    End Sub
    
    private void GetItems()
    {
         SPFieldUserValue currentUser = new SPFieldUserValue
         (this.Web, this.Web.CurrentUser.ID, this.Web.CurrentUser.Name);
    
        ArrayList resultsList = new ArrayList();
    
        SPFarm thisFarm = SPFarm.Local;
        SPWebService service = thisFarm.Services.GetValue<SPWebService>("");
    
        foreach (SPWebApplication webApp in service.WebApplications)
        {
            foreach (SPSite siteCollection in webApp.Sites)
            {
                foreach (SPWeb web in siteCollection.AllWebs)
                {
                    SPListCollection lists = web.Lists;
                    foreach (SPList list in lists)
                    {
                        try
                        {
                            foreach (SPListItem item in list.Items)
                            {
                                if (item[DropDownList1.SelectedValue].ToString() ==
                                    currentUser.ToString())
                                {
                                    resultsList.Add(item);
                                }
                            }
                        }
                        catch (Exception)
                        {
                            // An error with the list. Move onto the next list.
                        }
                    }
                }
            }
        }
        CreateResultsTable(resultsList);
    
    }
    
  5. SearchItems 클래스에 다음 메서드를 추가합니다. 이 메서드는 현재 사용자가 테이블에서 만들거나 수정한 항목을 표시합니다.

    Private Sub CreateResultsTable(ByVal ResultsList As ArrayList)
        Dim CurrentList As String = ""
        Dim CurrentSite As String = ""
        Table1.Rows.Clear()
    
        Dim Item As SPListItem
        For Each Item In ResultsList
            If Item.ParentList.ParentWeb.Title <> CurrentSite Then
                CurrentSite = Item.ParentList.ParentWeb.Title
    
                Dim NewSiteCell As New TableCell()
                NewSiteCell.Text = CurrentSite
    
                Dim NewSiteRow As New TableRow()
                With NewSiteRow
                    .Cells.Add(NewSiteCell)
                    .Font.Bold = True
                    .Font.Size = FontUnit.Larger
                    .Font.Underline = True
                End With
                Table1.Rows.Add(NewSiteRow)
    
            End If
    
            If Item.ParentList.Title <> CurrentList Then
                CurrentList = Item.ParentList.Title
                Dim NewListCell As New TableCell()
                NewListCell.Text = CurrentList
    
                Dim NewListRow As New TableRow()
                With NewListRow
                    .Cells.Add(NewListCell)
                    .Font.Bold = True
                End With
                Table1.Rows.Add(NewListRow)
    
                Dim ItemHeading As New TableCell()
                With ItemHeading
                    .Text = "Item"
                    .Font.Italic = True
                End With
    
                Dim CreatedHeading As New TableCell()
                With CreatedHeading
                    .Text = "Created"
                    .Font.Italic = True
                End With
    
    
                Dim ModifiedHeading As New TableCell()
                With ModifiedHeading
                    .Text = "Last Modified"
                    .Font.Italic = True
                End With
    
                Dim HeadingRow As New TableRow()
                HeadingRow.Cells.Add(ItemHeading)
                HeadingRow.Cells.Add(CreatedHeading)
                HeadingRow.Cells.Add(ModifiedHeading)
    
                Table1.Rows.Add(HeadingRow)
            End If
    
            Dim ItemName As New TableCell()
            Dim ItemLink As New HyperLink()
            Try
                ItemLink.href = Item.ParentList.ParentWeb.Url & _
                    "/" & Item.ParentList.Forms(PAGETYPE.PAGE_DISPLAYFORM).Url & _
                    "?ID=" & Item.ID
            Catch exception As Exception
                ' Some items might not have a form page. Ignore the exception.
            End Try
            ItemLink.Text = Item.DisplayName
            ItemName.Controls.Add(ItemLink)
    
            Dim Created As New TableCell()
            Created.Text = Item("Created").ToString()
    
            Dim Modified As New TableCell()
            Modified.Text = Item("Modified").ToString()
    
            Dim DataRow As New TableRow()
            DataRow.Cells.Add(ItemName)
            DataRow.Cells.Add(Created)
            DataRow.Cells.Add(Modified)
    
            Table1.Rows.Add(DataRow)
        Next Item
    End Sub
    
    private void CreateResultsTable(ArrayList resultsList)
    {
        string currentList = "";
        string currentSite = "";
        Table1.Rows.Clear();
    
        foreach (SPListItem item in resultsList)
        {
            if (item.ParentList.ParentWeb.Title != currentSite)
            {
                currentSite = item.ParentList.ParentWeb.Title;
    
                TableCell newSiteCell = new TableCell();
                newSiteCell.Text = currentSite;
    
                TableRow newSiteRow = new TableRow();
                newSiteRow.Cells.Add(newSiteCell);
                newSiteRow.Font.Bold = true;
                newSiteRow.Font.Size = FontUnit.Larger;
                newSiteRow.Font.Underline = true;
    
                Table1.Rows.Add(newSiteRow);
            }
            if (item.ParentList.Title != currentList)
            {
                currentList = item.ParentList.Title;
                TableCell newListCell = new TableCell();
                newListCell.Text = currentList;
    
                TableRow newListRow = new TableRow();
                newListRow.Cells.Add(newListCell);
                newListRow.Font.Bold = true;
    
                Table1.Rows.Add(newListRow);
    
                TableCell itemHeading = new TableCell();
                itemHeading.Text = "Item";
                itemHeading.Font.Italic = true;
    
                TableCell createdHeading = new TableCell();
                createdHeading.Text = "Created";
                createdHeading.Font.Italic = true;
    
                TableCell modifiedHeading = new TableCell();
                modifiedHeading.Text = "Last Modified";
                modifiedHeading.Font.Italic = true;
    
                TableRow headingRow = new TableRow();
                headingRow.Cells.Add(itemHeading);
                headingRow.Cells.Add(createdHeading);
                headingRow.Cells.Add(modifiedHeading);
    
                Table1.Rows.Add(headingRow);
            }
    
            TableCell itemName = new TableCell();
            HyperLink itemLink = new HyperLink();
            try
            {
                itemLink.href = item.ParentList.ParentWeb.Url + "/" +
                    item.ParentList.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url +
                    "?ID=" + item.ID;
            }
            catch (Exception)
            {
                // Some items might not have a form page. Ignore the exception.
            }
            itemLink.Text = item.DisplayName;
            itemName.Controls.Add(itemLink);
    
            TableCell created = new TableCell();
            created.Text = item["Created"].ToString();
    
            TableCell modified = new TableCell();
            modified.Text = item["Modified"].ToString();
    
            TableRow dataRow = new TableRow();
            dataRow.Cells.Add(itemName);
            dataRow.Cells.Add(created);
            dataRow.Cells.Add(modified);
    
            Table1.Rows.Add(dataRow);
        }
    }
    

응용 프로그램 페이지 테스트

프로젝트를 실행하면 SharePoint 사이트가 열리고 응용 프로그램 페이지가 표시됩니다.

응용 프로그램 페이지를 테스트하려면

  1. 솔루션 탐색기에서 응용 프로그램 페이지를 마우스 오른쪽 단추로 클릭한 다음 시작 항목으로 설정을 클릭합니다.

  2. F5 키를 누릅니다.

    SharePoint 사이트가 열립니다. 응용 프로그램 페이지가 나타납니다.

  3. 페이지에서 내가 수정한 문서 옵션을 클릭합니다.

    응용 프로그램 페이지가 새로 고쳐지고 현재 사용자가 서버 팜의 모든 사이트에서 수정한 항목이 모두 표시됩니다.

  4. 페이지에서 내가 만듦 옵션을 클릭합니다.

    응용 프로그램 페이지가 새로 고쳐지고 현재 사용자가 서버 팜의 모든 사이트에서 만든 항목이 모두 표시됩니다.

다음 단계

SharePoint 응용 프로그램 페이지에 대한 자세한 내용은 SharePoint를 위한 응용 프로그램 페이지 만들기를 참조하십시오.

다음 항목에서 Visual Web Designer를 사용하여 SharePoint 페이지 콘텐츠를 디자인하는 방법에 대해 더 자세히 알아볼 수 있습니다.

참고 항목

작업

방법: 응용 프로그램 페이지 만들기

기타 리소스

Application _layouts Page Type