Senario Busnes:
Darparu dull sy'n galluogi defnyddwyr i fynd i mewn archebion prynu cywir yn gyflym.
Problem Busnes:
Mae'r cleient yn gwneud busnes gyda rhai cannoedd o gwerthwyr.
Gwerthwyr yn cael eu "math" penodol. Mae hyn yn golygu y bydd gwerthwr yn gwerthu offer cyfrifiadurol (e.e.. Dell) neu gyflenwadau swyddfa (e.e.. Staples).
Sut allwn ni hwyluso defnyddwyr sydd wedi creu dethol archebion prynu gwerthwr ddilys?
Ateb Busnes:
Gwahaniaethu gwerthwyr yn y system drwy "math".
Galluogi defnyddwyr i ddewis "math" cynnyrch ac yna darparu set wedi'u hidlo o werthwyr priodol.
Ateb technegol:
Lluniwyd ffurflen InfoPath bod archebion prynu yn galluogi defnyddwyr i fynd ar-lein i.
Mae dwy restr ddethol InfoPath rheoli dethol gwerthwr. Cyntaf, Mae'r defnyddiwr yn dewis "math prynu". Mae hyn yn cyfyngu ar restr ddethol ail i gynnwys dim ond gwerthwyr sy'n gwerthu ar gyfer y math o brynu. Dyma estynnol clasurol i'r rhaeadru.
Cedwir gwerthwyr yn rhestr bersonol MOSS gyda cholofnau personol ar gyfer nodweddion gwerthwr megis enw, cyfeiriad a enwedig "math".
Gweithredu gwasanaeth ar y we ar gyfer cleient InfoPath i fwyta sy'n ailadrodd drwy'r rhestr gwerthwr arfer, dychwelyd dim ond gwerthwyr paru a gyflenwir "math".
Weithredu'r gwasanaeth ar y we drwy gyfrwng y ffurflen InfoPath.
Gwersi a Ddysgwyd:
- Cyntaf, mae'n ymddangos yn angenrheidiol i fynd y llwybr hwn. Byddwn wedi bod yn well i wneud y hidlo gyfan gwbl o fewn InfoPath a pheidio â chreu unrhyw swyddogaeth gwasanaeth ar y we yma. Fodd bynnag,, Nid yw ffurflenni gweinydd yn darparu'r gallu hidlo gofynnol. Gallwn roi rheol ar y "math" rhestr dewis yn y ffurflen er mwyn datrys o ail-agor y gwerthwr ymholiad, ond ni allwn ei gael i weithio'n iawn. Felly,, roedd angen i weithredu'r gwasanaeth ar y we.
- Mae hon yn glasur "rhaeadru dethol rhestr" problem yn y ffurflenni InfoPath gweinydd byd ac mae llawer o enghreifftiau da allan yna sy'n egluro sut i ddatrys y.
- Nid yw gwerth gwag ar gyfer colofn yn y rhestr gwerthwr yn dychwelyd llinyn gwag pan cyfeirio fel hyn: initItem["Gwerthwr enw"]. Yn lle hynny, mae'n dychwelyd yn null.
Rhai Nodiadau eraill:
- Byddaf yn dychwelyd arae[] gwerthwyr oherwydd fy mod wedi cael rhywfaint o anhawster dychwelyd i ArrayList. Roedd InfoPath cwyno am y peth a doeddwn i ddim yn cael yr amser na'r awydd i ymladd drosto. Mae hyn yn, wrth gwrs, rhoi terfyn artiffisial ar gyfanswm nifer y gwerthwyr. Mae hefyd yn gorfodi i mi i weithredu trim() dull ar y casgliad oherwydd mae'n gas gennyf y syniad o ddychwelyd yn ôl 100 o'r gwerthwyr NWL. Nid InfoPath yn poeni, ond mae'n nagged arnaf. (Unwaith eto,, roedd hyn yn haws nag ymladd InfoPath dros ArrayLists).
- Rwy'n gweithredu GetSpecificVendorByName() swyddogaeth yn ogystal, a allai fod yn addysgiadol.
Mae'r cod:
gan ddefnyddio System;
gan ddefnyddio System.Web;
gan ddefnyddio System.Web.Services;
gan ddefnyddio System.Web.Services.Protocols;
gan ddefnyddio Microsoft.SharePoint;
gan ddefnyddio System.Configuration;
/// <crynodeb>
/// Gwasanaeth gwerthwr: Darparu gwasanaethau Mae'r gwerthwr yn gysylltiedig â yfir heddiw gan ffurflen cleient infopath.
///
/// Hanes:
/// ——–
/// 07/24/07: Cychwynnol codio, Paul J. Gavin Conchango.
///
/// </crynodeb>
[Webservice(Bwlchenw = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
cyhoeddus dosbarth VendorService : System.Web.Services.Webservice
{
/// <crynodeb>
/// Cynrychioli gwerthwr o restr sharepoint personol a gynhelir gan MSUSA.
/// </crynodeb>
cyhoeddus dosbarth Gwerthwr
{
cyhoeddus Gwerthwr() { }
cyhoeddus Gwerthwr(Poeri initItem)
{
os (! (initItem["Gwerthwr enw"] == sero)) VendorName = initItem["Gwerthwr enw"].ToString();
os (! (initItem["Cyfeiriad 1"] == sero)) VendorAddress1 = initItem["Cyfeiriad 1"].ToString();
os (! (initItem["Yn ymdrin â 2"] == sero)) VendorAddress2 = initItem["Yn ymdrin â 2"].ToString();
os (! (initItem["Dinas"] == sero)) VendorCity = initItem["Dinas"].ToString();
os (! (initItem["VendorPhone"] == sero)) VendorPhone = initItem["VendorPhone"].ToString();
os (! (initItem["PurchaseType"] == sero)) VendorType = initItem["PurchaseType"].ToString();
os (! (initItem["State"] == sero)) VendorState = initItem["State"].ToString();
os (! (initItem["Zip"] == sero)) VendorZip = initItem["Zip"].ToString();
os (!(initItem["Ffacs"] == sero)) VendorFax = initItem["Ffacs"].ToString();
os (!(initItem["SalesRepName"] == sero)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // ID unigryw a gynhelir drwy MOSS.
}
cyhoeddus int VendorItemId;
cyhoeddus llinyn VendorName;
cyhoeddus llinyn VendorAddress1;
cyhoeddus llinyn VendorAddress2;
cyhoeddus llinyn VendorCity;
cyhoeddus llinyn VendorState;
cyhoeddus llinyn VendorZip;
cyhoeddus llinyn VendorPhone;
cyhoeddus llinyn VendorType;
cyhoeddus llinyn VendorSalesRepName;
cyhoeddus llinyn VendorFax;
}
cyhoeddus VendorService () {
//Uncomment Cynlluniodd y llinell ganlynol os ydych yn defnyddio cydrannau
//InitializeComponent();
}
preifat Gwerthwr[] GenerateTestVendors()
{
Gwerthwr[] resultList;
resultList = newydd Gwerthwr[100];
Gwerthwr v;
v = newydd Gwerthwr();
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 = newydd Gwerthwr();
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 = newydd Gwerthwr();
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;
dychwelyd resultList;
}
[WebMethod]
cyhoeddus Gwerthwr GetSpecificVendorById(int vendorId)
{
llinyn SpVendorSiteName; // Enw'r safle MOSS gwirioneddol sy'n lletya'r rhestr bersonol y gwerthwr.
llinyn SpVendorListName; // Enw o'r rhestr MOSS gwirioneddol sy'n cynnwys gwerthwyr.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
gan ddefnyddio (SPSite safle = newydd SPSite(SpVendorSiteName))
{
gan ddefnyddio (SPWeb we = safle. OpenWeb())
{
SPList currentList = we. Rhestrau[SpVendorListName];
Poeri specificItem = currentList.Items[vendorId];
dychwelyd newydd Gwerthwr(specificItem);
} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/mizuho")
}
[WebMethod]
// Tybio bod enw'r gwerthwr yn unigryw, o safbwynt busnes
cyhoeddus Gwerthwr GetSpecificVendorByVendorName(llinyn vendorName)
{
llinyn SpVendorSiteName; // Enw'r safle MOSS gwirioneddol sy'n lletya'r rhestr bersonol y gwerthwr.
llinyn SpVendorListName; // Enw o'r rhestr MOSS gwirioneddol sy'n cynnwys gwerthwyr.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
gan ddefnyddio (SPSite safle = newydd SPSite(SpVendorSiteName))
{
gan ddefnyddio (SPWeb we = safle. OpenWeb())
{
SPList currentList = we. Rhestrau[SpVendorListName];
foreach (Poeri vendorItem yn currentList.Items)
{
os (vendorItem["Gwerthwr enw"] == sero) parhau;
os (vendorItem["Gwerthwr enw"].ToString().Equals(vendorName))
dychwelyd newydd Gwerthwr(vendorItem);
}
Gwerthwr v = newydd Gwerthwr();
v.VendorPhone = "nid dod o hyd: " + vendorName;
dychwelyd v;
dychwelyd sero;
} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/mizuho")
} // dull
[WebMethod]
cyhoeddus Gwerthwr[] GetVendorsOfType (llinyn math hidlo)
{
llinyn SpVendorSiteName; // Enw'r safle MOSS gwirioneddol sy'n lletya'r t
rhestr bersonol gwerthwr au.
llinyn SpVendorListName; // Enw o'r rhestr MOSS gwirioneddol sy'n cynnwys gwerthwyr.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
Gwerthwr[] resultList;
int vendorIndex = 0;
resultList = newydd Gwerthwr[1000];
// Ymgychwyn y rhestr gyda neges gyfeillgar diofyn.
Gwerthwr v = newydd Gwerthwr();
v.VendorName = "Dewiswch math o gwerthwr i lenwi'r rhestr hon.";
resultList[0] = v;
// Troi'n yr Hidlydd achos is ar gyfer haws cymharu llinyn yn ddiweddarach.
filterType = filterType.ToLower();
// Os oedd y math hidlydd ei basio yn 'brofi', cynhyrchu rhai data syml.
#rhanbarth Hidlo math = 'brofi"
os (filterType.Equals('brofi"))
dychwelyd GenerateTestVendors();
#endregion
os (wir)
{
gan ddefnyddio (SPSite safle = newydd SPSite(SpVendorSiteName))
{
gan ddefnyddio (SPWeb we = safle. OpenWeb())
{
v = sero;
SPList currentList = we. Rhestrau[SpVendorListName];
// Ailadrodd drwy holl eitemau yn y rhestr gwerthwr.
foreach (Poeri vendorItem yn currentList.Items)
{
llinyn lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
os (lowerVendorType.Equals(math hidlo))
{
resultList[vendorIndex ] = newydd Gwerthwr(vendorItem);
}
} // buddiol drwy'r holl gwerthwyr yn y rhestr
dychwelyd TrimVendorArray(vendorIndex, resultList);
// dychwelyd resultList;
} // ddefnyddio'r we spweb = site.openweb()
} // defnyddio'r safle spsite = spsite newydd("http://localhost/mizuho")
} // Os yw'n wir
dychwelyd sero;
}
preifat Gwerthwr[] TrimVendorArray(int newsize, Gwerthwr[] originalVendorArray)
{
Gwerthwr[] trimmedArray;
os (newsize == 0) newsize = 1;
trimmedArray = newydd Gwerthwr[newsize];
int currentCounter = 0;
ar gyfer (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}
dychwelyd trimmedArray;
}
}