Αρχεία κατηγοριών: MOSS

ΒΡΎΑ προσαρμογής της αναζήτησης για προχωρημένους — Υπόθεση έχει σημασία στη σύνθετη αναζήτηση XSLT

Δεν μπορώ να τροποποιήσω πολύ συχνά σύνθετη αναζήτηση XSLT, Έτσι φαίνεται σαν να είμαι αναρρίχηση μικρούς λόφους κάθε φορά.

Μου το νεώτερο δίδαγμα είναι το εξής: Υπόθεση έχει σημασία κατά την αναφορά σε μια στήλη. Στην σύνθετη αναζήτηση μου, Έχω στήλες ορίζεται ως αυτό:

<ρίζα xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Στήλες>
<
Στήλη Όνομα="GafTrainingInvoiceNumber" />
<
Στήλη Όνομα="GafTrainingInvoiceLocation" />
<
Στήλη Όνομα="Αναγνωριστικό εργασίας"/>
<
Στήλη Όνομα="Κατάταξη"/>
<
Στήλη Όνομα="Τίτλος"/>
<
Στήλη Όνομα="Συγγραφέας"/>
<
Στήλη Όνομα="Μέγεθος"/>
<
Στήλη Όνομα="Διαδρομή"/>
<
Στήλη Όνομα="Περιγραφή"/>
<
Στήλη Όνομα="Γράψτε"/>
<
Στήλη Όνομα="Όνομα_τοποθεσίας"/>
<
Στήλη Όνομα="CollapsingStatus"/>
<
Στήλη Όνομα="HitHighlightedSummary"/>
<
Στήλη Όνομα="HitHighlightedProperties"/>
<
Στήλη Όνομα="ContentClass"/>
<
Στήλη Όνομα="IsDocument"/>
<
Στήλη Όνομα="PictureThumbnailURL"/>
</
Στήλες>
</
ρίζα>

Είχε το XLST που εμφανίζει τη θέση αριθμός και τιμολόγιο του τιμολογίου:

<p>
Κατάρτιση ΤΙΜΟΛΟΓΗΣΗΣ: <XSL:αξία των Επιλέξτε="GafTrainingInvoiceNumber"/>
<
br></br>
Θέση τιμολογίου κατάρτισης: <XSL:αξία των Επιλέξτε="GafTrainingInvoiceLocation"/>
</
p>

Ωστόσο, η επιλογή έχει να αναφοράς το ακίνητο σε όλα τα πεζά γράμματα, όπως και στην:

<p>
Κατάρτιση ΤΙΜΟΛΟΓΗΣΗΣ: <XSL:αξία των Επιλέξτε="gaftraininginvoicenumber"/>
<
br></br>
Θέση τιμολογίου κατάρτισης: <XSL:αξία των Επιλέξτε="gaftraininginvoicelocation"/>
</
p>


Μέχρι που διόρθωσα, αποτελέσματα αναζήτησης που έδειξε τις ετικέτες (ήτοι. "Κατάρτιση ΤΙΜΟΛΟΓΗΣΗΣ") αλλά δεν υπάρχουν στοιχεία.

MOSS / InfoPath Forms Server (Το InfoPath 2007) drop-down λίστα επιδόσεις

Πρόσθετη κατηγορία: Το InfoPath

Περίληψη: Μια InfoPath 2007 μορφή ανάπτυξη σε ένα διακομιστή MOSS παρέχει μια αναπτυσσόμενη λίστα των πωλητών που συνδέεται με μια προσαρμοσμένη λίστα MOSS. Κατά την επιλογή ενός προμηθευτή, κανόνες αντιστοιχίσετε τιμές πεδίων σε μια χούφτα των πεδίων κειμένου όπως όνομα ύφασμα πωλήσεων, Διεύθυνση, πόλη, κράτος, ZIP και τηλέφωνο. Απόδοση είναι φρικτή. Μπορούμε να παρατηρήσουμε ότι χειροτερεύει η απόδοση (σε ένα μη-γραμμικό τρόπο) για κάθε επιπλέον πεδίο ενημερώνουμε με αυτόν τον τρόπο. Δηλαδή, Αν απλά ενημερώσετε το όνομα ύφασμα πωλήσεων, παίρνει [x] χρονικό διάστημα. Αν ενημερώνουμε ότι αντιπρόσωπος πωλήσεων, Διεύθυνση1, 2η διεύθυνση, πόλη, κράτος, zip, παίρνει 10 φορές μεγαλύτερη.

