Как получить доступ к файлу в текущей папке URL или _layouts?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/1614

  •  16-10-2019
  •  | 
  •  

Вопрос

Мой код за кодом с веб-страницы aspx использует преобразовать.xsl чтобы выполнить какое-то пользовательское преобразование xslt.

Сценарий 1:Попробуйте получить файл из папки _layouts.

SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"/layouts/MyFeature/transform.xsl");

Примечание :Доступ к файлу доступен по этому URL-адресу http://mysite:8080/_layouts/MyFeature/transform.xsl при использовании браузера.

Сценарий 2:Постарайтесь, чтобы получить файл из текущего (http://mysite:8080/MyFeature/MyPage.aspx) URL-адрес.

SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"transform.xsl");

или

SPFile file = web.GetFile(@"MyFeature/transform.xsl");

или

SPFile file = web.GetFile(@"/MyFeature/transform.xsl");


Все сценарии терпят неудачу, как это решить?

Решение
'transform.xsl' теперь находится по адресу 'MyFeature/transform.xsl', и я последовал совету Андерса Раска, и теперь мой код выглядит примерно так:

SPWeb web = SPContext.Current.Web;
XslCompiledTransform transformer = new XslCompiledTransform();

XsltSettings settings = new XsltSettings(true, true);
string xslLocation = web.Url + "/FormWrapper/transform.xsl";
transformer.Load(xslLocation, settings, GetResolverWithDefaultCredentials());

// Do XSLT transform...
Это было полезно?

Решение

Я почти уверен, что SPWeb.GetFile() возвращает страницы вашего сайта, как default.aspx.Также ваш файл XSLT не является SPF-файлом, если он расположен в папке _LAYOUTS.

Вместо этого попробуйте что-то похожее на приведенный ниже код (обратите внимание на шаблонный код, поэтому следует добавить обработку ошибок и т.д.)

// fetch xsl processor
XslCompiledTransform processor = GetXslt(@"/layouts/MyFeature/transform.xsl");
StringWriter writer = new StringWriter(CultureInfo.CurrentCulture);

// Transform XSLT code here


private static XslCompiledTransform GetXslt(string xsltUrl)
{
    XslCompiledTransform processor = new XslCompiledTransform(false);
    bool enableDocumentFunctions = true;
    bool enableScript = true;
    XsltSettings settings = new XsltSettings(enableDocumentFunctions, enableScript);

    // add error handling here
    processor.Load(xsltUrl, settings, GetResolverWithDefaultCredentials());
    return processor;
}

// use resolver to avoid getting security exceptions
private static XmlUrlResolver GetResolverWithDefaultCredentials()
{
    XmlUrlResolver resolver = new XmlUrlResolver();
    resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
    return resolver;
}

Другие советы

Вы можете написать функцию модуля, которая «загружает» ваше Transform.xsl в библиотеку документов (например, библиотека стилей), которая позволяет вам получить доступ к файлу в качестве SPFILE.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top