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;

}
}

Αφήνω μια απάντηση

Η διεύθυνση email σας δεν θα δημοσιευθεί. τα απαιτούμενα πεδία είναι επισημασμένα *