MOSS: Ֆունկցիոնալ Օրինակ - Custom Data Type

Բիզնես Սցենար:

Enterprise - լայն կիրառումը MOSS արտադրական ընկերության հետ 30+ կայքեր եւ մի քանի տասնյակ կորպորատիվ վարչություններ.

Բիզնես Նպատակ:

Չնայած բազմաթիվ բիզնես խմբերի (ԲԱԺԻՆՆԵՐ, տեղերը, եւ այլն:), որոշ տվյալները պետք է պահպանվեն մի գլոբալ մակարդակով. Օրինակ,, հեղինակավոր վարպետ ցանկը բոլոր ֆիզիկական տեղաբաշխման ընկերության (e.g. արտադրական միջոցներ, պահեստային տեղերը, վաճառքի գրասենյակները) պետք է պահպանվի նաեւ կենտրոնական վայրում.

Տեխնիկական Problem:

Ձեռնարկությունը taxonomy իրականացվել, օգտագործելով մի քանի կայքի հավաքածուներ. Մենք սիրում է ստեղծել հեղինակավոր ցանկը ֆիզիկական վայրերում մաքսային WSS ցուցակում. Ապա, երբ մենք պետք է ունենանք սյունը մի բովանդակության տեսակի (կամ սյունակ է, որը ցուցակում կամ doc գրադարան) որ պարունակում կորպորատիվ վայրերը, we would create a column using the "lookup" datatype եւ կետն այս վարպետության ցուցակում.

Ցավոք,, lookup datatypes must access a source list "locally" նշանակում է, որ մեր հեղինակավոր ցանկը կարող span Տեղում հավաքածու.

Տեխնիկական Solution:

Իրականացնել նոր գործարկողի տվյալների տեսակն իրականացվում հիման վրա SPField եւ ներկայացված է որպես DropDownList է UI, որի ListItems բնակեցնել այդ վարպետի WSS ցուցակում.

Մենք ստեղծել ենք նոր կայքը հավաքածու կոչված "http://localhost/EnterpriseData". Կան, we created a custom list named "Corporate Locations". This list just uses the standard "Title" դաշտը պարունակում ցուցակը փաստացի կորպորատիվ վայրերում.

One հետեւում է դիսկրետ քայլերի ստեղծել գործարկողի տվյալների մուտքագրել WSS. Նրանք:

  1. Սահմանում դաս, որը ժառանգում են SPField (կարելի ժառանգել է այլ ոլորտներում, եթե անհրաժեշտ է).

Ահա կոդը համար:

