Archiv der Kategorie: MOOS

MOSS-Erweiterte Suche-Anpassung — Fall spielt in Erweiterte Suche XSLT

Ich ändern nicht sehr oft Erweiterte Suche XSLT., so es, scheint wie ich kleine Hügel jedesmal steige.

Das ist meine neueste Lektion: Fall ist wichtig, wenn Sie eine Spalte verweisen. In meine Erweiterte Suche, Ich habe so definierte Spalten:

<Stamm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Spalten>
<
Spalte Name="GafTrainingInvoiceNumber" />
<
Spalte Name="GafTrainingInvoiceLocation" />
<
Spalte Name="Arbeits-ID"/>
<
Spalte Name="Rang"/>
<
Spalte Name="Titel"/>
<
Spalte Name="Autor"/>
<
Spalte Name="Größe"/>
<
Spalte Name="Pfad"/>
<
Spalte Name="Beschreibung"/>
<
Spalte Name="Schreiben"/>
<
Spalte Name="SiteName"/>
<
Spalte Name="CollapsingStatus"/>
<
Spalte Name="HitHighlightedSummary"/>
<
Spalte Name="HitHighlightedProperties"/>
<
Spalte Name="ContentClass"/>
<
Spalte Name="IsDocument"/>
<
Spalte Name="PictureThumbnailURL"/>
</
Spalten>
</
Stamm>

Die XLST, das die Rechnung Nummer und Rechnung Position anzeigt gewesen:

<p>
Ausbildung-Rechnungsnummer: <XSL:Wert der Wählen Sie="GafTrainingInvoiceNumber"/>
<
BR></BR>
Rechnung Trainingsort: <XSL:Wert der Wählen Sie="GafTrainingInvoiceLocation"/>
</
p>

Jedoch, Wählen Sie muss die Eigenschaft in alle Kleinbuchstaben verweisen, wie in:

<p>
Ausbildung-Rechnungsnummer: <XSL:Wert der Wählen Sie="gaftraininginvoicenumber"/>
<
BR></BR>
Rechnung Trainingsort: <XSL:Wert der Wählen Sie="gaftraininginvoicelocation"/>
</
p>


Bis ich das korrigiert, Suchergebnisse zeigte die Etiketten (dh. "Ausbildung-Rechnungsnummer") aber keine Daten.

MOOS / InfoPath Forms Server (InfoPath 2007) Dropdown-Liste Leistung

Zusätzliche Kategorie: InfoPath

Zusammenfassung: Ein InfoPath 2007 Form auf einem MOSS-Server bereitgestellt bietet eine Dropdown-Liste Anbieter gebunden an eine benutzerdefinierte Liste von MOSS. Nach Auswahl eines Anbieters, Regeln zuweisen einer Handvoll von Text-Feldern wie Vertriebsmitarbeiter Name Feldwerte., Adresse, Stadt, Zustand, ZIP und phone. Leistung ist schrecklich. Wir bemerken, dass die Leistung noch schlimmer (in einem nicht-linear) für jedes weitere Feld aktualisieren wir auf diese Weise. N.B., Wenn wir einfach aktualisieren Sie den Vertriebsmitarbeiter-Namen, Es dauert [x] Zeit. Wenn wir Vertriebsmitarbeiter aktualisieren, Adresse1, Adresse2, Stadt, Zustand, ZIP, Es dauert 10 mal länger.

Lösung: Einen Webdienst programmieren (Beispielcode finden Sie Hier) die Namen eines Anbieters übergeben wird und es gibt wieder die Anbieter-details. Dann, Weisen Sie die Felder so. Obwohl dies scheint zu langsam, Es gab keinen erkennbaren Unterschied in der Leistung, wenn wir zugewiesen 1 Feld im Vergleich 8 Felder. Als zusätzlichen bonus, Benutzer erhalten ein cooles "Kontaktaufnahme mit dem server" Zylon Wirkung, während sie warten auf das Formular aufrufen und den Dienst belegen Ergebnisse.

MOOS: Ausnahme. (Ausnahme von HRESULT: 0X 80020009 (DISP_E_EXCEPTION))

UPDATE: Wir bestimmt nie wieder die Ursache für dieses Problem und es nie Oberfläche.

