Απλές λύσεις σε σύνθετα προβλήματα

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


Η εταιρία όμως δεν ήθελε να πληρώσει επιπρόσθετα για να αγοράσουμε υπηρεσίες στο cloud για να βάλουμε βάση δεδομένων.  όπου το σύστημα θα συγχρόνιζε όταν υπήρχε διαδίκτυο…..

Όμως είχα τη λύση μπροστά μου, OneDrive… το είχαμε αγορασμένο για ορισμένες ομάδες…

Θα δημιουργούσαμε ακόμα μια ομάδα κοινόχρηστη για τους απομακρυσμένους χρήστες και για το κεντρικό γραφείο.  

Ο αρχικός σχεδιασμός προέβλεπε ότι θα είχαμε διάφορους φακέλους με έργα

Π.χ:

κ.ο.κ.

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

Στη συνέχεια οι απομακρυσμένοι χρήστες θα είχαν στο φορητό τους υπολογιστή την εφαρμογή και το OneDrive και κατά τη διάρκεια της μέρα θα συνδέουν τον υπολογιστή με το διαδίκτυο είτε από το σπίτι ή στο γραφείο, και θα αλλαγές θα συγχρονίζονται αυτόματα.

Ο λόγος που επέλεξα τα αρχεία αντί για βάση δεδομένων είναι ότι υπάρχουν χρήστες που είναι σε άλλη επαρχία.  και δεν έχουμε γραφεία εκεί.  

Διαφορετικός τρόπος προσέγγισης; 

VPN φυσικά και να συνδέονται στο διαδίκτυο και να συγχρονίζουν με την εσωτερική βάση δεδομένων, αλλά η πολιτική του τμήματος πληροφορικής δεν το επέτρεπε.

Για τα αρχεία….  πάντα πίστευα ότι η ανταλλαγή πληροφοριών και η επεξεργασία flat files είναι ξεπερασμένη.  Κατάλοιπο από legacy προγράμματα.  Το να έχεις βάση δεδομένων είναι βασικό κλειδί στις επιχειρήσεις.  

Όμως είναι ένα καλό εργαλείο που πρέπει ο κάθε προγραμματιστής να έχει γνώσεις και υπόψη του για λύσεις.

Φυσικά όμως δεν θα χρησιμοποιήσουμε ASCII flat files.  Ευτυχώς υπάρχει το XML.

Αυτό θα ήταν αδιανόητο εν έτει 2021 😁

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

Τι συμβαίνει με αυτή τη λύση.  

Στο πρόγραμμα μας δημιουργούμε ένα σχεδιάγραμμα, ένα τύπο δεδομένων καλύτερα, που ονομάζουμε class, μπορούμε να το φανταστούμε με τη πιο κάτω εικόνα .

Περιγράφουμε τι θα αποθηκεύει και διάφορες μεθόδους που μπορεί να χρησιμοποιήσουμε.

Ακολούθως δημιουργούμε μια λίστα (list) με τα διαφορετικά στιγμιότυπα (instances) αυτών των κλάσεων.

Μετά από αυτόν τον πίνακα μπορούμε να κάνουμε διάφορα, όπως επεξεργασία Κ.Ο.Κ.

Ακολούθως έχοντας αυτό το αντικείμενο στη μνήμη του υπολογιστή μπορούμε να το αποθηκεύσουμε στο δίσκο σαν XML αρχείο.

Και να το ανακτήσουμε όταν χρειάζεται με XML Object Deserialization

Θα το δούμε στη πορεία.  

Δημιουργία εφαρμογής

Μέσω της εφαρμογής που θα δημιουργήσουμε είναι να δούμε πως μπορούμε να παντρέψουμε την τεχνολογία του XML με OOP 

Η εφαρμογή θα έχει ως θέμα προβλήματα και εργασίες τεχνικού.

Από το visual studio προσθέτουμε ένα καινούργιο project. 

Βρίσκουμε από τα templates το Windows Forms App

Επιλέγουμε next, δίνουμε όνομα για το έργο μας και επιλέγουμε που θέλουμε να το αποθηκεύσουμε.

Επιλέγουμε next, χρησιμοποιώ  το .NET Core 5, αλλά μπορείτε να επιλέξετε και το 3 long term support.

