ЛИШАЙНИК: Функціональних прикладів-настроюваний тип даних

Бізнес-сценарій:

Впровадження корпоративної лишайника для виробництва компанії з 30+ сайти і кількох десятків корпоративних відділів.

Мета бізнес:

Незважаючи на безліч бізнес-групи (відділи, розташування, д), певних даних повинна підтримуватися на глобальному рівні. Наприклад, авторитетний головний список всіх фізичного місця розташування компанії (Наприклад. виробничі потужності, склад розташувань, офіси продажів) повинні бути розташовані в центрі міста.

Технічні проблеми:

Таксономія підприємство було реалізовано за допомогою кількох колекцій сайтів. Хотілося б створити авторитетний перелік фізичного місця розташування в настроюваного списку WSS. Потім, коли нам потрібні є стовпець у типом вмісту (або стовпець додано до списку або doc бібліотека) які містяться корпоративних розташувань, Ми б створити стовпець, за допомогою "підстановки" тип даних і точки до цього шаблону списку.

На жаль, типи даних підстановки потрібно зайти "локально вихідним список" Це означає, що наші авторитетний список не може охоплювати колекцій сайтів.

Технічні рішення:

Реалізувати новий тип настроювані дані реалізована на основі SPField і представлено у вигляді DropDownList в інтерфейсі користувача, чия ListItems заповнити з зведеного списку WSS.

Ми створили нові колекції сайтів, називається "http://localhost/EnterpriseData". Там, Ми створили за настроюваним списком, названий "Корпоративні місцях". Цей список просто використовує стандартні "титул" поле має містити список фактичні корпоративних місць.

Одна йде кілька дискретних кроки, щоб створити містить настроюваний тип даних у WSS. Вони є:

  1. Визначити клас, який успадковує від SPField (один може успадковувати від інших полів, якщо це вимагається).

Ось код для цього:

