Очень интересная возможность для ограничения возможностей пользователей и добавления своей скриптовой обработки заполнения формы.
Источник
Порядок действий:
1. Копируем необходимую нам страницу с формой.
2. Удаляем на ней веб часть listForm
3. Вставляем custom listForm
4. Редактируем как хотим.
Мои замечания:
1. Если поле не должно быть редактируемым пользователем, можно взять значение из формы dispForm.
2. Если вы хотите предоставить различный функционал для различных уровней разрешения используйте контрол SharePoint:SPSecurityTrimmedControl, внутрь него кладите то что вам нужно.
Ну и конечно вы можете добавить и свои веб части и свои скрипты. Как результат можно получить гибкий инструмент для просмотри и редактирования элементов зависящий от прав, и вашей производственной необходимости.
Есть одна проблема для библиотек: если в библиотеке несколько типов содержимого переназначить форму не удасться.
Но можно скрыть родную и вставить свою рядом - будет работать, к сожалению только для одного типа содержимого т.е. для каждого типа содержимого нужно сделать свою форму, вставить их на одну страницу, а видимость реализовать с помощью скрипта на основании ContentType из URL или из значения соответствующего поля + необходимо реализовать обработку изменения типа содержимого.
Это несомненно большой минус этой кастомизации.
Кроме того при изменении параметров списка необходимо переделывать форму.
среда, 23 апреля 2008 г.
понедельник, 21 апреля 2008 г.
Кастомизация полей: дополнительная инфа.
Источник - ограничение видимой ширины поля.
Смысл в том, что в схеме полей добавить свойство в определениях поля
<fields>
<field name="Title" readonly="TRUE" required="FALSE" hidden="TRUE">
<field name="Name" displayname="Name" type="Text" displaysize="30">
<field name="Address" displayname="Address" type="Text">
<field name="City" displayname="City" type="Text" displaysize="20">
<field name="Country" displayname="Country" type="Text" displaysize="15">
</fields>
Т.е. есть возможность настраивать видимость полей и их параметры прямо в схеме в RenderPattern я так понимаю - это глобальная настройка в C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML\FLDTYPES.XML. Кроме того возможно эти свойства можно использовать для настройки других схемах - SCHEMA.XML для различных фич и типов данных - списков, библиотек - но это пока измышления проверю напишу или если кто-то проверит - напишите коммент и я поправлю блог.
Так же это доступно при определние своих полей на основе стандартных - просто копированием xml или в составе проекта - например рабочего процесса (workflow), когда мы создаем тип данных и наполняем его полями.
Или как я уже писал ранее можно настроить в стиле просмотра списка VWSTYLES.XML - в HTML тегах для конкретного представления.
Что больше подходит для вашего решения выбирайте сами.
Смысл в том, что в схеме полей добавить свойство в определениях поля
<fields>
<field name="Title" readonly="TRUE" required="FALSE" hidden="TRUE">
<field name="Name" displayname="Name" type="Text" displaysize="30">
<field name="Address" displayname="Address" type="Text">
<field name="City" displayname="City" type="Text" displaysize="20">
<field name="Country" displayname="Country" type="Text" displaysize="15">
</fields>
Т.е. есть возможность настраивать видимость полей и их параметры прямо в схеме в RenderPattern я так понимаю - это глобальная настройка в C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML\FLDTYPES.XML. Кроме того возможно эти свойства можно использовать для настройки других схемах - SCHEMA.XML для различных фич и типов данных - списков, библиотек - но это пока измышления проверю напишу или если кто-то проверит - напишите коммент и я поправлю блог.
Так же это доступно при определние своих полей на основе стандартных - просто копированием xml или в составе проекта - например рабочего процесса (workflow), когда мы создаем тип данных и наполняем его полями.
Или как я уже писал ранее можно настроить в стиле просмотра списка VWSTYLES.XML - в HTML тегах для конкретного представления.
Что больше подходит для вашего решения выбирайте сами.
четверг, 17 апреля 2008 г.
Hide Actions 2
Новая инфа:
Как убрать элементы в стандартном toolbar'е в формах изменения, создания, просмотра элемента
Как сделать кастомизированные dispForm и editForm
Соответвенно там в свойствах toolBar можно указать тип (New, Edit, Display) и получить различный набор кнопок.
К предыдущему посту про ECB Menu:
Пришлось лопатить core.js.
К сожалению сделать копию и прицепить к новой masterpage не удалось - Sharepoint цепляет core где-то еще.
Пример кода:
Вставить нужно в трех местах ищите:
AddManagePermsMenuItem
AddDocLibMenuItems(m, ctx)
AddListMenuItems(m, ctx)
Как убрать элементы в стандартном toolbar'е в формах изменения, создания, просмотра элемента
Как сделать кастомизированные dispForm и editForm
Соответвенно там в свойствах toolBar можно указать тип (New, Edit, Display) и получить различный набор кнопок.
К предыдущему посту про ECB Menu:
Пришлось лопатить core.js.
К сожалению сделать копию и прицепить к новой masterpage не удалось - Sharepoint цепляет core где-то еще.
Пример кода:
var mySiteURL = new String(); //мой код убираю меню на узле и ниже
mySiteURL = ctx.listUrlDir;
if (mySiteURL.search("sites/имяСемействаУзлов/имяУзла")!= -1)
{
//здесь измененное меню
}
else
{
//здесь без изменений
}
Вставить нужно в трех местах ищите:
AddManagePermsMenuItem
AddDocLibMenuItems(m, ctx)
AddListMenuItems(m, ctx)
Ярлыки:
Кастомизация,
Sharepoint
среда, 16 апреля 2008 г.
Hide Custom Action
Actions list
Как убрать остальное
В общем придется убирать скриптами на странице. Т.к. core.js трогать не хочется.
И еще на закуску через веб часть
Как убрать остальное
В общем придется убирать скриптами на странице. Т.к. core.js трогать не хочется.
И еще на закуску через веб часть
Ярлыки:
Кастомизация,
Sharepoint
пятница, 11 апреля 2008 г.
Получение праметров для кастомизированного поля и что такое ONET.xml
Файл находится: C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\GLOBAL\XML\ONET.xml
Внутри BaseTypes находятся схемы стандартных полей sharepoint.
Наиболее интерсная информация которую можно оттуда почерпнуть это структура схемы и приемы использования ссылок на поля.
И самое интересное:
Права на просмотр содержимого - интуитивно понятно:
<DisplayPattern>
<IfHasRights>
<RightsChoices>
<RightsGroup PermEditListItems="required" />
</RightsChoices>
<Then>
<HTML>Есть права</HTML>
</Then>
<Else>
<HTML>Нет прав</HTML>
</Else>
</IfHasRights>
<CurrentRights />
</DisplayPattern>
Использование прав позволит вам отображать различное содержимое в столбце для различного типа пользователей - а это широкое место для маневра в кастомизации интерфейса.
А это получение permissionmask - <CurrentRights /> - текущие права пользователя
Важный параметр если вы используете стандартные javascript функции sharepoint.
Внутри BaseTypes находятся схемы стандартных полей sharepoint.
Наиболее интерсная информация которую можно оттуда почерпнуть это структура схемы и приемы использования ссылок на поля.
И самое интересное:
Права на просмотр содержимого - интуитивно понятно:
<DisplayPattern>
<IfHasRights>
<RightsChoices>
<RightsGroup PermEditListItems="required" />
</RightsChoices>
<Then>
<HTML>Есть права</HTML>
</Then>
<Else>
<HTML>Нет прав</HTML>
</Else>
</IfHasRights>
<CurrentRights />
</DisplayPattern>
Использование прав позволит вам отображать различное содержимое в столбце для различного типа пользователей - а это широкое место для маневра в кастомизации интерфейса.
А это получение permissionmask - <CurrentRights /> - текущие права пользователя
Важный параметр если вы используете стандартные javascript функции sharepoint.
Ярлыки:
Кастомизация,
Sharepoint
четверг, 3 апреля 2008 г.
Кастомизируя стили...
Источники:MSDN (2003 sharepoint) и конечно google
Идеология...
Стиль по существу является XSLT преобразованием xml с содержанием списка.
Я уже писал по этому поводу.
Все что нам нужно это поправить html разметку в тегах CDATA.
Итак по адресу:
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\GLOBAL\XML\VWSTYLES.XML
лежит этот замечательный файл в котором хранятся стили отображения для ListViewWebPart или проще говоря для библиотек и списков.
Хочу поделиться своими изысканиями в этой области:
1. Создать свой стиль проще всего через копирование.
Необходимо задать ему новый ИД больше 20.
2. Можно ограничить типы списков для которых будет работать ваш стиль:
например ID="34" DisplayName="Карточка(изменить)" BaseType="0" - для списков и библиотек или BaseType="1" для библиотек.
3. Когда вы создаете свой стиль необходимо внимательно посмотреть на ограничения по полям( особенно если вы пытаетесь переделать готовый стиль для библиотеки в стиль для списка.
Мои примеры:
1. Удалив содержимое <ViewHeader> и выравнив стиль (HTML теги которые открывались в этой области) вы получите отображение списка без заглавия.
2.
Добавив такую схему в <ViewBody> в каждой строке:
<HTML> <![CDATA[<a href="]]></HTML>
<ListProperty Select="DefaultViewUrl" HTMLEncode="TRUE"/>
<HTML><![CDATA[?FilterField1=ID&FilterValue1=]]></HTML>
<Field Name="ID" HTMLEncode="TRUE" />
<HTML><![CDATA[" >Подробнее...</a>]]></HTML>
Мы получим ссылку на основное представление списка в котором будет показываться только текущий элемент. Вместо DefaultViewUrl можно использовать страницу с вебчастью на которой отображается список.
Этот стиль предназанчен для перехода в представление в котором отображается только один элемент в таком стиле где нет элементов навигации по списку например для отображения многострочного поля с форматированием: мы видим только 1 поле во всей области. Таким образом можно отображать новости, страницы и т.п. HTML форматированную информацию.
Комбинируя изменение стиля и кастмизированное поле мы можем получить практически произвольный вид списка, с нашими скриптами и HTML контролами. Это богатый инструментарий как для дизайнера так и для разработчика.
Отдельно хочу обратить ваше внимание на заполнение значениями переменной ctx = new ContextInfo(); типа ContextInfo - из нее можно достать необходимую вам информацию о пользователе, списке и т.п.
В целом советую сначала прочитать про преобразование xml потом внимательно просмотреть схемы стилей (попытаться их прочитать) думаю через неделю вы сможете создать свой собственный стиль на базе существующего.
Удачи!
Идеология...
Стиль по существу является XSLT преобразованием xml с содержанием списка.
Я уже писал по этому поводу.
Все что нам нужно это поправить html разметку в тегах CDATA.
Итак по адресу:
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\GLOBAL\XML\VWSTYLES.XML
лежит этот замечательный файл в котором хранятся стили отображения для ListViewWebPart или проще говоря для библиотек и списков.
Хочу поделиться своими изысканиями в этой области:
1. Создать свой стиль проще всего через копирование.
Необходимо задать ему новый ИД больше 20.
2. Можно ограничить типы списков для которых будет работать ваш стиль:
например ID="34" DisplayName="Карточка(изменить)" BaseType="0" - для списков и библиотек или BaseType="1" для библиотек.
3. Когда вы создаете свой стиль необходимо внимательно посмотреть на ограничения по полям( особенно если вы пытаетесь переделать готовый стиль для библиотеки в стиль для списка.
Мои примеры:
1. Удалив содержимое <ViewHeader> и выравнив стиль (HTML теги которые открывались в этой области) вы получите отображение списка без заглавия.
2.
Добавив такую схему в <ViewBody> в каждой строке:
<HTML> <![CDATA[<a href="]]></HTML>
<ListProperty Select="DefaultViewUrl" HTMLEncode="TRUE"/>
<HTML><![CDATA[?FilterField1=ID&FilterValue1=]]></HTML>
<Field Name="ID" HTMLEncode="TRUE" />
<HTML><![CDATA[" >Подробнее...</a>]]></HTML>
Мы получим ссылку на основное представление списка в котором будет показываться только текущий элемент. Вместо DefaultViewUrl можно использовать страницу с вебчастью на которой отображается список.
Этот стиль предназанчен для перехода в представление в котором отображается только один элемент в таком стиле где нет элементов навигации по списку например для отображения многострочного поля с форматированием: мы видим только 1 поле во всей области. Таким образом можно отображать новости, страницы и т.п. HTML форматированную информацию.
Комбинируя изменение стиля и кастмизированное поле мы можем получить практически произвольный вид списка, с нашими скриптами и HTML контролами. Это богатый инструментарий как для дизайнера так и для разработчика.
Отдельно хочу обратить ваше внимание на заполнение значениями переменной ctx = new ContextInfo(); типа ContextInfo - из нее можно достать необходимую вам информацию о пользователе, списке и т.п.
В целом советую сначала прочитать про преобразование xml потом внимательно просмотреть схемы стилей (попытаться их прочитать) думаю через неделю вы сможете создать свой собственный стиль на базе существующего.
Удачи!
Ярлыки:
Кастомизация,
Sharepoint
вторник, 25 марта 2008 г.
LinkTitle - используем скрипты Sharepoint
Собственно это попытка повторить функционал этого меню документа в списке.
Зачем:
В библиотеке есть документ 1 в той же библиотеке есть связанный с ним документ 2.
В карточке документа 1 отобразить LinkTitle документа 2.
Непосредственно разметка:
<TD Class="ms-vb-title" height="100%">
<table height="100%" cellspacing="0"
class="ms-unselectedtitle"
onmouseover="ggg();OnItem(this)"
CTXName="ctx1"
Id="4"
Url="/sites/test/DocLib2/Поиск.aspx"
DRef="sites/test/DocLib2"
Perm="0x400001f07fff1bff"
Type="SharePoint.WebPartPage.Document"
Ext="aspx"
Icon="icsmrtpg.gif|Microsoft Office SharePoint Designer|SharePoint.OpenDocuments"
OType="0"
COUId=""
SRed="1"
COut="0"
HCD=""
CSrc=""
MS="0"
CType="Документ"
CId="0x0101004C213AE6D661A548A1237AF7852AFA98"
UIS="512"
SUrl="">
<tr>
<td width="100%" Class="ms-vb">
<A onfocus="OnLink(this)"
HREF="/sites/test/DocLib2/Поиск.aspx"
onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','','0','SharePoint.OpenDocuments',
'SharePoint.WebPartPage.Document','1','',
'1073741823','0','0','0x400001f07fff1bff')">
Поиск<img src="/_layouts/images/blank.gif" class="ms-hidden" border="0" width="1" height="1" alt="Для открытия меню воспользуйтесь сочетанием клавиш SHIFT+ВВОД (в новом окне).">
</A>
</td>
<td>
<img src="/_layouts/images/blank.gif" width="13" style="visibility:hidden" alt="">
</td>
</tr>
</table>
</TD>
<td>
И скрипт который заполняет объект тип ContextInfo который передается для форматирования меню:
<script>
var ctx1 = new ContextInfo();
function ggg()
{
ctx1.ContentTypesEnabled=false;
ctx1.ctxId=1;
ctx1.CurrentUserId=1073741823;
ctx1.displayFormUrl="/sites/test/DocLib2/Forms/DispForm.aspx";
ctx1.editFormUrl="/sites/test/DocLib2/Forms/EditForm.aspx";
ctx1.EnableMinorVersions=false;
ctx1.HttpPath="/sites/test/_vti_bin/owssvr.dll?CS=65001";
ctx1.HttpRoot="http://server/sites/test";
ctx1.imagesPath="/_layouts/images/";
ctx1.isForceCheckout=false;
ctx1.isModerated=false;
ctx1.isPortalTemplate=null;
ctx1.isVersions=0;
ctx1.isWebEditorPreview=0;
ctx1.listBaseType=1;
ctx1.listName="{AC2D4CC5-7971-4627-8E58-F6A40E80AA70}";
ctx1.listTemplate=101;
ctx1.ListTitle="Библиотека документов";
ctx1.listUrlDir="/sites/test/DocLib2";
ctx1.ModerationStatus=0;
ctx1.newFormUrl=null;
ctx1.OfficialFileName="";
ctx1.PortalUrl=null;
ctx1.recursiveView=false;
ctx1.RecycleBinEnabled -=1;
ctx1.rootFolderForDisplay=null;
ctx1.SendToLocationName="Lib";
ctx1.SendToLocationUrl="http://server/sites/test/DocLib/";
ctx1.serverUrl=null;
ctx1.SiteTitle="test2";
ctx1.verEnabled=1;
ctx1.view="{B810C9B4-434E-4EA3-BADB-C466199D3F74}";
ctx1.WorkflowsAssociated=true;
ctx1.WriteSecurity="1";
}
</script>
У меня возник ряд сложностей с разбором кода: не совсем понимаю откуда берутся некоторые параметры и что это за параметры:
onmouseover="OnItem(this)" - это вызов js функции она строит меню.
CTXName="ctx1" - ContextInfo данные об объекте.
Id="4" - это ИД элемента в списке
Url="/sites/test/DocLib2/Поиск.aspx" - БК
DRef="sites/test/DocLib2" БК
Perm="0x400001f07fff1bff" - ? я так понимаю необходимый уровень разрешений - где его брать пока не знаю
Type="SharePoint.WebPartPage.Document" -БК
Ext="aspx" - БК
Icon="icsmrtpg.gif|Microsoft Office SharePoint Designer|SharePoint.OpenDocuments" - БК
OType="0" - ?
COUId="" -?
SRed="1" -?
COut="0" -?
HCD="" -?
CSrc="" -?
MS="0" -?
CType="Документ" - БК
CId="0x0101004C213AE6D661A548A1237AF7852AFA98" - ИД типа содержимого
UIS="512" - ?
SUrl="" -?
Отдельный вопрос как раздобыть ИД текущего пользователя.
ctx1.CurrentUserId=1073741823;
Собственно решение:
Создаем свой тип поля (наследуя MultiColumn) в котором сохраняем все необходимые переменные.
Далее повторяем HTML разметку меню в схеме отображения нашего поля.
Создаем контрол/вебчасть которая записывает ИД текущего пользователя в скрытое поле с известным идом.
Добавляем скрипт на мастер-страницу (либо на нашу страницу) который задает значение ctx1.CurrentUserId из скрытого поля.
Если кто-то может что-то дополнить буду благодарен.
Зачем:
В библиотеке есть документ 1 в той же библиотеке есть связанный с ним документ 2.
В карточке документа 1 отобразить LinkTitle документа 2.
Непосредственно разметка:
<TD Class="ms-vb-title" height="100%">
<table height="100%" cellspacing="0"
class="ms-unselectedtitle"
onmouseover="ggg();OnItem(this)"
CTXName="ctx1"
Id="4"
Url="/sites/test/DocLib2/Поиск.aspx"
DRef="sites/test/DocLib2"
Perm="0x400001f07fff1bff"
Type="SharePoint.WebPartPage.Document"
Ext="aspx"
Icon="icsmrtpg.gif|Microsoft Office SharePoint Designer|SharePoint.OpenDocuments"
OType="0"
COUId=""
SRed="1"
COut="0"
HCD=""
CSrc=""
MS="0"
CType="Документ"
CId="0x0101004C213AE6D661A548A1237AF7852AFA98"
UIS="512"
SUrl="">
<tr>
<td width="100%" Class="ms-vb">
<A onfocus="OnLink(this)"
HREF="/sites/test/DocLib2/Поиск.aspx"
onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','','0','SharePoint.OpenDocuments',
'SharePoint.WebPartPage.Document','1','',
'1073741823','0','0','0x400001f07fff1bff')">
Поиск<img src="/_layouts/images/blank.gif" class="ms-hidden" border="0" width="1" height="1" alt="Для открытия меню воспользуйтесь сочетанием клавиш SHIFT+ВВОД (в новом окне).">
</A>
</td>
<td>
<img src="/_layouts/images/blank.gif" width="13" style="visibility:hidden" alt="">
</td>
</tr>
</table>
</TD>
<td>
И скрипт который заполняет объект тип ContextInfo который передается для форматирования меню:
<script>
var ctx1 = new ContextInfo();
function ggg()
{
ctx1.ContentTypesEnabled=false;
ctx1.ctxId=1;
ctx1.CurrentUserId=1073741823;
ctx1.displayFormUrl="/sites/test/DocLib2/Forms/DispForm.aspx";
ctx1.editFormUrl="/sites/test/DocLib2/Forms/EditForm.aspx";
ctx1.EnableMinorVersions=false;
ctx1.HttpPath="/sites/test/_vti_bin/owssvr.dll?CS=65001";
ctx1.HttpRoot="http://server/sites/test";
ctx1.imagesPath="/_layouts/images/";
ctx1.isForceCheckout=false;
ctx1.isModerated=false;
ctx1.isPortalTemplate=null;
ctx1.isVersions=0;
ctx1.isWebEditorPreview=0;
ctx1.listBaseType=1;
ctx1.listName="{AC2D4CC5-7971-4627-8E58-F6A40E80AA70}";
ctx1.listTemplate=101;
ctx1.ListTitle="Библиотека документов";
ctx1.listUrlDir="/sites/test/DocLib2";
ctx1.ModerationStatus=0;
ctx1.newFormUrl=null;
ctx1.OfficialFileName="";
ctx1.PortalUrl=null;
ctx1.recursiveView=false;
ctx1.RecycleBinEnabled -=1;
ctx1.rootFolderForDisplay=null;
ctx1.SendToLocationName="Lib";
ctx1.SendToLocationUrl="http://server/sites/test/DocLib/";
ctx1.serverUrl=null;
ctx1.SiteTitle="test2";
ctx1.verEnabled=1;
ctx1.view="{B810C9B4-434E-4EA3-BADB-C466199D3F74}";
ctx1.WorkflowsAssociated=true;
ctx1.WriteSecurity="1";
}
</script>
У меня возник ряд сложностей с разбором кода: не совсем понимаю откуда берутся некоторые параметры и что это за параметры:
onmouseover="OnItem(this)" - это вызов js функции она строит меню.
CTXName="ctx1" - ContextInfo данные об объекте.
Id="4" - это ИД элемента в списке
Url="/sites/test/DocLib2/Поиск.aspx" - БК
DRef="sites/test/DocLib2" БК
Perm="0x400001f07fff1bff" - ? я так понимаю необходимый уровень разрешений - где его брать пока не знаю
Type="SharePoint.WebPartPage.Document" -БК
Ext="aspx" - БК
Icon="icsmrtpg.gif|Microsoft Office SharePoint Designer|SharePoint.OpenDocuments" - БК
OType="0" - ?
COUId="" -?
SRed="1" -?
COut="0" -?
HCD="" -?
CSrc="" -?
MS="0" -?
CType="Документ" - БК
CId="0x0101004C213AE6D661A548A1237AF7852AFA98" - ИД типа содержимого
UIS="512" - ?
SUrl="" -?
Отдельный вопрос как раздобыть ИД текущего пользователя.
ctx1.CurrentUserId=1073741823;
Собственно решение:
Создаем свой тип поля (наследуя MultiColumn) в котором сохраняем все необходимые переменные.
Далее повторяем HTML разметку меню в схеме отображения нашего поля.
Создаем контрол/вебчасть которая записывает ИД текущего пользователя в скрытое поле с известным идом.
Добавляем скрипт на мастер-страницу (либо на нашу страницу) который задает значение ctx1.CurrentUserId из скрытого поля.
Если кто-то может что-то дополнить буду благодарен.
четверг, 20 марта 2008 г.
Веб часть основные результаты поиска - использование фиксированных запросов.
В url страницы где размещается веб часть основных результатов можно добавить параметры по следующему принципу:
?k=contentType%3A%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82
k - строка запроса
(%3A - ":") (%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82 - Элемент)
&u=http%3A%2F%2Fserver%3Aport
u - ограничение по url (узел)
%3A%2F%2 - :\\ %3A - :
Удобно использовать в случае необходимости показать пользователю результаты поиска без заполнения пользователем формы запроса
Т.е. тогда когда запрос известен заранее или известна формула а пареметр берется в зависимости от (пользователя, группы, узла, страницы, элемента и т.п.) Можно реализовать как скрипт или через redirect(url).
Учитывая большие возможности форматирования таким образом можно отображать сводную информацию с различных узлов в любом удобном формате.
Статья на сайте микрософт
?k=contentType%3A%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82
k - строка запроса
(%3A - ":") (%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82 - Элемент)
&u=http%3A%2F%2Fserver%3Aport
u - ограничение по url (узел)
%3A%2F%2 - :\\ %3A - :
Удобно использовать в случае необходимости показать пользователю результаты поиска без заполнения пользователем формы запроса
Т.е. тогда когда запрос известен заранее или известна формула а пареметр берется в зависимости от (пользователя, группы, узла, страницы, элемента и т.п.) Можно реализовать как скрипт или через redirect(url).
Учитывая большие возможности форматирования таким образом можно отображать сводную информацию с различных узлов в любом удобном формате.
Статья на сайте микрософт
Ярлыки:
поиск,
Sharepoint
понедельник, 3 марта 2008 г.
Мой фильтр для списка.
Ранее я написал как можно подступисться к внешнему виду listViewИзменение перечня столбцов в ListViewWebPart "на лету".
Хочу более подробно остановиться на использовании фильтра.
Стандартные фильтры неудобны тем, что работают только по равно и только по одному значению. Т.Е. их нужно набирать из веб частей долго настраивать и т.п.
Для тех кто умеет создавать веб части предлагаю пойти другим путем:
Создать свою веб часть фильтрации - поиска в списке.
Итак входящие параметры:
Название списка.
Перечень полей для фильтрации.
Сразу хочу сказать чтов качестве пробы сил реализовал фильтрацию только для строки и даты, но думаю и для других типов это не сложно.
Для каждого текстового поля создаем динамические элементы: Надписи - label, условие - DropDownList - содержит\равно\не равно\начинается с (в соотвествии с возможностями CALM) тексбокс со значением фильтра и DropDownList соединение (и\или)если полей несколько. Можно реализовать любой метод постбека я разместил кнопку.
Для даты создаем надписи и DateTimeControl в моем случае это с значение по значение - поиск в диапазоне.
Далее ищем нашу веб часть по параметру имя списка:
Читаем xml схему:
Итак запрос(фильтр) лежит в теге Query.
node["Query"].InnerXml - сюда запишем нашу строку запроса.
Сам запрос легко собирается из значений формы запроса типов полей списка. Самый простой способ - две строки на этапе формирования запроса для простоты в первую часть
В конце соединяем строки и записываем xml в веб часть.
Хочу более подробно остановиться на использовании фильтра.
Стандартные фильтры неудобны тем, что работают только по равно и только по одному значению. Т.Е. их нужно набирать из веб частей долго настраивать и т.п.
Для тех кто умеет создавать веб части предлагаю пойти другим путем:
Создать свою веб часть фильтрации - поиска в списке.
Итак входящие параметры:
Название списка.
Перечень полей для фильтрации.
Сразу хочу сказать чтов качестве пробы сил реализовал фильтрацию только для строки и даты, но думаю и для других типов это не сложно.
Для каждого текстового поля создаем динамические элементы: Надписи - label, условие - DropDownList - содержит\равно\не равно\начинается с (в соотвествии с возможностями CALM) тексбокс со значением фильтра и DropDownList соединение (и\или)если полей несколько. Можно реализовать любой метод постбека я разместил кнопку.
Для даты создаем надписи и DateTimeControl в моем случае это с значение по значение - поиск в диапазоне.
Далее ищем нашу веб часть по параметру имя списка:
SPList list = SPContext.Current.Web.Lists[_listName];
String guid = "{" + list.ID.ToString().ToUpper() + "}";
ListViewWebPart lv = (ListViewWebPart)wp;
if (lv.ListName == guid)// guid списка (c {})
Читаем xml схему:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.InnerXml = lv.ListViewXml;
XmlNode node;
node = xmlDoc.DocumentElement;
Итак запрос(фильтр) лежит в теге Query.
node["Query"].InnerXml - сюда запишем нашу строку запроса.
Сам запрос легко собирается из значений формы запроса типов полей списка. Самый простой способ - две строки на этапе формирования запроса для простоты в первую часть
тег соединения() + тег запроса
во вторую тег закрытия соединения(/And)).
В конце соединяем строки и записываем xml в веб часть.
Кастомизация поиска. - Дополнение.
В дополнение хочу сказать что в схеме параметров можно ограничить результаты поиска query выражениями типа:
Contains('Имя свойства','Значение') OR Title!='' AND ContentType!='Папка'
1 - очень удобно использовать для свойства "Path" - получам результат как с областями.
указывая урл билиотеки или списка мы ограничиваем поиск этой библиотекой списком.
2 - понятно
3 - тип содержимого - как мне кажется довольно удобно ограничивать поиск среди своего портала по своим типам содержимого - очень удобно!
Удачи!
P.S.
1. Когда будете настраивать схему результатов не забудте указать параметры в перечне столбцов основных результатов поиска.
2. Имена столбцов пишутся маленькими буквами поэтому в XLS схеме загалвные нужно перевести в маленькие.
Contains('Имя свойства','Значение') OR Title!='' AND ContentType!='Папка'
1 - очень удобно использовать для свойства "Path" - получам результат как с областями.
указывая урл билиотеки или списка мы ограничиваем поиск этой библиотекой списком.
2 - понятно
3 - тип содержимого - как мне кажется довольно удобно ограничивать поиск среди своего портала по своим типам содержимого - очень удобно!
Удачи!
P.S.
1. Когда будете настраивать схему результатов не забудте указать параметры в перечне столбцов основных результатов поиска.
2. Имена столбцов пишутся маленькими буквами поэтому в XLS схеме загалвные нужно перевести в маленькие.
Ярлыки:
поиск,
Sharepoint
Подписаться на:
Сообщения (Atom)