Arhive de categorii: MOSS

MOSS avansate de personalizare de căutare — Cazul contează în căutare avansată XSLT

Nu modifica căutare avansată XSLT foarte des, Deci se pare ca eu sunt alpinism dealuri mici de fiecare dată.

Lecţia mea cele mai noi este aceasta: Caz probleme când corelarea o coloană. În căutarea mea avansate, Am coloane definit ca aceasta:

<rădăcină xmlns:XSi="http://www.w3.org/ 2001/XMLSchema-exemplu">
<
Coloane>
<
Coloană nume="GafTrainingInvoiceNumber" />
<
Coloană nume="GafTrainingInvoiceLocation" />
<
Coloană nume="WorkId"/>
<
Coloană nume="Protopopiat"/>
<
Coloană nume="Titlul"/>
<
Coloană nume="Autor"/>
<
Coloană nume="Dimensiune"/>
<
Coloană nume="Calea"/>
<
Coloană nume="Descriere"/>
<
Coloană nume="Scrie"/>
<
Coloană nume="SiteName"/>
<
Coloană nume="CollapsingStatus"/>
<
Coloană nume="HitHighlightedSummary"/>
<
Coloană nume="HitHighlightedProperties"/>
<
Coloană nume="ContentClass"/>
<
Coloană nume="IsDocument"/>
<
Coloană nume="PictureThumbnailURL"/>
</
Coloane>
</
rădăcină>

XLST care afişează locaţia de numărul şi factură factura a fost:

<p>
Numărul de facturi de formare: <XSL:valoarea de Selectaţi="GafTrainingInvoiceNumber"/>
<
br></br>
Locaţie de factură de formare: <XSL:valoarea de Selectaţi="GafTrainingInvoiceLocation"/>
</
p>

Cu toate acestea, select a proprietăţii în toate minuscule de referinţă, ca şi în:

<p>
Numărul de facturi de formare: <XSL:valoarea de Selectaţi="gaftraininginvoicenumber"/>
<
br></br>
Locaţie de factură de formare: <XSL:valoarea de Selectaţi="gaftraininginvoicelocation"/>
</
p>


Până când am corectat că, rezultate de căutare a arătat etichetele (adică. "Numărul facturii de formare") dar nu există date.

MOSS / Server de formulare InfoPath (InfoPath 2007) drop-jos listă de performanţă

Categorie suplimentară: InfoPath

Rezumat: O InfoPath 2007 forma desfăşurate la un server de MOSS oferă un drop-jos listă de furnizori legat de o listă particularizată de MOSS. La selectarea un furnizor, reguli atribui valorile de câmp pentru un pumn de câmpuri de text, cum ar fi nume reprezentant de vânzări, Adresa, City, stat, zip şi telefon. Performanţa este oribil. Vom observa că performanţa se înrăutăţeşte (într-un mod non-liniar) pentru fiecare câmp suplimentar, vom actualiza acest fel. Adică, Dacă ne-am actualizare nume reprezentant de vânzări, este nevoie de [x] suma de timp. Dacă vom actualiza reprezentant de vânzări, address1, address2, City, stat, zip, este nevoie de 10 ori mai mult.

Soluție: Scrie un serviciu web (mostre de cod pot fi găsite aici) care este trecut numele un furnizor şi se întoarce înapoi detalii furnizor. Apoi, atribuiţi câmpurile în acest fel. Deşi acest lucru pare prea lent, nu a fost nici o diferenţă discernable în performanţă, când ne-am asociat 1 câmp comparativ cu 8 câmpuri. Ca un bonus, users a lua un cool "contactare server" Cylon efectul în timp ce ei aşteaptă pentru formularul pentru a invoca si consuma serviciul rezultate.

