Arsip Kategori: MOSS

MOSS advanced Cari kustomisasi — Kasus masalah dalam pencarian lanjutan XSLT

Saya tidak mengubah pencarian lanjutan XSLT sangat sering, Jadi sepertinya aku sedang mendaki bukit-bukit kecil setiap kali.

Pelajaran terbaru ini: Kasus penting ketika referensi kolom. Dalam pencarian lanjutan, Saya memiliki kolom yang didefinisikan seperti ini:

<akar xmlns:XSI="http://www.w3.org/2001/XMLSchema-instance">
<
Kolom>
<
Kolom Nama="GafTrainingInvoiceNumber" />
<
Kolom Nama="GafTrainingInvoiceLocation" />
<
Kolom Nama="WorkId"/>
<
Kolom Nama="Peringkat"/>
<
Kolom Nama="Judul"/>
<
Kolom Nama="Penulis"/>
<
Kolom Nama="Ukuran"/>
<
Kolom Nama="Jalan"/>
<
Kolom Nama="Deskripsi"/>
<
Kolom Nama="Menulis"/>
<
Kolom Nama="SiteName"/>
<
Kolom Nama="CollapsingStatus"/>
<
Kolom Nama="HitHighlightedSummary"/>
<
Kolom Nama="HitHighlightedProperties"/>
<
Kolom Nama="ContentClass"/>
<
Kolom Nama="IsDocument"/>
<
Kolom Nama="PictureThumbnailURL"/>
</
Kolom>
</
akar>

XLST yang menampilkan lokasi nomor dan faktur faktur yang telah:

<p>
Pelatihan faktur jumlah: <Extensible Stylesheet Language:nilai dari Pilih="GafTrainingInvoiceNumber"/>
<
br></br>
Lokasi faktur pelatihan: <Extensible Stylesheet Language:nilai dari Pilih="GafTrainingInvoiceLocation"/>
</
p>

Namun, Pilih harus referensi properti dalam semua huruf, seperti dalam:

<p>
Pelatihan faktur jumlah: <Extensible Stylesheet Language:nilai dari Pilih="gaftraininginvoicenumber"/>
<
br></br>
Lokasi faktur pelatihan: <Extensible Stylesheet Language:nilai dari Pilih="gaftraininginvoicelocation"/>
</
p>


Sampai aku mengoreksi yang, hasil pencarian menunjukkan label (yaitu. "Pelatihan faktur nomor") tetapi tidak ada data.

MOSS / Bentuk InfoPath Server (InfoPath 2007) daftar drop-down kinerja

Kategori tambahan: InfoPath

Ringkasan: InfoPath 2007 Formulir dikirim ke MOSS server menyediakan daftar drop-down vendor yang terikat pada daftar MOSS kustom. Setelah memilih vendor, Peraturan menetapkan nilai bidang segenggam text Field seperti nama perwakilan penjualan, Alamat, Kota, negara, Zip dan telepon. Kinerja mengerikan. Kita perhatikan bahwa kinerja semakin buruk (secara non-linear) untuk setiap kolom tambahan kami memperbarui cara ini. Yaitu, Jika kita hanya memperbarui nama perwakilan penjualan, dibutuhkan [x] jumlah waktu. Jika kami memperbarui perwakilan penjualan, address1, address2, Kota, negara, Zip, dibutuhkan 10 kali lebih lama.

Solusi: Menulis layanan web (contoh kode dapat ditemukan Sini) yang disahkan dalam nama vendor dan kembali kembali rincian Penjual. Kemudian, menetapkan bidang cara ini. Walaupun ini tampak terlalu lambat, ada tidak ada perbedaan kinerja discernable ketika kami ditetapkan 1 bidang versus 8 bidang. Sebagai bonus tambahan, pengguna mendapatkan dingin "menghubungi server" Cylon Efek sementara mereka menunggu untuk formulir untuk memohon dan mengkonsumsi hasil Layanan.

