Poslovni Scenarij:
Navedite metodu koja omogućuje korisnicima da unesete točne kupnju obespravljivanja brzo.
Poslovni problem:
Klijent posluje s više stotina distributera.
Vendors are "type" specifičan. To znači da prodavatelj prodaje računalnu opremu (e.g. Šumovita dolina) ili uredski materijal (e.g. Staples).
Kako omogućiti krajnjim korisnicima koji stvaraju kupnju obespravljivanja odaberite valjanu dobavljaču?
Poslovno rješenje:
Differentiate vendors in the system via "type".
Enable users to select the "type" proizvoda, a zatim dati filtrirani skup odgovarajućih dobavljačima.
Tehničko rješenje:
InfoPath obrazac je osmišljen koji omogućava korisnicima da unesete online kupnju obespravljivanja.
Dva InfoPath popise kontrole dobavljača odabir. Prvi, 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.
Dobavljači su pohranjene na popisu Moss običaj s prilagođenim stupaca za dobavljača atributa kao što su ime, address and especially "type".
Provesti web servis za jedan InfoPath klijentom konzumirati da ponovi kroz prilagođeni dobavljaču popis, returning only vendors matching a supplied "type".
Pozvati na uslugu putem web obrasca InfoPath.
Lekcije naučene:
- Prvi, čini se da je potrebno ići ovaj put. Ja bi radije učiniti filtriranje u cijelosti unutar programa InfoPath, a ne stvaraju nikakvu funkcionalnost web usluga ovdje. Međutim, oblici poslužitelj ne dati tražene mogućnost filtriranja. We can put a rule onto a the "type" izborna lista u obliku vrsta ponovno otvoriti prodavatelja upit, ali ne možemo dobiti Internet to funkcionirati ispravno. Stoga, bilo je potrebno provesti web servis.
- This is a classic "cascading selection list" problem u server InfoPath obrazaca svijetu i postoji mnogo dobrih primjera vani da objašnjavaju kako riješiti ovaj.
- Prazna vrijednost za stupac u popisu prodavatelja ne vrati prazan niz, kada spominje ovako: initItem["Vendor Name"]. Umjesto toga, se vraća null.
Neke druge napomene:
- Vraćam se niz[] od prodavača jer sam imao neke poteškoće vraća se ArrayList. InfoPath je gunđanje o tome i nisam imao vremena ili volje za borbu protiv preko njega. To, naravno, stavlja umjetno ograničenje ukupnog broja dobavljača. Također mi je prisiljen provoditi trim() method on the array because I hate the idea of returning back 100’s of null vendors. InfoPath ne mari, ali nagged na mene. (Opet, to je lakše nego tijekom borbe InfoPath ArrayLists).
- Sam provodi GetSpecificVendorByName() funkcija, kao i, što može biti poučna.
Kod:
pomoću Sustav;
pomoću System.Web;
pomoću System.Web.Services;
pomoću System.Web.Services.Protocols;
pomoću Microsoft.SharePoint;
pomoću System.Configuration;
/// <rezime>
/// 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.
///
/// </rezime>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
javni klasa VendorService : System.Web.Services.WebService
{
/// <rezime>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </rezime>
javni klasa Prodavač
{
javni Prodavač() { }
javni Prodavač(SPItem initItem)
{
ako (! (initItem["Vendor Name"] == nula)) VendorName = initItem["Vendor Name"].ToString();
ako (! (initItem["Address 1"] == nula)) VendorAddress1 = initItem["Address 1"].ToString();
ako (! (initItem["Address 2"] == nula)) VendorAddress2 = initItem["Address 2"].ToString();
ako (! (initItem["City"] == nula)) VendorCity = initItem["City"].ToString();
ako (! (initItem["VendorPhone"] == nula)) VendorPhone = initItem["VendorPhone"].ToString();
ako (! (initItem["PurchaseType"] == nula)) VendorType = initItem["PurchaseType"].ToString();
ako (! (initItem["State"] == nula)) VendorState = initItem["State"].ToString();
ako (! (initItem["Zip"] == nula)) VendorZip = initItem["Zip"].ToString();
ako (!(initItem["Fax"] == nula)) VendorFax = initItem["Fax"].ToString();
ako (!(initItem["SalesRepName"] == nula)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Unique ID maintained via MOSS.
}
javni int VendorItemId;
javni niz VendorName;
javni niz VendorAddress1;
javni niz VendorAddress2;
javni niz VendorCity;
javni niz VendorState;
javni niz VendorZip;
javni niz VendorPhone;
javni niz VendorType;
javni niz VendorSalesRepName;
javni niz VendorFax;
}
javni VendorService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
privatni Prodavač[] GenerateTestVendors()
{
Prodavač[] resultList;
resultList = novi Prodavač[100];
Prodavač v;
v = novi Prodavač();
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 = novi Prodavač();
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 = novi Prodavač();
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;
povratak resultList;
}
[WebMethod]
javni Prodavač GetSpecificVendorById(int vendorId)
{
niz SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
niz SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
pomoću (SPSite site = novi SPSite(SpVendorSiteName))
{
pomoću (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
povratak novi Prodavač(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
javni Prodavač GetSpecificVendorByVendorName(niz VendorName)
{
niz SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
niz SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
pomoću (SPSite site = novi SPSite(SpVendorSiteName))
{
pomoću (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpVendorListName];
foreach (SPItem vendorItem u currentList.Items)
{
ako (vendorItem["Vendor Name"] == nula) nastaviti;
ako (vendorItem["Vendor Name"].ToString().Jednako(VendorName))
povratak novi Prodavač(vendorItem);
}
Prodavač v = novi Prodavač();
v.VendorPhone = "not found: " + VendorName;
povratak v;
povratak nula;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // način
[WebMethod]
javni Prodavač[] GetVendorsOfType (niz filterType)
{
niz SpVendorSiteName; // Name of the actual MOSS site that hosts t
he vendor custom list.
niz SpVendorListName; // Name of the actual MOSS list containing vendors.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Prodavač[] resultList;
int vendorIndex = 0;
resultList = novi Prodavač[1000];
// Initialize the list with a default friendly message.
Prodavač v = novi Prodavač();
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.
#regija Filter type = "test"
ako (filterType.Equals("test"))
povratak GenerateTestVendors();
#endregion
ako (pravi)
{
pomoću (SPSite site = novi SPSite(SpVendorSiteName))
{
pomoću (SPWeb web = site.OpenWeb())
{
v = nula;
SPList currentList = web.Lists[SpVendorListName];
// Iterate through all the items in the vendor list.
foreach (SPItem vendorItem u currentList.Items)
{
niz lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
ako (lowerVendorType.Equals(filterType))
{
resultList[vendorIndex ] = novi Prodavač(vendorItem);
}
} // iterating thru all the vendors in the list
povratak TrimVendorArray(vendorIndex, resultList);
// return resultList;
} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")
} // if true
povratak nula;
}
privatni Prodavač[] TrimVendorArray(int newsize, Prodavač[] originalVendorArray)
{
Prodavač[] trimmedArray;
ako (newsize == 0) newsize = 1;
trimmedArray = novi Prodavač[newsize];
int currentCounter = 0;
za (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
povratak trimmedArray;
}
}