MOSS: Excepţie a avut loc. (Excepție de la HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

ACTUALIZARE: Am determinat niciodată cauza de această problemă şi it niciodată suprafaţă din nou.

Vom observa în timpul aplicării un site de dezvoltare că brusc, doi utilizatori sunt în imposibilitatea de a accesa o colecţie de site-ul. Aceste conturi pot autentifica la site-ul principal, dar atunci când încercarea de a accesa un anumit site de colectare, ei chiar a lua un ecran gol. Fără erori afişează, doar un gol pagină alb.

Am conectaţi-vă ca un admin site-ul de colectare şi încercaţi să adăugaţi unul dintre aceşti utilizatori ca un admin site-ul şi de această dată, la apăsarea "OK", ne-am lua acest mesaj:

Excepţie a avut loc. (Excepție de la HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Am petrecut ceva timp cercetând acest lucru şi, din păcate,, nu au venit cu ceva util.. Au existat unele mesaje în Jurnalul de diagnosticare, dar a fost greu să coreleze-le exact cu această problemă.

În cele din urmă, putem şterge colecția de site-ul şi re-creat şi că rezolvat-o.

Dacă m-am gândit ce cauzat acest lucru în viitor, Voi actualiza acest post.

MOSS: Iterarea prin liste particularizate şi întoarcerea filtrate datelor în InfoPath

Scenariu de afaceri:

Oferă o metodă care permite utilizatorilor să introducă exacte cumpărare rechiziţiile rapid.

Problema de afaceri:

Clientul face afaceri cu vânzătorii câteva sute.

Vânzătorii sunt de tip"" specifice. Acest lucru înseamnă că un furnizor vinde echipamente informatice (ex. Dell) sau materiale de birou (ex. Capse).

Cum putem activa utilizatori finali care creează cumpărare rechiziţiile selectaţi un furnizor de valabil?

Soluţie de afaceri:

Diferenţia furnizori în sistem prin intermediul "tip".

Permite utilizatorilor să selectaţi tipul"" produsului şi apoi oferă un set filtrate de furnizori corespunzătoare.

Soluţii tehnice:

Un formular InfoPath a fost conceput, care permite utilizatorilor să intre online cumpăraţi rechiziţiile.

Două liste de selecţie InfoPath controla furnizor de selecţie. Prima, utilizatorul selectează un tip de"cumpărare". Aceasta limitează o a doua listă de selectare pentru a conţine numai vânzătorii care vând pentru acel tip de cumpărare. Acesta este un clasic cascading drop-down.

Vânzătorii sunt stocate într-o listă particularizată de MOSS cu coloane particularizate pentru furnizor atribute precum numele, Adresa şi mai ales de tip"".

Pună în aplicare un serviciu web pentru un client de InfoPath să consume care iterează prin listă particularizată furnizor, Revenind numai furnizori de potrivire un furnizat "tip".

Invoca serviciu web prin intermediul formularului InfoPath.

Lecţiile învăţate:

  • Prima, se pare că este necesar pentru a merge acest traseu. Aş fi preferat să faci filtrarea în întregime în InfoPath şi nu crea orice funcţionalitatea serviciu web aici. Cu toate acestea, forme server nu furnizează capacitatea de filtrare necesare. Putem pune o regulă pe un tip"" listă de selectare sub forma la fel de re-deschide interogarea de furnizor, dar nu putem ajunge să funcţioneze în mod corespunzător. Prin urmare, a fost necesar pentru implementarea de servicii web.
  • Acesta este un clasic "cascadă listă de selectare" problema în InfoPath formează server lume şi există multe exemple bune acolo care să explice cum să rezolve această.
  • O valoare necompletată pentru o coloană din listă furnizor nu se întoarce un şir gol, atunci când se face referire ca aceasta: initItem["Furnizor de nume"]. În schimb, Returnează un null.

Unele alte note:

  • Mă întorc o matrice[] de furnizori pentru că am avut unele dificultăţi revenind un ArrayList. InfoPath a fost plângându-se despre el şi nu am avut timp sau înclinaţia de a lupta peste ea. Acest lucru, desigur, pune o limită artificiale pe numărul total de furnizori. Ea, de asemenea, obligaţi să pună în aplicare un trim() metoda matricei pentru ca urasc ideea de a reveni înapoi 100 de furnizori de nul. InfoPath nu-i pasă, dar ea nagged la mine. (Din nou, Acest lucru a fost mai uşor decât lupta InfoPath peste ArrayLists).
  • Am implementat o GetSpecificVendorByName() funcţie, precum şi, care poate fi instructiv.

Codul:

folosind Sistem;
folosind System.Web;
folosind System.Web.Services;
folosind System.Web.Services.Protocols;
folosind Microsoft.SharePoint;
folosind System.Configuration;

/// <Rezumat>
///
Furnizor de servicii: Oferă furnizor legate de servicii care astăzi sunt consumate de un formular infopath cu un client.
///
/// Istorie:
/// ——–
/// 07/24/07: Iniţială de codificare, Paul J. Gavin a Conchango.
///
/// </Rezumat>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publice Clasa VendorService : System.Web.Services.WebService
{

/// <Rezumat>
/// Reprezintă un furnizor dintr-o listă sharepoint personalizat de MSUSA.
/// </Rezumat>
publice Clasa Furnizor
{
publice Furnizor() { }

publice Furnizor(SPItem initItem)
{
Dacă (! (initItem["Furnizor de nume"] == nul)) VendorName = initItem["Furnizor de nume"].ToString();
Dacă (! (initItem["Adresa 1"] == nul)) VendorAddress1 = initItem["Adresa 1"].ToString();
Dacă (! (initItem["Adresa 2"] == nul)) VendorAddress2 = initItem["Adresa 2"].ToString();
Dacă (! (initItem["City"] == nul)) VendorCity = initItem["City"].ToString();
Dacă (! (initItem["VendorPhone"] == nul)) VendorPhone = initItem["VendorPhone"].ToString();
Dacă (! (initItem["PurchaseType"] == nul)) VendorType = initItem["PurchaseType"].ToString();
Dacă (! (initItem["Stat"] == nul)) VendorState = initItem["Stat"].ToString();
Dacă (! (initItem["Zip"] == nul)) VendorZip = initItem["Zip"].ToString();
Dacă (!(initItem["Fax"] == nul)) VendorFax = initItem["Fax"].ToString();
Dacă (!(initItem["SalesRepName"] == nul)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // ID unic menţinută prin intermediul MOSS.
}

publice int VendorItemId;
publice şir VendorName;
publice şir VendorAddress1;
publice şir VendorAddress2;
publice şir VendorCity;
publice şir VendorState;
publice şir VendorZip;
publice şir VendorPhone;
publice şir VendorType;
publice şir VendorSalesRepName;
publice şir VendorFax;
}

publice VendorService () {

//Decomentaţi următoarea linie dacă utilizaţi componentele proiectate
//InitializeComponent();
}

privat Furnizor[] GenerateTestVendors()
{
Furnizor[] resultList;
resultList = noi Furnizor[100];

Furnizor v;
v = noi Furnizor();
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 = noi Furnizor();

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 = noi Furnizor();
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;

reveni resultList;

}

[WebMethod]
publice Furnizor GetSpecificVendorById(int vendorId)
{
şir SpVendorSiteName; // Numele site-ului MOSS reale care găzduieşte listă particularizată de furnizor.
şir SpVendorListName; // Numele din lista de MOSS actuale conținând furnizori.

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

folosind (SPSite site-ul = noi SPSite(SpVendorSiteName))
{

folosind (SPWeb web = site-ul. OpenWeb())
{

SPList.Update() currentList = web. Liste[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

reveni noi Furnizor(specificItem);

} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/mizuho")

}

[WebMethod]
// Presupune că numele de furnizor este unic, dintr-o perspectivă de afaceri
publice Furnizor GetSpecificVendorByVendorName(şir fi)
{
şir SpVendorSiteName; // Numele site-ului MOSS reale care găzduieşte listă particularizată de furnizor.
şir SpVendorListName; // Numele din lista de MOSS actuale conținând furnizori.

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

folosind (SPSite site-ul = noi SPSite(SpVendorSiteName))
{
folosind (SPWeb web = site-ul. OpenWeb())
{

SPList.Update() currentList = web. Liste[SpVendorListName];

foreach (SPItem vendorItem în currentList.Items)
{
Dacă (vendorItem["Furnizor de nume"] == nul) «««;

Dacă (vendorItem["Furnizor de nume"].ToString().Este egal cu(fi))
reveni noi Furnizor(vendorItem);
}

Furnizor v = noi Furnizor();
v.VendorPhone = "nu a fost găsit: " + fi;

reveni v;

reveni nul;

} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/mizuho")

} // metoda

[WebMethod]
publice Furnizor[] GetVendorsOfType (şir filterType)
{

şir SpVendorSiteName; // Numele site-ului MOSS reale care găzduieşte t
El furnizor listă particularizată.
şir SpVendorListName; // Numele din lista de MOSS actuale conținând furnizori.

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

Furnizor[] resultList;
int vendorIndex = 0;
resultList = noi Furnizor[1000];

// Inițializarea listei cu un mesaj implicit prietenos.
Furnizor v = noi Furnizor();
v.VendorName = "Selectaţi un tip de furnizor pentru a popula această listă.";
resultList[0] = v;

// Converti filtrul la caz mai mici pentru comparaţie şir mai uşor mai târziu.
filterType = filterType.ToLower();

// În cazul în care tipul de filtru trecut este "test", genera unele date simple.
#regiune Filtru tip = "test"
Dacă (filterType. egal("test"))
reveni GenerateTestVendors();
#endregion

Dacă (adevărat)
{
folosind (SPSite site-ul = noi SPSite(SpVendorSiteName))
{
folosind (SPWeb web = site-ul. OpenWeb())
{

v = nul;

SPList.Update() currentList = web. Liste[SpVendorListName];

// Repeta prin toate elementele din lista de furnizori.
foreach (SPItem vendorItem în currentList.Items)
{

şir lowerVendorType;

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

Dacă (Egal lowerVendorType.(filterType))
{
resultList[vendorIndex ] = noi Furnizor(vendorItem);
}
} // iterarea prin toate furnizori în lista


reveni TrimVendorArray(vendorIndex, resultList);
// reveni resultList;

} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/mizuho")

} // dacă este adevărat

reveni nul;
}

privat Furnizor[] TrimVendorArray(int newsize, Furnizor[] originalVendorArray)
{
Furnizor[] trimmedArray;

Dacă (newsize == 0) newsize = 1;
trimmedArray = noi Furnizor[newsize];

int currentCounter = 0;

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

reveni trimmedArray;

}
}