MOSS: Pengecualian terjadi. (Pengecualian dari HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

UPDATE: Kami tidak pernah ditentukan akar penyebab masalah ini dan itu tidak pernah permukaan lagi.

Kita perhatikan selama pelaksanaan pengembangan situs yang tiba-tiba, dua pengguna tidak dapat mengakses situs koleksi. Account tersebut dapat mengotentikasi ke situs utama, Tapi ketika mencoba untuk mengakses koleksi situs tertentu, mereka hanya mendapatkan layar kosong. Tidak ada kesalahan yang ditampilkan, hanya sebuah halaman kosong putih.

Kita login sebagai admin koleksi situs dan mencoba untuk menambahkan satu dari para pengguna sebagai admin situs dan saat ini, Setelah menekan "OK", kita mendapatkan pesan ini:

Pengecualian terjadi. (Pengecualian dari HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Kami menghabiskan beberapa waktu untuk meneliti ini dan sayangnya, tidak datang dengan sesuatu yang berguna. Ada beberapa pesan dalam log diagnostik, tetapi sulit untuk persis berkorelasi dengan masalah ini.

Di ujung, kita menghapus situs koleksi dan kembali itu dan yang dipecahkan itu.

Jika saya mencari tahu apa yang menyebabkan ini di depan, Saya akan update posting ini.

MOSS: Iterasi melalui daftar kustom dan kembali data tertapis ke InfoPath

Bisnis skenario:

Menyediakan metode yang memungkinkan pengguna untuk memasukkan akurat pembelian requisitions cepat.

Masalah bisnis:

Klien yang melakukan bisnis dengan beberapa ratus vendor.

Vendor adalah "tipe" spesifik. Ini berarti bahwa vendor menjual peralatan komputer (misalnya. Dell) atau kantor (misalnya. Staples).

Bagaimana kami memungkinkan pengguna akhir yang membuat pembelian requisitions pilih vendor berlaku?

Solusi bisnis:

Membedakan vendor dalam sistem melalui "jenis".

Memungkinkan pengguna untuk memilih jenis"" produk dan kemudian memberikan serangkaian disaring sesuai vendor.

Solusi teknis:

Sebuah bentuk InfoPath telah dirancang dengan memungkinkan pengguna untuk memasukkan online membeli requisitions.

Dua InfoPath pilihan daftar kontrol vendor seleksi. Pertama, pengguna memilih "jenis pembelian". Hal ini membatasi daftar pilihan kedua berisi hanya vendor yang menjual untuk tipe pembelian. Ini adalah klasik cascading drop-down.

Vendor yang disimpan dalam daftar kustom MOSS dengan custom kolom untuk Penjual atribut seperti nama, Alamat dan terutama "jenis".

Melaksanakan layanan web untuk InfoPath klien untuk mengkonsumsi yang iterates melalui daftar kustom vendor, kembali hanya vendor pencocokan disediakan "jenis".

Memohon layanan web melalui formulir InfoPath.

Pelajaran:

  • Pertama, tampaknya diperlukan untuk pergi rute ini. Saya lebih suka untuk melakukan penyaringan sepenuhnya dalam InfoPath dan tidak membuat fungsi apapun di sini web layanan. Namun, bentuk server tidak menyediakan kemampuan penyaringan diperlukan. Kita dapat menempatkan aturan ke "jenis" Daftar pilihan formulir untuk semacam membuka kembali Penjual query, Tapi kita tidak bisa mendapatkannya bekerja dengan baik. Oleh karena itu, itu diperlukan untuk menerapkan layanan web.
  • Ini adalah klasik "cascading pilihan daftar" masalah di InfoPath membentuk dunia server dan ada banyak contoh baik di luar sana yang menjelaskan bagaimana untuk memecahkan masalah ini.
  • Nilai kosong untuk kolom dalam daftar vendor tidak mengembalikan string kosong ketika dirujuk seperti ini: initItem["Nama Penjual"]. Sebaliknya, mengembalikan null.

Pada beberapa catatan lain:

  • Saya mengembalikan array[] vendor karena saya punya beberapa kesulitan kembali ArrayList. InfoPath mengeluh tentang hal itu dan aku tidak punya waktu atau kemauan untuk melawan atasnya. Ini, Tentu saja, menempatkan batas buatan pada jumlah vendor. Ini juga memaksa saya untuk menerapkan trim() metode pada array karena aku benci gagasan kembali ke kembali 100 vendor null. InfoPath tidak peduli, Tapi itu merengek pada saya. (Lagi, ini adalah lebih mudah daripada memperebutkan InfoPath ArrayLists).
  • Saya menerapkan GetSpecificVendorByName() fungsi juga, yang mungkin instruktif.

Kode:

menggunakan Sistem;
menggunakan System.Web;
menggunakan System.Web.Services;
menggunakan System.Web.Services.Protocols;
menggunakan Microsoft.SharePoint;
menggunakan System.Configuration;

/// <Ringkasan>
///
Penjual Jasa: Menyediakan vendor terkait layanan yang saat ini dikonsumsi oleh sebuah bentuk infopath klien.
///
/// Sejarah:
/// ——–
/// 07/24/07: Awal coding, Paul J. Gavin dari Conchango.
///
/// </Ringkasan>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
Umum kelas VendorService : System.Web.Services.WebService
{

/// <Ringkasan>
/// Mewakili vendor dari daftar kustom sharepoint dikelola oleh MSUSA.
/// </Ringkasan>
Umum kelas Penjual
{
Umum Penjual() { }

Umum Penjual(SPItem initItem)
{
Jika (! (initItem["Nama Penjual"] == null)) VendorName = initItem["Nama Penjual"].ToString();
Jika (! (initItem["Alamat 1"] == null)) VendorAddress1 = initItem["Alamat 1"].ToString();
Jika (! (initItem["Alamat 2"] == null)) VendorAddress2 = initItem["Alamat 2"].ToString();
Jika (! (initItem["City"] == null)) VendorCity = initItem["City"].ToString();
Jika (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Jika (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Jika (! (initItem["Negara"] == null)) VendorState = initItem["Negara"].ToString();
Jika (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Jika (!(initItem["Fax"] == null)) VendorFax = initItem["Fax"].ToString();
Jika (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // ID unik yang dipelihara melalui MOSS.
}

Umum Int VendorItemId;
Umum string VendorName;
Umum string VendorAddress1;
Umum string VendorAddress2;
Umum string VendorCity;
Umum string VendorState;
Umum string VendorZip;
Umum string VendorPhone;
Umum string VendorType;
Umum string VendorSalesRepName;
Umum string VendorFax;
}

Umum VendorService () {

//Tanda komentar baris berikut jika menggunakan dirancang komponen
//InitializeComponent();
}

swasta Penjual[] GenerateTestVendors()
{
Penjual[] resultList;
resultList = baru Penjual[100];

Penjual v;
v = baru Penjual();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState = "v1_st";
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";

resultList[0] = v;

v = baru Penjual();

v.VendorAddress1 = "v2_address1";
v.VendorAddress2 = "v2_address2";
v.VendorCity = "v2_city";
v.VendorName = "v2_vendorname";
v.VendorPhone = "v2_vendorphone";
v.VendorState = "v2_st";
v.VendorType = "v2_type";
v.VendorZip = "v2_zip";

resultList[1] = v;

v = baru Penjual();
v.VendorAddress1 = "v3_address1";
v.VendorAddress2 = "v3_address2";
v.VendorCity = "v3_city";
v.VendorName = "v3_vendorname";
v.VendorPhone = "v3_vendorphone";
v.VendorState = "v3_st";
v.VendorType = "v3_type";
v.VendorZip = "v3_zip";

resultList[2] = v;

kembali resultList;

}

[WebMethod]
Umum Penjual GetSpecificVendorById(Int vendorId)
{
string SpVendorSiteName; // Nama sebenarnya MOSS situs yang host daftar kustom vendor.
string SpVendorListName; // Nama daftar MOSS yang sebenarnya yang mengandung vendor.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

menggunakan (SPSite situs = baru SPSite(SpVendorSiteName))
{

menggunakan (SPWeb Web = site. OpenWeb())
{

SPList currentList = web. Daftar[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

kembali baru Penjual(specificItem);

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

}

[WebMethod]
// Mengasumsikan bahwa nama Penjual unik, dari perspektif bisnis
Umum Penjual GetSpecificVendorByVendorName(string menjadi)
{
string SpVendorSiteName; // Nama sebenarnya MOSS situs yang host daftar kustom vendor.
string SpVendorListName; // Nama daftar MOSS yang sebenarnya yang mengandung vendor.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

menggunakan (SPSite situs = baru SPSite(SpVendorSiteName))
{
menggunakan (SPWeb Web = site. OpenWeb())
{

SPList currentList = web. Daftar[SpVendorListName];

foreach (SPItem vendorItem dalam currentList.Items)
{
Jika (vendorItem["Nama Penjual"] == null) «««;

Jika (vendorItem["Nama Penjual"].ToString().Sama dengan(menjadi))
kembali baru Penjual(vendorItem);
}

Penjual v = baru Penjual();
v.VendorPhone = "tidak ditemukan: " + menjadi;

kembali v;

kembali null;

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

} // metode

[WebMethod]
Umum Penjual[] GetVendorsOfType (string filterType)
{

string SpVendorSiteName; // Nama sebenarnya MOSS situs yang host t
Ia Penjual daftar kustom.
string SpVendorListName; // Nama daftar MOSS yang sebenarnya yang mengandung vendor.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

Penjual[] resultList;
Int vendorIndex = 0;
resultList = baru Penjual[1000];

// Menginisialisasi daftar dengan pesan default yang ramah.
Penjual v = baru Penjual();
v.VendorName = "Pilih jenis Penjual untuk mengisi daftar ini.";
resultList[0] = v;

// Mengubah filter untuk huruf untuk perbandingan string lebih mudah kemudian.
filterType = filterType.ToLower();

// Jika berlalu jenis penyaring adalah "test", menghasilkan beberapa data sederhana.
#wilayah Jenis penyaring = "test"
Jika (Sama filterType.("ujian"))
kembali GenerateTestVendors();
#endregion

Jika (benar)
{
menggunakan (SPSite situs = baru SPSite(SpVendorSiteName))
{
menggunakan (SPWeb Web = site. OpenWeb())
{

v = null;

SPList currentList = web. Daftar[SpVendorListName];

// Iterate melalui semua item dalam daftar vendor.
foreach (SPItem vendorItem dalam currentList.Items)
{

string lowerVendorType;

lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);

Jika (Sama lowerVendorType.(filterType))
{
resultList[vendorIndex ] = baru Penjual(vendorItem);
}
} // iterasi melalui semua vendor dalam daftar


kembali TrimVendorArray(vendorIndex, resultList);
// kembali resultList;

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

} // Jika benar

kembali null;
}

swasta Penjual[] TrimVendorArray(Int newsize, Penjual[] originalVendorArray)
{
Penjual[] trimmedArray;

Jika (newsize == 0) newsize = 1;
trimmedArray = baru Penjual[newsize];

Int currentCounter = 0;

untuk (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

kembali trimmedArray;

}
}