Kategoria: Archiwum: MOSS

MOSS Zaawansowane dostosowywanie wyszukiwania — Przypadku znaczenia w wyszukiwaniu zaawansowanym XSLT

Bardzo często nie zmodyfikować zaawansowane wyszukiwanie XSLT, Tak więc wydaje się, że wspinaczka pagórki za każdym razem.

To jest mój najnowszy lekcja: Przypadku sprawy przy odwoływaniu się do kolumna. W moje wyszukiwanie zaawansowane, Mam kolumny zdefiniowane jako to:

<główny xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Kolumny>
<
Kolumna Nazwa="GafTrainingInvoiceNumber" />
<
Kolumna Nazwa="GafTrainingInvoiceLocation" />
<
Kolumna Nazwa="Identyfikator pracy"/>
<
Kolumna Nazwa="Ranga"/>
<
Kolumna Nazwa="Tytuł"/>
<
Kolumna Nazwa="Autor"/>
<
Kolumna Nazwa="Rozmiar"/>
<
Kolumna Nazwa="Ścieżka"/>
<
Kolumna Nazwa="Opis"/>
<
Kolumna Nazwa="Zapis"/>
<
Kolumna Nazwa="Nazwa_witryny"/>
<
Kolumna Nazwa="CollapsingStatus"/>
<
Kolumna Nazwa="HitHighlightedSummary"/>
<
Kolumna Nazwa="HitHighlightedProperties"/>
<
Kolumna Nazwa="ContentClass"/>
<
Kolumna Nazwa="IsDocument"/>
<
Kolumna Nazwa="PictureThumbnailURL"/>
</
Kolumny>
</
główny>

Były XLST, wyświetla położenie numer i faktura faktury:

<p>
Numer faktury szkolenia: <XSL:wartość z Wybierz="GafTrainingInvoiceNumber"/>
<
BR></BR>
Lokalizacja szkoleń faktury: <XSL:wartość z Wybierz="GafTrainingInvoiceLocation"/>
</
p>

Jednakże, Wybierz musi odwołać właściwość w wszystkie małe litery, jak w:

<p>
Numer faktury szkolenia: <XSL:wartość z Wybierz="gaftraininginvoicenumber"/>
<
BR></BR>
Lokalizacja szkoleń faktury: <XSL:wartość z Wybierz="gaftraininginvoicelocation"/>
</
p>


Do momentu że poprawione, Wyniki wyszukiwania pokazał etykiety (tj.. "Szkolenia numer faktury") ale nie ma danych.

MOSS / Program InfoPath Forms Server (Program InfoPath 2007) Lista rozwijana wydajności

Dodatkową kategorię: Program InfoPath

Podsumowanie: Programu InfoPath 2007 formularza wdrożony na serwerze MOSS zawiera listę rozwijaną dostawców powiązana z listy niestandardowej MOSS. Po zaznaczeniu dostawcy, zasady przypisać wartości pola garstkę pola tekstowe, takie jak nazwa handlowy, adres, miasto, Państwo, zip i telefonu. Wydajność jest okropne. Zauważamy, że wydajność gets worse (w sposób liniowy) dla każdego pola dodatkowe aktualizowania w ten sposób. Tj, Jeśli mamy tylko zaktualizować nazwy handlowy, Trwa [x] czas. Jeśli musimy zaktualizować handlowy, Adres1, Adres2, miasto, Państwo, pocztowy, Trwa 10 razy dłużej.

Roztwór: Napisz usługi sieci web (Przykładowy kod można znaleźć tutaj) który jest przekazywany w imieniu dostawcy i ponownie zwraca dane dostawcy. Następnie, przypisać pola w ten sposób. Chociaż zbyt wydaje się wolno, nie było wyraźnej różnicy w wydajności możemy przypisany 1 pole kontra 8 pola. Dodatkowym atutem, użytkownicy otrzymują cool "kontaktowania się z serwerem" Kochał powstaje efekt, podczas gdy oni czekać na formularz, aby wywołać i zajmują usługi.

