Используйте Web Money - это очень удобно
Показаны сообщения с ярлыком Кастомизация. Показать все сообщения
Показаны сообщения с ярлыком Кастомизация. Показать все сообщения

понедельник, 28 июля 2008 г.

Скрипты для shrepoint (как заполнить newForm значениями по умолчанию)

Ссылка на источник

среда, 23 апреля 2008 г.

Кастомизированная форма dispForm, editForm и newForm

Очень интересная возможность для ограничения возможностей пользователей и добавления своей скриптовой обработки заполнения формы.

Источник
Порядок действий:
1. Копируем необходимую нам страницу с формой.
2. Удаляем на ней веб часть listForm
3. Вставляем custom listForm
4. Редактируем как хотим.
Мои замечания:
1. Если поле не должно быть редактируемым пользователем, можно взять значение из формы dispForm.
2. Если вы хотите предоставить различный функционал для различных уровней разрешения используйте контрол SharePoint:SPSecurityTrimmedControl, внутрь него кладите то что вам нужно.
Ну и конечно вы можете добавить и свои веб части и свои скрипты. Как результат можно получить гибкий инструмент для просмотри и редактирования элементов зависящий от прав, и вашей производственной необходимости.
Есть одна проблема для библиотек: если в библиотеке несколько типов содержимого переназначить форму не удасться.
Но можно скрыть родную и вставить свою рядом - будет работать, к сожалению только для одного типа содержимого т.е. для каждого типа содержимого нужно сделать свою форму, вставить их на одну страницу, а видимость реализовать с помощью скрипта на основании ContentType из URL или из значения соответствующего поля + необходимо реализовать обработку изменения типа содержимого.
Это несомненно большой минус этой кастомизации.
Кроме того при изменении параметров списка необходимо переделывать форму.

четверг, 17 апреля 2008 г.

Hide Actions 2

Новая инфа:

Как убрать элементы в стандартном 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)

среда, 16 апреля 2008 г.

Hide Custom Action

Actions list
Как убрать остальное
В общем придется убирать скриптами на странице. Т.к. core.js трогать не хочется.
И еще на закуску через веб часть

пятница, 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.

четверг, 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 потом внимательно просмотреть схемы стилей (попытаться их прочитать) думаю через неделю вы сможете создать свой собственный стиль на базе существующего.

Удачи!

вторник, 12 февраля 2008 г.

Custom field - отрисовка HTML

Думаю многим приходилось создавать свои поля, особый интерес представляет в этом процессе формирование HTML отрисовки значения поля в xml схеме его определения.
используя тег CDATA мы можем нарисовать любое окружение вокруг информации в нашем поле.
Например можно создать поле из нескольких колонок.
Используя различную HTML разметку и информацию из колонок можно создать интересный пользовательский интерфейс: свои меню, кнопки, радио, чекбоксы, подсказки и т.п.
Как результат можно обогатить интерфейс пользователя при работе со списками и отображении информации - подсветку строк, ячеек, и т.п.
Совместив этот механизм с веб частями и скриптами на мастер странице можно преобразить интерфейс пользователя до неузнаваемости очень скромным объемом кода.

среда, 16 января 2008 г.

Поле - деревянный список для списка Shrepoint из списка. продолжение.

Пришлось довольно много помучиться, да и другой работы было много.
Итак:
1.Создаем свое поле:
две колонки в одной храним имена в другом значения ИД из списка источника. Отображаем только первую колонку.
как сделать:Блог Сергея Шаповалова
Что добавить:
берем из ascx дерево
TreeView1 = (TreeView)TemplateContainer.FindControl("TreeView1");
берем параметры:
_listTreeView = Field.GetCustomProperty("ListName").ToString();
_nodeNameField = Field.GetCustomProperty("FieldName").ToString();
_parentIdField = Field.GetCustomProperty("FieldParentID").ToString();

Работа с полем:
public override object Value
{
get
{
EnsureChildControls();
SPFieldTreeFieldValue fieldValue = new SPFieldTreeFieldValue();
count = 0;
_names = "";
_text = "";
parent = TreeView1.Nodes[0];
ReturnCheckedNames(parent);
fieldValue.Names = _names;
fieldValue.Index = _text;
return fieldValue;
}
set
{
EnsureChildControls();
SPFieldTreeFieldValue fieldValue = (SPFieldTreeFieldValue)value;
ValueBox.Text = fieldValue.Names;
_text = fieldValue.Index;
try
{
FillTreeView();
}
catch { }

}
}
FillTreeView() - заполнение контрола TreeView.
(Моя реализация великовата для этого блога, но думаю что особых проблем с этим быть не должно.)
- определяем заполнение поля
(ReturnCheckedNames(parent); - то как вы запишите выделенные элементы в строку.
использую глобальные переменные т.к. в своем методе использую рекурсию для перебора ChildNodes)
Names - вместо prefix:

2.У поля должны быть свойства в которых указаны: список источник, поле с именами и поле ParentId.
fldtypes_TreeField.xml

^propertyschema^
^fields^
^field name="ListName" displayname="ListName" displaysize="20" type="Text"^
^/field^
^field name="FieldName" displayname="FieldName" displaysize="20" type="Text"^
^/field^
^field name="FieldParentID" displayname="FieldParentID" displaysize="20" type="Text"^
^/field^
^/fields^
^/propertyschema^
Отображаем только первую колонку:
^renderpattern name="DisplayPattern"^
^switch^
^expr^
^column/^
^/expr^
^case value=""^
^/case^
^default^
^column subcolumnnumber="0" htmlencode="TRUE"^
^/default^
^/switch^
^/renderpattern^
3.У поля должен быть собственный контрол редактирования treeView и скриптом обработки логики вашего дерева(при необходимости).
ControlTemplates_TreeFieldFieldControl.ascx
Добавляем.
^asp:treeview id="TreeView1" runat="server"^^/asp:treeview^
P.S. при использовании скриптов для реализации "активных" checkBox'ов в дереве приходится использовать ид элементов он формируется следующим образом:
prefix+"TreeView1n"+(i)+"CheckBox"
prefix - сгенерированный sharepoint ключ добавляемый к иду вашего контрола
Для получения:
var prefix
1. Создать функцию на onLoad одного из элементов ascx вашего поля.
В функцию в качестве параметра нужно передавать this.
Потом брать его ид и отрезать конец - известный вам ид элемента, ну и записывать его в глобальную переменную prefix.
i - порядковый номер сквозной сверху в низ ноды дерева. Т.Е. для рутовой ноды это 0, для первого child это 1 для первого child.child это 2 и т.д. Поэтому в скрипте (да и в коде) имеет смысл работать со сквозной нумерацией, после первого заполнения дерева (а не с шарепоинтовскими идами).
"TreeView1n"+(i)+"CheckBox" - формирует ид checkBox в дереве(TreeView1 - ид дерева).
С удовольствием отвечу на комментарии.

среда, 9 января 2008 г.

Поле - деревянный список для списка Shrepoint из списка.

Здравствуйте!
По работе встала задача реализовать деревянный список для заполнения поля в списке Sharepoint.
Решил реализовать следующим образом:
Источник:
1. Лист Sharepoint с полем подстановки из этого же листа (ParentId)
Приемник:
1. Создаем свое поле: две колонки в одной храним имена в другом значения ИД из списка источника. Отображаем только первую колонку.
2. У поля должны быть свойства в которых указаны: список источник, поле с именами и поле ParentId.
3. У поля должен быть собственный контрол редактирования treeView и скриптом обработки логики ващего дерева(при необходимости).
По возможности в дальнейшем опишу реализацию.