MUSKO: Iterating tra laŭmendaj listoj kaj revenanta filtrita datumon al InfoPath

Komerca Scenaro:

Provizi metodon kiu ebligas uzantojn eniri precizan aĉeton rekvizicias rapide.

Komerca problemo:

La kliento faras komercan kun pluraj cent vendistoj.

Vendistoj estas "tipo" Specifa. Tio ĉi signifas ke vendisto vendas komputilan ekipaĵon (Ekz. Dell) Aŭ oficejaj provizoj (Ekz. Konstantaĵoj).

Kiel ni ebligas finaj uzantoj kiu kreas #a?eto rekviziciojn elektas validan vendiston?

Komerca Solvo:

Diferencigi vendistojn en la sistemo tra "tipo".

Ebligi uzantojn elekti la "tipon" De produkto kaj tiam provizi filtrita aron de konvenaj vendistoj.

Teknika Solvo:

InfoPath formo estis desegnita ke ebligas uzantojn eniri enretajn #a?eto rekviziciojn.

Du InfoPath elektaj listoj kontrola vendisto elekto. Unue, La uzanto elektas "#a?eto tipon". Tio ĉi limigas duan elektan liston enhavi nurajn vendistojn kiu vendas por tiu aĉeta tipo. Tio ĉi estas klasika kaskada falo-malsupren.

Vendistoj estas entenita en MUSKO #la?menda listo kun #la?menda kolumnoj por vendistaj ecoj kiel nomo, Adreso kaj precipe "tipo".

Efektivigi #aranea?o servon por InfoPath kliento konsumi ke iterates tra la #la?menda vendista listo, Revenanta nurajn vendistojn egalanta provizita "tipon".

Alvoki la araneaĵan servon tra la InfoPath formo.

Lecionoj Lernis:

  • Unue, Ĝi ŝajnas necesa iri ĉi tiun vojon. Mi estus preferinta fari la filtrantan tute ene de InfoPath kaj ne krei ajnan araneaĵan servan funkcion ĉi tie. Tamen, Forma servilo ne provizas la postulatan filtrantan kapablon. Ni povas meti regulon al la "tipo" Elekta listo en la formo ordigi de re-malfermi la vendistan demandon, Sed ni ne povas akiri ĝin labori konvene. Sekve, Ĝi estis necesa efektivigi la araneaĵan servon.
  • Tio ĉi estas klasika "kaskada elekta listo" Problemo en la InfoPath forma servilo mondo kaj estas multaj bonaj ekzemploj tie ke klarigas kiel solvi tion ĉi.
  • Malplena valoro por kolumno en la vendista listo ne revenas senhoman ŝnuron kiam referencita tiel: InitItem["Vendista Nomo"]. Male, ?i revenas null.

Kelkaj aliaj Notoj:

  • Mi revenas aron[] De vendistoj #?ar mi havis iun malfacilecon revenanta ArrayList. InfoPath estis plendanta pri ?i kaj mi didn?? Havas la tempon #a? la inklinon batali super ?i. Tio ĉi, Nature, Metas artefaritan limon sur la totala nombro de vendistoj. ?i #anka? devigis min efektivigi bonordan() Metodo sur la aro ĉar mi malamas la ideon reveni reen 100-a de null vendistoj. InfoPath doesn?? Prizorgo, Sed ?i nagged #?e mi. (Denove, #Tio ?i estis pli facila ol batalanta InfoPath super ArrayLists).
  • Mi efektivigis GetSpecificVendorByName() Funkcii #anka?, Kiu povas esti instrua.

La kodo:

Uzanta Sistemo;
Uzanta Sistemo.Araneaĵo;
Uzanta Sistemo.Araneaĵo.Servoj;
Uzanta Sistemo.Araneaĵo.Servoj.Protokoloj;
Uzanta Microsoft.SharePoint;
Uzanta Sistemo.Konfiguracio;

