Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Crosstab in Lightswitch

Îåêßíçóå áðü ôï ìÝëïò kkolotouros. Τελευταία δημοσίευση από το μέλος Markos στις 02-04-2012, 10:23. Υπάρχουν 12 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-03-2012, 10:39 69829

    Crosstab in Lightswitch

    Καλημέρα,

    Έχουμε το ακόλουθο requirement για μια εφαρμογή που φτιάχνουμε σε Lightswitch:

    - Ο πίνακας CustomerAgreementProducts έχει 3 πεδία: CustomerAgreementID, ProductID, FacesAgreed.
    - Οι χρήστες πρέπει να διαχειρίζονται τον πίνακα δίνοντας τιμές στο FacesAgreed για κάθε συνδυασμό CustomerAgreementID, ProductID.
    - Η απαίτησή τους είναι να βλέπουν τα δεδομένα σε μορφή crosstab και όχι σε μορφή πίνακα. Παράλληλα θα πρέπει να μπορούν να εισάγουν τιμές απευθείας μέσα στο crosstab. Η απαίτησή τους αναπαρίσταται στους παρακάτω πίνακες:
    1) Αρχική μορφή
    CAG_ID PRODUCT_ID FACES_AGREED
    CAG1 PRODUCT1 5
    CAG2 PRODUCT1 10
    CAG3 PRODUCT1 10
    CAG1 PRODUCT2 7
    CAG2 PRODUCT2 12
    CAG3 PRODUCT2 12

    2) Τελική μορφή
    PRODUCT_ID/CAG_ID CAG1 CAG2 CAG3
    PRODUCT1 5 10 10
    PRODUCT2 7 12 12


    Από όσο έχουμε ψάξει, τέτοια λειτουργικότητα δεν υφίσταται out of the box στο LightSwitch. Συνεπώς, εξετάζουμε το ενδεχόμενο να δημιουργήσουμε κάποιο δικό μας control που να την προσφέρει. Θα θέλαμε λοιπόν να ρωτήσουμε τα ακόλουθα:
    1) Είναι σωστή η προσέγγισή μας (δημιουργία custom control) ή υπάρχει πιο ενδεδειγμένος τρόπος;
    2) Ξέρουμε ότι το LightSwitch δέχεται SilverLight controls. Αυτό που δεν ξέρουμε είναι τα Controls για το Lightswitch έχουν ιδιαιτερότητες που πρέπει να γνωρίζουμε προτού ξεκινήσουμε την υλοποίηση.

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

    Ευχαριστώ εκ των προτέρων,
    Κώστας

  •  28-03-2012, 17:51 69836 σε απάντηση της 69829

    Απ: Crosstab in Lightswitch

    Το γεγονός ότι θέλεις να είναι updatable δημιουργεί προβλήματα που δυσκολεύουν την custom υλοοποίηση ακόμα και σε windows forms. Όλα είναι ιδανικά στην περίπτωση που περιγράφεις, καθώς ο πίνακάς σου περιέχει ακριβώς n x m στοιχεία. Αν, για παράδειγμα, για το product1 υπήρχε μόνο cag1 και cag2, τότε στη στήλη του cag3 το κελί θα είχε τιμή <null>. Βάζοντας τιμή στο κελί, ενώ για το control θα έκανες edit στη σειρά, για το table της βάσης θα ήταν insert. Αντίθετσ, αν "έσβηνες" την τιμή σε ένα κελί, αυτό πάλι για το control θα ήταν editing στην αντίστοιχη σειρά, αλλά για το table της βάσης θα ήταν διαγραφή record. Μήπως θα ήταν προτιμότερο να έχεις master - detail φόρμα και απλά να επιλέγεις ποιο θα είναι το master και ποιο το detail; (π.χ. productID ή cagID)

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  29-03-2012, 10:19 69841 σε απάντηση της 69836

    Απ: Crosstab in Lightswitch

    Καλημέρα και ευχαριστώ για την ανταπόκριση.

    Είναι διασφαλισμένο από την εφαρμογή ότι κάθε συνδυασμός ProductID & CAGID θα έχει πάντα μια τιμή για τα Faces Agreed. Αν κάποιο προϊόν δεν εμπίπτει σε CAGID έχει την τιμή μηδέν. Η μόνη εντολή που θα τρέχει μέσω αυτής της οθόνης είναι το update του πίνακα. Συνεπώς η περίπτωσή μας είναι όντως "ιδανική".

    Παράλληλα, οι χρήστες έχουν απορρίψει εναλλακτικές λύσεις και θέλουν η οθόνη να προσομοιάζει όσο γίνεται την τύπου crosstab λειτουργικότητα του Excel.

    Για τους λόγους αυτούς έχουμε καταλήξει ότι μάλλον θα πρέπει να δημιουργήσουμε ένα custom control που να φέρνει τα CAGIDs στις κολώνες και τα ProductIDs στις γραμμές.

    Το ερώτημά μας λοιπόν παραμένει: Υπάρχουν ιδιαιτερότητες στο πώς θα σχεδιάσει κανείς ένα Silverlight control για Lightswitch ή είναι κι αυτό ένα τυπικό Silverlight control;

    Με εκτίμηση,
    Κώστας
  •  29-03-2012, 10:50 69842 σε απάντηση της 69841

    Απ: Crosstab in Lightswitch

    Αν το ζητούμενο ήταν να φτιάξεις απλά ένα control δεν θα υπήρχε διαφορά. Στο LightSwitch όμως έχεις το θέμα πως θα κάνεις το control να καταλάβει ποιό entity και ποιά φίλτρα θα πρέπει να χρησιμοποιήσει. Ή θα το κάνεις αυτό με κώδικα σε κάθε φόρμα (οπότε χάνεις την ευκολία του LightSwitch) ή θα πρέπει το control κάπως να καταλαβαίνει που βρίσκεται. Και μετά φυσικά θα πρέπει να "πακετάρεις" το control όπως το θέλει το Lightswitch, για να μπορεί να το προσθέσει κάποιος στις κατάλληλες οθόνες.

    Πέρα από αυτό δεν υπάρχει κάποια πολύ σημαντική διαφορά, με την έννοια ότι ένα Silverlight control θα πρέπει να διαβάζει τα δεδομένα από το server και να τα δείχνει, δουλεύοντας πάντα ασύγχρονα. Από τη στιγμή που το Silverlight δεν έχει DataTables θα πρέπει να στείλεις τα δεδομένα σου από το server σε μορφή "Γραμμή, Στήλη, Τιμή" και να δημιουργήσεις το crosstab στο control. 



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-03-2012, 11:09 69843 σε απάντηση της 69842

    Απ: Crosstab in Lightswitch

    Παναγιώτη ευχαριστώ για την απάντηση.

    Ή θα το κάνεις αυτό με κώδικα σε κάθε φόρμα (οπότε χάνεις την ευκολία του LightSwitch) ή θα πρέπει το control κάπως να καταλαβαίνει που βρίσκεται.
                   Αν καταλαβαίνω καλά, εννοείς ότι θα πρέπει σε όσες οθόνες γίνεται χρήση του Crosstab να του εξηγώ μέσω κώδικα ποια entities θα συμπεριλαμβάνει, ποια πεδία θα έχει στις γραμμές/στήλες/κελιά κλπ. Αντιλαμβάνομαι ότι αρχιτεκτονικά αυτό δεν είναι πολύ πρακτικό, ωστόσο λόγω της μικρής συμμετοχής του Crosstab στην εφαρμογή (2 οθόνες όλες κι όλες) καθώς και του χρόνου που πάντοτε πιέζει, μου αρκεί το ότι ακόμη και έτσι είναι εφικτό.
    Και μετά φυσικά θα πρέπει να "πακετάρεις" το control όπως το θέλει το Lightswitch
                   Το Lightswitch απαιτεί ειδικό "πακετάρισμα" για τα controls που αναγωρίζει; Έχεις να μου προτείνεις κάποιες πηγές απ' όπου θα μπορούσα να μάθω πώς γίνεται αυτό;

    Και πάλι ευχαριστώ για την ανταπόκριση,
    Κώστας
  •  29-03-2012, 20:37 69849 σε απάντηση της 69843

    Απ: Crosstab in Lightswitch

    Το μεγαλύτερο πρόβλημα με το silverlight είναι ότι δεν υποστηρίζει datasets και datatables. Προτού μιλήσουμε καν για το presentation κομμάτι, χρειάζεσαι μία custom υλοποίηση αυτών των objects, με τα αντίστοιχα events για change tracking. Επίσης, χρειάζεται να γράψεις έναν adapter που θα τραβάει τα δεδομένα από τη βάση, θα κάνει το cross tab και θα γεμίζει το datatable με στοιχεία. Κι εφόσον πρόκειται για adapter, θα πρέπει να  "παίρνει" τις αλλαγές από το datatable, να τις "μεταφράζει" σε εγγραφές που καταλαβαίνει η βάση και να τις στέλνει για αποθήκευση. Δηλαδή, ένα mini ADO.NET για silverlight. Ούτε ψύλλος στον κόρφο σου. Όταν το υλοποιήσεις αυτό στείλε βιογραφικό στην Telerik και την DevExpress.

    Το θέμα, τώρα, είναι από που να ξεκινήσεις. Τρεις πηγές που μπορούν να σου φανούν χρήσιμες είναι αυτές:

    1. Silverlight Bindable DataGrid with DataSources (like DataSet and DataTable)
    2. Working with DataTable in Silverlight 4 (χρησιμοποιεί controls της Component One)
    3. Lightweight DataTable for your Silverlight applications (χρησιμοποιεί controls της Telerik)

    Για το πρόβλημα που περιγράφεις, είναι πολύ δύσκολο να βρεις πηγές και ανθρώπους που να έχουν ασχοληθεί πριν από σένα. Όλοι έχουν πέσει με τα μούτρα στο MVVM (εμένα δε με έχει εντυπωσιάσει και τόσο, αλλά εγώ ανέκαθεν ήμουν πνεύμα αντιλογίας).

    Αν για σένα και για τον πελάτη είναι must η λειτουργικότητα αυτής της μορφής, θα σου πρότεινα να μην το κάνεις με LightSwitch. Αν το LightSwitch είναι πιο must, τότε εξήγησε στον πελάτη ότι μερικά πράγματα γίνονται και άλλα όχι. Διότι για να γίνουν αυτά που δε γίνονται θα πρέπει να πληρωθούν έτσι όπως τους αξίζει...



    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  30-03-2012, 12:15 69859 σε απάντηση της 69843

    Απ: Crosstab in Lightswitch

    Κώστα
    Όπως εξήγησε και ο Παναγιώτης πρέπει να το υλοποιήσεις σε Silverlight. Η μεγάλη διαφορά και το κέρδος από το LightSwitch είναι ότι δεν χρειάζεται να κάνεις όλα αυτά (ευτυχώς) που λέει ο Μάρκος γιατί υπάρχει από κάτω το framework του LightSwitch. Επίσης το κομμάτι του πακεταρίσματος που περιγράφει ο Παναγιώτης είναι επίσης σωστό αλλά όχι υποχρεωτικό. Το πακετάρισμα που περιγράφει ο Παναγιώτης αφορά την δημιουργία control extension το οποίο πέρα από το πακετάρισμα απαιτεί και ΠΑΡΑ ΠΟΛΛΗ δουλειά για να είναι δυνατή η παραμετροποίησή του και η χρήση του για οποιαδήποτε περίπτωση cross-tab, δηλαδή να είναι domain agnostic. Υλοποιώντας όμως ένα custom control μέσα στο Client project το οποίο θα φτιαχτεί για να εξυπηρετεί συγκεκριμένες ανάγκες, που σημαίνει ότι θα ξέρει το domain σου και θα δουλεύει με strong-typed αντικείμενα, η δουλειά σου, αν και με λιγότερο ευέλικτο αποτέλεσμα, γίνεται πολύ πιο εύκολη. Αν γνωρίσεις από silverlight to μόνο -ας το πούμε- δύσκολο κομμάτι είναι το binding με τα αντικείμενα όπως αυτά έρχονται από το LS. Έχω φτιάξει ένα τέτοιο control και παρ' ότι δεν είναι γενικό αλλά κάνει πολύ συγκεκριμένη δουλειά την κάνει ΑΚΡΙΒΩΣ όπως θέλω.

    1+1 = 3 για πολύ μεγάλες τιμές του 1
  •  30-03-2012, 14:10 69860 σε απάντηση της 69849

    Απ: Crosstab in Lightswitch

    Μάρκο, αν επιστρέψεις τα δεδομένα σε μορφή [Όνομα Γραμμής, Όνομα Στήλης, Τιμή]  δεν θα έχεις κανένα πρόβλημα. Δεν υπάρχει λόγος να υλοποιήσεις το ADO.NET όταν απλά θέλεις να περάσεις ένα πίνακα. Δεν είπε κανείς ότι το Pivot θα πρέπει να το κάνει ο server, άνετα μπορεί να το κάνει και ο client. Αυτό που χάνεις είναι ότι δεν θα μπορείς να κάνεις απευθείας bind σε ένα DataGrid περιμένοντας να δώσει αυτόματα ονόματα στις στήλες. 

    kchristo, όλη η συζήτηση γύρω από το Lightswitch αφορά το πως να ΜΗΝ "καρφώνεις" πράγματα. Άσε που το binding είναι εύκολη υπόθεση στο Silverlight. Να φτιάξεις ένα control που θα δείχνει ένα πίνακα με συγκεκριμένες τιμές σε στήλες/γραμμές και κελιά είναι το ίδιο είτε έχεις να κάνεις με LightSwitch είτε όχι. Έτσι και δώσεις στο control τα δεδομένα σε μία λίστα με αντικείμενα που κάπου έχει τα κατάλληλα labels, η δουλειά γίνεται εύκολα.

    Το πακετάρισμα είναι το πρόβλημα, γιατί είναι επιπλέον δουλειά η οποία ΔΕΝ χρειάζεται αν απλά φτιάχνεις την εφαρμογή σου με κάποιο framework.
    Άσε που αν κάποιος ξέρει να φτιάχνει controls, δύσκολα θα ανεχτεί τους περιορισμούς του Lightswitch.

    Βρίσκω νόημα στη χρήση του μόνο αν υπάρχουν ένας σκασμός από οντότητες και οθόνες που μπορούν να φτιαχτούν εύκολα με το designer και μόνο μία-δύο σελίδες χρειάζονται κάτι επιπλέον όπως το CrossTab. 

    Αν όμως πέρα από το Cross-tab ο αριθμός των σελίδων είναι μικρός, οποιαδήποτε ωφέλεια θα χαθεί από το κόστος της προσαρμογής του control στο Lightswitch



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-03-2012, 14:17 69861 σε απάντηση της 69859

    Απ: Crosstab in Lightswitch

    Ευχαριστώ πολύ για τις απαντήσεις σας.
    @kchristo: Αυτά που λες μου είναι πολύ ενθαρρυντικά, ειδικά μετά την ψυχρολουσία που ένιωσα μετά το post του Μάρκου!!! Η αλήθεια είναι ότι ακόμα και έτσι θα χρειαστεί πολλή προσπάθεια από μεριάς μου καθώς δεν έχω δουλέψει με Silverlight στο παρελθόν, ωστόσο είναι σημαντικό το γεγονός ότι αυτό που θέλω μπορεί να υλοποιηθεί έστω κι αν δεν παρέχει την ευελιξία της επαναχρησιμοποίησης.
    Συνεπώς, θα προχωρήσω με γνώμονα όσα μου γράφεις και πιθανό να επανέλθω με νέο thread (= νέες ερωτήσεις που σίγουρα θα προκύψουν!).

    Και πάλι ευχαριστώ θερμά όλους σας για τις απαντήσεις.
    Κώστας
  •  30-03-2012, 14:22 69862 σε απάντηση της 69861

    Απ: Crosstab in Lightswitch

    Κώστα
    Αν θέλεις μπορώ να σου στείλω ένα απλό δείγμα κώδικα και από κει και πέρα ότι χρειαστείς μπορείς να με ρωτήσεις αν μπορώ να βοηθήσω. Πάντως να ξέρεις υπάρχουν αρκετά samples τόσο στο msdn/lightswitch όσο και σε άλλα sites που έχουν τέτοια παραδείγματα (όχι cross-tab) αλλά γενικότερα custom controls.

    1+1 = 3 για πολύ μεγάλες τιμές του 1
  •  30-03-2012, 14:30 69863 σε απάντηση της 69860

    Απ: Crosstab in Lightswitch

    είναι το ίδιο είτε έχεις να κάνεις με LightSwitch είτε όχι
    Παναγιώτη η ΤΕΡΑΣΤΙΑ διαφορά ανάμεσα στο να χρησιμοποιείς LightSwitch ή όχι είναι το αν θα χρειαστεί να κάνεις όλα αυτά που λέει ο Μάρκος (ή παρόμοια σε κάθε περίπτωση) για να καταφέρεις να φτάσουν τα δεδομένα σου από έναν SQL server στον client. Εγώ δεν γνωρίζω τι κάνουν άλλα παρόμοια ή και καλύτερα frameworks που κάνουν δουλειά παρόμοια με το lightSwitch. Ξέρω όμως ότι αν κρατούσα το ls μόνο για το data και business κομμάτι και μετά τα έγραφα ΟΛΑ με custom Silverlight controls πάλι θα είχα ΤΕΡΑΣΤΙΟ κέρδος σε χρόνο και αρτιότητα υποδομής. Αν υπάρχουν κι άλλα frameworks που το κάνουν αυτό (προφανώς θα το κάνουν) δεν το ξέρω, αλλά εγώ όπως και μερικές χιλιάδες άλλοι ανά τον κόσμο διάλεξαν το LightSwitch. Πιστεύω ότι υποτιμάς το LS αλλά παράλληλα θεωρώ ότι είναι δικαίωμά σου. Εγώ από την άλλη είμαι πολύ χαρούμενος για την επιλογή μου και πιθανόν να κάνω λάθος.

    Επίσης ΠΟΤΕ δεν είπα ότι το binding είναι δύσκολο στο Silverlight είπα ότι αν είναι κάτι δύσκολο αυτό είναι το binding στα objects όπως αυτά έρχονται από το LS μέσα στο control. Πρώτον επείδη πρέπει να γνωρίζεις τη δομή που υλοποιεί το LS για το ViewModel και δεύτερον γιατί πολλές φορές θα πέσεις πάνω σε θέματα threading.

    Με εκτίμηση
    Κώστας Χριστοδούλου

    1+1 = 3 για πολύ μεγάλες τιμές του 1
  •  30-03-2012, 14:34 69864 σε απάντηση της 69861

    Απ: Crosstab in Lightswitch

    Μόλις έστειλα το προηγούμενο post είδα και την απάντηση του Παναγιώτη.
    @Παναγιώτη είναι σαφή όσα αναφέρεις.

    Θα κάνω μια μικρή περιγραφή της κατάστασής μας:

    Η εφαρμογή μας έχει πάνω από 40 entities και 18 οθόνες. Η διαχείρισή σε γενικές γραμμές γίνεται εύκολα με τη standard λειτουργικότητα του Lightswitch. Μέρα με τη μέρα νιώθαμε όλο και πιο δικαιωμένοι για την επιλογή του συγκεκριμένου εργαλείου. Φυσικά έχουμε γράψει αρκετά LINQ queries και custom code όπου θέλαμε περαιτέρω λειτουργικότητα (π.χ. custom modal windows). Αυτό σημαίνει ότι το Lightswitch μας έχει γλυτώσει απίστευτο χρόνο υλοποίησης. Ωστόσο, 2 από τις οθόνες χρειάζονται crosstab - like λειτουργικότητα και οι χρήστες ήταν ανένδοτοι ως προς αυτό.

    Δεδομένων των παραπάνω θεωρώ ότι το να φτιάξουμε αυτές τις οθόνες έστω και με τον "καρφωτό" τρόπο που περιγράφει ο kchristo δεν είναι δα και μεγάλο ατόπημα. Όπως είπα και στο προηγούμενο post, σημασία έχει πως - απ' ό,τι φαίνεται - είναι δυνατή η κατασκευή του control και η χρήση του στο application.

    @kchristo: Οι απαντήσεις σας πέφτουν βροχή και δε σας προλαβαίνω! Φυσικά και θα με ενδιέφερε να μου στείλεις ένα αντιπροσωπευτικό δείγμα κώδικα ώστε να καταλάβω τι περίπου χρειάζομαι. Ειλικρινά ευχαριστώ για την προσφορά!

    Κώστας
  •  02-04-2012, 10:23 69884 σε απάντηση της 69864

    Απ: Crosstab in Lightswitch

    Το crosstab είναι ένα dummy table. Δε μπορεί να γίνει mapped εκ των προτέρων. Επίσης, το να διατηρείς στη βάση πίνακες με ορθογώνιες διαστάσεις (n x m), αν ΔΕΝ το επιβάλλει το business logic, είναι αυτοκτονία. Απ' ό,τι κατάλαβα, θέλεις να κάνεις ακριβώς αυτό, αλλά επειδή στο επιβάλλει το UI. Αν όντως έτσι έχουν τα πράγματα, το control είναι το μικρότερό σου πρόβλημα.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems