Archívy kategórie: MACHY

Rozšírené vyhľadávanie prispôsobenie MOSS — Prípade záleží v rozšírenom vyhľadávaní XSLT

Nechcem upraviť pokročilé vyhľadávanie XSLT veľmi často, Takže sa zdá, ako som lezenie malých kopcov zakaždým.

Je to môj najmladší Lekcia: Prípad veciach pri uvádzaní stĺpca. V mojom Rozšírené vyhľadávanie, Mám stĺpce definované ako to:

<koreň xmlns:XSI="http://www.w3.org/ 2001/XMLSchema-stupňa">
<
Stĺpce>
<
Stĺpec meno="GafTrainingInvoiceNumber" />
<
Stĺpec meno="GafTrainingInvoiceLocation" />
<
Stĺpec meno="Identifikácia"/>
<
Stĺpec meno="Hodnosť"/>
<
Stĺpec meno="Hlava"/>
<
Stĺpec meno="Autor"/>
<
Stĺpec meno="Veľkosť"/>
<
Stĺpec meno="Cesta"/>
<
Stĺpec meno="Popis"/>
<
Stĺpec meno="Písať"/>
<
Stĺpec meno="SiteName"/>
<
Stĺpec meno="CollapsingStatus"/>
<
Stĺpec meno="HitHighlightedSummary"/>
<
Stĺpec meno="HitHighlightedProperties"/>
<
Stĺpec meno="ContentClass"/>
<
Stĺpec meno="IsDocument"/>
<
Stĺpec meno="PictureThumbnailURL"/>
</
Stĺpce>
</
koreň>

XSL, ktorý zobrazuje faktúry číslo a fakturačná umiestnenie bolo:

<p>
Číslo faktúry školenia: <XSL:hodnoty z Vyberte="GafTrainingInvoiceNumber"/>
<
br></br>
Školenia faktúry umiestnenie: <XSL:hodnoty z Vyberte="GafTrainingInvoiceLocation"/>
</
p>

Avšak, Vyberte má odkaz na vlastnosť všetkých malými písmenami, rovnako ako v:

<p>
Číslo faktúry školenia: <XSL:hodnoty z Vyberte="gaftraininginvoicenumber"/>
<
br></br>
Školenia faktúry umiestnenie: <XSL:hodnoty z Vyberte="gaftraininginvoicelocation"/>
</
p>


Kým som to opravil, Hľadať Výsledky ukázali menovky (tj. "Číslo faktúry školenia") ale žiadne údaje.

MACHY / Program InfoPath Forms Server (Program InfoPath 2007) Rozbaľovací zoznam výkon

Ďalšie kategórie: Program InfoPath

Zhrnutie: Programu InfoPath 2007 forme nasadených MOSS server poskytuje rozbaľovací zoznam dodávateľov viazaná na vlastný zoznam MOSS. Pri výbere dodávateľa, pravidlá priradenie hodnoty poľa hrsť textové polia ako obchodný zástupca meno, adresa, mesto, štát, ZIP a telefón. Výkon je hrozné. Môžeme všimnúť, že výkon ešte horšie (v non-lineárne) pre každé ďalšie pole sme aktualizácie týmto spôsobom. T. j., keby sme jednoducho aktualizovať názov obchodný zástupca, to trvá [x] množstvo času. Ak sme aktualizácie obchodný zástupca, IKT1, address2, mesto, štát, ZIP, to trvá 10 krát dlhšie.

Roztok: Napíšte webovú službu (Ukážkový kód možno nájsť tu) prelietajúce meno dodávateľa a vracia údaje dodávateľa. Potom, priradiť polia týmto spôsobom. Hoci sa to zdá príliš pomalé, tam bol žiadne rozpoznateľné rozdiel vo výkone, keď sme priradili 1 pole verzus 8 polia. Ako pridaný bonus, Užívatelia si v pohode "kontaktovať server" Cylon efekt, kým čakajú na formulár na vyvolanie a konzumovať služby výsledky.