MOSS: Wystąpił wyjątek. (Wyjątek od HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

AKTUALIZACJA: Możemy nigdy ponownie określić główną przyczynę tego problemu oraz że nigdy nie powierzchni.

Zauważamy podczas wdrażania witryny rozwoju, że nagle, dwaj użytkownicy nie są w stanie uzyskać dostęp do zbioru witryn. Rachunki te mogą uwierzytelniać do strony głównej, Jednak przy próbie dostępu do konkretnej kolekcji witryn, one dostać pusty ekran. Nie błędów wyświetlane, biały pustej strony.

Możemy zalogować się jako administrator zbioru witryn i spróbować dodać jeden z tych użytkowników jako administratora witryny i tym razem, po naciśnięciu "OK", otrzymujemy tej wiadomości:

Wystąpił wyjątek. (Wyjątek od HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Spędziliśmy trochę czasu, to badania i Niestety, nie nadejdzie z czymkolwiek przydatne. Istniały pewne wiadomości w Dzienniku diagnostyczne, ale było trudno dokładnie skorelować je z tego problemu.

W końcu, możemy usunie zbiór witryn i ponownie utworzony i że rozwiązać.

Jeśli mogę wymyślić co spowodowało to w przyszłości, Zaktualizuję na stanowisku tym.

MOSS: Iteracja list niestandardowych i przekazujących dane filtrowane dane do programu InfoPath

Scenariusza biznesowego:

Zapewnia metodę, która umożliwia użytkownikom szybkie wpisywanie zapotrzebowań dokładne zakupu.

Problem w biznesie:

Klient prowadzi działalność w kilku dostawców kilkuset.

Dostawcy są "typ" szczególne. Oznacza to, że dostawca sprzedaje sprzęt komputerowy (np.. Firma Dell) lub materiały biurowe (np.. Zszywki).

Jak włączyć użytkowników końcowych, którzy tworzą zakupu zapotrzebowań Wybierz prawidłowy dostawcy możemy?

Rozwiązanie dla firm:

Rozróżnienie dostawców w systemie poprzez "typ".

Umożliwić użytkownikom wybieranie typu"" produktu i następnie odfiltrowany zestaw odpowiednich dostawców.

Rozwiązanie techniczne:

Formularz programu InfoPath został zaprojektowany pozwala użytkownikom wprowadzać w trybie online kupić zapotrzebowań.

Dwie listy wyboru program InfoPath kontroli wybór dostawcy. Pierwszy, użytkownik wybierze opcję „typu zakupu". Ogranicza to drugi list wyboru zawiera tylko dostawców, które sprzedają tego typu zakupu. Jest to klasyczny kaskadowych drop niedziałający.

Dostawców są przechowywane w MOSS niestandardową listę z kolumn niestandardowych dla dostawcy atrybutów, takich jak nazwa, adres i szczególnie "typ".

Wdrożenie usługi sieci web dla klienta programu InfoPath do spożywania że iterację na liście niestandardowe dostawcy, zwracanie tylko dostawców dopasowania dostarczony "typ".

Wywołania usługi sieci web za pośrednictwem formularza programu InfoPath.

Wyciągnięte wnioski:

  • Pierwszy, wydaje się konieczne do tej trasy. I wolałaby filtrowanie całkowicie programu InfoPath i nie stwarzają żadnych sieci web usługi funkcji tutaj. Jednakże, Forms server nie dostarcza wymaganych zdolności filtrowania. Możemy zjednoczyć regułę na typ"" listy wyboru w formularzu sort of ponowne otwarcie kwerendy dostawcy, ale nie otrzymujemy by działał poprawnie. W związku z tym, był wdrożenia usługi sieci web.
  • Jest to klasyczna "kaskadowych listy wyboru" problem w programie InfoPath formularzy serwera świata i istnieje wiele dobrych przykładów tam które wyjaśniają, jak rozwiązać ten.
  • Wartość pustej kolumny na liście dostawcy nie zwraca ciąg pusty, gdy odwołanie do tak: initItem["Nazwa dostawcy"]. Zamiast tego, Zwraca wartość null.

Niektóre inne uwagi:

  • I zwracają tablicę[] dostawców ponieważ miałem trudności zwracanie obiektu ArrayList. Program InfoPath był skarżą go i nie mam czasu lub nachylenie do walki nad nim. To, Oczywiście, umieszcza sztucznego ograniczenia całkowitej liczby dostawców. On także zmuszony mnie do wdrożenia trim() Metoda na tablicy bo nienawidzę pomysł powrotu powrót 100 dostawców wartości null. Program InfoPath nie opieki, ale nagged na mnie. (Ponownie, to było łatwiejsze niż zwalczanie InfoPath nad ArrayLists).
  • I wdrożone GetSpecificVendorByName() Funkcja także, który może być pouczający.

Kod:

przy użyciu Systemu;
przy użyciu System.Web;
przy użyciu System.Web.Services;
przy użyciu System.Web.Services.Protocols;
przy użyciu Microsoft.SharePoint;
przy użyciu System.Configuration;

/// <Podsumowanie>
///
Dostawcy usług: Zapewnia, że dostawcy związane z usług, które dziś są spożywane przez klienta formularza programu infopath.
///
/// Historia:
/// ——–
/// 07/24/07: Początkowe kodowania, Paul J. Gavin Conchango.
///
/// </Podsumowanie>
[Usługi WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publiczne Klasa VendorService : System.Web.Services.Usługi WebService
{

/// <Podsumowanie>
/// Reprezentuje dostawcy z listy programu sharepoint niestandardowych utrzymywana przez MSUSA.
/// </Podsumowanie>
publiczne Klasa Dostawcy
{
publiczne Dostawcy() { }

publiczne Dostawcy(SPItem initItem)
{
Jeśli (! (initItem["Nazwa dostawcy"] == pusty)) VendorName = initItem["Nazwa dostawcy"].ToString();
Jeśli (! (initItem["Adres 1"] == pusty)) VendorAddress1 = initItem["Adres 1"].ToString();
Jeśli (! (initItem["Adres 2"] == pusty)) VendorAddress2 = initItem["Adres 2"].ToString();
Jeśli (! (initItem["City"] == pusty)) VendorCity = initItem["City"].ToString();
Jeśli (! (initItem["VendorPhone"] == pusty)) VendorPhone = initItem["VendorPhone"].ToString();
Jeśli (! (initItem["PurchaseType"] == pusty)) VendorType = initItem["PurchaseType"].ToString();
Jeśli (! (initItem["Państwo"] == pusty)) VendorState = initItem["Państwo"].ToString();
Jeśli (! (initItem["Zip"] == pusty)) VendorZip = initItem["Zip"].ToString();
Jeśli (!(initItem["Faksu"] == pusty)) VendorFax = initItem["Faksu"].ToString();
Jeśli (!(initItem["SalesRepName"] == pusty)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Unikatowy identyfikator utrzymywane przez MOSS.
}

publiczne int VendorItemId;
publiczne ciąg VendorName;
publiczne ciąg VendorAddress1;
publiczne ciąg VendorAddress2;
publiczne ciąg VendorCity;
publiczne ciąg VendorState;
publiczne ciąg VendorZip;
publiczne ciąg VendorPhone;
publiczne ciąg VendorType;
publiczne ciąg VendorSalesRepName;
publiczne ciąg VendorFax;
}

publiczne VendorService () {

//Usuń oznaczenie komentarza że następujący wiersz, jeśli za pomocą zaprojektowane komponenty
//InitializeComponent();
}

prywatne Dostawcy[] GenerateTestVendors()
{
Dostawcy[] Rankingu;
Rankingu = Nowy Dostawcy[100];

Dostawcy v;
v = Nowy Dostawcy();
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";

Rankingu[0] = v;

v = Nowy Dostawcy();

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";

Rankingu[1] = v;

v = Nowy Dostawcy();
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";

Rankingu[2] = v;

Powrót Rankingu;

}

[WebMethod]
publiczne Dostawcy GetSpecificVendorById(int Identyfikator dostawcy)
{
ciąg SpVendorSiteName; // Nazwa rzeczywistej witryny MOSS, obsługującym listy niestandardowych dostawców.
ciąg SpVendorListName; // Nazwa aktualnej liście mech zawierające dostawców.

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

przy użyciu (SPSite Strona = Nowy SPSite(SpVendorSiteName))
{

przy użyciu (Sieci Web programu SharePoint Web = site. OpenWeb())
{

SPList currentList = www. Wyświetla listę[SpVendorListName];

SPItem specificItem = currentList.Items[Identyfikator dostawcy];

Powrót Nowy Dostawcy(specificItem);

} // za pomocą spweb web = site.openweb()
} // za pomocą Strona spsite = new spsite("http://localhost/mizuho")

}

[WebMethod]
// Zakłada się, że nazwa dostawcy jest niepowtarzalny, z punktu widzenia przedsiębiorców
publiczne Dostawcy GetSpecificVendorByVendorName(ciąg NazwaDostawcy)
{
ciąg SpVendorSiteName; // Nazwa rzeczywistej witryny MOSS, obsługującym listy niestandardowych dostawców.
ciąg SpVendorListName; // Nazwa aktualnej liście mech zawierające dostawców.

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

przy użyciu (SPSite Strona = Nowy SPSite(SpVendorSiteName))
{
przy użyciu (Sieci Web programu SharePoint Web = site. OpenWeb())
{

SPList currentList = www. Wyświetla listę[SpVendorListName];

foreach (SPItem vendorItem w currentList.Items)
{
Jeśli (vendorItem["Nazwa dostawcy"] == pusty) w dalszym ciągu;

Jeśli (vendorItem["Nazwa dostawcy"].ToString().Równa się(NazwaDostawcy))
Powrót Nowy Dostawcy(vendorItem);
}

Dostawcy v = Nowy Dostawcy();
v.VendorPhone = "nie znaleziono: " + NazwaDostawcy;

Powrót v;

Powrót pusty;

} // za pomocą spweb web = site.openweb()
} // za pomocą Strona spsite = new spsite("http://localhost/mizuho")

} // Metoda

[WebMethod]
publiczne Dostawcy[] GetVendorsOfType (ciąg filterType)
{

ciąg SpVendorSiteName; // Nazwa rzeczywistej witryny MOSS, obsługującego t
sam sprzedawca listy niestandardowej.
ciąg SpVendorListName; // Nazwa aktualnej liście mech zawierające dostawców.

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

Dostawcy[] Rankingu;
int vendorIndex = 0;
Rankingu = Nowy Dostawcy[1000];

// Zainicjować listy z domyślną przyjacielski przekaz.
Dostawcy v = Nowy Dostawcy();
v.VendorName = "Wybierz typ dostawcy do wypełnienia tej listy.";
Rankingu[0] = v;

// Przekonwertować filtr litery na łatwiejsze porównanie string później.
filterType = filterType.ToLower();

// Jeśli typ filtru przekazywana jest "test", generować kilka prostych danych.
#w regionie Filtr typu = "test"
Jeśli (równa się filterType.("badanie"))
Powrót GenerateTestVendors();
#endregion

Jeśli (PRAWDA)
{
przy użyciu (SPSite Strona = Nowy SPSite(SpVendorSiteName))
{
przy użyciu (Sieci Web programu SharePoint Web = site. OpenWeb())
{

v = pusty;

SPList currentList = www. Wyświetla listę[SpVendorListName];

// Iterację wszystkich elementów na liście dostawców.
foreach (SPItem vendorItem w currentList.Items)
{

ciąg lowerVendorType;

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

Jeśli (Równa się lowerVendorType.(filterType))
{
Rankingu[vendorIndex ] = Nowy Dostawcy(vendorItem);
}
} // Iterowanie poprzez wszystkie dostawcy na liście


Powrót TrimVendorArray(vendorIndex, Rankingu);
// powrót rankingu;

} // za pomocą spweb web = site.openweb()
} // za pomocą Strona spsite = new spsite("http://localhost/mizuho")

} // Jeśli to prawda

Powrót pusty;
}

prywatne Dostawcy[] TrimVendorArray(int newsize, Dostawcy[] originalVendorArray)
{
Dostawcy[] trimmedArray;

Jeśli (NewSize == 0) NewSize = 1;
trimmedArray = Nowy Dostawcy[newsize];

int currentCounter = 0;

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

Powrót trimmedArray;

}
}