SAMANŲ: Iterating per pasirinktinius sąrašus ir grįžta filtruotus duomenis į InfoPath

Verslo scenarijus:

Pateikti metodą, kuris leidžia vartotojams greitai įvesti tikslią pirkimo paraiškas.

Verslo problemas:

Klientas turi verslo ryšių su keli šimtai pardavėjai.

Pardavėjai yra "tipo" konkrečių. Tai reiškia, kad tiekėjas parduoda kompiuterinę įrangą (pvz.. Dell) ar raštinės reikmenys (pvz.. Kabės).

Kaip mes leisti galutiniams vartotojams, kurie sukurti pirkimo paraiškas pasirinkti galiojantį tiekėją?

Pervežimų:

Atskirti pardavėjai sistemoje per "tipo".

Leisti vartotojams pasirinkti "" produkto ir tada – nustatyti filtruoto tinkamų tiekėjų.

Techninis sprendimas:

Programos InfoPath forma buvo suprojektuotas taip, kad leidžia vartotojams įvesti internete pirkimo paraiškos.

Du InfoPath pasirinkimo sąrašuose kontroliuoti tiekėjų atrankos. Pirmosios, kad vartotojas galėtų pasirinkti "pirkimų tipo". Tai riboja antrąjį atrankos sąrašą turi būti tik pirkimo tipo pardavusių tiekėjų. Tai yra klasikinis pakopinių išskleid.

Pardavėjai yra saugomi MOSS pasirinktinį sąrašą su pasirinktinius stulpelius tiekėjo požymiai, kaip antai pavadinimas, Adresas ir ypač "tipo".

Įgyvendinti tinklo tarnybos, programa InfoPath kliento vartoti kad kartojasi per pasirinktinio tiekėjų sąrašas, grįžta tik tiekėjų atitikimo per teikiamoms "tipo".

Remtis tinklo tarnybos per "InfoPath" forma.

Pamokas:

  • Pirmosios, atrodo, kad reikia eiti šiuo keliu. Aš būtų norėjusi daryti filtravimo visiškai programą InfoPath ir negali sukurti jokių žiniatinklio tarnybos funkcines galimybes čia. Tačiau, formų serveris nepateikia reikalinga filtravimo galimybes. Mes galime įdėti į paprastai a tipo"" pasirinkimų sąrašo forma tarsi iš naujo atidaryti tiekėjo užklausa, bet mes negalime gauti ji tinkamai veiktų. Todėl, reikėjo įgyvendinti tinklo tarnybos.
  • Tai klasikinis "pakopinių pasirinkimo sąrašas" problema su InfoPath formų serveris pasaulyje ir yra daug gerų pavyzdžių iš ten, kuriose aiškinama, kaip išspręsti šią.
  • Tuščią stulpelį tiekėjo sąrašo reikšmę negrąžina tuščia eilutė kai nuorodos panašaus: initItem["Tiekėjo pavadinimas"]. Vietoj, jis grįžta į nulinę.

Kai kurios kitos pastabos:

  • Aš sugrįšiu masyvas[] tiekėjų nes aš turėjo tam tikrų sunkumų grįžimas į ArrayList, skirto. Programa InfoPath buvo skundą apie tai ir aš neturėjo laiko ar noro kovoti per jį. Tai, žinoma, dirbtinis riba užsideda tiekėjų skaičius. Ji taip pat priversta man įgyvendinti apdaila() metodas masyvą nes aš nekenčiu idėja grįžti atgal 100 yra neapibrėžtas tiekėjų. InfoPath nerūpi, bet tai nagged man. (Dar kartą, tai buvo lengviau nei kovos su InfoPath per ArrayLists).
  • Aš įgyvendinti, GetSpecificVendorByName() funkcija taip pat, kuri gali būti naudinga.

Kodas:

naudojant Sistemos;
naudojant System.Web;
naudojant System.Web.Services;
naudojant System.Web.Services.Protocols;
naudojant Microsoft.SharePoint;
naudojant System.Configuration;