MACHY: Vyskytla sa výnimka. (S výnimkou HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

AKTUALIZÁCIA: Nikdy sme zistili príčinu tohto problému a to nikdy povrch znova.

Môžeme všimnúť počas realizácie vývoja webu, že zrazu, dvaja užívatelia sú schopní prístup ku kolekcii lokalít. Tieto účty môžu overiť na hlavnej stránke, ale pri pokuse o prístup k konkrétnu kolekciu lokalít, dostanú len prázdna obrazovka. Žiadne chyby zobrazí, len biele prázdna stránka.

Prihláste sa ako správca kolekcie lokalít a skúste pridať jeden z týchto užívateľov ako admin stránky a tentoraz, po stlačení "OK", sme si túto správu:

Vyskytla sa výnimka. (S výnimkou HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Sme strávili nejaký čas skúmaním tohto a bohužiaľ, nemala prísť s niečím užitočným. Tam boli niektoré správy do denníka diagnostiky, ale bolo to ťažké presne korelovať s touto otázkou.

V závere, sme Odstránenie kolekcie lokalít a re-vytvoril a že to vyriešil.

Ak som sa zistiť, čo spôsobilo to v budúcnosti, Budem aktualizovať tento príspevok.

MACHY: Iterácia cez vlastné zoznamy a návrate filtrované údaje do programu InfoPath

Obchodné scenáre:

Poskytnúť metóda, ktorá umožňuje používateľom rýchlo zadať presné nákup rekvizície.

Obchodné problém:

Klient robí Biznis s niekoľko sto dodávateľov.

Predajcovia sú "typ" špecifické. To znamená, že dodávateľ predáva počítačového vybavenia (napr.. Dell) alebo kancelárske potreby (napr.. Sponky).

Ako môžeme umožniť koncovým používateľom, ktorí vytvárajú nákup rekvizície Vyberte platný dodávateľa?

Obchodné riešenia:

Rozlišovať dodávateľov v systéme cez "typ".

Umožniť používateľom vybrať typ"" výrobku a potom poskytnúť filtrovanej množiny vhodných dodávateľov.

Technické riešenie:

Formulár programu InfoPath bol navrhnutý tak, že umožňuje používateľom zadať online nákup rekvizície.

Oba zoznamy výberu programu InfoPath ovládať výber dodávateľa. Prvá, používateľ vyberie typ"nákup". To obmedzuje druhý zoznam výberu obsahujú len predajcovia, ktorí predávajú pre tento typ nákupného. Toto je klasický kaskádovými rozbaľovacej.

Predajcovia sú uložené v MOSS vlastný zoznam s vlastné stĺpce dodávateľa atribútov, ako napríklad názov, adresa a najmä "typ".

Implementovať webovej službe program InfoPath klienta konzumovať to opakuje prostredníctvom zoznamu vlastných dodávateľa, vracia len predajcovia zodpovedajúce dodáva "type".

Odvolávať na webovú službu cez formulár programu InfoPath.

Poučenie:

  • Prvá, to sa zdá byť potrebné ísť touto cestou. Radšej by som filtrovanie úplne programu InfoPath a nevytvára žiadne funkcie pre webové služby tu. Avšak, formy server neposkytuje požadované filtrovanie schopnosti. Môžeme dať pravidlo na "typ" Výber zoznamu vo formulári druh znovu otvoriť dotaz dodávateľa, ale nemôžeme dostať to fungovať. Preto, bolo potrebné zaviesť webovej služby.
  • Toto je klasický "kaskádové výber zoznam" problém v programe InfoPath formuláre servera svete a existuje mnoho príkladov, ktoré vysvetľujú, ako vyriešiť tento.
  • Prázdnu hodnotu pre stĺpec v zozname dodávateľov nevráti prázdny reťazec ak odkazuje takhle: initItem["Názov dodávateľa"]. Namiesto toho, Vráti hodnotu null.

Niektoré ďalšie poznámky:

  • Môžem vrátiť pole[] predajcovia pretože som mal nejaké problémy vracia Zoznam polí ArrayList. Program InfoPath bol sťažujú a nemal som čas ani chuť bojovať cez to. Toto, samozrejme, kladie umelé limit na celkový počet dodávateľov. To tiež nútení ma implementovať trim() metóda na poli, pretože neznášam myšlienku návratu späť 100 nulový dodávateľov. Program InfoPath sa nestará, ale obtěžovaný na mňa. (Znova, to bolo jednoduchšie, než program InfoPath bojujú ArrayLists).
  • Som vykonávaná GetSpecificVendorByName() funkciu aj, ktoré môžu byť poučný.

Kód:

pomocou Systém;
pomocou System.Web;
pomocou System.Web.Services;
pomocou System.Web.Services.Protocols;
pomocou Microsoft.SharePoint;
pomocou System.Configuration;

/// <Zhrnutie>
///
Predajca služieb: Poskytuje dodávateľa súvisiacich služieb, ktoré dnes sú spotrebované klient formulár programu infopath.
///
/// História:
/// ——–
/// 07/24/07: Počiatočné kódovanie, Paul J. Gavin Conchango.
///
/// </Zhrnutie>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
verejné trieda VendorService : System.Web.Services.WebService
{

/// <Zhrnutie>
/// Predstavuje dodávateľa z vlastného zoznamu spravované MSUSA.
/// </Zhrnutie>
verejné trieda Vendor
{
verejné Vendor() { }

verejné Vendor(SPItem initItem)
{
Ak (! (initItem["Názov dodávateľa"] == null)) NázovDodávateľa = initItem["Názov dodávateľa"].ToString();
Ak (! (initItem["Adresa 1"] == null)) VendorAddress1 = initItem["Adresa 1"].ToString();
Ak (! (initItem["Adresa 2"] == null)) VendorAddress2 = initItem["Adresa 2"].ToString();
Ak (! (initItem["City"] == null)) VendorCity = initItem["City"].ToString();
Ak (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Ak (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Ak (! (initItem["State"] == null)) VendorState = initItem["State"].ToString();
Ak (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Ak (!(initItem["Fax"] == null)) VendorFax = initItem["Fax"].ToString();
Ak (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Jedinečný identifikátor udržiavané prostredníctvom MOSS.
}

verejné int VendorItemId;
verejné reťazec NázovDodávateľa;
verejné reťazec VendorAddress1;
verejné reťazec VendorAddress2;
verejné reťazec VendorCity;
verejné reťazec VendorState;
verejné reťazec VendorZip;
verejné reťazec VendorPhone;
verejné reťazec VendorType;
verejné reťazec VendorSalesRepName;
verejné reťazec VendorFax;
}

verejné VendorService () {

//Odkomentovat nasledujúci riadok, ak používate navrhnuté súčasti
//InitializeComponent();
}

súkromné Vendor[] GenerateTestVendors()
{
Vendor[] resultList;
resultList = nové Vendor[100];

Vendor v;
v = nové Vendor();
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 = nové Vendor();

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 = nové Vendor();
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;

return resultList;

}

[WebMethod]
verejné Vendor GetSpecificVendorById(int vendorId)
{
reťazec SpVendorSiteName; // Meno skutočného MOSS stránky, ktoré hostí vlastný zoznam predajcov.
reťazec SpVendorListName; // Meno skutočného MOSS zoznam obsahujúci dodávateľov.

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

pomocou (SPSite stránky = nové SPSite(SpVendorSiteName))
{

pomocou (SPWeb webové stránky =. OpenWeb())
{

SPList currentList = web. Zoznamy[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

return nové Vendor(specificItem);

} // pomocou spweb web = site.openweb()
} // pomocou spsite stránky = nové spsite("http://localhost/mizuho")

}

[WebMethod]
// Predpokladá, že názov dodávateľa je jedinečný, z obchodného hľadiska
verejné Vendor GetSpecificVendorByVendorName(reťazec vendorName)
{
reťazec SpVendorSiteName; // Meno skutočného MOSS stránky, ktoré hostí vlastný zoznam predajcov.
reťazec SpVendorListName; // Meno skutočného MOSS zoznam obsahujúci dodávateľov.

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

pomocou (SPSite stránky = nové SPSite(SpVendorSiteName))
{
pomocou (SPWeb webové stránky =. OpenWeb())
{

SPList currentList = web. Zoznamy[SpVendorListName];

foreach (SPItem vendorItem v currentList.Items)
{
Ak (vendorItem["Názov dodávateľa"] == null) pokračovať;

Ak (vendorItem["Názov dodávateľa"].ToString().Equals(vendorName))
return nové Vendor(vendorItem);
}

Vendor v = nové Vendor();
v.VendorPhone = "nebol nájdený: " + vendorName;

return v;

return null;

} // pomocou spweb web = site.openweb()
} // pomocou spsite stránky = nové spsite("http://localhost/mizuho")

} // metóda

[WebMethod]
verejné Vendor[] GetVendorsOfType (reťazec filterType)
{

reťazec SpVendorSiteName; // Názov aktuálnej stránky MOSS, ktorý hosťuje t
on dodávateľa vlastného zoznamu.
reťazec SpVendorListName; // Meno skutočného MOSS zoznam obsahujúci dodávateľov.

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

Vendor[] resultList;
int vendorIndex = 0;
resultList = nové Vendor[1000];

// Inicializácia zoznamu s predvolené priateľská správa.
Vendor v = nové Vendor();
v.VendorName = "Vyberte typ dodávateľa pre naplniť tento zoznam.";
resultList[0] = v;

// Konvertovať filter na malé písmená pre ľahšie porovnanie reťazcov neskôr.
filterType = filterType.ToLower();

// Ak bude schválený typ filtra je "test", vytvárať niektoré jednoduché údaje.
#región Filter, typ filtra = "testovanie"
Ak (filterType.Equals("skúška"))
return GenerateTestVendors();
#endregion

Ak (pravda)
{
pomocou (SPSite stránky = nové SPSite(SpVendorSiteName))
{
pomocou (SPWeb webové stránky =. OpenWeb())
{

v = null;

SPList currentList = web. Zoznamy[SpVendorListName];

// Iteráciou cez všetky položky v zozname dodávateľov.
foreach (SPItem vendorItem v currentList.Items)
{

reťazec lowerVendorType;

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

Ak (lowerVendorType.Equals(filterType))
{
resultList[vendorIndex ] = nové Vendor(vendorItem);
}
} // Iterácia cez všetkých dodávateľov v zozname


return TrimVendorArray(vendorIndex, resultList);
// návrat resultList;

} // pomocou spweb web = site.openweb()
} // pomocou spsite stránky = nové spsite("http://localhost/mizuho")

} // Ak je to pravda

return null;
}

súkromné Vendor[] TrimVendorArray(int newsize, Vendor[] originalVendorArray)
{
Vendor[] trimmedArray;

Ak (newsize == 0) newsize = 1;
trimmedArray = nové Vendor[newsize];

int currentCounter = 0;

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

return trimmedArray;

}
}