Negosyo Sitwasyon:
Magbigay ng isang pamamaraan na nagbibigay-daan sa mga gumagamit upang ipasok ang tumpak na requisitions pagbili mabilis.
Business problema:
Client ang ginagawa ng negosyo na may ilang daang mga vendor.
Vendors are "type" tiyak. Nangangahulugan ito na ang isang vendor nagbebenta ng computer na kagamitan (e.g. Labak na may gubat) o opisina supplies (e.g. Staples).
Paano namin paganahin ang end user na lumikha requisitions pagbili pumili ng wastong vendor?
Business Solusyon:
Differentiate vendors in the system via "type".
Enable users to select the "type" ng produkto at pagkatapos ay magbigay ng isang filter na hanay ng mga naaangkop na mga tagabenta.
Teknikal na Solusyon:
Isang InfoPath form na ay nai-dinisenyo na nagbibigay-daan sa mga gumagamit upang ipasok ang mga online na pagbili requisitions.
Dalawang InfoPath seleksyon ng mga listahan kontrol vendor seleksyon. Una, the user selects a "purchase type". This limits a second selection list to contain only vendors that sell for that purchase type. This is a classic cascading drop-down.
Vendor ay naka-imbak sa isang listahan ng mga custom Moss na may pasadyang hanay para sa mga katangian ng vendor tulad ng pangalan, address and especially "type".
Ipatupad ang isang web serbisyo para sa isang InfoPath client upang ubusin na iterates sa pamamagitan ng mga pasadyang listahan ng vendor, returning only vendors matching a supplied "type".
Tumawag sa diyos ang serbisyo sa web sa pamamagitan ng form InfoPath.
Aralin natutunan:
- Una, parang ang kinakailangan upang pumunta ito ruta. Gusto ko na mas gusto na gawin ang pag-filter sa loob ng ganap na InfoPath at hindi gumawa ng anumang mga pag-andar ng web service dito. Gayunman, mga form server ay hindi nagbibigay ng mga kinakailangang pag-filter ng kakayahan. We can put a rule onto a the "type" pagpili listahan sa form upang ayusin ng muling buksan ang query vendor, ngunit hindi namin maaaring makakuha ng mga ito upang gumana nang maayos. Samakatwid, iyon ay kinakailangan upang ipatupad ang mga serbisyo sa web.
- This is a classic "cascading selection list" problema sa InfoPath mundo mga form server at mayroong maraming mga mahusay na mga halimbawa out doon na ipaliwanag kung paano malutas ito.
- Ang isang blangko ang halaga para sa isang hanay sa listahan ng vendor ay hindi nagbabalik ng isang walang laman na string kapag reference na tulad nito: initItem["Vendor Name"]. Sa halip, ito ay nagbabalik ng null.
Ang ilang mga iba pang mga Tala:
- Bumalik akong isang array[] ng mga vendor dahil ako ay may ilang mga kahirapan bumabalik isang ArrayList. InfoPath ay nagrereklamo tungkol dito at hindi ko magkaroon ng oras o ang pagkahilig upang labanan sa ibabaw nito. Ito, mangyari pa, naglalagay ng artipisyal na hangganan ang kabuuang bilang ng mga vendor. Mayroon din napilitang akin upang ipatupad ang isang trim() method on the array because I hate the idea of returning back 100’s of null vendors. InfoPath ay hindi mahalaga, ngunit ito nagged sa akin. (Muli, ito ay mas madali kaysa sa pakikipaglaban sa ibabaw InfoPath ArrayLists).
- Ako ipinatupad ng GetSpecificVendorByName() function na pati na rin, na maaaring may itinuturo.
Ang code:
paggamit Sistema;
paggamit System.Web;
paggamit System.Web.Services;
paggamit System.Web.Services.Protocols;
paggamit Microsoft.SharePoint;
paggamit System.Configuration;
/// <buod>
/// Vendor Service: Provides vendor related services which today are consumed by an infopath client form.
///
/// History:
/// ——–
/// 07/24/07: Initial coding, Paul J. Gavin of Conchango.
///
/// </buod>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publiko klase VendorService : System.Web.Services.WebService
{
/// <buod>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </buod>
publiko klase Vendor
{
publiko Vendor() { }
publiko Vendor(Magtuhog initItem)
{
kung (! (initItem["Vendor Name"] == sero)) VendorName = initItem["Vendor Name"].ToString();
kung (! (initItem["Address 1"] == sero)) VendorAddress1 = initItem["Address 1"].ToString();
kung (! (initItem["Address 2"] == sero)) VendorAddress2 = initItem["Address 2"].ToString();
kung (! (initItem["City"] == sero)) VendorCity = initItem["City"].ToString();
kung (! (initItem["VendorPhone"] == sero)) VendorPhone = initItem["VendorPhone"].ToString();
kung (! (initItem["PurchaseType"] == sero)) VendorType = initItem["PurchaseType"].ToString();
kung (! (initItem["State"] == sero)) VendorState = initItem["State"].ToString();
kung (! (initItem["Zip"] == sero)) VendorZip = initItem["Zip"].ToString();
kung (!(initItem["Fax"] == sero)) VendorFax = initItem["Fax"].ToString();
kung (!(initItem["SalesRepName"] == sero)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Unique ID maintained via MOSS.
}
publiko int VendorItemId;
publiko pisi VendorName;
publiko pisi VendorAddress1;
publiko pisi VendorAddress2;
publiko pisi VendorCity;
publiko pisi VendorState;
publiko pisi VendorZip;
publiko pisi VendorPhone;
publiko pisi VendorType;
publiko pisi VendorSalesRepName;
publiko pisi VendorFax;
}
publiko VendorService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
pribado Vendor[] GenerateTestVendors()
{
Vendor[] resultList;
resultList = bago Vendor[100];
Vendor v;
v = bago Vendor();
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 = bago Vendor();
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 = bago Vendor();
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;
bumalik resultList;
}
[WebMethod]
publiko Vendor GetSpecificVendorById(int vendorId)
{
pisi SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
pisi SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
paggamit (SPSite site = bago SPSite(SpVendorSiteName))
{
paggamit (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
Magtuhog specificItem = currentList.Items[vendorId];
bumalik bago Vendor(specificItem);
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
}
[WebMethod]
// Assumes that the vendor name is unique, from a business perspective
publiko Vendor GetSpecificVendorByVendorName(pisi vendorName)
{
pisi SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
pisi SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
paggamit (SPSite site = bago SPSite(SpVendorSiteName))
{
paggamit (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
foreach (Magtuhog vendorItem sa currentList.Items)
{
kung (vendorItem["Vendor Name"] == sero) magpatuloy;
kung (vendorItem["Vendor Name"].ToString().Kapantay(vendorName))
bumalik bago Vendor(vendorItem);
}
Vendor v = bago Vendor();
v.VendorPhone = "not found: " + vendorName;
bumalik v;
bumalik sero;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // pamamaraan
[WebMethod]
publiko Vendor[] GetVendorsOfType (pisi uri ng filter)
{
pisi SpVendorSiteName; // Name of the actual MOSS site that hosts t
he vendor custom list.
pisi SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Vendor[] resultList;
int vendorIndex = 0;
resultList = bago Vendor[1000];
// Initialize the list with a default friendly message.
Vendor v = bago Vendor();
v.VendorName = "Select a vendor type to populate this list.";
resultList[0] = v;
// Convert the filter to lower case for easier string comparison later.
filterType = filterType.ToLower();
// If the filter type passed is "test", generate some simple data.
#rehiyon Filter type = "test"
kung (filterType.Equals("test"))
bumalik GenerateTestVendors();
#endregion
kung (totoo)
{
paggamit (SPSite site = bago SPSite(SpVendorSiteName))
{
paggamit (SPWeb web = site.OpenWeb())
{
v = sero;
SPList currentList = web.Lists[SpVendorListName];
// Iterate through all the items in the vendor list.
foreach (Magtuhog vendorItem sa currentList.Items)
{
pisi lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
kung (lowerVendorType.Equals(uri ng filter))
{
resultList[vendorIndex ] = bago Vendor(vendorItem);
}
} // iterating thru all the vendors in the list
bumalik TrimVendorArray(vendorIndex, resultList);
// return resultList;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // if true
bumalik sero;
}
pribado Vendor[] TrimVendorArray(int newsize, Vendor[] originalVendorArray)
{
Vendor[] trimmedArray;
kung (newsize == 0) newsize = 1;
trimmedArray = bago Vendor[newsize];
int currentCounter = 0;
para (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
bumalik trimmedArray;
}
}