MOSS: Ailadrodd drwy restrau arfer a dychwelyd data hidlo i InfoPath

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 = "v1_st";
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;

}
}

Ad a Ateb

Ni fydd eich cyfeiriad e-bost yn cael ei gyhoeddi. Meysydd gofynnol yn cael eu marcio *