Wir bemerken, dass plötzlich während der Durchführung einer Website Entwicklung, zwei Benutzer können nicht auf eine Websitesammlung zugreifen. Diese Konten können auf der Haupt-Website authentifizieren., aber wenn Sie versuchen, eine bestimmte Websitesammlung zugreifen, Sie erhalten nur einen leeren Bildschirm angezeigt. Keine Fehler angezeigt, nur eine weisse leere Seite.

Wir melden Sie sich als ein Siggy Auflistung und versuchen, einen Benutzer als ein Siggy und diesmal hinzufügen, beim Drücken der "OK", Wir erhalten diese Nachricht:

Ausnahme. (Ausnahme von HRESULT: 0X 80020009 (DISP_E_EXCEPTION))

Wir verbrachten einige Zeit erforscht dies leider, nicht einfallen etwas sinnvolles. Es gab einige Nachrichten in das Diagnoseprotokoll, aber es war schwer, ihnen genau mit diesem Thema zu korrelieren.

Am Ende, wir die Websitesammlung gelöscht und neu erstellt und auf die löste es.

Wenn ich herausfinden, verursacht was dies in Zukunft, Ich werde diesen Beitrag aktualisieren..

MOOS: Benutzerdefinierte Listen durchlaufen und die Rückkehr gefilterter Datenfilterungs in InfoPath

Business-Szenario:

Stellen Sie eine Methode, die Benutzern ermöglicht, genaue Bestellanforderungen schnell eingeben.

Geschäftsproblem:

Der Client ist mit mehreren hundert Anbietern.

Anbieter sind "Typ" spezifische. Dies bedeutet, dass ein Anbieter EDV-Anlagen verkauft (zB. Dell) oder Bürotechnik (zB. Staples).

Wie aktiviere wir Endbenutzer, die Einkauf Bestellanforderungen wählen Sie einen gültigen Anbieter erstellen?

Business-Lösung:

Anbietern zu unterscheiden, in das System über "Typ".

Ermöglichen Sie es Benutzern, den "auswählen" Produkt und geben Sie dann eine gefilterte Menge von geeigneten Anbietern.

Technische Lösung:

Ein InfoPath-Formular wurde entwickelt, dass ermöglicht Benutzern online eingeben Bestellanforderungen kaufen.

Zwei InfoPath-Auswahllisten Steuern Anbieterauswahl. Erste, der Benutzer wählt ein "Kauf". Dies schränkt eine zweite Auswahlliste nur Lieferanten enthalten, die für diesen Kauf zu verkaufen. Dies ist ein klassisches cascading Drop-down.

Anbieter sind in einer MOSS benutzerdefinierte Liste mit benutzerdefinierten Spalten für Anbieter Attribute wie Name gespeichert., Adresse und vor allem "Typ".

Implementieren eines Webdienstes für ein InfoPath-Client zu konsumieren durchläuft der benutzerdefinierten Anbieter-Liste, Rückgabe nur Lieferanten, die passend mitgelieferten "Typs".

Den Webdienst über das InfoPath-Formular aufrufen.

Lessons Learned:

  • Erste, Es erscheint notwendig, diesen Weg zu gehen. Ich hätte es vorgezogen, zu tun, die Filterung komplett in InfoPath und nicht erstellen Sie hier Funktionalität für die Web service. Jedoch, Formularserver bietet keine erforderlichen Filterfunktion. Wir setzen in der Regel auf eine "Typ" Auswahlliste im Formular irgendwie die Kreditor-Abfrage erneut öffnen, aber wir können es richtig funktioniert nicht. Daher, Es war notwendig, um die Implementierung des Webservice.
  • Dies ist eine klassische "kaskadierende Auswahlliste" Problem in der InfoPath forms Server-Welt und es gibt viele gute Beispiele gibt, die erklären, wie dieses Problem zu lösen.
  • Ein leerer Wert für eine Spalte in der Liste der Anbieter gibt eine leere Zeichenfolge wie folgt verwiesen nicht zurück.: initItem["Herstellernamen"]. Stattdessen, Es gibt Null zurück.

