MOSS: Funksional Example - Xüsusi Veri Tipi

Biznes Ssenari:

Istehsal şirkəti üçün mamır Enterprise-geniş həyata keçirilməsi ilə 30+ sites və bir neçə çox korporativ şöbələri.

Biznes məqsədi:

Biznes qruplarının bir çox baxmayaraq (şöbələri, locations, və s.), müəyyən məlumatların qlobal səviyyədə təmin olunmalıdır. Məsələn, şirkətin bütün fiziki yeri nüfuzlu master siyahısı (e.g. istehsal, anbar locations, satış ofisləri) bir mərkəzi yer saxlamalıdır.

Texniki Problem:

Müəssisə taksonomisi birdən çox site kolleksiyalar istifadə edərək həyata keçirilib. Biz xüsusi WSS siyahısına fiziki locations nüfuzlu siyahısını yaratmaq üçün xoşuma gəldi olardı. Sonra, biz bir içerik növü bir sütun üçün lazım zaman (və ya bir sütun siyahısı və ya doc kitabxana əlavə) ki, olan korporativ locations, we would create a column using the "lookup" Bu master siyahısına datatype və point.

Təəssüf ki,, lookup datatypes must access a source list "locally" bizim nüfuzlu siyahısı site kolleksiyaları əhatə edə bilməz, yəni.

Texniki Həll:

SPField əsaslanır və onun ListItems master WSS siyahıdan yaşayır UI bir DropDownList kimi təmsil həyata yeni bir xüsusi data type həyata keçirilməsi.

Biz adlı yeni bir site kolleksiyası yaradılmış "http://localhost/EnterpriseData". Orada, we created a custom list named "Corporate Locations". This list just uses the standard "Title" faktiki korporativ yerlərin siyahısı domain.

Bir WSS xüsusi bir veri növü yaratmaq üçün bir neçə diskret addımlar aşağıdakı. Onlar:

  1. SPField olan vərəsəlik bir sinif müəyyən (əgər tələb olunarsa başqa bir yataqlarından varis ola bilər).

Burada üçün kod:

