Senario Perniagaan:
Pelaksanaan menyeluruh MOSS syarikat perkilangan dengan 30+ tapak dan terdapat beberapa dozen Jabatan korporat.
Objektif perniagaan:
Meskipun pelbagai Kumpulan Perniagaan (Jabatan-Jabatan, lokasi, dan sebagainya.), Sesetengah data perlu dikekalkan pada tahap global. Sebagai contoh, Senarai induk yang berwibawa di semua lokasi fizikal Syarikat (e.g. Kemudahan perkilangan, lokasi gudang, pejabat jualan) hendaklah dikekalkan di lokasi berpusat.
Masalah teknikal:
Taksonomi enterprise telah dilaksanakan menggunakan pelbagai koleksi tapak. Kami akan senang untuk mencipta senarai lokasi fizikal yang berwibawa dalam senarai WSS tersuai. Kemudian, Bilakah kita perlu mempunyai satu kolum dalam jenis kandungan (atau satu lajur yang ditambah ke senarai atau doc Perpustakaan) yang terkandung di lokasi-lokasi korporat, kami akan membuat satu kolum yang menggunakan "lookup" lansung dan titik ke senarai Induk ini.
Malangnya, lookup datatypes mesti mengakses sumber senarai "tempatan" bermaksud bahawa senarai berwibawa tidak rentang koleksi tapak.
Penyelesaian teknikal:
Melaksanakan jenis data adat baru dilaksanakan berdasarkan SPField dan diwakili sebagai DropDownList di UI ListItems yang mengisi daripada senarai WSS induk.
Kami mencipta koleksi tapak baru dipanggil "http://localhost/EnterpriseData". Tiada, kami mencipta senarai tersuai yang dinamakan "Lokasi-lokasi korporat". Senarai ini hanya menggunakan standard "tajuk" medan kepada mengandungi senarai lokasi korporat yang sebenar.
Salah satu berikut beberapa langkah yang diskret untuk mencipta jenis data adat dalam WSS. Mereka adalah:
- Menentukan kelas yang mewarisi dari SPField (salah satu boleh mewarisi daripada bidang-bidang lain jika diperlukan).
Berikut adalah kod yang:
awam kelas XYZZYCorporateLocationField : SPFieldText
{
awam XYZZYCorporateLocationField
(SPFieldCollection bidang, rentetan typeName, rentetan displayName)
: asas(bidang, typeName, displayName) { }
awam XYZZYCorporateLocationField
(SPFieldCollection bidang, rentetan displayName)
: asas(bidang, displayName) { }
awam mengatasi BaseFieldControl FieldRenderingControl
{
mendapatkan
{
BaseFieldControl kawalan = baru XYZZYCorporateLocationFieldControl();
kawalan. FieldName = ini.InternalName;
kembali kawalan;
} //mendapatkan
} // fieldrenderingcontrol
awam mengatasi rentetan GetValidatedString(objek nilai)
{
jika (ini.Diperlukan || nilai. ToString().Adalah sama dengan(Rentetan.Kosong))
{
membuang baru SPFieldValidationException ("Jabatan tidak diperuntukkan.");
}
kembali asas.GetValidatedString(nilai);
} // getvalidatedstring
} // XYZZYCorporateLocation
- Menentukan kelas lain yang mewarisi daripada kawalan bidang asas, seperti dalam:
awam kelas XYZZYCorporateLocationFieldControl : BaseFieldControl
{
dilindungi DropDownList XYZZYCorporateLocationSelector;
dilindungi mengatasi rentetan DefaultTemplateName
{
mendapatkan
{
kembali "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName
awam mengatasi objek Nilai
{
mendapatkan
{
EnsureChildControls();
kembali ini.XYZZYCorporateLocationSelector.SelectedValue;
} // mendapatkan
set
{
EnsureChildControls();
ini.XYZZYCorporateLocationSelector.SelectedValue = (rentetan)ini.ItemFieldValue;
} // set
} // mengatasi objek nilai
dilindungi mengatasi membatalkan CreateChildControls()
{
jika (ini.Bidang == Batal || ini.ControlMode == SPControlMode.Paparan)
kembali;
asas.CreateChildControls();
ini.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");
jika (ini.XYZZYCorporateLocationSelector == Batal)
membuang baru Pengecualian("RALAT: Tidak dapat memuatkan. Fail ASCX!");
jika (!ini.Page.IsPostBack)
{
menggunakan (SPSite lokasi = baru SPSite("http://localhost/enterprisedata"))
{
menggunakan (SPWeb web = halaman. OpenWeb())
{
SPList currentList = web. Senarai["Lokasi korporat"];
foreach (SPItem XYZZYCorporateLocation dalam currentList.Items)
{
jika (XYZZYCorporateLocation["Tajuk"] == Batal) terus;
rentetan theTitle;
theTitle = XYZZYCorporateLocation["Tajuk"].ToString();
ini.XYZZYCorporateLocationSelector.Items.Add
(baru ListItem(theTitle, theTitle));
} // foreach
} // menggunakan spweb web = site.openweb()
} // menggunakan laman web spsite = baru spsite("http://localhost/enterprisedata")
} // Jika tidak postback yang
} // CreateChildControls
} // XYZZYCorporateLocationFieldControl
Kod di atas pada dasarnya melaksanakan logik untuk menyiapkan DropDownList dengan nilai-nilai daripada senarai tersuai WSS terletak di http://localhost/enterprisedata dan dinamakan "Jabatan korporat".
I kedua-dua kelas yang ditakrif dalam fail tunggal .cs, Ia disusun dan memasukkannya ke dalam GAC dalam (kuat diperlukan, sudah tentu).
-
Melaksanakan kawalan template (.ascx) seperti yang ditunjukkan:
<%@ Kawalan Bahasa= "C#" Mewarisi="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Versi = 12.0.0.0, budaya = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Sentiasa" %>
<%@ Mendaftar Tagprefix= "wssawc" Ruang nama="Microsoft.SharePoint.WebControls" Perhimpunan="Microsoft.SharePoint, Versi = 12.0.0.0, Budaya = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Mendaftar Tagprefix= "SharePoint" Ruang nama="Microsoft.SharePoint.WebControls" Perhimpunan="Microsoft.SharePoint, Versi = 12.0.0.0, Budaya = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" runat= "pelayan">
<Template>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" runat= "pelayan" />
</Template>
</SharePoint:RenderingTemplate>
Di atas akan disimpan ke dalam c:\Program filescommon filesmicrosoft sharedweb server extensions12controltemplates.
- Akhirnya, kami mencipta fail XML untuk menyimpan ke dalam... direktori 12XML. Inilah CAML yang mentakrifkan jenis data Kastam kami dan sebagai contoh saya, kelihatan seperti ini:
<?xml versi="1.0" pengekodan="utf-8" ?>
<FieldTypes>
<FieldType>
<Bidang Nama="TypeName">CorporateLocations</Bidang>
<Bidang Nama="ParentType">Text</Bidang>
<Bidang Nama="TypeDisplayName">Lokasi-lokasi korporat</Bidang>
<Bidang Nama="TypeShortDescription">Semua lokasi XYZZY korporat termasuk kemudahan perkilangan atau lain-lain.</Bidang>
<Bidang Nama="UserCreatable">BENAR</Bidang>
<Bidang Nama="ShowInListCreate">BENAR</Bidang>
<Bidang Nama="ShowInDocumentLibraryCreate">BENAR</Bidang>
<Bidang Nama="ShowInSurveyCreate">BENAR</Bidang>
<Bidang Nama="ShowInColumnTemplateCreate">BENAR</Bidang>
<Bidang Nama="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versi = 1.0.0.0, Budaya = neutral, PublicKeyToken = b0b19e85410990c4</Bidang>
<RenderPattern Nama="DisplayPattern">
<Suis>
<Nyata>
<Ruangan />
</Nyata>
<Kes Nilai=""/>
<Default>
<HTML>
<![CDATA[<rentang gaya = "warna:Merah"><b>]]>
</HTML>
<Ruangan SubColumnNumber="0" HTMLEncode="BENAR"/>
<HTML><![CDATA[</b></span>]]></HTML>
</Default>
</Suis>
</RenderPattern>
</FieldType>
</FieldTypes>
Fail XML ini menambah jenis data adat WSS "Perpustakaan" dan perlawanan terhadap GAC itu mempunyai Dewan Undangan.
Setelah semua bit ini berpindah ke tempat, iisreset pada pelayan dan ia harus semua mula bekerja.
menggunakan System.Web.UI;
menggunakan System.Web.UI.WebControls;
Saya sedang cuba untuk melaksanakan penyelesaian anda. Walau bagaimanapun saya bukan DropDownList, Saya hanya mempunyai pilihan untuk DropDownChoiceList yang. Adakah anda kebetulan tahu bagaimana untuk menambah item ke dalam DropDownChoiceList? Kita akan menggunakan SharePoint 2007 SP1 dan Visual Studio 2005 SP1.