문제

배포하는 SharePoint 솔루션이 있습니다. aspx 사용자 정의 폴더의 페이지 Layouts 폴더.이 페이지를 Feature Event Receiver 그래서 거기에 추가할 수 있어요 WebPart.

에서 FeatureActivated 이 코드를 사용하려고 할 때 방법은 다음과 같습니다.

SPFile file = web.GetFile("_layouts/My Folder/MyPage.aspx");  

이 코드는 File not found exception.

이 페이지에 대한 참조를 어떻게 얻을 수 있나요?페이지가 아직 배포되지 않았기 때문에 이 오류가 발생합니까?

도움이 되었습니까?

해결책

에 감사하다 Spongeroberto Squarepantalones 그리고 SPArchaeologist 도와주세요. 저는 다음을 수행했습니다.

  1. 나는 Module 내 SharePoint 솔루션에 추가했습니다. aspx 페이지.
  2. 이에 aspx 내가 추가한 페이지 WebPartPages:SPWebPartManager 그리고 WebPartPages:WebPartZone.
  3. 나는 편집했다 Elements.xml 파일을 모듈에 추가하여 페이지를 배포합니다. Document Library.(지정된 사이트에서만 이 페이지에 액세스해야 합니다.)
  4. 에서 FeatureActivated 의 방법 Feature Event Receiver 코드를 추가하여 WebPart, 이 페이지를 SPFile 그리고 사용 SPLimitedWebPartManager 내가 만든 것을 추가하려면 WebPart.(저는 이 작업을 수행했지만 WepPart 에서 aspx WebPart는 SharePoint 항목을 Document Library 그리고 SharePoint를 사용해 보세요 View 동일한 솔루션에 배포되므로 GUID가 항상 변경됩니다.

다른 팁

아이템이 배포됩니다 ~ 전에 이벤트 수신자.문제는 하이브 파일을 읽으려고 한다는 것입니다.SPWeb.GetFile 메서드에서는 작동하지 않습니다.해당 방법은 해당 웹에 저장된 파일을 위한 것입니다.

그러나 여전히 파일을 읽을 수는 있습니다.나도 같은 작업을 수행해야 했고 다음과 같은 메서드를 작성했습니다.

/// <summary>
/// get the proper path to the hive
/// </summary>
private static string GetUtilPath(string path)
{
    return SPUtility.GetGenericSetupPath(@"TEMPLATE\LAYOUTS\MyModule\" + path);
}

/// <summary>
/// Access a file in the SharePoint hive
/// </summary>    
/// <param name="path">the path relative to the layouts folder</param>   
private static byte[] GetHiveFile(string path)
{
    string utilPath = GetUtilPath(path);
    using(FileStream fs = new FileStream(utilPath, FileMode.Open, FileAccess.Read))
    {
        BinaryReader br = new BinaryReader(fs);
        long numbytes = new FileInfo(utilPath).Length;
        return br.ReadBytes((int)numbytes);
    }                                   
}

그러면 다음과 같이 하이브에서 파일을 읽을 수 있습니다.

byte[] file = GetHiveFile(@"myfolder\myfile.txt");

다른 답변을 바탕으로 (참조 이것 또는 이것) SPFile.GetFile(string)은 _layout 폴더에서 "SPFile"을 확보하는 데 사용할 수 없습니다.페이지를 읽는 다른 방법이 있지만(일부 답변이 제안됨) 결국에는 스트림/바이트 배열 등을 얻게 됩니다. 웹 파트를 추가하려고 하므로 실제로 도움이 되지 않을 것 같습니다.이는 SharePoint에 관한 한 _layout은 가상 IIS 폴더이고 그 안에 있는 파일은 SPfile로 표시되지 않기 때문입니다.

즉, 내가 아는 한 애플리케이션 페이지에 웹 파트를 추가하는 것은 지원되지 않습니다.내부에 웹 파트가 있는 웹 파트 영역을 추가하려고 하면 ""알 수 없는 서버 태그 WebPartZone"과 유사한 오류가 표시됩니다(참조: 이 블로그 또는 Dave의 답변).응용 프로그램 페이지의 웹 파트는 표준 웹 컨트롤로 사용되는 경우에만 가능합니다(심지어 캐싱 등에 문제가 있음).

만약 너라면 ~해야 한다, 가장 좋은 방법은 텍스트 파일처럼 프로그래밍 방식으로 파일을 연 다음 필요한 태그를 수동으로 추가하는 것 같습니다. 웹 파트 관리자를 사용할 수 없습니다.어쨌든 해당 페이지를 페이지 라이브러리 등에 재배포하고 표준 게시 페이지로 변환할 수 있는지 알아보겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top