MOSS: Iterating läbi kohandatud loendite ja filtreeritud andmeid tulles InfoPath

Äri stsenaariumi:

Meetodit, mis võimaldab kasutajatel kiiresti sisestada täpne ostu ostutellimused.

Äriprobleemi:

Kliendi ärisuhetes mitu sada hankijatega.

Müüjad on "tüüp" konkreetsete. See tähendab, et müüja müüb arvutiseadmed (näiteks. Dell) või kontoritarbed (näiteks. Klambrid).

Kuidas lubada lõppkasutajatele, kes loomine ost ostutellimused Vali sobiv hankija?

Majandustarkvaraga:

Eristada hankijate süsteemi kaudu "tüüp".

Kasutajatele võimaluse valida tüüp"" toote andmete filtreeritud komplekti sobiv müüjad.

Tehniline lahendus:

InfoPathi vorm on mõeldud võimaldab kasutajatel sisestada online osta ostutellimused.

Kaks InfoPathi valikute kontrollida hankija valik. Esimese, Kui kasutaja valib "ostu tüüp". See piirab teise valiku loendi sisaldavad ainult müüjad, kes müüvad selle ostu jaoks. See on klassikaline kuhjuvate rippmenüü.

Hankijate salvestatakse MOSS kohandatud loendi kohandatud veerud hankija atribuute nagu nimi, aadress ja eriti "tüüp".

Rakendada InfoPathi kliendiga tarbida mis veebiteenuse itereerib kohandatud loendi kaudu, tagasi ainult müüjad sobitamine esitatud "tüüp".

Kasuta web teenust InfoPath vormi kaudu.

Õppetunnid:

  • Esimese, vaja minna seda teed. Ma oleksin eelistanud teha täiesti InfoPathist filtreerimine ja ei tekita mingeid web service funktsionaalsust siin. Aga, Forms server ei esita nõutud filtreerimise võimalus. Panime peale reegel on "tüüp" valikuloend omamoodi uuesti avada hankija päringu vorm, kuid me ei saa seda tööd korralikult. Seetõttu, tuli rakendada web service.
  • See on klassikaline "kuhjuvate valiku loend" probleem InfoPathi vormid server maailma ja on palju häid näiteid seal, mis selgitavad, kuidas seda probleemi lahendada.
  • Hankijate loendis veeru tühiväärtus tagastada tühja stringi kui sellist, millele viitab: initItem["Hankija nimi"]. Selle asemel, See annab vastuseks väärtust null.

Mõned muud märkused:

  • Tagastab massiivi[] müüjad, sest mul oli raskusi, tagastades oma loendit ArrayList. InfoPathi oli kurtnud seda ja mul ei olnud aega või kalduvus võidelda üle. See, Muidugi, paneb kunstlikku piiri kokku mitu hankijat. See ka sundida mind rakendada trimmi() massiivi meetodiga, sest ma vihkan idee tagasi tagasi 100 nullväärtusega hankijate. InfoPath ei hooli, kuid see nagged mind. (Uuesti, See oli lihtsam kui InfoPath όle ArrayLists).
  • Rakendatud on GetSpecificVendorByName() Samuti funktsioon, mis võib olla õpetlik.

Kood:

kasutades Süsteemi;
kasutades System.Web mitu;
kasutades System.Web.Services;
kasutades System.Web.Services.Protocols;
kasutades Microsoft.SharePoint;
kasutades System.Configuration;