/// <Resuma>
///
Vendista Servo: Provizas vendiston rilatita servojn kiu hodiaŭ estas konsumita de infopath klienta formo.
///
/// Historio:
/// ——–
/// 07/24/07: Komenca kodiĝo, Paul J. Gavin de Conchango.
///
/// </Resuma>
[WebService(Namespace = "Http://Www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
Publika Klaso VendorService : Sistemo.Araneaĵo.Servoj.WebService
{

/// <Resuma>
/// Reprezentas vendiston de laŭmenda sharepoint listo daŭrigita de MSUSA.
/// </Resuma>
Publika Klaso Vendisto
{
Publika Vendisto() { }

Publika Vendisto(SPItem InitItem)
{
Se (! (InitItem["Vendista Nomo"] == Null)) VendorName = initItem["Vendista Nomo"].ToString();
Se (! (InitItem["Trakti 1"] == Null)) VendorAddress1 = initItem["Trakti 1"].ToString();
Se (! (InitItem["Trakti 2"] == Null)) VendorAddress2 = initItem["Trakti 2"].ToString();
Se (! (InitItem["Urbo"] == Null)) VendorCity = initItem["Urbo"].ToString();
Se (! (InitItem["VendorPhone"] == Null)) VendorPhone = initItem["VendorPhone"].ToString();
Se (! (InitItem["PurchaseType"] == Null)) VendorType = initItem["PurchaseType"].ToString();
Se (! (InitItem["Stato"] == Null)) VendorState = initItem["Stato"].ToString();
Se (! (InitItem["Zipo"] == Null)) VendorZip = initItem["Zipo"].ToString();
Se (!(InitItem["Telefaksilo"] == Null)) VendorFax = initItem["Telefaksilo"].ToString();
Se (!(InitItem["SalesRepName"] == Null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.IDENTIGAĴO; // Unika IDENTIGAĴO daŭrigita tra MUSKO.
}

Publika Int VendorItemId;
Publika Ŝnuro VendorName;
Publika Ŝnuro VendorAddress1;
Publika Ŝnuro VendorAddress2;
Publika Ŝnuro VendorCity;
Publika Ŝnuro VendorState;
Publika Ŝnuro VendorZip;
Publika Ŝnuro VendorPhone;
Publika Ŝnuro VendorType;
Publika Ŝnuro VendorSalesRepName;
Publika Ŝnuro VendorFax;
}

Publika VendorService () {

//Uncomment la sekvanta linio se uzanta desegnita erojn
//InitializeComponent();
}

Privata Vendisto[] GenerateTestVendors()
{
Vendisto[] ResultList;
ResultList = Nova Vendisto[100];

Vendisto V;
V = Nova Vendisto();
V.VendorAddress1 = "V1_address1";
V.VendorAddress2 = "V1_address2";
V.VendorCity = "V1_urbo";
V.VendorName = "V1_vendorname";
V.VendorPhone = "V1_vendorphone";
V.VendorState = "V1_st";
V.VendorType = "V1_tipo";
V.VendorZip = "V1_zipo";

ResultList[0] = V;

V = Nova Vendisto();

V.VendorAddress1 = "V2_address1";
V.VendorAddress2 = "V2_address2";
V.VendorCity = "V2_urbo";
V.VendorName = "V2_vendorname";
V.VendorPhone = "V2_vendorphone";
V.VendorState = "V2_st";
V.VendorType = "V2_tipo";
V.VendorZip = "V2_zipo";

ResultList[1] = V;

V = Nova Vendisto();
V.VendorAddress1 = "V3_address1";
V.VendorAddress2 = "V3_address2";
V.VendorCity = "V3_urbo";
V.VendorName = "V3_vendorname";
V.VendorPhone = "V3_vendorphone";
V.VendorState = "V3_st";
V.VendorType = "V3_tipo";
V.VendorZip = "V3_zipo";

ResultList[2] = V;

Reveno ResultList;

}

[WebMethod]
Publika Vendisto GetSpecificVendorById(Int VendorId)
{
Ŝnuro SpVendorSiteName; // Nomo de la reala MUSKA ejo kiu gastigas la vendiston laŭmenda listo.
Ŝnuro SpVendorListName; // Nomo de la reala MUSKA listo enhavanta vendistojn.

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

Uzanta (SPSite Ejo = Nova SPSite(SpVendorSiteName))
{

Uzanta (SPWeb Araneaĵa = ejo.OpenWeb())
{

SPList CurrentList = araneaĵo.Listoj[SpVendorListName];

SPItem SpecificItem = currentList.Eroj[VendorId];

Reveno Nova Vendisto(SpecificItem);

} // Uzanta spweb araneaĵa = ejo.Openweb()
} // Uzanta spsite ejo = nova spsite("Http://Localhost/mizuho")

}

[WebMethod]
// Supozas ke la vendista nomo estas unika, De komerca perspektivo
Publika Vendisto GetSpecificVendorByVendorName(Ŝnuro VendorName)
{
Ŝnuro SpVendorSiteName; // Nomo de la reala MUSKA ejo kiu gastigas la vendiston laŭmenda listo.
Ŝnuro SpVendorListName; // Nomo de la reala MUSKA listo enhavanta vendistojn.

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

Uzanta (SPSite Ejo = Nova SPSite(SpVendorSiteName))
{
Uzanta (SPWeb Araneaĵa = ejo.OpenWeb())
{

SPList CurrentList = araneaĵo.Listoj[SpVendorListName];

Foreach (SPItem VendorItem Je CurrentList.Eroj)
{
Se (VendorItem["Vendista Nomo"] == Null) #Da?ri;

Se (VendorItem["Vendista Nomo"].ToString().Egaluloj(VendorName))
Reveno Nova Vendisto(VendorItem);
}

Vendisto V = Nova Vendisto();
V.VendorPhone = "Ne fondi: " + VendorName;

Reveno V;

Reveno Null;

} // Uzanta spweb araneaĵa = ejo.Openweb()
} // Uzanta spsite ejo = nova spsite("Http://Localhost/mizuho")

} // Metodo

[WebMethod]
Publika Vendisto[] GetVendorsOfType (Ŝnuro FilterType)
{

Ŝnuro SpVendorSiteName; // Nomo de la reala MUSKA ejo kiu gastigas t
Li vendisto laŭmenda listo.
Ŝnuro SpVendorListName; // Nomo de la reala MUSKA listo enhavanta vendistojn.

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

Vendisto[] ResultList;
Int VendorIndex = 0;
ResultList = Nova Vendisto[1000];

// Initialize la listo kun defaŭlta amika mesaĝo.
Vendisto V = Nova Vendisto();
V.VendorName = "Elekti vendistan tipon loĝi ĉi tiun liston.";
ResultList[0] = V;

// Transformi la filtrilon malaltigi kazon por pli facila ŝnura komparo poste.
FilterType = filterType.ToLower();

// Se la filtrila tipo pasita estas "testo", Produkti iun simplan datumon.
#Regiono Filtrila tipo = "testo"
Se (FilterType.Egaluloj("Testo"))
Reveno GenerateTestVendors();
#Endregion

Se (Vera)
{
Uzanta (SPSite Ejo = Nova SPSite(SpVendorSiteName))
{
Uzanta (SPWeb Araneaĵa = ejo.OpenWeb())
{

V = Null;

SPList CurrentList = araneaĵo.Listoj[SpVendorListName];

// Iterate tra ĉiuj la eroj en la vendista listo.
Foreach (SPItem VendorItem Je CurrentList.Eroj)
{

Ŝnuro LowerVendorType;

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

Se (LowerVendorType.Egaluloj(FilterType))
{
ResultList[VendorIndex ] = Nova Vendisto(VendorItem);
}
} // Iterating thru ĉiuj la vendistoj en la listo


Reveno TrimVendorArray(VendorIndex, ResultList);
// Revena resultList;

} // Uzanta spweb araneaĵa = ejo.Openweb()
} // Uzanta spsite ejo = nova spsite("Http://Localhost/mizuho")

} // Se vera

Reveno Null;
}

Privata Vendisto[] TrimVendorArray(Int Newsize, Vendisto[] OriginalVendorArray)
{
Vendisto[] TrimmedArray;

Se (Newsize == 0) Newsize = 1;
TrimmedArray = Nova Vendisto[Newsize];

Int CurrentCounter = 0;

Por (CurrentCounter = 0; CurrentCounter < Newsize; CurrentCounter )
{
TrimmedArray[CurrentCounter] = OriginalVendorArray[CurrentCounter];
}

Reveno TrimmedArray;

}
}

Lasi Respondon

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita *