вторник, 19 октября 2010 г.

Microsoft Magic: Локализация стандартного списка Links

Видимо, серия Microsoft Magic скоро станет самой большой серией постов в этом блоге :)

Итак, задача очень распространенная. Есть в шарике стандартный список Links. Если мы хотим создать инстанс этого списка для собственных целей, это делается очень просто, создаем айтем ListInstance, и заполняем его примерно следующим XML-ем:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <ListInstance Id=""
                Title="$Resources:core,linksList"
                OnQuickLaunch="FALSE"
                TemplateType="103"
                FeatureId="00bfea71-2062-426c-90bf-714c59600103"
                Url="PersonalLinks"
                Description="">
    <Data>
      <Rows>
        <Row>
          <Field Name="ID">1</Field>
          <Field Name='URL'>http://google.ru, Поиск Google</Field>
        </Row>
        <Row>
          <Field Name="ID">2</Field>
          <Field Name='URL'>http://omlin.blogspot.com, Блог Омлина :)</Field>
        </Row>
      </Rows>
    </Data>
  </ListInstance>
</Elements>

Ну и дальше, всё это добавляется в фичу и успешно деплоится.
И вот, мне потребовалось контент этого списка локализовать. Ну например, чтобы у америкосов был google.com, а у китайцев - baidu.com. Создаем ресурсный файл, ну и выносим ссылки. Все вроде просто. Но вот тут всплыл вдруг такой эксепшен:
Недопустимый URL-адрес: $Resources: TestResources. >> в Microsoft.SharePoint.Administration.SPElementDefinitionCollection.ProvisionListInstances(SPFeaturePropertyCollection props, SPSite site, SPWeb web, Boolean fForce)

Нерабочий вариант:

<Row>
    <Field Name="ID">1</Field>
    <Field Name='URL'>$Resources: TestResources, Links_ItemUrl1</Field>
</Row>

Совершенно случайно, обнаружился рабочий вариант. Сравниваем:

<Row>
    <Field Name="ID">1</Field>
    <Field Name='URL'>$Resources:TestResources, Links_ItemUrl1</Field>
</Row>

No comments :)

P.S. Актуально для полей типа URL в любых списках.

3 комментария:

  1. А вот не соглашусь!

    Синтаксис не делает различия, к примеру, между:
    $Resources: file, name
    $ resources : file , name
    $resources:file,name

    по крайней мере, в других местах такие варианты работают.

    тут абсолютно точно проблема в кривом парзинге где-то внутри шарепойнта, скорее всего проблема в неверном Sequencе: т.е. сначала выполняется валидация URL-поля, которая требует две строки через запятую, причем первая строка должна быть без пробелов; а уже потом выполняется локализация.

    Очевидно, что такая последовательность выполнения концептуально неверна, поскольку валидация должна выполняться над уже локализованными значениями. К примеру, в случае если я запихну в ресурс Links_ItemUrl1 значение "попа новый год", то очевидно, что валидация будет пройдена, хотя такое значение совершенно недопустимо для URL-поля.

    ОтветитьУдалить

Внимание! Реклама и прочий спам будут беспощадно удаляться.