/// <Kokkuvõte>
///
Hankija teenus: Pakub hankija seotud teenused, mis täna tarbib InfoPathi kliendiga vormi.
///
/// Ajalugu:
/// ——–
/// 07/24/07: Esialgse kodeerimine, Paul J. Gavin Conchango.
///
/// </Kokkuvõte>
[Veebiteenuse(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
avalik klass VendorService : System.Web.Services.Veebiteenuse
{

/// <Kokkuvõte>
/// Esindab hankija poolt MSUSA kohandatud SharePointi loendist.
/// </Kokkuvõte>
avalik klass Hankija
{
avalik Hankija() { }

avalik Hankija(SPItem initItem)
{
Kui (! (initItem["Hankija nimi"] == null)) VendorName = initItem["Hankija nimi"].ToString();
Kui (! (initItem["Aadress 1"] == null)) VendorAddress1 = initItem["Aadress 1"].ToString();
Kui (! (initItem["Aadress 2"] == null)) VendorAddress2 = initItem["Aadress 2"].ToString();
Kui (! (initItem["City"] == null)) VendorCity = initItem["City"].ToString();
Kui (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Kui (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Kui (! (initItem["Riik"] == null)) VendorState = initItem["Riik"].ToString();
Kui (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Kui (!(initItem["Faks"] == null)) VendorFax = initItem["Faks"].ToString();
Kui (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Via MOSS säilitada ainu-ID.
}

avalik int VendorItemId;
avalik stringi VendorName;
avalik stringi VendorAddress1;
avalik stringi VendorAddress2;
avalik stringi VendorCity;
avalik stringi VendorState;
avalik stringi VendorZip;
avalik stringi VendorPhone;
avalik stringi VendorType;
avalik stringi VendorSalesRepName;
avalik stringi VendorFax;
}

avalik VendorService () {

//Eemalda kommentaar rea kui kasutades loodud komponendid
//InitializeComponent();
}

erasektori Hankija[] GenerateTestVendors()
{
Hankija[] resultList;
resultList = Uus Hankija[100];

Hankija v;
v = Uus Hankija();
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 = Uus Hankija();

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 = Uus Hankija();
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;

edasi-tagasi resultList;

}

[WebMethod]
avalik Hankija GetSpecificVendorById(int vendorId)
{
stringi SpVendorSiteName; // Tegelik MOSS veebilehekülg, mis majutab kohandatud loendi nimi.
stringi SpVendorListName; // Tegelik MOSS loend, mis sisaldab müüjate nimi.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

kasutades (SPSite'i Site = Uus SPSite'i(SpVendorSiteName))
{

kasutades (SPWebi Web = site. OpenWeb())
{

SPList currentList = web. Nimekirjad[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

edasi-tagasi Uus Hankija(specificItem);

} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/mizuho")

}

[WebMethod]
// Eeldab, et müüja nimi on ainulaadne, vaatenurgast
avalik Hankija GetSpecificVendorByVendorName(stringi tuleb)
{
stringi SpVendorSiteName; // Tegelik MOSS veebilehekülg, mis majutab kohandatud loendi nimi.
stringi SpVendorListName; // Tegelik MOSS loend, mis sisaldab müüjate nimi.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

kasutades (SPSite'i Site = Uus SPSite'i(SpVendorSiteName))
{
kasutades (SPWebi Web = site. OpenWeb())
{

SPList currentList = web. Nimekirjad[SpVendorListName];

foreach (SPItem vendorItem aastal currentList.Items)
{
Kui (vendorItem["Hankija nimi"] == null) jätkata;

Kui (vendorItem["Hankija nimi"].ToString().Võrdub(tuleb))
edasi-tagasi Uus Hankija(vendorItem);
}

Hankija v = Uus Hankija();
v.VendorPhone = "ei leitud: " + tuleb;

edasi-tagasi v;

edasi-tagasi null;

} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/mizuho")

} // meetod

[WebMethod]
avalik Hankija[] GetVendorsOfType (stringi filterType)
{

stringi SpVendorSiteName; // Nime tegelik MOSS veebilehekülg, mis majutab t
He hankija kohandatud loend.
stringi SpVendorListName; // Tegelik MOSS loend, mis sisaldab müüjate nimi.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

Hankija[] resultList;
int vendorIndex = 0;
resultList = Uus Hankija[1000];

// Lähtesta loend koos vaikesõnumiga sõbralik.
Hankija v = Uus Hankija();
v.VendorName = "Valige hankija tüüpi selle loendi asustamiseks.";
resultList[0] = v;

// Teisenda filter väiketäheliseks lihtsam hiljem string võrdlus.
filterType = filterType.ToLower();

// Kui filtritüüpi edasi on "test", mõned lihtsad andmete loomiseks.
#piirkond Filtreerida type = "testi"
Kui (filterType. võrdub("katse"))
edasi-tagasi GenerateTestVendors();
#endregion

Kui (True)
{
kasutades (SPSite'i Site = Uus SPSite'i(SpVendorSiteName))
{
kasutades (SPWebi Web = site. OpenWeb())
{

v = null;

SPList currentList = web. Nimekirjad[SpVendorListName];

// Itereerima läbi kõigi kaupade hankijate loend.
foreach (SPItem vendorItem aastal currentList.Items)
{

stringi lowerVendorType;

lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);

Kui (lowerVendorType. võrdub(filterType))
{
resultList[vendorIndex ] = Uus Hankija(vendorItem);
}
} // iterating läbi kõigi hankijate loendis


edasi-tagasi TrimVendorArray(vendorIndex, resultList);
// tagasi resultList;

} // kasutades spweb web = site.openweb()
} // kasutate SPSite'i koduleheküljel = uue SPSite'i("http://localhost/mizuho")

} // kui tõene

edasi-tagasi null;
}

erasektori Hankija[] TrimVendorArray(int newsize, Hankija[] originalVendorArray)
{
Hankija[] trimmedArray;

Kui (newsize == 0) newsize = 1;
trimmedArray = Uus Hankija[newsize];

int currentCounter = 0;

jaoks (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

edasi-tagasi trimmedArray;

}
}

Jäta vastus

Teie e-posti aadressi ei avaldata. Kohustuslikud väljad on tähistatud *