Einige andere Hinweise:

  • Ich zurückgibt ein Array[] der Anbieter weil ich hatte einige Schwierigkeiten, die Rückgabe ArrayList. InfoPath klagte darüber, und ich habe nicht die Zeit oder Lust, darüber zu kämpfen. Dies, Natürlich, stellt eine künstliche Beschränkung auf die Gesamtzahl der Anbieter. Es hielt auch mich, ein Trimm zu implementieren() Methode auf dem Array weil ich hasse die Idee der Rückkehr zurück 100 null Anbieter. InfoPath ist es egal, aber es nörgelte mich an. (Wieder, Das war einfacher als Arraylisten InfoPath streiten).
  • Ich habe implementiert eine GetSpecificVendorByName() Funktion sowie, Das könnte durchaus aufschlussreich sein.

Der code:

Verwendung System;
Verwendung System.Web;
Verwendung System.Web.Services;
Verwendung System.Web.Services.Protocols;
Verwendung Microsoft.SharePoint;
Verwendung System.Configuration;

/// <Zusammenfassung>
///
Hersteller-Service: Stellt, dass Anbieter, die im Zusammenhang mit Dienstleistungen, die heute durch ein Infopath-Clientformular verbraucht werden.
///
/// Geschichte:
/// ——–
/// 07/24/07: Anfängliche Codierung, Paul J. Gavin von Conchango.
///
/// </Zusammenfassung>
[WebService(Namespace = "http://www.Conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
öffentliche Klasse VendorService : System.Web.Services.WebService
{

/// <Zusammenfassung>
/// Stellt einen Anbieter aus einer benutzerdefinierten Sharepoint-Liste verwaltet von MSUSA.
/// </Zusammenfassung>
öffentliche Klasse Hersteller
{
öffentliche Hersteller() { }

öffentliche Hersteller(SPItem initItem)
{
If (! (initItem["Herstellernamen"] == NULL)) Herstellername = InitItem["Herstellernamen"].ToString();
If (! (initItem["Adresse 1"] == NULL)) VendorAddress1 = InitItem["Adresse 1"].ToString();
If (! (initItem["Adresse 2"] == NULL)) VendorAddress2 = InitItem["Adresse 2"].ToString();
If (! (initItem["City"] == NULL)) VendorCity = InitItem["City"].ToString();
If (! (initItem["VendorPhone"] == NULL)) VendorPhone = InitItem["VendorPhone"].ToString();
If (! (initItem["PurchaseType"] == NULL)) VendorType = InitItem["PurchaseType"].ToString();
If (! (initItem["Staat"] == NULL)) VendorState = InitItem["Staat"].ToString();
If (! (initItem["Zip"] == NULL)) VendorZip = InitItem["Zip"].ToString();
If (!(initItem["Fax"] == NULL)) VendorFax = InitItem["Fax"].ToString();
If (!(initItem["SalesRepName"] == NULL)) VendorSalesRepName = InitItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Eindeutige ID gepflegt über Moos.
}

öffentliche int VendorItemId;
öffentliche Zeichenfolge Herstellername;
öffentliche Zeichenfolge VendorAddress1;
öffentliche Zeichenfolge VendorAddress2;
öffentliche Zeichenfolge VendorCity;
öffentliche Zeichenfolge VendorState;
öffentliche Zeichenfolge VendorZip;
öffentliche Zeichenfolge VendorPhone;
öffentliche Zeichenfolge VendorType;
öffentliche Zeichenfolge VendorSalesRepName;
öffentliche Zeichenfolge VendorFax;
}

öffentliche VendorService () {

//Kommentieren Sie, dass die folgende Zeile verwenden Komponenten ausgelegt
//InitializeComponent();
}

Privat Hersteller[] GenerateTestVendors()
{
Hersteller[] Ergebnisliste;
Ergebnisliste = Neu Hersteller[100];

Hersteller v;
V = Neu Hersteller();
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";

Ergebnisliste[0] = v;

V = Neu Hersteller();

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

Ergebnisliste[1] = v;

V = Neu Hersteller();
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";

Ergebnisliste[2] = v;

Rückkehr Ergebnisliste;

}

[WebMethod]
öffentliche Hersteller GetSpecificVendorById(int vendorId)
{
Zeichenfolge SpVendorSiteName; // Name des tatsächlichen MOSS-Website, die die benutzerdefinierte Liste Anbieter hostet.
Zeichenfolge SpVendorListName; // Name der eigentlichen MOSS Liste mit Anbietern.

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

Verwendung (SPSite Website = Neu SPSite(SpVendorSiteName))
{

Verwendung (SPWeb Web = Site. OpenWeb())
{

SPList CurrentList = Web. Listen[SpVendorListName];

SPItem SpecificItem = currentList.Items[vendorId];

Rückkehr Neu Hersteller(specificItem);

} // mit Spweb Web = site.openweb()
} // Nutzung Spsite Site = neue Spsite("http://Localhost/Mizuho")

}

[WebMethod]
// Setzt voraus, dass der Kreditorname eindeutig ist, aus betriebswirtschaftlicher Sicht
öffentliche Hersteller GetSpecificVendorByVendorName(Zeichenfolge werden)
{
Zeichenfolge SpVendorSiteName; // Name des tatsächlichen MOSS-Website, die die benutzerdefinierte Liste Anbieter hostet.
Zeichenfolge SpVendorListName; // Name der eigentlichen MOSS Liste mit Anbietern.

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

Verwendung (SPSite Website = Neu SPSite(SpVendorSiteName))
{
Verwendung (SPWeb Web = Site. OpenWeb())
{

SPList CurrentList = Web. Listen[SpVendorListName];

foreach (SPItem vendorItem im currentList.Items)
{
If (vendorItem["Herstellernamen"] == NULL) weiter;

If (vendorItem["Herstellernamen"].ToString().Entspricht(werden))
Rückkehr Neu Hersteller(vendorItem);
}

Hersteller V = Neu Hersteller();
v.VendorPhone = "nicht gefunden: " + werden;

Rückkehr v;

Rückkehr NULL;

} // mit Spweb Web = site.openweb()
} // Nutzung Spsite Site = neue Spsite("http://Localhost/Mizuho")

} // Methode

[WebMethod]
öffentliche Hersteller[] GetVendorsOfType (Zeichenfolge filterType)
{

Zeichenfolge SpVendorSiteName; // Namen der tatsächlichen MOSS-Website, die t hostet
benutzerdefinierte Liste der He-Anbieter.
Zeichenfolge SpVendorListName; // Name der eigentlichen MOSS Liste mit Anbietern.

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

Hersteller[] Ergebnisliste;
int VendorIndex = 0;
Ergebnisliste = Neu Hersteller[1000];

// Die Liste mit einer Standardnachricht freundlich zu initialisieren.
Hersteller V = Neu Hersteller();
v.VendorName = "Wählen Sie einen Hersteller um diese Liste zu füllen.";
Ergebnisliste[0] = v;

// Konvertieren Sie den Filter in Kleinbuchstaben für später einfacher String-Vergleiche.
FilterType = filterType.ToLower();

// Wenn der Filtertyp übergeben wird "test", einige einfachen Daten generieren.
#Gebiet Filter Typ = "test"
If (Equals FilterType.("test"))
Rückkehr GenerateTestVendors();
#endregion

If (wahr)
{
Verwendung (SPSite Website = Neu SPSite(SpVendorSiteName))
{
Verwendung (SPWeb Web = Site. OpenWeb())
{

V = NULL;

SPList CurrentList = Web. Listen[SpVendorListName];

// Durchlaufen Sie aller Elemente in der Liste der Anbieter.
foreach (SPItem vendorItem im currentList.Items)
{

Zeichenfolge lowerVendorType;

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

If (Gleich LowerVendorType.(filterType))
{
Ergebnisliste[VendorIndex ] = Neu Hersteller(vendorItem);
}
} // Iteration über alle Anbieter in der Liste


Rückkehr TrimVendorArray(vendorIndex, Ergebnisliste);
// Ergebnisliste zurückkehren;

} // mit Spweb Web = site.openweb()
} // Nutzung Spsite Site = neue Spsite("http://Localhost/Mizuho")

} // Wenn der Wert true

Rückkehr NULL;
}

Privat Hersteller[] TrimVendorArray(int newSize, Hersteller[] originalVendorArray)
{
Hersteller[] trimmedArray;

If (NewSize == 0) NewSize = 1;
TrimmedArray = Neu Hersteller[newSize];

int CurrentCounter = 0;

für (CurrentCounter = 0; currentCounter < newSize; CurrentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

Rückkehr trimmedArray;

}
}