Λύση: Γράψτε μια υπηρεσία web (δείγμα κώδικα μπορούν να βρεθούν Εδώ) που μεταβιβάζεται στο όνομα του ο πωλητής και επιστρέφει πίσω τα στοιχεία του προμηθευτή. Στη συνέχεια, αντιστοιχίσετε τα πεδία με τον τρόπο αυτό. Αν και αυτό φαίνεται πάρα πολύ αργή, δεν υπήρχε καμία ορατή διαφορά στην απόδοση, όταν δώσαμε 1 πεδίο σε σχέση με 8 πεδία. Σαν προστιθέμενο επίδομα, Οι χρήστες παίρνουν ένα δροσερό "επικοινωνώντας με το διακομιστή" Κύλωνα επίδραση, ενώ περιμένουν για τη φόρμα να επικαλεσθεί και να καταναλώνουν τα αποτελέσματα της υπηρεσίας.

MOSS: Παρουσιάστηκε εξαίρεση. (Εξαίρεση από το HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ: Εμείς ποτέ δεν καθορίζεται η αρχική αιτία αυτού του προβλήματος, καθώς και ότι ποτέ δεν επιφάνειας και πάλι.

Παρατηρούμε ότι ξαφνικά κατά τη διάρκεια εκτέλεσης μιας τοποθεσίας ανάπτυξης, δύο χρήστες είναι σε θέση να αποκτήσετε πρόσβαση σε μια συλλογή τοποθεσιών. Οι λογαριασμοί αυτοί να πραγματοποιήσει έλεγχο ταυτότητας στην κύρια τοποθεσία, αλλά όταν προσπαθείτε να αποκτήσετε πρόσβαση σε μια συγκεκριμένη συλλογή τοποθεσιών, λαμβάνουν μόνο μια κενή οθόνη. Δεν σφάλματα που εμφανίζονται, μόνο μια Λευκή κενή σελίδα.

Συνδέεστε ως μια "διαχειριστής συλλογής τοποθεσιών" και να προσπαθήσετε να προσθέσετε ένα από αυτούς τους χρήστες ως μια "διαχειριστής τοποθεσίας" και αυτή τη φορά, κατόπιν πιέζοντας το πλήκτρο "OK", έχουμε αυτό το μήνυμα:

Παρουσιάστηκε εξαίρεση. (Εξαίρεση από το HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Εμείς εδώ και αρκετόν καιρό έρευνα αυτό δυστυχώς και, δεν καταλήξουμε με κάτι χρήσιμο. Υπήρχαν ορισμένα μηνύματα στο αρχείο καταγραφής διαγνωστικών, όμως ήταν δύσκολο να ακριβώς συσχετίζονται τους με αυτό το θέμα.

Στο τέλος, Διαγραφή της συλλογής τοποθεσιών και ξανά και ότι διασαφηνίστηκε.

Εάν καταλαβαίνω τι προκάλεσε αυτό στο μέλλον, Θα ενημερώσω αυτήν την ανάρτηση.

MOSS: Διαδοχικές προσεγγίσεις μέσα σε προσαρμοσμένες λίστες και τα οποία επιστρέφουν τα φιλτραρισμένα δεδομένα για το InfoPath

Επιχειρηματικό σενάριο:

Παρέχει μια μέθοδο που επιτρέπει στους χρήστες να εισαγάγουν ακριβή αγορά επιτάξεις γρήγορα.

Προβλήματος των επιχειρήσεων:

Ο πελάτης συναλλάσσεται με αρκετές εκατοντάδες προμηθευτές.

Οι πωλητές είναι "τύπος" συγκεκριμένες. Αυτό σημαίνει ότι ο πωλητής πωλεί μηχανογραφικού εξοπλισμού (π.χ.. Dell) ή γραφείο προμηθειών (π.χ.. Συνδετήρες).

Πώς θα επιτρέψουμε σε τελικούς χρήστες που δημιουργούν αγορά επιτάξεις επιλέξτε μια έγκυρη προμηθευτή?

Επιχειρηματική λύση:

Διαφοροποιήσει προμηθευτές στο σύστημα μέσω "τύπος".

Επιτρέπουν στους χρήστες να επιλέξετε τον τύπο"" του προϊόντος και στη συνέχεια Δώστε ένα φιλτραρισμένο σύνολο κατάλληλη προμηθευτές.

Τεχνική λύση:

Έχει σχεδιαστεί μια φόρμα του InfoPath που επιτρέπει στους χρήστες να εισέλθουν σε απευθείας σύνδεση αγοράσει επιτάξεις.

Δύο λίστες επιλογής InfoPath ελέγχου επιλογής προμηθευτή. Πρώτη, ο χρήστης επιλέγει ένα «είδος της αγοράς». Αυτό περιορίζει μία δεύτερη λίστα επιλογής να περιέχουν μόνο οι προμηθευτές που πωλούν για αυτόν τον τύπο αγορά. Αυτό είναι ένα κλασικό επικαλυπτόμενα αναπτυσσόμενο.

Προμηθευτές αποθηκεύονται σε μια προσαρμοσμένη λίστα MOSS με προσαρμοσμένων στηλών προμηθευτή χαρακτηριστικά, όπως όνομα, διεύθυνση και ιδιαίτερα "τύπος".

Εφαρμογή μια διαδικτυακή υπηρεσία για ένα πρόγραμμα-πελάτη InfoPath να καταναλώνουν που εκτελεί επαναλήψεις μέσα από τον κατάλογο προμηθευτών συνήθειας, επιστροφή μόνο προμηθευτές που ταιριάζουν ένα παρεχόμενο "τύπος".

Επικαλούνται την υπηρεσία web μέσω της φόρμας του InfoPath.

Διδάγματα:

  • Πρώτη, φαίνεται απαραίτητο να πάτε αυτή η διαδρομή. Θα προτιμούσα να κάνει το φιλτράρισμα εξ ολοκλήρου μέσα από το InfoPath και δεν δημιουργούν οποιαδήποτε λειτουργία υπηρεσιών web εδώ. Ωστόσο, μορφές διακομιστής δεν παρέχει την απαιτούμενη δυνατότητα φιλτραρίσματος. Μπορούμε να θέσουμε έναν κανόνα επάνω σε ένα "τύπος" λίστας επιλογών, με τη μορφή να είδος του να ανοίξει εκ νέου το ερώτημα του προμηθευτή, αλλά δεν μπορούμε να έχουμε να λειτουργήσει σωστά. Ως εκ τούτου, ήταν απαραίτητο να εφαρμόσουν την υπηρεσία web.
  • Αυτό είναι ένα κλασικό "επικαλυπτόμενα λίστας επιλογών" αποτελεί πρόβλημα στο InfoPath το διακομιστή κόσμο και υπάρχουν πολλά καλά παραδείγματα εκεί έξω που εξηγούν πώς να λύσει αυτό.
  • Μια κενή τιμή στήλης στον κατάλογο προμηθευτών δεν επιστρέφει μια κενή συμβολοσειρά όταν αναφέρεται σαν αυτό: initItem["Όνομα προμηθευτή"]. Αντί, επιστρέφει μια τιμή null.

Μερικές άλλες σημειώσεις:

  • Μου επιστρέφουν έναν πίνακα[] προμηθευτές διότι είχα κάποια δυσκολία που επιστρέφει μια ArrayList. InfoPath διαμαρτύρονται για αυτό και δεν έχω το χρόνο και την διάθεση για την καταπολέμηση της πέρα από το. Αυτό, Φυσικά, βάζει ένα τεχνητό όριο προς το συνολικό αριθμό των πωλητών. Επίσης αυτό που ανάγκασε μου για να εφαρμόσει μια περιποίηση() μέθοδος για τον πίνακα, επειδή μισώ την ιδέα της επιστροφής πίσω 100 null προμηθευτών. Το InfoPath δεν ενδιαφέρεται, αλλά αυτό nagged κατά μου. (Και πάλι, Αυτό ήταν πιο εύκολο από αγωνίζονται το InfoPath κατά τη διάρκεια ArrayLists).
  • Εφάρμοσα μια GetSpecificVendorByName() λειτουργία καθώς και, που μπορεί να είναι διαφωτιστικός.

Ο κώδικας:

χρήση Σύστημα;
χρήση System.Web;
χρήση System.Web.Services;
χρήση System.Web.Services.Protocols;
χρήση Microsoft.SharePoint;
χρήση System.Configuration;

/// <Περίληψη>
///
Υπηρεσία του προμηθευτή: Παρέχει προμηθευτή που σχετίζονται με υπηρεσίες που σήμερα καταναλώνονται από μια φόρμα του infopath πελάτη.
///
/// Ιστορία:
/// ——–
/// 07/24/07: Αρχική κωδικοποίηση, Paul J. Gavin του Conchango.
///
/// </Περίληψη>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
δημόσια Κατηγορία VendorService : System.Web.Services.WebService
{

/// <Περίληψη>
/// Αντιπροσωπεύει έναν προμηθευτή από μια λίστα sharepoint συνήθειας που συντηρείται από MSUSA.
/// </Περίληψη>
δημόσια Κατηγορία Προμηθευτή
{
δημόσια Προμηθευτή() { }

δημόσια Προμηθευτή(SPItem initItem)
{
Αν (! (initItem["Όνομα προμηθευτή"] == τιμή null)) VendorName = initItem["Όνομα προμηθευτή"].ToString();
Αν (! (initItem["Διεύθυνση 1"] == τιμή null)) VendorAddress1 = initItem["Διεύθυνση 1"].ToString();
Αν (! (initItem["Διεύθυνση 2"] == τιμή null)) VendorAddress2 = initItem["Διεύθυνση 2"].ToString();
Αν (! (initItem["Πόλη"] == τιμή null)) VendorCity = initItem["Πόλη"].ToString();
Αν (! (initItem["VendorPhone"] == τιμή null)) VendorPhone = initItem["VendorPhone"].ToString();
Αν (! (initItem["PurchaseType"] == τιμή null)) VendorType = initItem["PurchaseType"].ToString();
Αν (! (initItem["Κράτος"] == τιμή null)) VendorState = initItem["Κράτος"].ToString();
Αν (! (initItem["Zip"] == τιμή null)) VendorZip = initItem["Zip"].ToString();
Αν (!(initItem["Φαξ"] == τιμή null)) VendorFax = initItem["Φαξ"].ToString();
Αν (!(initItem["SalesRepName"] == τιμή null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Μοναδικό αναγνωριστικό διατηρήται μέσω MOSS.
}

δημόσια int VendorItemId;
δημόσια συμβολοσειρά Όνομα προμηθευτή;
δημόσια συμβολοσειρά VendorAddress1;
δημόσια συμβολοσειρά VendorAddress2;
δημόσια συμβολοσειρά VendorCity;
δημόσια συμβολοσειρά VendorState;
δημόσια συμβολοσειρά VendorZip;
δημόσια συμβολοσειρά VendorPhone;
δημόσια συμβολοσειρά VendorType;
δημόσια συμβολοσειρά VendorSalesRepName;
δημόσια συμβολοσειρά VendorFax;
}

δημόσια VendorService () {

//Αποσχολιάστε την ακόλουθη γραμμή, αν χρησιμοποιείτε σχεδιασμένα συστατικά
//InitializeComponent();
}

ιδιωτική Προμηθευτή[] GenerateTestVendors()
{
Προμηθευτή[] λίστα αποτελεσμάτων;
λίστα αποτελεσμάτων = νέα Προμηθευτή[100];

Προμηθευτή v;
v = νέα Προμηθευτή();
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";

λίστα αποτελεσμάτων[0] = v;

v = νέα Προμηθευτή();

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

λίστα αποτελεσμάτων[1] = v;

v = νέα Προμηθευτή();
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";

λίστα αποτελεσμάτων[2] = v;

επιστροφή λίστα αποτελεσμάτων;

}

[WebMethod]
δημόσια Προμηθευτή GetSpecificVendorById(int αναγνωριστικό προμηθευτή)
{
συμβολοσειρά SpVendorSiteName; // Όνομα της πραγματικής τοποθεσίας ΒΡΎΑ που φιλοξενεί την προσαρμοσμένη λίστα πωλητή.
συμβολοσειρά SpVendorListName; // Όνομα της λίστας πραγματική ΒΡΎΑ που περιέχουν προμηθευτές.

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

χρήση (SPSite ιστοσελίδα = νέα SPSite(SpVendorSiteName))
{

χρήση (SPWeb Web = site. Επιθετικό())
{

SPList currentList = web. Λίστες[SpVendorListName];

SPItem specificItem = currentList.Items[αναγνωριστικό προμηθευτή];

επιστροφή νέα Προμηθευτή(specificItem);

} // χρησιμοποιώντας spweb web = site.openweb()
} // χρησιμοποιώντας την ιστοσελίδα spsite = νέα spsite("http://localhost/τελευταίες")

}

[WebMethod]
// Θεωρείται ότι το όνομα του προμηθευτή είναι μοναδικό, από επιχειρηματικής πλευράς
δημόσια Προμηθευτή GetSpecificVendorByVendorName(συμβολοσειρά να)
{
συμβολοσειρά SpVendorSiteName; // Όνομα της πραγματικής τοποθεσίας ΒΡΎΑ που φιλοξενεί την προσαρμοσμένη λίστα πωλητή.
συμβολοσειρά SpVendorListName; // Όνομα της λίστας πραγματική ΒΡΎΑ που περιέχουν προμηθευτές.

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

χρήση (SPSite ιστοσελίδα = νέα SPSite(SpVendorSiteName))
{
χρήση (SPWeb Web = site. Επιθετικό())
{

SPList currentList = web. Λίστες[SpVendorListName];

foreach (SPItem vendorItem σε currentList.Items)
{
Αν (vendorItem["Όνομα προμηθευτή"] == τιμή null) «««;

Αν (vendorItem["Όνομα προμηθευτή"].ToString().Ισούται με(να))
επιστροφή νέα Προμηθευτή(vendorItem);
}

Προμηθευτή v = νέα Προμηθευτή();
v.VendorPhone = "δεν βρέθηκε: " + να;

επιστροφή v;

επιστροφή τιμή null;

} // χρησιμοποιώντας spweb web = site.openweb()
} // χρησιμοποιώντας την ιστοσελίδα spsite = νέα spsite("http://localhost/τελευταίες")

} // μέθοδος

[WebMethod]
δημόσια Προμηθευτή[] GetVendorsOfType (συμβολοσειρά filterType)
{

συμβολοσειρά SpVendorSiteName; // Όνομα της πραγματικής τοποθεσίας ΒΡΎΑ που φιλοξενεί t
ο ίδιος πωλητής προσαρμοσμένη λίστα.
συμβολοσειρά SpVendorListName; // Όνομα της λίστας πραγματική ΒΡΎΑ που περιέχουν προμηθευτές.

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

Προμηθευτή[] λίστα αποτελεσμάτων;
int vendorIndex = 0;
λίστα αποτελεσμάτων = νέα Προμηθευτή[1000];

// Προετοιμασία τον κατάλογο με ένα προεπιλεγμένο μήνυμα φιλικό.
Προμηθευτή v = νέα Προμηθευτή();
v.VendorName = «Επιλέξτε έναν τύπο του προμηθευτή να συμπληρώσετε αυτή τη λίστα.";
λίστα αποτελεσμάτων[0] = v;

// Μετατρέψτε το φίλτρο σε lower case για ευκολότερη σύγκριση συμβολοσειράς αργότερα.
filterType = filterType.ToLower();

// Εάν περάσει τον τύπο φίλτρου είναι "δοκιμή", δημιουργήσει κάποια δοκιμαστικά δεδομένα.
#περιοχή Φίλτρο τύπου = "δοκιμή"
Αν (filterType. ισούται με("δοκιμή"))
επιστροφή GenerateTestVendors();
#endregion

Αν (TRUE)
{
χρήση (SPSite ιστοσελίδα = νέα SPSite(SpVendorSiteName))
{
χρήση (SPWeb Web = site. Επιθετικό())
{

v = τιμή null;

SPList currentList = web. Λίστες[SpVendorListName];

// Επαναλαμβάνεται σε όλα τα στοιχεία στον κατάλογο προμηθευτών.
foreach (SPItem vendorItem σε currentList.Items)
{

συμβολοσειρά lowerVendorType;

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

Αν (lowerVendorType. ισούται με(filterType))
{
λίστα αποτελεσμάτων[vendorIndex ] = νέα Προμηθευτή(vendorItem);
}
} // διαδοχικές προσεγγίσεις μέσα από όλους τους προμηθευτές στη λίστα


επιστροφή TrimVendorArray(vendorIndex, λίστα αποτελεσμάτων);
// επιστρέφει τη λίστα αποτελεσμάτων;

} // χρησιμοποιώντας spweb web = site.openweb()
} // χρησιμοποιώντας την ιστοσελίδα spsite = νέα spsite("http://localhost/τελευταίες")

} // Εάν είναι αληθές

επιστροφή τιμή null;
}

ιδιωτική Προμηθευτή[] TrimVendorArray(int νέα, Προμηθευτή[] originalVendorArray)
{
Προμηθευτή[] trimmedArray;

Αν (νέα == 0) νέα = 1;
trimmedArray = νέα Προμηθευτή[νέα];

int currentCounter = 0;

για (currentCounter = 0; currentCounter < νέα; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

επιστροφή trimmedArray;

}
}