Arkib Kategori: SharePoint Pembangunan

Penjelasan Mudah: “Nilai tidak termasuk dalam julat yang dijangka.”

UPDATE: Poster tanpa nama untuk meninggalkan komen yang besar tentang nama-nama dalaman. Pastikan anda membacanya.

Apabila bekerja dengan penerima acara dan kod lain yang rujukan SharePoint senarai barangan melalui model objek, Saya sering membuat kesilapan yang menjana kesilapan ini di runtime:

Ralat memuatkan dan menjalankan acara penerima Conchango.xyzzyEventReceiver dalam xyzzy, Versi = 1.0.0.0, Budaya = neutral, PublicKeyToken = 0dc50a750396c3ac. Maklumat tambahan adalah di bawah. : Nilai tidak jatuh dalam lingkungan jangkaan.

Saya rasa ini adalah satu ralat agak generik yang berpotensi disebabkan banyak cara yang berbeza. Walau bagaimanapun, Satu penjelasan yang mudah adalah bahawa saya sedang rujukan bidang yang salah. Jika nama bidang "Tarikh matang", Saya mesti sebutan seperti ini dalam satu acara penerima:

properties.ListItem["Tarikh matang"]

Apabila saya misspell atau menggunakan kes salah apabila rujukan bidang, SharePoint menjana di atas disebut runtime ralat. Sebagai contoh, ini adalah salah:

properties.ListItem["tarikh matang"]

</akhir>

Langgan ke blog saya.

Technorati Tags:

Pantas & Mudah: Membuat Folder dan Berikan Jenis Kandungan (Atau, Ada KPI anda dan Makan Mereka Terlalu)

Dalam usaha untuk bekerja di sekitar masalah KPI Saya menulis tentang di sini, Saya melakukan beberapa percubaan dan menemui kerja KPI itu terhadap folder dengan meta data dengan cara yang sama bahawa mereka menyebelahi dokumen atau senarai item. Saya membuktikan ia keluar dengan mencipta sejenis kandungan yang baru berdasarkan jenis kandungan folder dan kemudian ditambah beberapa bidang. Saya telah mencipta beberapa penunjuk dan membuktikan kepada diri saya sendiri bahawa KPI berfungsi seperti yang dijangka. Ini merupakan berita yang alu-aluan. Memang tidak sempurna, kerana yang turun gerudi yang anda terima daripada KPI terhadap folder adalah tidak betul-betul apa yang anda mahu. Ini tidak terlalu banyak kelemahan di dalam kes saya kerana 1) pengguna akhir tidak tahu apa-apa yang lebih baik dan 2) gerudi-down pergi ke folder. Mereka klik nama folder dan mereka berada di perkara. Ia adalah dua klik sekaligus dan bukannya satu, yang tidak menjadi akhir dunia.

Ini mengalir baik dengan pekerjaan yang saya lakukan. Saya saya mencipta folder untuk tiap-tiap dokumen yang mendapat upload. Ini dilakukan melalui penerima acara untuk. Hasilnya, ia adalah sekeping kek untuk menjaga induk folder data Meta yang selari dengan data meta berasaskan KPI dari fail itu sendiri kerana sistem paip yang ada telah diperuntukkan. This allows me to have my KPI’s and eat them too πŸ™‚

Aku buat kali terakhir acara penerima untuk menambah folder dan kemudian, setkan jenis kandungan folder ini baru untuk saya jenis kandungan mesra KPI adat. Ini sedikit kod melakukan silap mata:

 SPFolderCollection srcFolders = targetWeb.GetFolder("Dokumen-dokumen").Subfolder;
  SPFolder addedFolder = srcFolders.Add(properties.ListItem.ID.ToString());
  SPContentTypeId kpiCT = baru SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["Kandungan jenis ID"] = KpiCT;
  addedFolder.Item.Update();

Untuk mencari Kandungan sebenar Jenis ID, Saya diakses bahawa jenis kandungan melalui penetapan tapak dan copy / paste dari URL seperti yang ditunjukkan:

imej

</akhir>

Langgan ke blog saya!

Technorati Tags: ,

Pantas dan Mudah: Dapatkan SPFolder daripada SPListItem dalam sesuatu Penerima Acara

Saya tidak suka mengakuinya, tetapi saya bergelut dengan semua ini satu hari. Penerima sekiranya saya perlu untuk mengemaskini bidang folder ibunya. Ini sedikit menunjukkan bagaimana untuk melakukannya:

