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;
}
}