հասարակություն դաս XYZZYCorporateLocationField : SPFieldText
{
հասարակություն XYZZYCorporateLocationField
(SPFieldCollection fields, լարային typeName, լարային displayName)
: բազա(fields, typeName, displayName) { }

հասարակություն XYZZYCorporateLocationField
(SPFieldCollection fields, լարային displayName)
: բազա(fields, displayName) { }

հասարակություն ոտնատակ տալ BaseFieldControl FieldRenderingControl
{
ստանալ
{
BaseFieldControl control = նոր XYZZYCorporateLocationFieldControl();
control.FieldName = սա.Ներքին Անունը;
վերադարձ control;
} //ստանալ
} // fieldrenderingcontrol

հասարակություն ոտնատակ տալ լարային GetValidatedString(օբյեկտ արժեք)
{
եթե (սա.Required || value.ToString().Հավասար(Լար.Դատարկ))
{
նետում նոր SPFieldValidationException ("Department is not assigned.");
}
վերադարձ բազա.GetValidatedString(արժեք);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Սահմանել մեկ այլ խավի, որ ժառանգում են բազային դաշտային վերահսկողության, ինչպես:

հասարակություն դաս XYZZYCorporateLocationFieldControl : BaseFieldControl
{
պաշտպանված DropDownList XYZZYCorporateLocationSelector;

պաշտպանված ոտնատակ տալ լարային DefaultTemplateName
{
ստանալ
{
վերադարձ "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

հասարակություն ոտնատակ տալ օբյեկտ Արժեք
{
ստանալ
{
EnsureChildControls();
վերադարձ սա.XYZZYCorporateLocationSelector.SelectedValue;
} // ստանալ
սահմանել
{
EnsureChildControls();
սա.XYZZYCorporateLocationSelector.SelectedValue = (լարային)սա.ItemFieldValue;
} // սահմանել
} // override object Value

պաշտպանված ոտնատակ տալ անվավեր CreateChildControls()
{

եթե (սա.Field == զրո || սա.ControlMode == SPControlMode.Ցուցադրել)
վերադարձ;

բազա.CreateChildControls();

սա.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");

եթե (սա.XYZZYCorporateLocationSelector == զրո)
նետում նոր Բացառություն("ERROR: Cannot load .ASCX file!");

եթե (!սա.Page.IsPostBack)
{

օգտագործելով (SPSite site = նոր SPSite("Http :/://localhost / enterprisedata"))
{
օգտագործելով (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists["Corporate Locations"];

ԲՀԿ (Թքել XYZZYCorporateLocation մեջ currentList.Items)
{
եթե (XYZZYCorporateLocation["Title"] == զրո) շարունակել;

լարային theTitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();

սա.XYZZYCorporateLocationSelector.Items.Add
(նոր ListItem(theTitle, theTitle));

} // ԲՀԿ

} // using spweb web = site.openweb()
} // using spsite site = new spsite("Http :/://localhost/enterprisedata")

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Վերը նշված կոդը հիմնականում իրականացնում է տրամաբանությունը եւ բնակեցնելու DropDownList հետ արժեքներով են WSS մաքսային ցուցակում գտնվում է http://localhost/enterprisedata and named "Corporate Departments".

Ես սահմանված երկու դասընթացներ է մեկ. Cs ֆայլ, կազմվում է այն եւ դրեց այն GAC (ուժեղ պահանջվող, Իհարկե).

  1. Իրականացնել Կառավարման ձեւանմուշ (.ascx) ինչպես ցուցադրված է:

<%@ Վերահսկել Լեզու="C#" Ժառանգում="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, մշակույթի = չեզոք,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%
@ Գրանցում 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:Մատուցումը Կաղապար ID="XYZZYCorporateLocationFieldControl" runat="server">
<Կաղապար>
<իժ:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Կաղապար>
</
Sharepoint:Մատուցումը Կաղապար>

Վերը պահպանվում է գ:\ծրագրային ֆայլերը ընդհանուր ֆայլերը Microsoft համօգտագործել Վեբսերվերի ընդարձակման 12 controltemplates.

  1. Վերջապես, մենք ստեղծել XML ֆայլ է փրկել են ..... 12 XML գրացուցակը. Սա CAML է, որ սահմանում է մեր մաքսային տվյալների տեսակը եւ իմ օրինակ, կարծես սա:

<?XML Նամակ տարբերակ="1.0" կոդավորում="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Դաշտ Անուն="TypeName">CorporateLocations</Դաշտ>
<
Դաշտ Անուն="ParentType">Տեքստ</Դաշտ>
<
Դաշտ Անուն="TypeDisplayName">Corporate Locations</Դաշտ>
<
Դաշտ Անուն="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Դաշտ>
<
Դաշտ Անուն="UserCreatable">TRUE</Դաշտ>
<
Դաշտ Անուն="ShowInListCreate">TRUE</Դաշտ>
<
Դաշտ Անուն="ShowInDocumentLibraryCreate">TRUE</Դաշտ>
<
Դաշտ Անուն="ShowInSurveyCreate">TRUE</Դաշտ>
<
Դաշտ Անուն="ShowInColumnTemplateCreate">TRUE</Դաշտ>
<
Դաշտ Անուն="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Տարբերակ = 1.0.0.0, Մշակույթ = չեզոք, PublicKeyToken=b0b19e85410990c4</Դաշտ>
<
RenderPattern Անուն="DisplayPattern">
<
Անջատիչ>
<
Expr>
<
Սյունակ />
</
Expr>

<Դեպք Արժեք=""/>

<Անհոգություն>
<
HTML>
<![CDATA[
<span style="color:Red"><բ>]]>
</
HTML>

<
Սյունակ SubcolumnNumber="0" HTMLEncode="TRUE"/>

<HTML><![CDATA[</բ></span>]]></HTML>

</
Անհոգություն>
</
Անջատիչ>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" եւ համապատասխանում այն ​​դեմ GAC'd հավաքների.

Հետո գնում այդ բոլոր bits իր տեղը, iisreset է սերվերի եւ այն պետք է բոլորս լավ կաշխատի.

3 thoughts on "MOSS: Ֆունկցիոնալ Օրինակ - Custom Data Type

  1. Alexander
    Hi Paul,
    Առաջին հերթին, thanks for the article, քանի որ դա շատ հետաքրքիր է. Միայն մեկ հարց;
    Գիտեք, եթե դա posible մատուցելու ճիշտ գործարկողի դաշտային տեսակի մեջ datasheet տեսակետից ցուցակում?
    Քանի որ ամեն մաքսային դաշտը տեսակ եմ ստեղծել, դա ցույց է տալիս, քանի որ կարդալու միայն datasheet տեսանկյունից (եւ MSDN, օրինակ, չի օգնում ինձ շատ :-S).
    Շնորհակալություն
  2. Lyndsay

    I am attempting to implement your solution. However I instead of DropDownList, I only have the option for a DropDownChoiceList. Do you happen to know how to add items to a DropDownChoiceList? Մենք օգտագործում SharePoint 2007 SP1 եւ Visual Studio 2005 SP1.

Ավելացնել կարծիք

Ձեր էլ. Փոստի հասցեն չի հրապարակվելու. Պահանջվող դաշտերը նշված են աստղանիշով *