Arkib Bulanan: Ogos 2007

MOSS maju penyesuaian carian — Kes memang penting dalam maju carian XSLT

Saya tidak mengubah maju carian XSLT seringkali, jadi ia seolah-olah seperti saya mendaki bukit kecil setiap kali.

Pelajaran saya yang terbaru ini: Kes perkara apabila rujukan lajur. Dalam carian saya maju, Saya telah ditakrifkan sebagai ruangan ini:

<akar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Ruangan>
<
Ruangan Nama="GafTrainingInvoiceNumber" />
<
Ruangan Nama="GafTrainingInvoiceLocation" />
<
Ruangan Nama="WorkId"/>
<
Ruangan Nama="Pangkat"/>
<
Ruangan Nama="Title"/>
<
Ruangan Nama="Pengarang"/>
<
Ruangan Nama="Saiz"/>
<
Ruangan Nama="Jalan"/>
<
Ruangan Nama="Penerangan"/>
<
Ruangan Nama="Tulis"/>
<
Ruangan Nama="SITENAME"/>
<
Ruangan Nama="CollapsingStatus"/>
<
Ruangan Nama="HitHighlightedSummary"/>
<
Ruangan Nama="HitHighlightedProperties"/>
<
Ruangan Nama="Contentclass"/>
<
Ruangan Nama="IsDocument"/>
<
Ruangan Nama="PictureThumbnailURL"/>
</
Ruangan>
</
akar>

The XLST yang memaparkan nombor invois dan lokasi invois telah:

<p>
Nombor invois latihan: <Pemacu:nilai-of pilih="GafTrainingInvoiceNumber"/>
<
br></br>
Lokasi latihan invois: <Pemacu:nilai-of pilih="GafTrainingInvoiceLocation"/>
</
p>

Walau bagaimanapun, pilih yang mempunyai harta untuk rujukan dalam semua kes yang lebih rendah, seperti dalam:

<p>
Nombor invois latihan: <Pemacu:nilai-of pilih="gaftraininginvoicenumber"/>
<
br></br>
Lokasi latihan invois: <Pemacu:nilai-of pilih="gaftraininginvoicelocation"/>
</
p>


Sehingga saya diperbetulkan yang, hasil carian menunjukkan label tersebut (Dgn kata lain. "Nombor invois latihan") tetapi tiada data.

MOSS: Contoh fungsi - Custom Jenis Data

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:

  1. 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

  1. 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).

  1. 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.

  1. 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.

WSS: Teknik untuk mewujudkan definisi bidang CAML.

Kategori tambahan: CAML

Berikut adalah posting hebat oleh rakan-rakan yang dinamakan "craig" pada teknik untuk mencari definisi CAML untuk jenis kandungan bidang berdasarkan dari definisi sebenar secara langsung dari laman web.

Posting beliau berkata ia semua. Secara ringkas:

  1. Membuat jenis kandungan.
  2. Mengaitkannya dengan senarai.
  3. Membuka senarai dengan SharePoint Designer.
  4. Mengeksport ke "pakej web peribadi".
  5. Menamakan semula kepada. Teksi.
  6. Extract nyata.
  7. Cari jenis kandungan anda dan bersekutu CAML.

WSS: Ringkasan langkah-langkah untuk membolehkan Ciri-ciri berguna / Elemen / etc. IntelliSense di VS 2005

Kategori tambahan: Visual Studio 2005

Untuk membolehkan INTELLISENSE berguna untuk Ciri-ciri, unsur-unsur, lain-lain dalam studio visual 2005:

  1. Mengakses pelayan WSS.
  2. Menavigasi ke "c:\fail-fail program fail biasa microsoft bersama sambungan pelayan web 12 TEMPLATE XML"
  3. Membuka satu lagi windows explorer menunjuk ke: "C:\Program Files Microsoft Visual Studio 8 Xml Skema"
  4. Menyalin fail-fail berikut dari pelayan WSS untuk VS anda 2005 direktori skema:
    1. Wss.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Mulakan semula VS 2005
  6. Tambah fail XML baru untuk projek.
  7. Klik dalam jasad fail XML.
  8. Dalam anak tetingkap sifat-sifat, klik pada "Skim" dan memilih "wss.xsd" dari pilihan. (Adalah tidak perlu untuk memilih xsd lain kerana mereka akan dirujuk daripada wss.xsd).

IntelliSense didayakan kini untuk dokumen itu XML.

Lihat di sini untuk maklumat lanjut mengenai perkara ini dan untuk arahan tentang bagaimana untuk mengaitkan WSS intellisense dengan mana-mana fail XML secara automatik.

Peperiksaan WSS 70-541, Microsoft Windows SharePoint Services 3.0 – Pembangunan Aplikasi