ictimai sinfi XYZZYCorporateLocationField : SPFieldText
{
ictimai XYZZYCorporateLocationField
(SPFieldCollection sahələri, sim typeName, sim displayName)
: baza(sahələri, typeName, displayName) { }

ictimai XYZZYCorporateLocationField
(SPFieldCollection sahələri, sim displayName)
: baza(sahələri, displayName) { }

ictimai alıqlamaq BaseFieldControl FieldRenderingControl
{
almaq
{
BaseFieldControl control = yeni XYZZYCorporateLocationFieldControl();
control.FieldName = bu.InternalName;
qayıtmaq control;
} //almaq
} // fieldrenderingcontrol

ictimai alıqlamaq sim GetValidatedString(obyekt dəyər)
{
əgər (bu.Required || value.ToString().Bərabər(Sim.Boş))
{
atmaq yeni SPFieldValidationException ("Department is not assigned.");
}
qayıtmaq baza.GetValidatedString(dəyər);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Baza sahəsində nəzarət vərəsəlik başqa bir sinif müəyyən, kimi:

ictimai sinfi XYZZYCorporateLocationFieldControl : BaseFieldControl
{
müdafiə DropDownList XYZZYCorporateLocationSelector;

müdafiə alıqlamaq sim DefaultTemplateName
{
almaq
{
qayıtmaq "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

ictimai alıqlamaq obyekt Dəyər
{
almaq
{
EnsureChildControls();
qayıtmaq bu.XYZZYCorporateLocationSelector.SelectedValue;
} // almaq
təyin etmək
{
EnsureChildControls();
bu.XYZZYCorporateLocationSelector.SelectedValue = (sim)bu.ItemFieldValue;
} // təyin etmək
} // override object Value

müdafiə alıqlamaq ləğv CreateChildControls()
{

əgər (bu.Field == null || bu.ControlMode == SPControlMode.Göstərmək)
qayıtmaq;

baza.CreateChildControls();

bu.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");

əgər (bu.XYZZYCorporateLocationSelector == null)
atmaq yeni Istisna("ERROR: Cannot load .ASCX file!");

əgər (!bu.Page.IsPostBack)
{

istifadə (SPSite site = yeni SPSite("http://localhost / enterprisedata"))
{
istifadə (SPWeb web = site.OpenWeb())
{

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

foreach (Tüpürmək XYZZYCorporateLocation ilə currentList.Items)
{
əgər (XYZZYCorporateLocation["Title"] == null) davam etdirmək;

sim theTitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();

bu.XYZZYCorporateLocationSelector.Items.Add
(yeni ListItem(theTitle, theTitle));

} // foreach

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

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Yuxarıda kodu əsasən yerləşən WSS xüsusi siyahısından dəyərləri ilə DropDownList məskunlaşdırılması üçün məntiq həyata keçirir http://localhost/enterprisedata and named "Corporate Departments".

Mən bir tək. Cs fayl həm də dərsləri müəyyən, bu tərtib və GAC onu qoymaq (tələb olunan güclü, əlbəttə).

  1. Nəzarət şablon həyata keçirilməsi (.ascx) kimi:

<%@ Nəzarət Dil="C#" Vərəsəlik="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, Mədəniyyət = neytral,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%
@ Qeydiyyat Tagprefix="wssawc" Adlar fəzası="Microsoft.SharePoint.WebControls" Yığma="Microsoft.SharePoint, Version = 12.0.0.0, Mədəniyyət = neytral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Qeydiyyat Tagprefix="SharePoint" Adlar fəzası="Microsoft.SharePoint.WebControls" Yığma="Microsoft.SharePoint, Version = 12.0.0.0, Mədəniyyət = neytral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID="XYZZYCorporateLocationFieldControl" runat="server">
<Şablon>
<asp:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Şablon>
</
SharePoint:RenderingTemplate>

Yuxarıda c daxil qeyd olunur:\Program Files Common Files Microsoft paylaşılan web server uzantıları 12 controltemplates.

  1. Nəhayət, biz ..... 12 XML qovluğuna saxlamaq üçün XML fayl yaratmaq. Bu, bizim xüsusi data type müəyyən CAML və mənim məsələn, bu kimi:

<?xml variant="1.0" encoding="utf-8" ?>
<
FieldTypes>
<
FieldType>
<
Sahə Ad="TypeName">CorporateLocations</Sahə>
<
Sahə Ad="ParentType">Mətn</Sahə>
<
Sahə Ad="TypeDisplayName">Corporate Locations</Sahə>
<
Sahə Ad="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Sahə>
<
Sahə Ad="UserCreatable">TRUE</Sahə>
<
Sahə Ad="ShowInListCreate">TRUE</Sahə>
<
Sahə Ad="ShowInDocumentLibraryCreate">TRUE</Sahə>
<
Sahə Ad="ShowInSurveyCreate">TRUE</Sahə>
<
Sahə Ad="ShowInColumnTemplateCreate">TRUE</Sahə>
<
Sahə Ad="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Mədəniyyət = neytral, PublicKeyToken=b0b19e85410990c4</Sahə>
<
RenderPattern Ad="DisplayPattern">
<
Switch>
<
Expr>
<
Sütun />
</
Expr>

<Hal Dəyər=""/>

<Default>
<
HTML>
<![CDATA[
<span style="color:Red"><b>]]>
</
HTML>

<
Sütun SubColumnNumber="0" HTMLEncode="TRUE"/>

<HTML><![CDATA[</b></aşırım>]]></HTML>

</
Default>
</
Switch>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" və GAC'd toplaşmaq qarşı bu qədər oyunları.

Yer daxil bütün bu bit hərəkət sonra, server iisreset və bütün gözəl iş başlamaq lazımdır.

3 Haqqında "fikirləriMOSS: Funksional Example - Xüsusi Veri Tipi

  1. Alejandro
    Salam Paul,
    Ilk öncə, məqalə üçün təşəkkür edirik, Bu, çox maraqlı, çünki. Yalnız bir sual;
    Bir siyahı veri baxımından doğru xüsusi bir sətirində göstərməyə posible əgər bilirsinizmi?
    Mən bunu yaratmaq hər bir xüsusi sətirində veri görünüşü oxumaq yalnız kimi göstərilir, çünki (və MSDN, məsələn, məni çox kömək etmir :-S).
    Təşəkkür
    Cavab
  2. Lyndsay
    Onu fiqurlu! Sadəcə əlavə etmək üçün lazım

    System.Web.UI istifadə;
    System.Web.UI.WebControls istifadə;

    Cavab
  3. 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? Biz SharePoint istifadə 2007 SP1 və Visual Studio 2005 SP1.

    Cavab

Şəkil Yükləmə

E-poçt ünvanından dərc olunmayacaq. Lazım alanlar qeyd olunur *