Obchodné scenáre:
Poskytnúť metóda, ktorá umožňuje používateľom rýchlo zadať presné nákup rekvizície.
Obchodné problém:
Klient robí Biznis s niekoľko sto dodávateľov.
Predajcovia sú "typ" špecifické. To znamená, že dodávateľ predáva počítačového vybavenia (napr.. Dell) alebo kancelárske potreby (napr.. Sponky).
Ako môžeme umožniť koncovým používateľom, ktorí vytvárajú nákup rekvizície Vyberte platný dodávateľa?
Obchodné riešenia:
Rozlišovať dodávateľov v systéme cez "typ".
Umožniť používateľom vybrať typ"" výrobku a potom poskytnúť filtrovanej množiny vhodných dodávateľov.
Technické riešenie:
Formulár programu InfoPath bol navrhnutý tak, že umožňuje používateľom zadať online nákup rekvizície.
Oba zoznamy výberu programu InfoPath ovládať výber dodávateľa. Prvá, používateľ vyberie typ"nákup". To obmedzuje druhý zoznam výberu obsahujú len predajcovia, ktorí predávajú pre tento typ nákupného. Toto je klasický kaskádovými rozbaľovacej.
Predajcovia sú uložené v MOSS vlastný zoznam s vlastné stĺpce dodávateľa atribútov, ako napríklad názov, adresa a najmä "typ".
Implementovať webovej službe program InfoPath klienta konzumovať to opakuje prostredníctvom zoznamu vlastných dodávateľa, vracia len predajcovia zodpovedajúce dodáva "type".
Odvolávať na webovú službu cez formulár programu InfoPath.
Poučenie:
- Prvá, to sa zdá byť potrebné ísť touto cestou. Radšej by som filtrovanie úplne programu InfoPath a nevytvára žiadne funkcie pre webové služby tu. Avšak, formy server neposkytuje požadované filtrovanie schopnosti. Môžeme dať pravidlo na "typ" Výber zoznamu vo formulári druh znovu otvoriť dotaz dodávateľa, ale nemôžeme dostať to fungovať. Preto, bolo potrebné zaviesť webovej služby.
- Toto je klasický "kaskádové výber zoznam" problém v programe InfoPath formuláre servera svete a existuje mnoho príkladov, ktoré vysvetľujú, ako vyriešiť tento.
- Prázdnu hodnotu pre stĺpec v zozname dodávateľov nevráti prázdny reťazec ak odkazuje takhle: initItem["Názov dodávateľa"]. Namiesto toho, Vráti hodnotu null.
Niektoré ďalšie poznámky:
- Môžem vrátiť pole[] predajcovia pretože som mal nejaké problémy vracia Zoznam polí ArrayList. Program InfoPath bol sťažujú a nemal som čas ani chuť bojovať cez to. Toto, samozrejme, kladie umelé limit na celkový počet dodávateľov. To tiež nútení ma implementovať trim() metóda na poli, pretože neznášam myšlienku návratu späť 100 nulový dodávateľov. Program InfoPath sa nestará, ale obtěžovaný na mňa. (Znova, to bolo jednoduchšie, než program InfoPath bojujú ArrayLists).
- Som vykonávaná GetSpecificVendorByName() funkciu aj, ktoré môžu byť poučný.
Kód:
pomocou Systém;
pomocou System.Web;
pomocou System.Web.Services;
pomocou System.Web.Services.Protocols;
pomocou Microsoft.SharePoint;
pomocou System.Configuration;
/// <Zhrnutie>
/// Predajca služieb: Poskytuje dodávateľa súvisiacich služieb, ktoré dnes sú spotrebované klient formulár programu infopath.
///
/// História:
/// ——–
/// 07/24/07: Počiatočné kódovanie, Paul J. Gavin Conchango.
///
/// </Zhrnutie>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
verejné trieda VendorService : System.Web.Services.WebService
{
/// <Zhrnutie>
/// Predstavuje dodávateľa z vlastného zoznamu spravované MSUSA.
/// </Zhrnutie>
verejné trieda Vendor
{
verejné Vendor() { }
verejné Vendor(SPItem initItem)
{
Ak (! (initItem["Názov dodávateľa"] == null)) NázovDodávateľa = initItem["Názov dodávateľa"].ToString();
Ak (! (initItem["Adresa 1"] == null)) VendorAddress1 = initItem["Adresa 1"].ToString();
Ak (! (initItem["Adresa 2"] == null)) VendorAddress2 = initItem["Adresa 2"].ToString();
Ak (! (initItem["City"] == null)) VendorCity = initItem["City"].ToString();
Ak (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Ak (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Ak (! (initItem["State"] == null)) VendorState = initItem["State"].ToString();
Ak (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Ak (!(initItem["Fax"] == null)) VendorFax = initItem["Fax"].ToString();
Ak (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // Jedinečný identifikátor udržiavané prostredníctvom MOSS.
}
verejné int VendorItemId;
verejné reťazec NázovDodávateľa;
verejné reťazec VendorAddress1;
verejné reťazec VendorAddress2;
verejné reťazec VendorCity;
verejné reťazec VendorState;
verejné reťazec VendorZip;
verejné reťazec VendorPhone;
verejné reťazec VendorType;
verejné reťazec VendorSalesRepName;
verejné reťazec VendorFax;
}
verejné VendorService () {
//Odkomentovat nasledujúci riadok, ak používate navrhnuté súčasti
//InitializeComponent();
}
súkromné Vendor[] GenerateTestVendors()
{
Vendor[] resultList;
resultList = nové Vendor[100];
Vendor v;
v = nové 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 = nové 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 = nové 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;
return resultList;
}
[WebMethod]
verejné Vendor GetSpecificVendorById(int vendorId)
{
reťazec SpVendorSiteName; // Meno skutočného MOSS stránky, ktoré hostí vlastný zoznam predajcov.
reťazec SpVendorListName; // Meno skutočného MOSS zoznam obsahujúci dodávateľov.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
pomocou (SPSite stránky = nové SPSite(SpVendorSiteName))
{
pomocou (SPWeb webové stránky =. OpenWeb())
{
SPList currentList = web. Zoznamy[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
return nové Vendor(specificItem);
} // pomocou spweb web = site.openweb()
} // pomocou spsite stránky = nové spsite("http://localhost/mizuho")
}
[WebMethod]
// Predpokladá, že názov dodávateľa je jedinečný, z obchodného hľadiska
verejné Vendor GetSpecificVendorByVendorName(reťazec vendorName)
{
reťazec SpVendorSiteName; // Meno skutočného MOSS stránky, ktoré hostí vlastný zoznam predajcov.
reťazec SpVendorListName; // Meno skutočného MOSS zoznam obsahujúci dodávateľov.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
pomocou (SPSite stránky = nové SPSite(SpVendorSiteName))
{
pomocou (SPWeb webové stránky =. OpenWeb())
{
SPList currentList = web. Zoznamy[SpVendorListName];
foreach (SPItem vendorItem v currentList.Items)
{
Ak (vendorItem["Názov dodávateľa"] == null) pokračovať;
Ak (vendorItem["Názov dodávateľa"].ToString().Equals(vendorName))
return nové Vendor(vendorItem);
}
Vendor v = nové Vendor();
v.VendorPhone = "nebol nájdený: " + vendorName;
return v;
return null;
} // pomocou spweb web = site.openweb()
} // pomocou spsite stránky = nové spsite("http://localhost/mizuho")
} // metóda
[WebMethod]
verejné Vendor[] GetVendorsOfType (reťazec filterType)
{
reťazec SpVendorSiteName; // Názov aktuálnej stránky MOSS, ktorý hosťuje t
on dodávateľa vlastného zoznamu.
reťazec SpVendorListName; // Meno skutočného MOSS zoznam obsahujúci dodávateľov.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Vendor[] resultList;
int vendorIndex = 0;
resultList = nové Vendor[1000];
// Inicializácia zoznamu s predvolené priateľská správa.
Vendor v = nové Vendor();
v.VendorName = "Vyberte typ dodávateľa pre naplniť tento zoznam.";
resultList[0] = v;
// Konvertovať filter na malé písmená pre ľahšie porovnanie reťazcov neskôr.
filterType = filterType.ToLower();
// Ak bude schválený typ filtra je "test", vytvárať niektoré jednoduché údaje.
#región Filter, typ filtra = "testovanie"
Ak (filterType.Equals("skúška"))
return GenerateTestVendors();
#endregion
Ak (pravda)
{
pomocou (SPSite stránky = nové SPSite(SpVendorSiteName))
{
pomocou (SPWeb webové stránky =. OpenWeb())
{
v = null;
SPList currentList = web. Zoznamy[SpVendorListName];
// Iteráciou cez všetky položky v zozname dodávateľov.
foreach (SPItem vendorItem v currentList.Items)
{
reťazec lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
Ak (lowerVendorType.Equals(filterType))
{
resultList[vendorIndex ] = nové Vendor(vendorItem);
}
} // Iterácia cez všetkých dodávateľov v zozname
return TrimVendorArray(vendorIndex, resultList);
// návrat resultList;
} // pomocou spweb web = site.openweb()
} // pomocou spsite stránky = nové spsite("http://localhost/mizuho")
} // Ak je to pravda
return null;
}
súkromné Vendor[] TrimVendorArray(int newsize, Vendor[] originalVendorArray)
{
Vendor[] trimmedArray;
Ak (newsize == 0) newsize = 1;
trimmedArray = nové Vendor[newsize];
int currentCounter = 0;
pre (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
return trimmedArray;
}
}