/// <santrauka>
///
Tiekėjo paslaugos: Numatyta tiekėjo susijusių paslaugų kuri šiandien suvartoja infopath kliento formos.
///
/// Istorija:
/// ——–
/// 07/24/07: Pradinio kodavimo, Paul J. Gavin, Conchango.
///
/// </santrauka>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
visuomenės klasės VendorService : System.Web.Services.WebService
{

/// <santrauka>
/// Yra palaikoma MSUSA pasirinktines sharepoint sąraše tiekėjui.
/// </santrauka>
visuomenės klasės Tiekėjo
{
visuomenės Tiekėjo() { }

visuomenės Tiekėjo(SPItem initItem)
{
Jei (! (initItem["Tiekėjo pavadinimas"] == neapibrėžtas)) VendorName = initItem["Tiekėjo pavadinimas"].ToString();
Jei (! (initItem["Adresas 1"] == neapibrėžtas)) VendorAddress1 = initItem["Adresas 1"].ToString();
Jei (! (initItem["Adresas 2"] == neapibrėžtas)) VendorAddress2 = initItem["Adresas 2"].ToString();
Jei (! (initItem["City"] == neapibrėžtas)) VendorCity = initItem["City"].ToString();
Jei (! (initItem["VendorPhone"] == neapibrėžtas)) VendorPhone = initItem["VendorPhone"].ToString();
Jei (! (initItem["PurchaseType"] == neapibrėžtas)) VendorType = initItem["PurchaseType"].ToString();
Jei (! (initItem["Valstybė"] == neapibrėžtas)) VendorState = initItem["Valstybė"].ToString();
Jei (! (initItem["Zip"] == neapibrėžtas)) VendorZip = initItem["Zip"].ToString();
Jei (!(initItem["Fakso"] == neapibrėžtas)) VendorFax = initItem["Fakso"].ToString();
Jei (!(initItem["SalesRepName"] == neapibrėžtas)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Unikalus ID numeris išlaikomas per MOSS.
}

visuomenės LC VendorItemId;
visuomenės eilutė VendorName;
visuomenės eilutė VendorAddress1;
visuomenės eilutė VendorAddress2;
visuomenės eilutė VendorCity;
visuomenės eilutė VendorState;
visuomenės eilutė VendorZip;
visuomenės eilutė VendorPhone;
visuomenės eilutė VendorType;
visuomenės eilutė VendorSalesRepName;
visuomenės eilutė VendorFax;
}

visuomenės VendorService () {

//Anuliuoti šią eilutę jei naudojant suprojektuoti
//InitializeComponent();
}

privačių Tiekėjo[] GenerateTestVendors()
{
Tiekėjo[] resultList;
resultList = naujas Tiekėjo[100];

Tiekėjo v;
v = naujas Tiekėjo();
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 = naujas Tiekėjo();

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 = naujas Tiekėjo();
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;

grįžti resultList;

}

[WebMethod]
visuomenės Tiekėjo GetSpecificVendorById(LC teikėjo ID)
{
eilutė SpVendorSiteName; // Faktinį MOSS svetainėje, kurioje yra tiekėjo pasirinktinį sąrašą, pavadinimas.
eilutė SpVendorListName; // Tikrasis MOSS sąrašą, kuriame yra pardavėjai pavadinimas.

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

naudojant (SPSite svetainės = naujas SPSite(SpVendorSiteName))
{

naudojant (SPWeb interneto = svetainėje. OpenWeb())
{

SPList currentList = interneto. Sąrašai[SpVendorListName];

SPItem specificItem = currentList.Items[teikėjo ID];

grįžti naujas Tiekėjo(specificItem);

} // naudojant spweb interneto = site.openweb()
} // naudojant spsite svetainės = naujas spsite("http://localhost/mizuho")

}

[WebMethod]
// Daroma prielaida, kad tiekėjo pavadinimas yra unikalus, Žvelgiant iš verslo perspektyvos
visuomenės Tiekėjo GetSpecificVendorByVendorName(eilutė būti)
{
eilutė SpVendorSiteName; // Faktinį MOSS svetainėje, kurioje yra tiekėjo pasirinktinį sąrašą, pavadinimas.
eilutė SpVendorListName; // Tikrasis MOSS sąrašą, kuriame yra pardavėjai pavadinimas.

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

naudojant (SPSite svetainės = naujas SPSite(SpVendorSiteName))
{
naudojant (SPWeb interneto = svetainėje. OpenWeb())
{

SPList currentList = interneto. Sąrašai[SpVendorListName];

foreach (SPItem vendorItem į currentList.Items)
{
Jei (vendorItem["Tiekėjo pavadinimas"] == neapibrėžtas) toliau;

Jei (vendorItem["Tiekėjo pavadinimas"].ToString().Yra lygi(būti))
grįžti naujas Tiekėjo(vendorItem);
}

Tiekėjo v = naujas Tiekėjo();
v.VendorPhone = "not found: " + būti;

grįžti v;

grįžti neapibrėžtas;

} // naudojant spweb interneto = site.openweb()
} // naudojant spsite svetainės = naujas spsite("http://localhost/mizuho")

} // metodas

[WebMethod]
visuomenės Tiekėjo[] GetVendorsOfType (eilutė filterType)
{

eilutė SpVendorSiteName; // Tikrasis MOSS svetainės, kurioje yra t pavadinimas
jis tiekėjo pasirinktinį sąrašą.
eilutė SpVendorListName; // Tikrasis MOSS sąrašą, kuriame yra pardavėjai pavadinimas.

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

Tiekėjo[] resultList;
LC vendorIndex = 0;
resultList = naujas Tiekėjo[1000];

// Inicijuoti sąrašą su numatytuoju pranešimu, draugiškas.
Tiekėjo v = naujas Tiekėjo();
v.VendorName = "Pasirinkite tiekėjo tipo užpildyti šį sąrašą.";
resultList[0] = v;

// Konvertuoti filtrą į mažąją lengviau vėliau palyginimui eilutė.
filterType = filterType.ToLower();

// Jei filtro tipas yra "testas", kai paprastas duomenų.
#regionas Filtras, filtro tipas = "testas"
Jei (filterType. lygu("bandymas"))
grįžti GenerateTestVendors();
#endregion

Jei (tiesa)
{
naudojant (SPSite svetainės = naujas SPSite(SpVendorSiteName))
{
naudojant (SPWeb interneto = svetainėje. OpenWeb())
{

v = neapibrėžtas;

SPList currentList = interneto. Sąrašai[SpVendorListName];

// Kartoti per visų prekių tiekėjų sąrašas.
foreach (SPItem vendorItem į currentList.Items)
{

eilutė lowerVendorType;

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

Jei (lowerVendorType. sudaro(filterType))
{
resultList[vendorIndex ] = naujas Tiekėjo(vendorItem);
}
} // Iteracja per visų tiekėjų sąraše


grįžti TrimVendorArray(vendorIndex, resultList);
// grįžti resultList;

} // naudojant spweb interneto = site.openweb()
} // naudojant spsite svetainės = naujas spsite("http://localhost/mizuho")

} // Jei tai tiesa

grįžti neapibrėžtas;
}

privačių Tiekėjo[] TrimVendorArray(LC newsize, Tiekėjo[] originalVendorArray)
{
Tiekėjo[] trimmedArray;

Jei (newsize == 0) newsize = 1;
trimmedArray = naujas Tiekėjo[newsize];

LC currentCounter = 0;

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

grįžti trimmedArray;

}
}

palik atsakymą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *