Arkib Kategori: MOSS

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

MOSS: Iterating melalui senarai adat dan kembali data ditapis untuk InfoPath

Senario Perniagaan:

Menyediakan satu kaedah yang membolehkan pengguna untuk memasukkan tuntutan pembelian yang tepat dengan cepat.

Masalah perniagaan:

Pelanggan menjalankan perniagaan dengan beberapa ratus vendor.

Vendor akan "taipkan" tertentu. Ini bermakna bahawa penjual menjual peralatan komputer (e.g. Dell) atau bekalan pejabat (e.g. Staples).

Bagaimana kami membolehkan pengguna yang membuat pembelian requisitions Pilih vendor sah?

Penyelesaian perniagaan yang:

Membezakan vendor dalam sistem melalui "jenis".

Membolehkan pengguna untuk memilih jenis"" produk dan kemudian menyediakan set yang ditapis sesuai vendor.

Penyelesaian teknikal:

Satu bentuk InfoPath telah direka yang membolehkan pengguna untuk memasukkan online membeli requisitions.

Dua senarai pemilihan InfoPath mengawal pemilihan vendor. Pertama, pengguna memilih "jenis pembelian". Ini menghadkan senarai pilihan kedua untuk mengandungi hanya vendor yang menjual untuk jenis pembelian itu. Ini adalah satu klasik dihasratkan jatuh.

Vendor yang disimpan dalam senarai tersuai MOSS dengan adat kolum untuk penjual sifat-sifat seperti nama, alamat dan terutamanya "jenis".

Melaksanakan perkhidmatan web untuk klien InfoPath untuk mengambil yang iterates melalui senarai tersuai Penjual, pulang sahaja vendor yang sepadan yang dibekalkan "jenis".

Memohon Perkhidmatan web melalui borang InfoPath.

Pengajaran yang dipelajari:

  • Pertama, Ia seolah-olah perlu pergi laluan ini. Saya mempunyai pilihan untuk melakukan penapisan sepenuhnya di dalam lingkungan InfoPath dan tidak mencipta sebarang web Perkhidmatan fungsi di sini. Walau bagaimanapun, Borang pelayan tidak memberi diperlukan keupayaan penapisan. Kita boleh meletakkan peraturan ke yang jenis"yang" Senarai pilihan berupa semacam membuka semula pertanyaan Penjual, tetapi kita tidak boleh mendapatkannya untuk bekerja dengan betul. Oleh itu, Ia adalah perlu untuk melaksanakan perkhidmatan web.
  • Inilah klasik "cascading pilihan senarai" masalah dalam InfoPath dalam membentuk dunia pelayan dan terdapat banyak baik contoh di luar sana yang menerangkan cara untuk menyelesaikan masalah ini.
  • Nilai kosong untuk sebuah kolum dalam senarai Penjual tidak kembali rentetan yang kosong apabila dirujuk seperti ini: initItem["Nama penjual."]. Sebaliknya, kembali kosong yang.

Sesetengah nota yang lain:

  • Aku kembali pelbagai[] vendor kerana saya menghadapi beberapa masalah yang kembali ArrayList yang. InfoPath telah mengadu tentang hal itu dan saya tidak mempunyai masa atau kecenderungan untuk melawan ke atas. Ini, sudah tentu, meletakkan had tiruan untuk jumlah vendor. Ia juga dipaksa saya melaksanakan trim yang() Kaedah pelbagai kerana aku benci idea untuk memulangkan kembali 100's daripada vendor terbatal. InfoPath tidak peduli, tetapi ia nagged saya. (Lagi, ini adalah lebih mudah daripada berlawan InfoPath mengenai ArrayLists).
  • Saya melaksanakan GetSpecificVendorByName yang() fungsi serta, yang mungkin menjadi pelajaran.

Kod:

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

