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;

}
}

Tinggalkan Jawapan

alamat e-mel anda tidak akan diterbitkan. Ruangan yang diperlukan ditanda *