Επιλέγουμε την Form1 όπου θα δημιουργήσουμε το user interface του προγράμματος μας.

Προσθέτουμε 3 buttons στο πάνω μέρος της οθόνης και ένα DataGrid view

Σχεδιάζουμε τη φόρμα όπως φαίνεστε στη πιο κάτω εικόνα

Σχεδιασμός κλάσης (Class)

Technical Work
+Case Number : 
+Customer Name : 
+Customer Address :
+Problem :
+Time Registered :
+Completed :

Όπως μπορείτε να δείτε όλα τα attributes είναι public

Ο λόγος είναι ότι το xml serialization μπορεί να κάνει serialize μόνο ότι είναι public

Ορισμός λίστας 

Η λίστα ορίζετε στη κύρια κλάση του προγράμματος μας και είναι διαθέσιμη από όλες τις functions μας.

Κατά την αρχικοποίηση η λίστα είναι κενή

Κουμπί save

Όταν ο χρήστης πατήσει το κουμπί καλείτε η ρουτίνα και περνάμε σαν παράμετρο τη λίστα μας

Κώδικας για το serialization 

Η ρουτίνα μας δέχεται σαν παράμετρο τη λίστα με τα τεχνικά προβλήματα.

Γίνεται ένας τυπικός έλεγχος εάν η λίστα μας είναι άδεια.

Με try και catch δηλώνουμε όλα τα variables που χρειάζονται ώστε να γίνει το serialization, όπου το αντικείμενο xml Serializer γεμίζει ένα memory stream αντικείμενο, στη συνέχεια αποθηκεύουμε το xml αρχείο.

Το αρχείο αποθηκεύεται στο φάκελο όπου είναι το πρόγραμμα μας.

Κώδικας για το de-serialization

Ο ακόλουθος κώδικας “κοιτάζει“ εάν υπάρχει το xml αρχείο.  

Μετά φορτώνεται το αρχείο στη μνήμη και με τη χρήση του xml document το περνάμε σε ένα string reader.  Στη συνέχεια περνάμε το αρχείο στο serializer όπου καλούμε τη ρουτίνα του deserialization.

Εάν όλα πάνε καλά τότε επιστρέφουμε το αντικείμενο.

Κώδικας για φόρτωση του αρχείο XML κατά τη ενεργοποίηση της εφαρμογής

Κατά την ενεργοποίηση της εφαρμογής μας, καλούμε τη ρουτίνα του deserialize.  Όπου φορτώνουμε τυχών αποθηκευμένα αντικείμενα στη λίστα μας.

Αυτό επιτυγχάνεται με τη χρήση του LINQ όπου μετατρέπουμε το πίνακα (array) σε list.

Το UpdateDG καλείτε ώστε να φορτώσει τα διάφορα αντικείμενα στο data grid view μας.

Κουμπί complete

Όταν ο χρήστης επιλέξει μια ή πολλές γραμμές στο data grid view τότε μπορεί να επιλέξει ότι η εργασία έχει ολοκληρωθεί.

Αυτό επιτυγχάνετε με τη χρήση ενός for each loop και τη χρήση LINQ όπου εύκολα ψάχνουμε στη λίστα μας εάν ο αριθμός του προβλήματος συνάδει με το επιλεγμένο στο data grid view

Κουμπί Add

Εμφανίζει ένα νέο παράθυρο για τη προσθήκη νέας εγγραφής.

Η φόρμα που εμφανίζετε επιστρέφει πίσω DialogResult.OK όταν ο χρήστης επιλέξει ΟΚ

Φόρμα για προσθήκη νέας εγγραφής

Public variables για επιστροφή αξιών στη κύρια φόρμα

Κώδικας κουμπιού ΟΚ

Κατεβάστε την εφαρμογή

Αφήστε ένα Σχόλιο

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Decline
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active

Who we are

Our website address is: http://stavrosbyte.eu.

Comments

When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection. An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.

Media

If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.

Cookies

If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year. If you visit our login page, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser. When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed. If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.

Embedded content from other websites

Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website. These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.

Who we share your data with

If you request a password reset, your IP address will be included in the reset email.

How long we retain your data

If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue. For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.

What rights you have over your data

If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.

Where your data is sent

Visitor comments may be checked through an automated spam detection service.
Save settings
Cookies settings