/// <Ringkasan>
///
Penjual Perkhidmatan: Menyediakan penjual yang berkaitan perkhidmatan hari yang dimakan oleh borang pelanggan infopath.
///
/// Sejarah:
/// ——–
/// 07/24/07: Awal pengkodan, Paul J. Gavin Conchango.
///
/// </Ringkasan>
[WebService(Ruang nama = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
awam kelas VendorService : System.Web.Services.WebService
{

/// <Ringkasan>
/// Mewakili sebuah syarikat penjual dari senarai tersuai sharepoint diselenggara oleh MSUSA.
/// </Ringkasan>
awam kelas Penjual
{
awam Penjual() { }

awam Penjual(SPItem initItem)
{
jika (! (initItem["Nama penjual."] == Batal)) VendorName = initItem["Nama penjual."].ToString();
jika (! (initItem["Alamat 1"] == Batal)) VendorAddress1 = initItem["Alamat 1"].ToString();
jika (! (initItem["Alamat 2"] == Batal)) VendorAddress2 = initItem["Alamat 2"].ToString();
jika (! (initItem["City"] == Batal)) VendorCity = initItem["City"].ToString();
jika (! (initItem["VendorPhone"] == Batal)) VendorPhone = initItem["VendorPhone"].ToString();
jika (! (initItem["PurchaseType"] == Batal)) VendorType = initItem["PurchaseType"].ToString();
jika (! (initItem["Negeri"] == Batal)) VendorState = initItem["Negeri"].ToString();
jika (! (initItem["Zip"] == Batal)) VendorZip = initItem["Zip"].ToString();
jika (!(initItem["Perkhidmatan Faks"] == Batal)) VendorFax = initItem["Perkhidmatan Faks"].ToString();
jika (!(initItem["SalesRepName"] == Batal)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Unik ID dikekalkan melalui MOSS.
}

awam int VendorItemId;
awam rentetan VendorName;
awam rentetan VendorAddress1;
awam rentetan VendorAddress2;
awam rentetan VendorCity;
awam rentetan VendorState;
awam rentetan VendorZip;
awam rentetan VendorPhone;
awam rentetan VendorType;
awam rentetan VendorSalesRepName;
awam rentetan VendorFax;
}

awam VendorService () {

//Tanda komentar baris berikut jika menggunakan direka 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]
awam Penjual GetSpecificVendorById(int vendorId)
{
rentetan SpVendorSiteName; // Nama sebenar tapak MOSS yang menghoskan senarai tersuai Penjual.
rentetan SpVendorListName; // Nama sebenar MOSS senarai mengandungi vendor.

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

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

menggunakan (SPWeb web = halaman. OpenWeb())
{

SPList currentList = web. Senarai[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

kembali baru Penjual(specificItem);

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

}

[WebMethod]
// Menganggap bahawa nama penjual adalah unik, daripada perspektif perniagaan
awam Penjual GetSpecificVendorByVendorName(rentetan vendorName)
{
rentetan SpVendorSiteName; // Nama sebenar tapak MOSS yang menghoskan senarai tersuai Penjual.
rentetan SpVendorListName; // Nama sebenar MOSS senarai mengandungi vendor.

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

menggunakan (SPSite lokasi = baru SPSite(SpVendorSiteName))
{
menggunakan (SPWeb web = halaman. OpenWeb())
{

SPList currentList = web. Senarai[SpVendorListName];

foreach (SPItem vendorItem dalam currentList.Items)
{
jika (vendorItem["Nama penjual."] == Batal) terus;

jika (vendorItem["Nama penjual."].ToString().Adalah sama dengan(vendorName))
kembali baru Penjual(vendorItem);
}

Penjual v = baru Penjual();
v.VendorPhone = "tidak dijumpai: " + vendorName;

kembali v;

kembali Batal;

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

} // kaedah

[WebMethod]
awam Penjual[] GetVendorsOfType (rentetan filterType)
{

rentetan SpVendorSiteName; // Nama sebenar tapak MOSS yang menghoskan t
Dia penjual senarai tersuai.
rentetan SpVendorListName; // Nama sebenar MOSS senarai mengandungi vendor.

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

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

// Memulakan senarai dengan mesej mesra lalai.
Penjual v = baru Penjual();
v.VendorName = "Pilih jenis penjual untuk mengisi senarai ini.";
resultList[0] = v;

// Menukar penapis untuk kes yang lebih rendah untuk perbandingan rentetan mudah kemudian.
filterType = filterType.ToLower();

// Jika jenis penapis yang diluluskan adalah "ujian", menjana beberapa data yang mudah.
#rantau Penapis jenis = "menguji"
jika (filterType.Equals("ujian"))
kembali GenerateTestVendors();
#endregion

jika (benar)
{
menggunakan (SPSite lokasi = baru SPSite(SpVendorSiteName))
{
menggunakan (SPWeb web = halaman. OpenWeb())
{

v = Batal;

SPList currentList = web. Senarai[SpVendorListName];

// Iterate melalui semua item di dalam senarai pembekal.
foreach (SPItem vendorItem dalam currentList.Items)
{

rentetan lowerVendorType;

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

jika (lowerVendorType.Equals(filterType))
{
resultList[vendorIndex ] = baru Penjual(vendorItem);
}
} // iterating thru semua vendor dalam senarai


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

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

} // Jika benar

kembali Batal;
}

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

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

int currentCounter = 0;

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

kembali trimmedArray;

}
}