Kategoriaj Arkivoj: MUSKO

MUSKO antaŭenirita serĉon customization — Kazo faras gravi en altnivela serĉa XSLT

Mi ne modifas antaŭenirita serĉan XSLT tre ofte, Do ĝi ŝajnas ŝatas min estas grimpanta malgrandajn montetojn ĉiu tempo.

Mia plej nova leciono estas tio ĉi: Kazaj aferoj kiam referencanta kolumnon. En mia altnivela serĉo, Mi havas kolumnojn difinita kiel tio ĉi:

<Radiko Xmlns:Xsi="Http://Www.w3.org/2001/xmlschema-okazo">
<
Kolumnoj>
<
Kolumno Nomo="GafTrainingInvoiceNumber" />
<
Kolumno Nomo="GafTrainingInvoiceLocation" />
<
Kolumno Nomo="WorkId"/>
<
Kolumno Nomo="Senhonta"/>
<
Kolumno Nomo="Titolo"/>
<
Kolumno Nomo="Aŭtoro"/>
<
Kolumno Nomo="Grandeco"/>
<
Kolumno Nomo="Vojo"/>
<
Kolumno Nomo="Priskribo"/>
<
Kolumno Nomo="Skribi"/>
<
Kolumno Nomo="SiteName"/>
<
Kolumno Nomo="CollapsingStatus"/>
<
Kolumno Nomo="HitHighlightedSummary"/>
<
Kolumno Nomo="HitHighlightedProperties"/>
<
Kolumno Nomo="ContentClass"/>
<
Kolumno Nomo="IsDocument"/>
<
Kolumno Nomo="PictureThumbnailURL"/>
</
Kolumnoj>
</
Radiko>

La XLST kiu montras la fakturan nombron kaj fakturan lokon estis:

<P>
Trejnanta Fakturan Nombron: <Xsl:Valoro-de Elektita="GafTrainingInvoiceNumber"/>
<
Br></Br>
Trejnanta Fakturan Lokon: <Xsl:Valoro-de Elektita="GafTrainingInvoiceLocation"/>
</
P>

Tamen, La elektita devas referenci la nemoveblaĵon en ĉiuj pli malalta kazo, Kiel je:

<P>
Trejnanta Fakturan Nombron: <Xsl:Valoro-de Elektita="Gaftraininginvoicenumber"/>
<
Br></Br>
Trejnanta Fakturan Lokon: <Xsl:Valoro-de Elektita="Gaftraininginvoicelocation"/>
</
P>


Ĝis mi ĝustigis tion, Serĉaj rezultoj montris la etikedojn (T.e. "Trejnanta Fakturan Nombron") Sed neniu datumo.

MUSKO / InfoPath Forma Servilo (InfoPath 2007) Falo-malsupren enlistigi elfaron

Suplementa kategorio: InfoPath

Resuma: InfoPath 2007 Formi deplojiĝita al MUSKA servilo provizas falon-malsupren enlistigi de vendistoj ligita al laŭmenda MUSKA listo. Al elektanta vendiston, Reguloj asignas kampajn valorojn al iometo de tekstaj kampoj kiel venda deputito nomo, Adreso, Urbo, Stato, zipo kaj telefono. Elfaro estas horora. Ni rimarkas ke elfaro akiras pli malbonan (En ne-linia modo) Por ĉiu suplementa kampo ni ĝisdatigas ĉi tiun vojon. T.e., Se ni nur ĝisdatigas la vendan deputitan nomon, Ĝi prenas [X] Kvanto de tempo. Se ni ĝisdatigas vendan deputiton, Address1, Address2, Urbo, Stato, Zipo, Ĝi prenas 10 Oble pli longa.

Solvo: Skribi araneaĵan servon (Ekzempla kodo povas esti trovita Ĉi tie) Kiu estas pasita en la nomo de vendisto kaj ĝi revenas reen la vendistajn detalojn. Tiam, Asigni la kampojn ĉi tiu vojo. Kvankam tio ĉi ankaŭ ŝajnas malrapida, Estis ne discernable diferenco en elfaro kiam ni asignis 1 Kampo kontraŭ 8 Kampoj. Kiel plia gratifiko, Uzantoj akiras freŝan "kontaktanta la servilon" Cylon Realigi dum ili atendas por la formo alvoki kaj konsumi la servajn rezultojn.

MUSKO: Escepto okazis. (Escepto de HRESULT: 0X80020009 (DISP_E_ESCEPTO))

ĜISDATIGO: Ni neniam determinis la radikan aferon de ĉi tiu problemo kaj ĝi neniam supriĝi denove.

Ni rimarkas dum efektivigo de evoluada ejo ke subite, Du uzantoj estas nekapablaj aliri ejan kolekton. Tiuj kontoj povas aŭtentikigi al la ĉefa ejo, Sed kiam provanta aliri apartan ejan kolekton, Ili nur akiras malplenan ekranon. Neniuj eraroj montris, Nur blanka malplena #pa?o.

Ni ensalutas kiel eja kolekto admin kaj provo aldoni unu el tiuj uzantoj kiel ejo admin kaj #?i tiu tempo, Al premanta "OK", Ni akiras #?i tiu #mesa?o:

Escepto okazis. (Escepto de HRESULT: 0X80020009 (DISP_E_ESCEPTO))

Ni elspezis iun tempon esploranta #tio ?i kaj #beda?rinde, Didn?? Venita supre kun io ajn utila. Estis kelkaj #mesa?o en la diagnoza #?tipo, Sed ?i estis malfacile al #?uste correlate ili kun #?i tiu afero.

En la fino, Ni foriganta la ejan kolekton kaj re-kreita ?in kaj ke solvis ?in.

Se mi elkalkulas kion kaŭzis tion ĉi en estonteco, Mi ĝisdatigos ĉi tiun poŝton.

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;

}
}