swasta membatalkan UpdateParentFolder(SPItemEventProperties hartanah)
{

SPFolder thisItemFolder = properties.ListItem.File.ParentFolder;
thisItemFolder.Item["Status kelulusan ZZ"] = "Berita baik, semua orang!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

Dalam kes ini,, Saya bekerja dengan sebuah perpustakaan dokumen dan sifat-sifat yang datang dari acara ItemAdded.

Silap mata tersebut bahawa anda tidak boleh mendapatkan SPFolder item secara langsung dari ruang itu sendiri (Dgn kata lain. properties.ListItem.Folder adalah batal). Sebaliknya, pergi ke fail yang berkaitan item senarai dan mendapatkan folder Fail ini.

</akhir>

Langgan ke blog saya!

Technorati Tags:

Namun Satu lagi acara Penerima Debug Trick

Saya yakin saya bukan orang pertama yang datang dengan ini. Walau bagaimanapun, Saya belum melihat sesiapa yang menerbitkan trick seperti ini sejak saya mula memberi perhatian yang rapat kepada masyarakat Julai lepas. Jadi, Saya fikir saya akan pos ini hujung debug cepat dan mudah.

Saya bekerja di penerima acara yang mula menjana kesilapan ini dalam 12 sarang:

Ralat memuatkan dan menjalankan acara penerima Conchango.xyzzyEventReceiver dalam xyzzy, Versi = 1.0.0.0, Budaya = neutral, PublicKeyToken = blahbalhbalh. Maklumat tambahan adalah di bawah. : Rujukan objek tidak disetkan kepada contoh objek.

Saya tidak tahu di mana saya telah memperkenalkan bug ini kerana saya telah melakukan perkara-perkara yang terlalu banyak dalam satu kitaran kod/menggunakan/ujian saya.

Saya cuba penyelesaian ini untuk mendapatkan pdb saya di sana dengan harapan bahawa ini SharePoint 12 sarang akan menunjukkan kesan tindanan, tetapi nasib tidak. Saya tidak tahu jika ia boleh dilakukan dan jika seseorang yang melakukan, sila beritahu saya πŸ™‚

Saya tahu ia adalah mungkin untuk menulis mesej log anda sendiri kepada 12 sarang. Terus terang, Saya mahu sesuatu yang kurang menakutkan dan lebih cepat untuk melaksanakan.

Ia berlaku kepada saya bahawa saya sekurang-kurangnya boleh mendapatkan beberapa maklumat asas mengesan dengan menangkap dan membaling semula pengecualian generik seperti ini:

  cuba {
    UpdateEditionDate(hartanah);
  }
  menangkap (Pengecualian dan)
  {
    membuang baru Pengecualian("Dispatcher, UpdateEditionDate(): Pengecualian: [" + e.ToString() + "].");
  }

Ini muncul dalam 12 sarang thusly:

Ralat memuatkan dan menjalankan acara penerima Conchango.xyzzyEventReceiver dalam xyzzy, Versi = 1.0.0.0, Budaya = neutral, PublicKeyToken = blahblahblah. Maklumat tambahan adalah di bawah. : Penghantar, UpdateEditionDate(): Pengecualian: [System.NullReferenceException: Rujukan objek tidak disetkan kepada contoh objek. pada Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(Hartanah SPItemEventProperties) pada Conchango.xyzzyManagementEventReceiver.Dispatcher(Hartanah SPItemEventProperties, EventDescription String)].

Yang memberikan saya semua butiran yang saya perlu untuk mengesan masalah yang tertentu dan saya mengharapkan untuk menggunakannya banyak masa hadapan.

</akhir>

Langgan ke blog saya!

Penyelesaian: SPQuery Tidak Carian Folder

Ini adalah melaksanakan minggu lalu untuk "berubah" penyelesaian untuk pelanggan yang menggunakan BDC dan SPQuery dan berlari ke dalam beberapa kesukaran yang menggunakan SPQuery terhadap sebuah perpustakaan dokumen yang mengandungi folder. Bottom line: Peruntukkan "recursive" kepada sifat pandangan daripada pertanyaan.

Senario Saya:

  • Pada Isnin, Saya memuat naik dokumen dan membekalkan beberapa data meta.
  • Minggu berikutnya, Saya upload dokumen baru. Banyak dokumen baru ini meta data berdasarkan dokumen yang aku upload pada hari Isnin (yang kita panggil "dokumen induk").
  • Kami telah mencipta satu bahagian depan perkhidmatan web yang menyediakan antara muka yang mesra BDC ke senarai supaya pengguna boleh mengesan bahawa dokumen Isnin melalui carian tajuk.
  • Lajur data BDC menyediakan antara muka mesra pengguna yang. (Ini adalah sebahagian daripada usaha saya dengan menggunakan BDC untuk ruangan Lookup lebih mesra).

Akhir BDC façade perkhidmatan menggunakan pertanyaan seperti ini untuk melakukan lookup yang:

 // Menggunakan alat U2U untuk membantu dalam menjana pertanyaan ini CAML.
      oQuery.Query =
        "<Jika>";

      jika (titleFilter.Length > 0)
        oQuery.Query   =
          "  <Dan>";

      oQuery.Query   =
        "    <Dan>" +
        "      <GEQ>" +
        "        <Nama FieldRef =  "DocumentId" />" +
        "        <Nilai jenis =  "Text">" + MinID + "</Nilai>" +
        "      </GEQ>" +
        "      <Leq>" +
        "        <Nama FieldRef =  "DocumentId" />" +
        "        <Nilai jenis =  "Text">" + maxId + "</Nilai>" +
        "      </Leq>" +
        "    </Dan>";

      jika (titleFilter.Length > 0)
        oQuery.Query   =
          "    <Mengandungi>" +
          "      <Nama FieldRef =  "Title" />" +
          "      <Nilai jenis =  "Text">" + titleFilter + "</Nilai>" +
          "    </Mengandungi>" +
          "  </Dan>";
      oQuery.Query   =
        "</Jika>";

Pada peringkat awal pembangunan, ini bekerja hebat. Walau bagaimanapun, kami memperkenalkan folder dalam direktori untuk menyelesaikan beberapa masalah dan tiba-tiba, pengutip BDC saya tidak akan mengembalikan sebarang keputusan. Saya dikesan ini kepada hakikat bahawa SPQuery itu tidak akan kembali sebarang keputusan. Kita menggunakan folder terutamanya untuk membenarkan beberapa fail dengan nama yang sama hendak dimuatkan tetapi dengan data meta yang berlainan. Bilakah fail yang dimuat naik, kita membuat folder berdasarkan ID item senarai dan kemudian memindahkan fail di sana (Saya menulis tentang itu di sini; kami telah keputusan bercampur-campur dengan pendekatan ini tetapi pada keseluruhannya, ia berfungsi dengan baik). Pengguna tidak mengambil berat tentang folder dan malah, tidak benar-benar memahami bahawa terdapat sebarang folder. Kami telah mengkonfigurasi semua pandangan mengenai Perpustakaan untuk Tunjuk butiran tanpa mengambil kira folder.

Saya terkena masalah ini dua kali sebagai pelaksanaan teknikal berkembang dan diselesaikan ia berbeza setiap kali. Kali pertama, Saya tidak menggunakan operator mengandungi pertanyaan. Tanpa operator mengandungi, Saya telah dapat menyelesaikan masalah ini dengan menyatakan pandangan di atas contructor yang SPQuery. Alih-alih menggunakan pengeluar lalai:

SPList oList = web.Lists["Dokumen-dokumen"];

SPQuery oQuery = baru SPQuery();

Saya bukannya menggunakan pembina yang dinyatakan pandangan:

SPList oList = web.Lists["Dokumen-dokumen"];

SPQuery oQuery = baru SPQuery(oList.Views["Semua dokumen"]);

Yang menyelesaikan masalah dan saya mula untuk mendapatkan keputusan yang saya.

Saya kemudian menambah operator mengandungi ke dalam campuran dan ia pecah lagi. Ternyata bahawa operator mengandungi, setakat yang saya boleh memberitahu, tidak berfungsi dengan pandangan cara yang sama seperti GEQ yang lebih mudah / Pengendali LEQ. Saya melakukan beberapa pencarian dan belajar bahawa pertanyaan yang ViewAttributes hendaklah disetkan ke "Recursive", seperti dalam:

oQuery.ViewAttributes = "Skop = "Recursive"";

Yang diselesaikan masalah yang mengandungi. Malah, ini juga menyelesaikan masalah carian asal saya dan jika saya telah dinyatakan sifat rekursi kali pertama, Saya tidak akan menghadapi masalah lagi.

Hakikat bahawa SPQuery berasaskan pandangan bekerja untuk sesetengah pengendali (GEQ/LEQ) dan bukan orang lain (MENGANDUNGI), ditambah pula dengan hakikat bahawa KPI seolah-olah tidak berfungsi langsung dengan perpustakaan dokumen folder yang mengandungi membawa saya untuk mempercayai SPQuery yang mempunyai beberapa isu-isu ortogon.

Terima kasih khas:

</akhir>

Langgan ke blog saya!

MOSS KPI bug? Petunjuk Senarai Terikat kepada Perpustakaan Dokumen Dengan Folder

UPDATE 02/29/08: Saya menyelesaikan masalah ini dengan mencipta folder dan kemudian peruntukkan jenis kandungan ke folder yang mempunyai data meta yang saya perlukan untuk KPIs. Saya menyifatkan bahawa dalam terperinci sedikit lebih lanjut di sini.

Kami telah melaksanakan satu penyelesaian teknikal yang di mana pengguna memuat naik dokumen ke dalam pustaka dokumen. Penerima acara untuk mencipta direktori dan memindahkan fail ke direktori (menggunakan teknik yang sama dengan apa yang saya menulis tentang di sini). Kami telah berjaya dilayari sekitar isu-isu yang berpotensi yang disebabkan oleh peristiwa penerima yang menukar nama fail yang dimuat naik (terutamanya kerana pengguna sekali-kali memulakan dokumen mereka dengan klik pada "New" tetapi sebaliknya mewujudkan docs tempatan dan kemudian memuat naik mereka).

Data meta untuk dokumen-dokumen ini termasuk sebuah Ya/tiada ruangan laman web yang dipanggil "penting" dan satu lagi lokasi lajur "Status". Kita perlu memenuhi keperluan perniagaan yang menunjukkan peratusan "penting" dokumen status yang masih "Belum selesai".

Ini biasanya mudah untuk dilakukan dan saya menyifatkan sesuatu yang sangat banyak seperti ini di Beagle SharePoint dengan banyak tembakan skrin jika anda berminat.

Secara ringkas, Saya berikut:

  • Mencipta satu paparan pada pustaka doc yang dipanggil "Belum selesai".
  • Konfigurasi pandangan mengabaikan struktur folder.
  • Buat Senarai KPI.
  • Mewujudkan petunjuk dalam senarai yang menghala ke doc lib dan yang "belum selesai" melihat.

Ini semata-mata tidak berfungsi. KPI ini menunjukkan sasaran saya (e.g. lima dokumen segera) tetapi sentiasa menunjukkan bilangan sebenar dokumen segera sebagai sifar. Secara paradoks, jika anda menggerudi ke butiran, Ia menunjukkan lima dokumen penting di dalam senarai. Saya mencipta senario yang sangat mudah dengan dua dokumen, satu folder dan satu tidak. Berikut adalah gambar skrin:

imej

Pukulan skrin di atas jelas menunjukkan terdapat dua dokumen dalam pandangan tetapi "nilai" merupakan salah satu. "CamlSchema" dengan dokumen kosong Id berada dalam folder akar dan lain-lain berada dalam folder yang bernama "84".

Nampaknya kepada saya bahawa walaupun anda nyatakan pandangan, pencapaian prestasi kerja tidak menghormati dengan "Tunjukkan semua item tanpa folder" menetapkan dan bukannya, batasan sendiri ke folder akar.

Jika saya salah, sila turunkan saya garis atau meninggalkan komen.

</akhir>

Langgan ke blog saya!

Technorati Tags:

Penyelesaian kepada Masalah: “FileNotFoundException” Dengan Ciri-ciri Penerima Saya.

Saya bekerja di ciri minggu lepas yang akan menambah beberapa acara penerima untuk contoh senarai khusus. (Saya blog sedikit tentang senarai penerima di sini).

Menggunakan baris arahan, Saya boleh memasang ciri dengan tiada kesilapan (tetapi lihat di bawah untuk kesilapan yang tersembunyi). Bilakah saya cuba untuk menggunakan ciri-ciri di laman web ini, MOSS diadukan "FileNotFoundException" kesilapan. Entri blog ini menerangkan bagaimana saya menyelesaikan.

Ini adalah kesalahan yang MOSS menunjukkan saya di pelayar web:

Ciri-ciri ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ tidak dapat dipasang kerana beban sekiranya penerima perhimpunan "xyzzyFeatureReceiver_0" gagal: System.IO.FileNotFoundException: Tidak dapat memuatkan fail atau perhimpunan ' xyzzyFeatureReceiver_0’ atau salah satu daripada kebergantungan yang. Sistem tidak dapat mencari fail yang ditentukan.
Nama fail: ' xyzzyFeatureReceiver_0’
pada System.Reflection.Assembly.nLoad(Nama fail AssemblyName, Rentetan pangkalan kod, Keterangan assemblySecurity, Perhimpunan locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
pada System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Keterangan assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
pada System.Reflection.Assembly.InternalLoad(Tali assemblyString, Keterangan assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
pada System.Reflection.Assembly.Load(Tali assemblyString)
pada Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Perhimpunan mengikat pembalakan dipadam OFF.
Bagi membolehkan perhimpunan dilema kegagalan pembalakan, set nilai daftaran [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) kepada 1.
Nota: Terdapat beberapa hukuman prestasi yang dikaitkan dengan perhimpunan dilema kegagalan pembalakan.
Untuk mematikan ciri ini, mengalih keluar nilai daftaran [HKLMSoftwareMicrosoftFusion!EnableLog].

Cari silap masalah dengan Windows SharePoint Services.

Saya tahu bagaimana untuk sengaja menyebabkan kesalahan itu: Jangan pasang Dewan di GAC dalam. Tetapi, ianya pada GAC dalam. Saya biasanya memasang perhimpunan ke GAC tersebut dengan menyeret mereka ke dalam p:\folder windowsassembly menggunakan windows explorer. Saya tidak pernah berasa 100% selesa melakukan perkara itu kerana saya selalu fikir gacutil itu wujud atas sebab-sebab … Jadi saya cuba yang. Ia dibuat tidak ada perbezaan.

Saya mencari di internet dan mendapati catatan ini: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

Poster yang berlaku untuk menggunakan bit akar sama kod (daripada buku dalam WSS daripada senarai ini) Jadi itu adalah tanda-tanda harapan. Walau bagaimanapun, cadangan untuk menghias Dewan dengan satu [Perhimpunan: ] arahan tidak masuk akal kepada saya. Saya cuba juga dan saya adalah betul. Ia dibuat tidak ada perbezaan.

Kemudian saya menyedari bahawa saya kelas definisi adalah tidak awam. Aku membuat awam dan yang membuat perbezaan tiada.

Seterusnya, Saya pergi ke masalah membolehkan "perhimpunan dilema kegagalan log" (berikutan arahan yang tepat dan berguna disediakan) dan ini adalah di mana perkara yang mula dapat menarik. Log itu menunjukkan saya runtime sedang mencari di mana-mana pelayan itu untuk perhimpunan saya. Walaupun kelihatan untuk mencari untuknya dalam perubatan saya Kabinet. Tetapi … Ia tidak mencari untuknya di GAC dalam.

I memakai jaket musim sejuk saya dan pergi mencari di internet sekali lagi dan mendapati bahawa seseorang yang mempunyai masalah ini terlalu. Perbincangan panjang dalam posting peters off ke dalam apa-apa dan saya tidak dapat mencari penyelesaian.

Saya masuk kedalam Dewan saya salah satu tempat log mendakwa ia sedang mencari dan saya membuat sedikit lebih banyak kemajuan. Saya berasa ganjaran dengan ralat yang baru dalam pelayar apabila saya cuba untuk mengaktifkan ciri-ciri:

Gagal untuk mencipta objek penerima mempunyai pemasangan "xyzzyFeatureReceiver_0", Taip "Conchango.xyzzyFeatureReceiver" bagi ciri-ciri b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Nilai tidak boleh batal.
Nama parameter: Jenis
pada System.Activator.CreateInstance(Jenis jenis, Boolean nonPublic)
pada System.Activator.CreateInstance(Jenis jenis)
pada Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Cari silap masalah dengan Windows SharePoint Services.

Masa untuk satu perjalanan terakhir ke Internet dalam!

Buat masa ini saya mengetahui, cukup predictably, MOSS isu ralat ini kerana perhimpunan tidak di GAC.

Saya ingin mendapatkan sesuatu yang positif ini dan cuba untuk merasa sedikit bangga bahawa saya telah dicipta dalam Membawa daripada perhimpunan MSIL, tetapi ia tidak berfungsi. Saya hanya dataran marah. Saya mendapati diri saya muttering "ayam atau telur" di bawah nafas saya.

Saya akhirnya membuat keputusan untuk punt. Saya mencipta sebuah projek baru dan copy/paste kod dari projek incredible-cloaked-from-the-GAC-assembly-kerja ke atas projek ini baru. (Saya mencari bendera membina sesuatu seperti "Sembunyikan dari perhimpunan yang mengikat jika dipasang di GAC yang dipanggil" tetapi tidak dapat mencari salah satu).

Aku memasang ciri-ciri dan mengaktifkannya dan … Ia berfungsi! Jadi, selepas semua itu, Saya terpaksa pada dasarnya ' but semula’ Projek saya. Ini adalah satu lagi sebab kenapa saya benci komputer.

Saya pula belajar sesuatu yang berguna daripada ini. Saya telah memasang ciri-ciri yang menggunakan baris arahan stsadm sepanjang hari dan telah menggunakan yang "-memaksa" pilihan daripada tabiat. Sebab-sebab tertentu, Saya tidak menggunakan - pasukan pilihan apabila saya dipasang projek baru. Kali ini, Saya benar-benar, benar-benar lupa untuk menyalin projek ini baru perhimpunan ke GAC dalam. Hasilnya, Saya menerima bahawa "FielNotFoundException" kesilapan. Kali ini, Saya mendapatkannya dari stsadm, bukan ketika saya cuba untuk mengaktifkan ciri tersebut melalui pelayar web. Jadi, -Tentera sebenarnya memainkan dua watak. Ia membolehkan anda untuk memasang semula ciri-ciri yang sedia ada. Ia juga membolehkan anda untuk memasang ciri kereta yang tidak dapat bekerja di runtime dengan ralat. Ia mungkin berkata sebanyak mungkin dalam bantuan di suatu tempat tetapi saya tidak pernah melihat.

</akhir>

Pantas & Mudah: Namakan semula Fail naik Menggunakan SharePoint Objek Model Via satu Penerima Acara

UPDATE: Ini kerja-kerja tetapi terdapat limitasi penting yang dihuraikan dalam komen. Ini mungkin berguna dalam sesetengah cirumstances.

UPDATE 2: Dalam projek semasa saya, pengguna sentiasa muat naik dokumen. Hasilnya, Saya tidak menghadapi masalah di mana MS Word berjalan dan berfikir bahawa fail yang dinamakan di atasnya. Saya pula menghadapi masalah, "fail telah diubahsuai oleh orang lain" dan diselesaikan ini melalui jenis bendera semafor mudah. Pengguna perlu menukar bidang data meta dari nilai lalai kepada sesuatu yang lain. Itemupdated yang() penerima mencari nilai yang sah ada sebelum benar-benar melaksanakan menamakan semula dan sejak itu, Saya tidak mempunyai sebarang masalah. Perbatuan anda mungkin berbeza-beza.

Saya mempunyai pelanggan keperluan untuk menukar nama fail yang dimuat naik ke sebuah perpustakaan dokumen tertentu untuk mematuhi konvensyen penamaan yang tertentu. API tidak menyediakan sebuah "Namakan semula()" kaedah. Sebaliknya, kita gunakan "MoveTo(…)". Berikut adalah sedikit rendah kod untuk mencapai matlamat ini:

 awam mengatasi membatalkan ItemAdded(SPItemEventProperties hartanah)
        {
            SPFile f = properties.ListItem.File;

            f.MoveTo(properties.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Bit hanya rumit adalah sebagai "hartanah. ListItem.ParentList.RootFolder.Url". MoveTo yang() Kaedah memerlukan URL. Yang mashed rentetan tempat saya ke folder akar Perpustakaan dokumen saya semasa. Ini membolehkan saya untuk mengelakkan mana-mana coding yang keras pada saya sekiranya penerima.

Ini adalah versi yang lebih berguna yang melakukan perkara yang sama, tetapi menguntukkan nama fail itu kepada "Tajuk":

 awam mengatasi membatalkan ItemAdded(SPItemEventProperties hartanah)
        {
            DisableEventFiring();

            // Berikan tajuk item ini untuk nama fail sendiri.
 // NOTA: Tugasan ini mesti berlaku sebelum kita mengubah suai fail itu sendiri.
 // Panggilan update() pada SPFile nampaknya membatalkan hartanah di
 // erti kata lain.  Pengemaskinian untuk "tajuk" gagal sehingga perubahan yang (dan kemas kini() memanggil)
 // dipindahkan di hadapan perubahan kepada nama fail.
            properties.ListItem["Tajuk"] = Properties.ListItem.File.Name;

            properties.ListItem.Update();

            SPFile f = properties.ListItem.File;

            // Dapatkan lanjutan fail.  Kita perlu yang kemudiannya.
 rentetan spfileExt = baru Fileinfo(f.Name).Tambahan;

            // Menamakan semula fail ke ID item senarai dan menggunakan sambungan fail untuk menyimpan
 // bahawa sebahagian daripada ia tidak terjejas.
            f.MoveTo(properties.ListItem.ParentList.RootFolder.Url +
                "/" + properties.ListItem["ID"] + spfileExt);

            // Melakukan langkah.
            f.Update();

            EnableEventFiring();
        }

Tip Pantas: Kandungan Pertanyaan Web Bahagian, Lookup Nilai Column dan XSL

Saya mempunyai nama kolum dalam sejenis kandungan yang dinamakan "Lokasi hartanah".

Kolum tersebut adalah jenis "carian".

Saya telah diubahsuai <CommonViewFields> dan ItemStyle.xsl untuk menunjukkan ruang.

Seorang yang mudah <Pemacu:nilai-of pilih =…> mengembalikan semula nilai dalaman yang termasuk kedudukan data ordinal, seperti:

1;#Miami

Untuk mendapatkan nilai yang mesra, menggunakan Pemacu subrentetan-selepas, seperti yang ditunjukkan:

<Pemacu:nilai daripada pilih = "substring-selepas(@ Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></Pemacu:nilai-of>

Gunakan teknik ini apabila anda bekerja dengan nilai-nilai lookup dalam jelmaan XSL dan perlu mendapatkan nilai yang mesra.

<akhir />

Technorati Tags: , ,

Pantas dan Mudah: Menentukan Nama Ruangan Dalaman a Ruangan Site

UPDATE: Jeremy Thake telah blog tentang perkara ini dan meletakkan beberapa kod untuk aplikasi konsol yang menunjukkan nama dalaman.

Saya telah cuba untuk mendapatkan sebahagian pertanyaan kandungan web untuk memaparkan tarikh dari tugas dan kerana label skrin "Tarikh matang", Saya mengandaikan bahawa nama ruang untuk digunakan dalam <CommonViewFields> adalah "Due_x0020_Date".

Salah!

Nama kolum sebenar dalam kes ini adalah "DueDate".

Bagaimana saya merasa? Saya kembali membaca Heather Blog Salomo untuk mengubah suai CQWP untuk menunjukkan tambahan lajur data. Dia menerangkan proses ini pada langkah #13. Percaya itu. Memang betul. Sekurang-kurangnya, Ia adalah betul bagi saya. Saya pula tidak percaya pada mulanya untuk kolum lain dengan nama yang lebih panjang.

Saya katakan "percaya ia" kerana saya tidak mempercayai ia dan sia-sia mungkin dua jam batas kepala saya terhadap dinding berhampiran.. Selepas saya memutuskan "DueDate" Nama, Saya mahu menambah bidang lain untuk <CommonViewFields>. Menggunakan teknik Nabi Sulaiman, Saya mendapat satu lajur nama seperti "XYZ_x0020_Project_x0020_Due_x00".

Saya berfikir kepada diri saya sendiri, yang jelas adalah nama dipendekkan. Saya pergi hadapan dan un dipendekkan dengan kejayaan tidak. Saya akhirnya menggunakan nama seolah-olah dipendekkan dan ia bekerja.

Bonus hujung: Apabila saya bekerja dengan CQWP yang, jika saya menambah nama dalaman yang baik untuk <CommonViewFields>, CQWP yang akan beritahu saya bahawa pertanyaan kembali tiada keputusan. Tetapi, jika saya menambah jenis data kepada nama bidang, Ia akan kembali hasil. Menambah data jenis sebenarnya masked masalah kerana saya rujukan bidang tidak wujud. Saya dapat menambah, tetapi apabila saya cuba untuk memaparkan nilai, Saya sentiasa akan mendapat skrin kosong.

Ini tidak menutup kesilapan:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Ini topeng kesilapan:

<CommonViewFields>Due_x0020_Date,DateTime;</CommonViewfields>

</akhir>