Archivy kategorií: MECH

MOSS pokročilé úpravy vyhledávání — Případ záleží v rozšířeném hledání XSLT

Nechci měnit rozšířené hledání XSLT velmi často, tak vypadá to, že stoupám malé kopce pokaždé.

Moje nejnovější lekce je to: Záleží při odkazu na sloupec. V mém pokročilém vyhledávání, Já mít sloupce definovány jako:

<kořen xmlns.:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Sloupce>
<
Sloupec Jméno="GafTrainingInvoiceNumber" />
<
Sloupec Jméno="GafTrainingInvoiceLocation" />
<
Sloupec Jméno="WorkId"/>
<
Sloupec Jméno="Pořadí"/>
<
Sloupec Jméno="Titul"/>
<
Sloupec Jméno="Autor"/>
<
Sloupec Jméno="Velikost"/>
<
Sloupec Jméno="Cesta"/>
<
Sloupec Jméno="Popis"/>
<
Sloupec Jméno="Zápis"/>
<
Sloupec Jméno="Název serveru"/>
<
Sloupec Jméno="CollapsingStatus"/>
<
Sloupec Jméno="HitHighlightedSummary"/>
<
Sloupec Jméno="HitHighlightedProperties"/>
<
Sloupec Jméno="ContentClass"/>
<
Sloupec Jméno="IsDocument"/>
<
Sloupec Jméno="PictureThumbnailURL"/>
</
Sloupce>
</
kořen>

XLST, zobrazující umístění faktury číslo a faktura byla:

<p>
Číslo faktury školení: <XSL:hodnota z vybrat="GafTrainingInvoiceNumber"/>
<
BR></BR>
Místo faktury vzdělávání: <XSL:hodnota z vybrat="GafTrainingInvoiceLocation"/>
</
p>

Avšak, select musí odkazovat na vlastnost všech malými písmeny, stejně jako v:

<p>
Číslo faktury školení: <XSL:hodnota z vybrat="gaftraininginvoicenumber"/>
<
BR></BR>
Místo faktury vzdělávání: <XSL:hodnota z vybrat="gaftraininginvoicelocation"/>
</
p>


Dokud jsem se opravil, výsledky hledání ukázal štítky (tj. "Číslo faktury školení") ale žádná data.

MECH / Aplikace InfoPath Forms Server (Aplikace InfoPath 2007) Rozevírací seznam výkon

Další kategorie: Aplikace InfoPath

Shrnutí: Aplikace InfoPath 2007 formuláře na MOSS server nabízí rozevírací seznam dodavatelů k vlastní seznam MOSS. Při výběru dodavatele, pravidla pole hodnoty přiřadit několik textových polí, například jméno obchodního zástupce, adresa, město, stát, zip a telefon. Výkon je hrozné. Všimněte si, že jsme horší výkon (v non-lineárně) pro každé další pole budeme aktualizovat tímto způsobem. Tj, kdybychom prostě aktualizovat název obchodního zástupce, to trvá [x] množství času. Pokud budeme aktualizovat obchodní zástupce, Address1, adresa2, město, stát, zip, to trvá 10 krát delší.

Řešení: Psát webové služby (Ukázkový kód lze nalézt Tady) To je předán název dodavatele a vrátí zpět detaily dodavatele. Pak, přiřadit pole tak. Ačkoliv se to zdá příliš pomalu, neexistoval viditelnému rozdíl ve výkonu, když jsme přiřadili 1 pole versus 8 pole. Jako bonus, Uživatelé si cool "kontaktování serveru" Cylon účinek, zatímco oni čekají na formuláři pro vyvolání a konzumovat služby výsledky.