громадських клас XYZZYCorporateLocationField : SPFieldText
{
громадських XYZZYCorporateLocationField
(SPFieldCollection поля, рядок параметр typeName, рядок displayName)
: база(поля, параметр typeName, displayName) { }

громадських XYZZYCorporateLocationField
(SPFieldCollection поля, рядок displayName)
: база(поля, displayName) { }

громадських перевизначення BaseFieldControl FieldRenderingControl
{
отримати
{
BaseFieldControl керування = нові XYZZYCorporateLocationFieldControl();
керування. Ім'я поля = Це.InternalName;
повернення керування;
} //отримати
} // fieldrenderingcontrol

громадських перевизначення рядок GetValidatedString(об'єкт значення)
{
Якщо (Це.Необхідні || значення. ToString().Дорівнює(Рядок.Порожній))
{
кинути нові SPFieldValidationException ("Департамент не призначено.");
}
повернення база.GetValidatedString(значення);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Визначити іншого класу, яка успадковує з-під контролю базовому полі, як і в:

громадських клас XYZZYCorporateLocationFieldControl : BaseFieldControl
{
захищений DropDownList XYZZYCorporateLocationSelector;

захищений перевизначення рядок DefaultTemplateName
{
отримати
{
повернення "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

громадських перевизначення об'єкт Значення
{
отримати
{
EnsureChildControls();
повернення Це.XYZZYCorporateLocationSelector. SelectedValue;
} // отримати
набір
{
EnsureChildControls();
Це.XYZZYCorporateLocationSelector.SelectedValue = (рядок)Це.ItemFieldValue;
} // набір
} // перевизначити значення об'єкта

захищений перевизначення недійсними CreateChildControls()
{

Якщо (Це.Поле = = Null || Це.ControlMode = = SPControlMode.Дисплей)
повернення;

база.CreateChildControls();

Це.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer. FindControl("XYZZYCorporateLocationSelector");

Якщо (Це.XYZZYCorporateLocationSelector = = Null)
кинути нові Виняток("ПОМИЛКА: Не вдалося завантажити. ASCX файл!");

Якщо (!Це.IsPostBack сторінки.)
{

за допомогою (SPSite сайт = нові SPSite("http://Localhost/enterprisedata"))
{
за допомогою (SPWeb Web = сайт. OpenWeb())
{

SPList currentList = web. Списки["Корпоративні місцях"];

foreach (SPItem XYZZYCorporateLocation у currentList.Items)
{
Якщо (XYZZYCorporateLocation["Назва"] == Null) Продовжити;

рядок theTitle;
theTitle = XYZZYCorporateLocation["Назва"].ToString();

Це.XYZZYCorporateLocationSelector.Items.Add
(нові Елемент списку(theTitle, theTitle));

} // foreach

} // за допомогою spweb веб = site.openweb()
} // за допомогою spsite сайту = новий spsite("http://Localhost/enterprisedata")

} // Якщо не на передавання

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Наведений вище код в основному реалізовує логіку для заповнення DropDownList з значень від WSS настроюваним списком, розташованих на http://localhost/enterprisedata і іменовані «корпоративних відділів".

Я визначив обом класам. CS одного файлу, складений його і поклав його в GAC (сильні необхідні, Звичайно).

  1. Здійснення контролю шаблону (.ascx) як показано:

<%@ Керування Мова= "C#" Успадковує="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Версія = 12.0.0.0, культура = нейтральні,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Завжди" %>
<%
@ Зареєструватися Tagprefix= "wssawc" Простір імен="Microsoft.SharePoint.WebControls" Асамблея="Microsoft.SharePoint, Версія = 12.0.0.0, Культура = нейтральні, PublicKeyToken = 71e9bce111e9429c" %> <%@ Зареєструватися Tagprefix= "SharePoint" Простір імен="Microsoft.SharePoint.WebControls" Асамблея="Microsoft.SharePoint, Версія = 12.0.0.0, Культура = нейтральні, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" runat= "сервер">
<Шаблон>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" runat= "сервер" />
</Шаблон>
</
SharePoint:RenderingTemplate>

Вище зберігається в с:\Програма filescommon відомості sharedweb сервер extensions12controltemplates.

  1. Нарешті, Ми створити XML-файл для збереження в на... 12XML каталог. Це CAML, який визначає наші настроюваним типом даних і для мого прикладу, має такий вигляд::

<?XML версія="1.0" кодування="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Поле Ім’я="Параметр TypeName">CorporateLocations</Поле>
<
Поле Ім’я="Батьківський тип">Текст</Поле>
<
Поле Ім’я="TypeDisplayName">Корпоративні розташувань</Поле>
<
Поле Ім’я="TypeShortDescription">Всі корпоративні XYZZY місцях включаючи виробником або інших об'єктів.</Поле>
<
Поле Ім’я="UserCreatable">ПРАВДА</Поле>
<
Поле Ім’я="ShowInListCreate">ПРАВДА</Поле>
<
Поле Ім’я="ShowInDocumentLibraryCreate">ПРАВДА</Поле>
<
Поле Ім’я="ShowInSurveyCreate">ПРАВДА</Поле>
<
Поле Ім’я="ShowInColumnTemplateCreate">ПРАВДА</Поле>
<
Поле Ім’я="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Версія = 1.0.0.0, Культура = нейтральні, PublicKeyToken = b0b19e85410990c4</Поле>
<
RenderPattern Ім’я="DisplayPattern">
<
Перемикач>
<
Аргумент вираз>
<
Стовпець />
</
Аргумент вираз>

<Випадок Значення=""/>

<За промовчанням>
<
HTML>
<![CDATA[
<охоплюють стиль = "колір:Червоний"><b>]]>
</
HTML>

<
Стовпець SubColumnNumber="0" HTMLEncode="ПРАВДА"/>

<HTML><![CDATA[</b></Тривалість>]]></HTML>

</
За промовчанням>
</
Перемикач>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Цей XML-файл додає за настроюваним типом даних WSS "бібліотека" і його матчі проти GAC мав Асамблеї.

Після переміщення всіх цих бітів на місце, iisreset на сервері і він має всі приступити до роботи красиво.

3 думки про «ЛИШАЙНИК: Функціональних прикладів-настроюваний тип даних

  1. Алехандро
    Привіт Павло,
    Передусім, Спасибі за статтю, тому що це дуже цікаво. Тільки одне питання;
    Ви знаєте, якщо це можливе, щоб правильно візуалізації Тип настроюваного поля в поданні списку?
    Тому що кожен настроюване поле його створення вказано тип лише для читання в режимі таблиці (і на MSDN, Наприклад, не допоможе мені дуже багато :-S).
    Дякую
  2. Ліндсей

    Я намагаюся супроводжувати рішення. Однак я замість DropDownList, Я є тільки варіант на DropDownChoiceList. Ви часом не знаєте, як додати елементи на DropDownChoiceList? Ми використовуємо SharePoint 2007 SP1 і Visual Studio 2005 SP1.

Дати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *