Итак, задача очень распространенная. Есть в шарике стандартный список 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 в любых списках.
no magic, syntax only
ОтветитьУдалитьА вот не соглашусь!
ОтветитьУдалитьСинтаксис не делает различия, к примеру, между:
$Resources: file, name
$ resources : file , name
$resources:file,name
по крайней мере, в других местах такие варианты работают.
тут абсолютно точно проблема в кривом парзинге где-то внутри шарепойнта, скорее всего проблема в неверном Sequencе: т.е. сначала выполняется валидация URL-поля, которая требует две строки через запятую, причем первая строка должна быть без пробелов; а уже потом выполняется локализация.
Очевидно, что такая последовательность выполнения концептуально неверна, поскольку валидация должна выполняться над уже локализованными значениями. К примеру, в случае если я запихну в ресурс Links_ItemUrl1 значение "попа новый год", то очевидно, что валидация будет пройдена, хотя такое значение совершенно недопустимо для URL-поля.
no magic, индусы only
ОтветитьУдалить