MECH: Došlo k výjimce.. (Výjimka z HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

AKTUALIZOVAT: Nikdy jsme znovu určit příčinu tohoto problému a to nikdy povrchu.

Jsme si tak náhle během zavádění vývoj webu, dva uživatelé nebudou moci získat přístup kolekci webů. Tyto účty lze ověřit na hlavní stránku, Ale při pokusu o přístup k určité webů kolekce, dostanou jen prázdná obrazovka. Žádné chyby, jen bílý prázdná stránka.

Jsme se přihlásit jako správce kolekce webů a pokusíte se přidat jeden z těchto uživatelů jako správce webu a tentokrát, po stisknutí "OK", dostaneme zprávu:

Došlo k výjimce.. (Výjimka z HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Jsme strávili nějaký čas to zkoumá a bohužel, Nechtěl přijít s něčím užitečné. Tam byly nějaké zprávy v protokolu diagnostiky, Ale bylo to těžké přesně sladit je s tímto problémem.

Na konci, jsme odstraněním kolekce webů a znovu a to, že to vyřešili.

Pokud jsem přijít na to, co způsobilo to v budoucnosti, Budu aktualizovat tento post.

MECH: Iterace vlastní seznamy a vrácení filtrovaná data do aplikace InfoPath

Obchodní scénář:

Zadejte metodu, která umožňuje uživatelům rychle zadat přesné nákupních.

Obchodní problém:

Klient obchoduje s několika stovek dodavatelů.

Dodavatelé jsou "typ" konkrétní. To znamená, že dodavatel prodává počítačové vybavení (např.. Společnost Dell) nebo kancelářské potřeby (např.. Svorky).

Jak jsme mohli koncoví uživatelé, kteří vytvořit nákupní žádanky vybrat platný dodavatele?

Obchodní řešení:

Rozlišovat dodavatele v systému přes "type".

Umožnit uživatelům vybrat typ"" výrobku a pak poskytují filtrovanou sadu vhodných dodavatelů.

Technické řešení:

Formulář aplikace InfoPath je navrženo, že umožňuje uživatelům zadávat on-line nákupní žádanky.

Dva seznamy výběru aplikace InfoPath kontrolovat výběr dodavatele. První, uživatel vybere "typ nákupu". To omezuje druhý výběrový seznam obsahovat pouze prodejců, kteří prodávají za tento typ nákupu. To je klasický CSS drop-down.

Dodavatelé jsou uloženy v seznamu vlastní MOSS s vlastní sloupce pro dodavatele atributy jako například jméno, adresa a zejména "typ".

Implementace webové služby pro klienta InfoPath konzumovat, který projde seznam vlastních dodavatelů, vrací pouze dodavatele odpovídající zadané "typ".

Vyvolání webové služby prostřednictvím formuláře aplikace InfoPath.

Poučení:

  • První, Zdá se, že je třeba jít touto cestou. Já bych si raději udělat filtrování výhradně v rámci aplikace InfoPath a nelze vytvořit žádné funkce webové služby zde. Avšak, formy server neposkytuje požadované funkce pro filtrování. Můžeme dát pravidlo na typ"" výběrový seznam v podobě jakési znovu otevřít dotaz dodavatele, ale nemůžeme si to fungovat správně. Proto, bylo třeba zavést webovou službu.
  • To je klasický "kaskádové výběrový seznam" problém v aplikace InfoPath formuláře serveru svět a existuje mnoho dobrých příkladů, které vysvětlují, jak na to.
  • Prázdná hodnota pro sloupec v seznamu dodavatelů se nevrací prázdný řetězec při odkazování na takhle: initItem["Název dodavatele"]. Místo toho, Vrátí hodnotu null.

Některé další poznámky:

  • Jsem vrátit matici[] dodavatelů, protože jsem měl nějaké potíže vracejí ArrayList. Aplikace InfoPath stěžoval a neměla jsem čas ani chuť to bojem. Toto, Samozřejmě, Vloží umělá omezení celkového počtu dodavatelů. To také mě přimělo k provedení čalounění() metodu na poli, protože nesnáším myšlenku na návrat zpět 100 null dodavatelů. Aplikace InfoPath se nestará, naléhala na mě, ale. (Znovu, to bylo jednodušší, než bojovat InfoPath nad ArrayLists).
  • Jsem implementoval GetSpecificVendorByName() funkce také, což může být poučné.

Kód:

použití Systém;
použití System.Web;
použití System.Web.Services;
použití System.Web.Services.Protocols;
použití Microsoft.SharePoint;
použití System.Configuration;

/// <Shrnutí>
///
Služba dodavatele: Poskytuje dodavatele související služby, které dnes spotřebuje klientské formuláře aplikace infopath.
///
/// Historie:
/// ——–
/// 07/24/07: Výchozí kódování, Paul J. Gavin Conchango.
///
/// </Shrnutí>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
veřejné Třída VendorService : System.Web.Services.WebService
{

/// <Shrnutí>
/// Představuje dodavatele ze seznamu vlastní sharepoint udržovaný MSUSA.
/// </Shrnutí>
veřejné Třída Dodavatel
{
veřejné Dodavatel() { }

veřejné Dodavatel(SPItem initItem)
{
Pokud (! (initItem["Název dodavatele"] == null)) Poznámky: = initItem["Název dodavatele"].ToString();
Pokud (! (initItem["Adresa 1"] == null)) VendorAddress1 = initItem["Adresa 1"].ToString();
Pokud (! (initItem["Adresa 2"] == null)) VendorAddress2 = initItem["Adresa 2"].ToString();
Pokud (! (initItem["Město"] == null)) VendorCity = initItem["Město"].ToString();
Pokud (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Pokud (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Pokud (! (initItem["Stát"] == null)) VendorState = initItem["Stát"].ToString();
Pokud (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Pokud (!(initItem["Fax"] == null)) VendorFax = initItem["Fax"].ToString();
Pokud (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Jedinečné ID maintained přes MOSS.
}

veřejné int VendorItemId;
veřejné řetězec Poznámky:;
veřejné řetězec VendorAddress1;
veřejné řetězec VendorAddress2;
veřejné řetězec VendorCity;
veřejné řetězec VendorState;
veřejné řetězec VendorZip;
veřejné řetězec VendorPhone;
veřejné řetězec VendorType;
veřejné řetězec VendorSalesRepName;
veřejné řetězec VendorFax;
}

veřejné VendorService () {

//Odkomentujte následující řádek, pokud používáte určené součásti
//InitializeComponent();
}

soukromé Dodavatel[] GenerateTestVendors()
{
Dodavatel[] resultList;
resultList = nové Dodavatel[100];

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

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é Dodavatel();
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;

návrat resultList;

}

[WebMethod]
veřejné Dodavatel GetSpecificVendorById(int vendorId)
{
řetězec SpVendorSiteName; // Název skutečné webu MOSS, který hostí vlastní seznam dodavatelů.
řetězec SpVendorListName; // Název skutečné MOSS seznam obsahující dodavatelů.

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

použití (SPSite místo = nové SPSite(SpVendorSiteName))
{

použití (SPWeb webové stránky =. OpenWeb())
{

SPList.Update() currentList = www. Seznamy[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

návrat nové Dodavatel(specificItem);

} // použití webu spweb = site.openweb()
} // pomocí webů spsite = nové spsite("http://localhost/mizuho")

}

[WebMethod]
// Předpokládá, že název dodavatele je jedinečný, z obchodního hlediska
veřejné Dodavatel GetSpecificVendorByVendorName(řetězec být)
{
řetězec SpVendorSiteName; // Název skutečné webu MOSS, který hostí vlastní seznam dodavatelů.
řetězec SpVendorListName; // Název skutečné MOSS seznam obsahující dodavatelů.

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

použití (SPSite místo = nové SPSite(SpVendorSiteName))
{
použití (SPWeb webové stránky =. OpenWeb())
{

SPList.Update() currentList = www. Seznamy[SpVendorListName];

foreach (SPItem vendorItem v currentList.Items)
{
Pokud (vendorItem["Název dodavatele"] == null) «««;

Pokud (vendorItem["Název dodavatele"].ToString().Rovná se(být))
návrat nové Dodavatel(vendorItem);
}

Dodavatel v = nové Dodavatel();
v.VendorPhone = "nebyl nalezen.: " + být;

návrat v;

návrat null;

} // použití webu spweb = site.openweb()
} // pomocí webů spsite = nové spsite("http://localhost/mizuho")

} // Metoda

[WebMethod]
veřejné Dodavatel[] GetVendorsOfType (řetězec filterType)
{

řetězec SpVendorSiteName; // Název skutečné MOSS webu, který hostuje t
On vlastní seznam dodavatelů.
řetězec SpVendorListName; // Název skutečné MOSS seznam obsahující dodavatelů.

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

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

// Inicializace seznamu s výchozí přátelský vzkaz.
Dodavatel v = nové Dodavatel();
v.VendorName = "Vyberte typ dodavatele k naplnění tohoto seznamu.";
resultList[0] = v;

// Převést na malá písmena pro snazší porovnání řetězců později filtr.
filterType = filterType.ToLower();

// Je-li typ filtru je "test", některé jednoduché údaje.
#region Typ filtru = "test"
Pokud (filterType. rovná se("test"))
návrat GenerateTestVendors();
#endregion

Pokud (pravda)
{
použití (SPSite místo = nové SPSite(SpVendorSiteName))
{
použití (SPWeb webové stránky =. OpenWeb())
{

v = null;

SPList.Update() currentList = www. Seznamy[SpVendorListName];

// Iterovat všechny položky v seznamu dodavatelů.
foreach (SPItem vendorItem v currentList.Items)
{

řetězec lowerVendorType;

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

Pokud (rovná se lowerVendorType.(filterType))
{
resultList[vendorIndex ] = nové Dodavatel(vendorItem);
}
} // Iterace přes všechny dodavatele v seznamu


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

} // použití webu spweb = site.openweb()
} // pomocí webů spsite = nové spsite("http://localhost/mizuho")

} // je-li to pravda,

návrat null;
}

soukromé Dodavatel[] TrimVendorArray(int newSize, Dodavatel[] originalVendorArray)
{
Dodavatel[] trimmedArray;

Pokud (newSize == 0) newSize = 1;
trimmedArray = nové Dodavatel[newSize];

int currentCounter = 0;

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

návrat trimmedArray;

}
}