Besigheid scenario:
Verskaf 'n metode wat in staat stel om gebruikers akkurate aankoop rekwisisies te vinnig gaan.
Besigheid probleem:
Die kliënt doen besigheid met 'n paar honderd verkopers.
Verskaffers is "tipe" spesifieke. Dit beteken dat 'n ondernemer verkoop rekenaartoerusting (bijv. Dell) of die kantoor verskaf (bijv. Staples).
Hoe kan ons eindgebruikers wat aankoop rekwisisies skep, kies 'n geldige ondernemer?
Business Solution:
Onderskei verkopers in die stelsel via "tipe".
Gebruikers in staat stel om die "tipe te kies" van die produk en dan 'n gefilterde stel van geskikte verskaffers.
Tegniese oplossing:
'N Path vorm ontwerp wat in staat stel om gebruikers aanlyn aankoop rekwisisies in te voer.
Twee die Path seleksie lyste beheer verskaffer seleksie. Eerste, die gebruiker kies 'n "aankoop tipe". This limits a second selection list to contain only vendors that sell for that purchase type. This is a classic cascading drop-down.
Ondernemers word gestoor in 'n Moss persoonlike lys met persoonlike kolomme vir die verkoper eienskappe soos naam, adres en veral "tipe".
Implementering van 'n web diens vir 'n Path kliënt te vernietig wat deur die persoonlike verkoper lys iterate, terugkeer enigste verskaffers wat ooreenstem met 'n gegewe "tipe".
Roep die web diens via die Path vorm.
Lesse wat geleer:
- Eerste, blyk dit noodsaaklik om hierdie roete te gaan. Ek sou verkies het om die filter heeltemal binne Path te doen en nie 'n web diens funksionaliteit hier. Egter, vorms bediener het nie die vereiste filter vermoë. Ons kan 'n reël op 'n "tipe" seleksie lys in die vorm van heropen die verkoper navraag te sorteer, maar ons kan nie dit kry om behoorlik te werk. Daarom, was dit nodig om die web te implementeer.
- Dit is 'n klassieke "cascade keuse lys" probleem in die Path vorms bediener wêreld en daar is baie goeie voorbeelde daar buite wat verduidelik hoe om dit op te los.
- 'N leë waarde vir 'n kolom in die verkoper lys nie terug 'n leë string wanneer verwys soos hierdie: initItem["Vendor Name"]. In plaas daarvan, dit gee 'n leë.
Sommige ander notas:
- Ek weer 'n skikking[] verskaffers, want ek het 'n paar probleme wat terugkeer 1 Array List. Path kla oor dit en ek het nie die tyd of die neiging om te veg oor. Dit, natuurlik, sit 'n kunsmatige beperking op die aantal verskaffers. Dit het my ook verplig om 'n trim te implementeer() method on the array because I hate the idea of returning back 100’s of null vendors. Path beteken nie omgee nie, maar dit neul by my. (Weer, Dit was makliker as om te baklei Path oor ArrayLists).
- Ek 1 GetSpecificVendorByName geïmplementeer() funksie sowel, wat kan leersaam wees.
Die kode:
die gebruik van Stelsel;
die gebruik van System.Web;
die gebruik van System.Web.Services;
die gebruik van System.Web.Services.Protocols;
die gebruik van Microsoft.SharePoint;
die gebruik van System.Configuration;
/// <opsomming>
/// 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.
///
/// </opsomming>
[WebService(Namespace = "Http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
openbare klas VendorService : System.Web.Services.WebService
{
/// <opsomming>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </opsomming>
openbare klas Vendor
{
openbare Vendor() { }
openbare Vendor(SPItem initItem)
{
indien (! (initItem["Vendor Name"] == nul)) VendorName = initItem["Vendor Name"].ToString();
indien (! (initItem["Address 1"] == nul)) VendorAddress1 = initItem["Address 1"].ToString();
indien (! (initItem["Address 2"] == nul)) VendorAddress2 = initItem["Address 2"].ToString();
indien (! (initItem["Stad"] == nul)) VendorCity = initItem["Stad"].ToString();
indien (! (initItem["VendorPhone"] == nul)) VendorPhone = initItem["VendorPhone"].ToString();
indien (! (initItem["PurchaseType"] == nul)) VendorType = initItem["PurchaseType"].ToString();
indien (! (initItem["Staat"] == nul)) VendorState = initItem["Staat"].ToString();
indien (! (initItem["Zip"] == nul)) VendorZip = initItem["Zip"].ToString();
indien (!(initItem["Faks"] == nul)) VendorFax = initItem["Faks"].ToString();
indien (!(initItem["SalesRepName"] == nul)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Unique ID maintained via MOSS.
}
openbare int VendorItemId;
openbare string VendorName;
openbare string VendorAddress1;
openbare string VendorAddress2;
openbare string VendorCity;
openbare string VendorState;
openbare string VendorZip;
openbare string VendorPhone;
openbare string VendorType;
openbare string VendorSalesRepName;
openbare string VendorFax;
}
openbare VendorService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
private Vendor[] GenerateTestVendors()
{
Vendor[] resultList;
resultList = nuwe Vendor[100];
Vendor v;
v = nuwe Vendor();
v.VendorAddress1 = "V1_address1";
v.VendorAddress2 = "V1_address2";
v.VendorCity = "V1_city";
v.VendorName = "V1_vendorname";
v.VendorPhone = "V1_vendorphone";
v.VendorState =
v.VendorType = "V1_type";
v.VendorZip = "V1_zip";
resultList[0] = v;
v = nuwe 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 = nuwe 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;
terugkeer resultList;
}
[WebMethod]
openbare Vendor GetSpecificVendorById(int vendorId)
{
string SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
string SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
die gebruik van (SPSite site = nuwe SPSite(SpVendorSiteName))
{
die gebruik van (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
terugkeer nuwe Vendor('n '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
openbare Vendor GetSpecificVendorByVendorName(string Vendor)
{
string SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
string SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
die gebruik van (SPSite site = nuwe SPSite(SpVendorSiteName))
{
die gebruik van (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
foreach (SPItem vendorItem in currentList.Items)
{
indien (vendorItem["Vendor Name"] == nul) voortgaan;
indien (vendorItem["Vendor Name"].ToString().Equals(Vendor))
terugkeer nuwe Vendor(vendorItem);
}
Vendor v = nuwe Vendor();
v.VendorPhone = "not found: " + Vendor;
terugkeer v;
terugkeer nul;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("Http://localhost / Mizuho ")
} // metode
[WebMethod]
openbare Vendor[] GetVendorsOfType (string filterType)
{
string SpVendorSiteName; // Name of the actual MOSS site that hosts t
he vendor custom list.
string 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 = nuwe Vendor[1000];
// Initialize the list with a default friendly message.
Vendor v = nuwe 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.
#streek Filter type = "test"
indien (filterType.Equals("Toets"))
terugkeer GenerateTestVendors();
#endregion
indien (waar)
{
die gebruik van (SPSite site = nuwe SPSite(SpVendorSiteName))
{
die gebruik van (SPWeb web = site.OpenWeb())
{
v = nul;
SPList currentList = web.Lists[SpVendorListName];
// Iterate through all the items in the vendor list.
foreach (SPItem vendorItem in currentList.Items)
{
string lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
indien (lowerVendorType.Equals(filterType))
{
resultList[vendorIndex ] = nuwe Vendor(vendorItem);
}
} // iterating thru all the vendors in the list
terugkeer TrimVendorArray(vendorIndex, resultList);
// return resultList;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("Http://localhost / Mizuho ")
} // if true
terugkeer nul;
}
private Vendor[] TrimVendorArray(int newsize, Vendor[] originalVendorArray)
{
Vendor[] trimmedArray;
indien (newsize == 0) newsize = 1;
trimmedArray = nuwe Vendor[newsize];
int currentCounter = 0;
vir (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
terugkeer trimmedArray;
}
}