Poslovni scenarij:
Priskrbeti se metoda, ki omogoča uporabnikom, da vnesejo točne nakup Zasegi hitro.
Business problem:
Stranka posluje z več sto prodajalci.
Prodajalci so "tip" posebne. To pomeni, da prodajalec prodaja računalniške opreme (npr.. Dell) ali pisarniškega materiala (npr.. Sponke).
Kako smo omogočijo končnim uporabnikom, ki ustvarjajo nakup Zasegi Izberite veljavno dobavitelja?
Poslovnih rešitev:
Razlikovanje med prodajalci v sistemu preko "tip".
Omogoči uporabnikom, da izberete vrsto"" izdelka, in nato nabor filtrirane ustrezne dobavitelje.
Tehnično rešitev:
InfoPathov obrazec je bil oblikovan, da omogoča uporabnikom, da vnesejo online nakup zasegi.
Dva seznama za izbor InfoPath nadzor izbor dobavitelja. Prvi, uporabnik izbere "nakup tip". To omejuje drugi izbirni seznam vsebuje le prodajalci, ki prodajajo za to vrsto nabave. To je klasična kaskadne spustnem.
Prodajalci so shranjene v seznam po meri MOSS s stolpci po meri za dobavitelja atribute, kot so ime, naslov in še posebej "tip".
Izvaja spletna storitev za InfoPath stranko uživati ki poudarjeno po seznamu po meri dobavitelja, vračajo samo prodajalci ujemanje podane "vrste".
Priklicati spletne storitve preko InfoPathov obrazec.
Spoznanja:
- Prvi, zdi potrebno iti to pot. Jaz raje ne filtriranje povsem InfoPatha in ne povzročajo vse funkcionalnosti spletnih storitev tukaj. Vendar, oblike strežnik ne zagotavljajo zahtevane zmogljivosti filtriranja. Lahko postavimo pravilo na a "tip" seznam za izbiro v obliki neke vrste ponovno odpreti poizvedbo dobavitelja, vendar smo vekanje zaslužiti to obdelovati primerno. Zato, je bilo treba izvajati spletne storitve.
- To je klasična "kaskadne izbor seznam" problem v InfoPatha tvori server svetu in obstaja veliko dobrih primerov tam zunaj to razložiti, kako rešiti to.
- Prazna vrednost za stolpec v seznamu dobaviteljev ne vrne prazen niz dodeljuje takole: initItem["Ime dobavitelja"]. Namesto tega, Vrne ničelno vrednost.
Nekatere druge opombe:
- Sem vrneta matriko[] prodajalcev, ker sem imel nekaj težav, ki se vračajo na predmeta ArrayList. InfoPath je bil pritožuje o tem in nisem imel časa ali volje za boj nad njim. To, seveda, postavlja umetnih omejitev na skupno število dobaviteljev. To tudi me prisiliti, da izvajanje trim() metoda na matriki, ker sovražim idejo o vrnitvi nazaj 100 nič prodajalcev. InfoPath ne skrbi, ampak to nagged vame. (Znova, To je lažje kot InfoPath prepirala ArrayLists).
- Sem izvajal v GetSpecificVendorByName() funkcije, kot tudi, ki je lahko poučen.
Šifra:
z uporabo Sistem;
z uporabo System.Web;
z uporabo System.Web.Services;
z uporabo System.Web.Services.Protocols;
z uporabo Microsoft.SharePoint;
z uporabo System.Configuration;
/// <povzetek>
/// Dobavitelj storitev: Zagotavlja dobavitelja, povezanih storitev, ki je danes použijeta odjemalca InfoPathov obrazec.
///
/// Zgodovina:
/// ——–
/// 07/24/07: Začetno kodiranje, Paul J. Gavin Conchango.
///
/// </povzetek>
[Spletna storitev(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
javnih razred VendorService : System.Web.Services.Spletna storitev
{
/// <povzetek>
/// Predstavlja prodajalec s po meri SharePointovega seznama vzdržuje MSUSA.
/// </povzetek>
javnih razred Dobavitelja
{
javnih Dobavitelja() { }
javnih Dobavitelja(SPItem initItem)
{
Če (! (initItem["Ime dobavitelja"] == NULL)) Ime_prodajalca = initItem["Ime dobavitelja"].ToString();
Če (! (initItem["Naslov 1"] == NULL)) VendorAddress1 = initItem["Naslov 1"].ToString();
Če (! (initItem["Naslov 2"] == NULL)) VendorAddress2 = initItem["Naslov 2"].ToString();
Če (! (initItem["Mesto"] == NULL)) VendorCity = initItem["Mesto"].ToString();
Če (! (initItem["VendorPhone"] == NULL)) VendorPhone = initItem["VendorPhone"].ToString();
Če (! (initItem["PurchaseType"] == NULL)) VendorType = initItem["PurchaseType"].ToString();
Če (! (initItem["Država"] == NULL)) VendorState = initItem["Država"].ToString();
Če (! (initItem["Zip"] == NULL)) VendorZip = initItem["Zip"].ToString();
Če (!(initItem["Faks"] == NULL)) VendorFax = initItem["Faks"].ToString();
Če (!(initItem["SalesRepName"] == NULL)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Enolični ID, vzdrževati prek MOSS.
}
javnih int VendorItemId;
javnih niz Ime_prodajalca;
javnih niz VendorAddress1;
javnih niz VendorAddress2;
javnih niz VendorCity;
javnih niz VendorState;
javnih niz VendorZip;
javnih niz VendorPhone;
javnih niz VendorType;
javnih niz VendorSalesRepName;
javnih niz VendorFax;
}
javnih VendorService () {
//Odkomentirate vrstico če using izdelane komponente
//InitializeComponent();
}
zasebno Dobavitelja[] GenerateTestVendors()
{
Dobavitelja[] resultList;
resultList = nove Dobavitelja[100];
Dobavitelja v;
v = nove Dobavitelja();
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 = nove Dobavitelja();
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 = nove Dobavitelja();
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;
vrnitev resultList;
}
[WebMethod]
javnih Dobavitelja GetSpecificVendorById(int ID prodajalca)
{
niz SpVendorSiteName; // Ime dejansko MOSS mesto, ki gosti seznam po meri dobavitelja.
niz SpVendorListName; // Ime dejansko MOSS seznam, ki vsebuje prodajalci.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
z uporabo (»SPSite « stran = nove »SPSite «(SpVendorSiteName))
{
z uporabo (SPWeb Spletna stran =. OpenWeb())
{
SPList.Update() currentList = spletni. Seznami[SpVendorListName];
SPItem specificItem = currentList.Items[ID prodajalca];
vrnitev nove Dobavitelja(specificItem);
} // z uporabo spweb web = site.openweb()
} // z uporabo strani »SPSite« = nov spsite("http://localhost/mizuho")
}
[WebMethod]
// Domneva, da ime dobavitelja je edinstveno, s poslovnega vidika
javnih Dobavitelja GetSpecificVendorByVendorName(niz biti)
{
niz SpVendorSiteName; // Ime dejansko MOSS mesto, ki gosti seznam po meri dobavitelja.
niz SpVendorListName; // Ime dejansko MOSS seznam, ki vsebuje prodajalci.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
z uporabo (»SPSite « stran = nove »SPSite «(SpVendorSiteName))
{
z uporabo (SPWeb Spletna stran =. OpenWeb())
{
SPList.Update() currentList = spletni. Seznami[SpVendorListName];
foreach (SPItem vendorItem v currentList.Items)
{
Če (vendorItem["Ime dobavitelja"] == NULL) «««;
Če (vendorItem["Ime dobavitelja"].ToString().Je enako(biti))
vrnitev nove Dobavitelja(vendorItem);
}
Dobavitelja v = nove Dobavitelja();
v.VendorPhone = "ni mogoče najti: " + biti;
vrnitev v;
vrnitev NULL;
} // z uporabo spweb web = site.openweb()
} // z uporabo strani »SPSite« = nov spsite("http://localhost/mizuho")
} // metoda
[WebMethod]
javnih Dobavitelja[] GetVendorsOfType (niz filterType)
{
niz SpVendorSiteName; // Ime dejansko MOSS mesto, ki gosti t
je prodajalec seznam po meri.
niz SpVendorListName; // Ime dejansko MOSS seznam, ki vsebuje prodajalci.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Dobavitelja[] resultList;
int vendorIndex = 0;
resultList = nove Dobavitelja[1000];
// Inicializacija seznama s privzetim sporočilom, prijazno.
Dobavitelja v = nove Dobavitelja();
v.VendorName = "Izberite vrsto dobavitelja izpolnite ta seznam.";
resultList[0] = v;
// Pretvori filter v spodnji primer za lažje primerjava nizov kasneje.
filterType = filterType.ToLower();
// Če vrsta filtra je "test", ustvariti nekaj preprostih podatkov.
#regija Vrsta filtra = "preskus"
Če (Enako filterType.("test"))
vrnitev GenerateTestVendors();
#endregion
Če (True)
{
z uporabo (»SPSite « stran = nove »SPSite «(SpVendorSiteName))
{
z uporabo (SPWeb Spletna stran =. OpenWeb())
{
v = NULL;
SPList.Update() currentList = spletni. Seznami[SpVendorListName];
// Ponovi vse elemente v seznamu dobaviteljev.
foreach (SPItem vendorItem v currentList.Items)
{
niz lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().String.tolower();
lowerVendorType = lowerVendorType.Substring(3);
Če (Enako lowerVendorType.(filterType))
{
resultList[vendorIndex ] = nove Dobavitelja(vendorItem);
}
} // iterating skozi vse dobavitelje v seznamu
vrnitev TrimVendorArray(vendorIndex, resultList);
// vrnitev resultList;
} // z uporabo spweb web = site.openweb()
} // z uporabo strani »SPSite« = nov spsite("http://localhost/mizuho")
} // Če je to res
vrnitev NULL;
}
zasebno Dobavitelja[] TrimVendorArray(int newsize, Dobavitelja[] originalVendorArray)
{
Dobavitelja[] trimmedArray;
Če (newsize == 0) newsize = 1;
trimmedArray = nove Dobavitelja[newsize];
int currentCounter = 0;
za (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
vrnitev trimmedArray;
}
}