Saya mengambil dan lulus ujian yang dinyatakan di atas pada pagi ini. Saya dapati peperiksaan menjadi sukar dan adil.

Terdapat kekurangan relatif maklumat mengenai peperiksaan ini di web. Saya tidak pasti mengapa.

Saya jelas tidak akan mendapatkan apa-apa butiran tentang peperiksaan saya mengambil, tetapi saya fikir saya boleh menyatakan yang berikut:

  1. Percayalah pautan ini: http://www.microsoft.com/learning/exams/70-541.mspx.

    Ia menyenaraikan apa yang anda perlu tahu untuk lulus peperiksaan dan ia, IMO, sangat tepat.

  2. Link ini juga mencadangkan Dalam Microsoft Windows SharePoint Services 3.0 oleh Ted Pattison & Daniel Larson. Buku ini meliputi hampir semua mata pelajaran yang menangani ujian. Saya mendapati ia menjadi besar di dalam dan dengan sendirinya di luar persediaan peperiksaan mudah. Ia memberikan contoh-contoh yang baik dan benar-benar mendapat saya berfikir tentang beberapa perkara yang baru dan menarik untuk mencuba. Jika anda ingin melangkau bit beberapa dalam buku, hanya rujukan silang TOC buku ini dengan perkara-perkara dalam pautan dari atas.
  3. Tiada apa-apa berdegup sebenar pengalaman. Jika anda mempunyai masa dan minat, mengikuti bersama-sama dengan contoh-contoh di dalam buku dan kemudian eksperimen dengan mereka. Anda akan mempunyai masa yang lebih mudah pada peperiksaan serta benar-benar belajar pengaturcaraan permohonan WSS.

</akhir>Langgan ke blog saya!

MOSS / InfoPath Borang Server (InfoPath 2007) senarai drop-down prestasi

Kategori tambahan: InfoPath

Ringkasan: InfoPath Satu 2007 membentuk dikerahkan ke server MOSS yang menyediakan senarai drop-down vendor terikat kepada senarai MOSS adat. Apabila memilih penjual, peraturan menetapkan nilai lapangan untuk beberapa medan teks seperti nama wakil jualan, alamat, bandar, negeri, zip dan telefon. Prestasi adalah dahsyat. Kami sedar akan hakikat bahawa prestasi menjadi lebih teruk (dalam fesyen linear) bagi setiap bidang tambahan kami mengemaskini begini. Iaitu, Jika kita hanya nama wakil jualan di Kemaskini., Ia mengambil masa [x] Jumlah masa. Jika kami mengemaskini wakil jualan, address1, address2, bandar, negeri, zip, Ia mengambil masa 10 lagi times.

Penyelesaian: Menulis perkhidmatan web (Contoh kod boleh ditemui di sini) yang diluluskan atas nama penjual dan kembali kembali butiran Penjual. Kemudian, Peruntukkan bidang begini. Walaupun ini nampaknya terlalu perlahan, Jadilah ada perbezaan petanda prestasi apabila kami ditugaskan 1 bidang berbanding 8 bidang. Sebagai bonus tambahan, pengguna mendapat yang sejuk "menghubungi pelayan" Kitu kesan sementara mereka menunggu untuk borang untuk memohon dan mengambil keputusan Perkhidmatan.

MOSS: Pengecualian berlaku. (Kecualian dari HRESULT: 0x80020009 (DISP_E_EXCEPTION))

UPDATE: Kami tidak pernah menentukan punca masalah ini dan ia tidak pernah timbul lagi.

Kami notis semasa pelaksanaan tapak pembangunan yang tiba-tiba, dua pengguna tidak dapat untuk mengakses koleksi tapak. Mereka akaun boleh mengesahkan ke laman utama, tetapi apabila cuba untuk mengakses koleksi tapak tertentu, mereka hanya mendapat skrin kosong. Tiada ralat yang dipaparkan, hanya halaman kosong putih.

Kami log masuk sebagai admin koleksi tapak dan cuba untuk menambah satu dari orang-orang pengguna sebagai admin laman dan masa ini, apabila menekan "OK", kita akan mendapat mesej ini:

Pengecualian berlaku. (Kecualian dari HRESULT: 0x80020009 (DISP_E_EXCEPTION))

Kami menghabiskan masa beberapa penyelidikan ini dan malangnya, tidak datang dengan apa-apa yang berguna. Terdapat beberapa mesej dalam log diagnostik, tetapi ia adalah sukar untuk betul-betul mengaitkan mereka dengan isu ini.

Pada akhir, kita memotong koleksi tapak dan semula mencipta dan yang diselesaikan.

Jika saya memikirkan apa yang menyebabkan ini pada masa akan datang, Saya akan mengemaskini post ini.