Pocketbiz Android Merchandise 8

Από


ESPocketBiz – Merchandise Pocketbiz Android Merchandise 8-image1.png

Entersoft Business Suite® | Entersoft CRM® | Entersoft Mobile Suite®

Τεχνικό εγχειρίδιο

Ταυτότητα

Έκδοση κειμένου 2.0

Τελ. ενημέρωση Ιούνιος 2021

Copyright

© Copyright 2011 Entersoft A.E. Με την επιφύλαξη όλων των νόμιμων δικαιωμάτων.

Δεν επιτρέπεται η αναδημοσίευση ή μετάδοση με οποιαδήποτε μορφή και για οποιοδήποτε λόγο μέρους ή όλου του παρόντος εγχειριδίου, χωρίς τη ρητή άδεια της Entersoft Α.Ε.

Όσον αφορά το περιεχόμενο του παρόντος…

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

= Σημειώσεις για το παρόν έγγραφο

Το παρόν έγγραφο αποτελεί μια περιγραφή του Merchandise 8.xx και άνω. Καλύπτει τόσο την λειτουργικότητα όσο και τεχνικά ζητήματα, τα οποία άπτονται της εξυπηρέτησής τους από τους Consultants και το Support.

Εισαγωγή

Σε αυτό το έγγραφο θα παρουσιαστούν οι λειτουργίες που υποστηρίζονται από το PocketBiz Merchandise 8.0. Το Merchandise επιλέχθηκε να μοιάζει αρκετά με το Sales/Xvan σε εμφάνιση, οπότε οι όποιες λειτουργικότητες θα παρουσιαστούν σε σχέση με αυτό. Η χρήση του Merchandise εξυπηρετεί σκοπούς καταγραφής και ιστορικότητας προϊόντων στο site του πελάτη, με σκοπό τον έλεγχο των συμφωνιών, τη διερεύνηση τρόπων προώθησης επιλεγμένων προϊόντων και γενικά ενέργειες στατιστικού χαρακτήρα.

Λειτουργικότητες που υποστηρίζονται

Στο Merchandise υποστηρίζεται κυρίως η έννοια της καταγραφής. Αυτή έχει εμπλουτιστεί με λειτουργικότητες, οι οποίες έχουν προκύψει με τον καιρό, κυρίως από τη χρήση του παλιού Merchandize καθώς και κάποιες προσθήκες που έλειπαν από το παλιό.

Καταγραφή

Το Merchandise υποστηρίζει τόσο εισαγωγή νέας καταγραφής όσο και επεξεργασία υπαρχουσών καταγραφών . Οι καταγραφές που εμφανίζονται προς επεξεργασία ικανοποιούν το κριτήριο ΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧ

Το ui των καταγραφών είναι παρόμοιο με του νέου Sales/XVan. Υπάρχουν 3 tabs στο πάνω μέρος της οθόνης από τα οποία επιλέγεται ο Κατάλογος, το Καλάθι και η Κεφαλίδα της καταγραφής. Υπάρχουν επίσης το φίλτρο των Κατηγοριών, το φίλτρο της Γκάμας (Range) και το κουμπί επιλογής ενεργειών για τις γραμμές («Γραναζάκι»). Τέλος υπάρχει στο Καλάθι το εικονίδιο αποθήκευσης της καταγραφής.

Κατάλογος/Καλάθι

Το κυρίως λειτουργικό κομμάτι του Merchandise είναι το ζευγάρι Κατάλογος/Καλάθι. Στον Κατάλογο εμφανίζονται τα προϊόντα που είναι διαθέσιμα προς καταγραφή, ενώ στο Καλάθι φαίνονται τα καταγεγραμμένα προϊόντα.

information Σημείωση

  • Οι γραμμές της καταγραφής βρίσκονται στον πίνακα tblMerchDataDetail.

  • Τα προϊόντα βρίσκονται στον πίνακα tblMerchProducts

Η διαδικασία καταγραφής εξελίσσεται σε γενικές γραμμές ως εξής. Ο χρήστης εκτελεί τα επιθυμητά φιλτραρίσματα μέσω των διαθέσιμων επιλογών και κατόπιν καταγράφει δεδομένα στον Κατάλογο. Μεταβαίνει στο Καλάθι και βλέπει συγκεντρωτικά τα προϊόντα στα οποία έχει καταγράψει δεδομένα. Αν είναι ικανοποιημένος με την καταγραφή, την αποθηκεύει από το εικονίδιο αποθήκευσης και το Merchandise κλείνει, μετά από επιβεβαίωση του χρήστη για την αποθήκευση.

Η αποθήκευση των δεδομένων γίνεται με την αλλαγή της γραμμής στον Κατάλογο/Καλάθι.

Ο Κατάλογος και το Καλάθι παραμετροποιούνται σε σημαντικό βαθμό από το αντίστοιχο xml.

information Σημείωση

Το xml βρίσκεται στον πίνακα tblMerchScenarios στην κολώνα MerchConfig (και όχι στην ScenarioXML).

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

information Σημείωση

Τα scripts βρίσκονται στον πίνακα tblCodeUnits.

Εικόνα 1: Κατάλογος

Pocketbiz Android Merchandise 8-image3.png

Κεφαλίδα

Η Κεφαλίδα της καταγραφής κρατάει τα δεδομένα του πελάτη και μερικά ακόμα για την καταγραφή. Λογικά, αποτελεί τον πατέρα (parent) των γραμμών και χρησιμοποιείται για την εύρεση της «Τελευταίας Καταγραφής» (θα εξηγηθεί παρακάτω).

information Σημείωση

  • Η προσθήκη του πίνακα tblMerchDataHeader, στον οποίο αποθηκεύονται οι Κεφαλίδες των καταγραφών αποτελεί major αλλαγή σε σχέση με το παλιό Merchandize.

  • Η Κεφαλίδα στο παλιό Merchandize δεν υπήρχε με τη μορφή εγγραφής σε πίνακα. Ήταν μια έννοια «στον αέρα» και αυτό δημιουργούσε τρομερά προβλήματα στον ορισμό του «Ποια καταγραφή είναι η τελευταία;»

Στην κεφαλίδα υποστηρίζεται Scripting μετά την αλλαγή τιμής σε οποιοδήποτε control εμφανίζεται στη φόρμα. Η παραμετροποίηση της κεφαλίδας γίνεται επίσης από xml.

information Σημείωση

Το xml βρίσκεται στον πίνακα tblMerchScenarios στην κολώνα MerchConfig (και όχι στην ScenarioXML).

Εικόνα 2: Κεφαλίδα καταγραφής

Pocketbiz Android Merchandise 8-image4.png

Τεχνικά

Στο παρόν εδάφιο θα παρουσιαστούν τεχνικά θέματα που αφορούν τις οθόνες των καταγραφών. Συνοπτικά, θα γίνει αναφορά στα controls που είναι διαθέσιμα στο Merchandise, καθώς και στην παραμετροποίηση των οθονών Header και Καταλόγου/Καλαθιού με τα αντίστοιχα XML.

Controls

Για την εξυπηρέτηση των απαιτήσεων της καταγραφής, έχουν φτιαχτεί custom controls τόσο για το Header όσο και για τα Details. Τα header controls εμφανίζονται σε διάταξη φόρμας στην οθόνη της κεφαλίδας ενώ τα detail controls εμφανίζονται μέσα στα κελιά του grid που υπάρχει στον Κατάλογο/Καλάθι.

Header controls

Υπάρχουν τα παρακάτω είδη controls. Μέσα στην παρένθεση εμφανίζονται τα λεκτικά που πρέπει να μπουν στο xml (pocketbiztype) ώστε να σχεδιαστεί το αντίστοιχο control. Το κομμάτι του xml που παραμετροποιεί το header βρίσκεται στο node “header”.

EditText (text)

Τυπικό edittext πεδίο το οποίο δέχεται όλους τους αλφαριθμητικούς χαρακτήρες.

SearchableSelection (searchlist, sql)

Drop down λίστα, οι τιμές της οποίας έρχονται από το xml (attribute “sql” του node “item”), με δυνατότητα αναζήτησης με απλό κείμενο. Το sql στο xml είναι της μορφής SELECT id AS storevalue, description AS displayvalue FROM table. Υπάρχει δυνατότητα να δοθεί αρχική τιμή στο drop down δίνοντας το επιθυμητό storevalue στο attribute “defaultvaluesql” στο node “field”.

DatePicker (date)

Control επιλογής ημερομηνίας από pop up ημερολόγιο. Στο xml μπορεί να δοθεί κατ’ εξαίρεση, δικό του format στο attribute “format” του node “item”.

Detail controls

Υπάρχουν τα παρακάτω είδη controls. Μέσα στην παρένθεση εμφανίζονται τα λεκτικά που πρέπει να μπουν στο xml ώστε να σχεδιαστεί το αντίστοιχο control.

TextViewColumn (TEXT)

Απλό κείμενο, το οποίο δεν μπορεί να τροποποιηθεί (read only)

CheckBoxColumn (CHECKBOX)

Checkbox το οποίο υποστηρίζει και null τιμές (indeterminate or tri-state checkbox)

EditText (EDITTEXT)

Απλό κείμενο, το οποίο μπορεί να τροποποιηθεί.

HtmlColumn (HTML)

Κείμενο το οποίο μπορεί να διαμορφωθεί με html tags ώστε να αποκτήσει χρώμα, μέγεθος κτλ.

ImageColumn (IMAGE)

Εικόνα

SpinnerColumn (LIST)

Dropdown control, το οποίο δείχνει τις τιμές ενός datasource. Control το οποίο δέχεται αριθμούς μόνο. Πηγή του datasource είναι το sql clause που βρίσκεται στο attribute “sql” του node “widget”.

NumericEdiTextColumn (NUMERIC)

Control το οποίο δέχεται αριθμούς μόνο.

DateColumn (DATE)

Control ημερομηνίας. Εμφανίζει popup με ημερολόγιο. Υποστηρίζεται custom format παρουσίασης με το attribute “format” στο xml. Επίσης μπορεί να περιοριστεί το εύρος των ημερομηνιών που μπορεί να επιλεγεί ημερομηνία με τα attributes “MinDate” και “MaxDate”. Τα attributes “” και “” υποστηρίζουν τόσο σταθερές ημερομηνίες (με μορφή yyyy-MM-dd) όσο και ημερομηνίες με offset από τη σημερινή ημέρα (token $TODAY$ +/- αριθμό ημερών).[1]

SiebenNumericEditTextColumn (SIEBEN_NUMERIC)

Control το οποίο δέχεται αριθμούς μόνο και υποστηρίζει αλλαγή της τιμής του με χρήση κουμπιών +/-.

PhotoColumn (PHOTO)

Control με το οποίο μπορεί ο χρήστης να κάνει λήψη φωτογραφίας.

SearchableSpinnerColumn (SEARCHABLE_LIST)

Dropdown control, το οποίο δέχεται τιμές από ένα datasource και υποστηρίζει φιλτράρισμα απλού κειμένου στα στοιχεία της λίστας. Πηγή του datasource είναι το sql clause που βρίσκεται στο attribute “sql” του node “widget”

IntentColumn (INTENT)

Αυτός ο τύπος column υποστηρίζει την εκτέλεση ενός intent με παραμέτρους. Προς το παρόν η χρήση του περιορίζεται στο feature της GenericList και δεν έχει εφαρμογή στο Merchandise.

Header XML

Το xml που παραμετροποιεί την κεφαλίδα φαίνεται παρακάτω.

Είναι πανομοιότυπο με αυτό του Sales και παραμετροποιεί τα παρακάτω:

  • Sql: Το ερώτημα που θα χρησιμοποιηθεί για να φορτώσουν τα data της κεφαλίδας.
    • Type=offline/online αναφέρεται στο Mode το οποίο τρέχει το PocketBiz.
    • Query: Το query που θα εκτελεστεί, χωρισμένο σε parts.
      • Στο select προστίθενται (ακόμα κι αν έχουν γραφτεί από τον consultant) κάποια πεδία που είναι απαραίτητα για την απρόσκοπτη λειτουργία του Merchandise.
  • Fields: Τα πεδία του παραπάνω query, τα οποία θα χρησιμοποιηθούν στην εφαρμογή. Για να εμφανιστεί κάποιο πεδίο στην κεφαλίδα της καταμέτρησης, θα πρέπει να βρίσκεται οπωσδήποτε εδώ. Εδώ δηλώνονται και ιδιότητες που δεν έχουν σχέση με το UI.
  • ** datamember: Το πεδίο που αντιστοιχεί στο column της βάσης από το οποίο διαβάζεται το δεδομένο.
    • storemember: Το πεδίο που αντιστοιχεί στο column της βάσης στο οποίο αποθηκεύεται το δεδομένο.
    • databasetype: Το πεδίο που περιγράφει τον τύπο του δεδομένου στη βάση. Παίρνει τιμές μεταξύ των
      • float
      • int
      • nvarchar
      • datetime
      • date
    • mandatory: Το πεδίο που δηλώνει αν πρέπει να έχει τιμή αυτό το datamember ώστε να σωθεί στη βάση.
    • defaultvalue: Το πεδίο αυτό δηλώνει την default τιμή στα sql πεδία. Είναι το storevalue της τιμής που θέλουμε να είναι προεπιλεγμένη στις λίστες.
  • UI: Η παραμετροποίηση του UI, η οποία περιλαμβάνει ειδικά για το Header και τα sections/items τα οποία χρησιμοποιεί η dynamic forms για να σχεδιάσει τη φόρμα.
  • ** validation: Χωρίς χρήση, δεν έχει υλοποιηθεί.
    • title: Ο τίτλος του πεδίου
    • datamember: Το datamember που θα δείχνει το control
    • format
    • order: Η σειρά του control μέσα στο Section
    • multiline: Δηλώνει αν το πεδίο δέχεται πολλές γραμμές
    • editable: Δηλώνει αν η τιμή του control είναι μπορεί να τροποποιηθεί από τον χρήστη
    • pocketbiztype: Ο τύπος του δεδομένου για το PocketBiz.
      • sql
      • boolean
      • price
      • value
      • discount
      • text
      • quantity
      • date
      • searchlist
    • sql: Το sql clause από το οποίο προκύπτουν οι τιμές για τα sql/searchlist πεδία. Είναι της μορφής
      • SELECT id AS storevalue, description AS displayvalue FROM table

<header>

<sql>

<query type="Offline" select=" lee.leename as cusname, cus.cuscode,ifnull(adrstreet,) ||' ' || ifnull(adrcity,) as address" from="tblmerchdataheader inner join cus on tblmerchdataheader.cusid = cus.cusid inner join lee on lee.leeid = cus.leeid inner join adr on cus.adriddest=adr.adrid inner join tblmerchscenarios on tblmerchscenarios.merchscenarioid = tblmerchdataheader.scenarioid" where="" groupby="" orderby=""/>

</sql>

<fields>

<field datamember="cusname" storemember="" databasetype="nvarchar" mandatory="1" defaultvalue="" />

<field datamember="cuscode" storemember="" databasetype="nvarchar" mandatory="1" defaultvalue="" />

<field datamember="address" storemember="" databasetype="nvarchar" mandatory="1" defaultvalue="" />

<field datamember="requestid" storemember="requestid" databasetype="int" mandatory="1" defaultvalue="5" />

<field datamember="blockorder" storemember="blockorder" databasetype="int" mandatory="0" defaultvalue="1" />

</fields>

<UI lang="EN">

<section title="Στοιχεία Πελάτη" order="1">

<item validation="" title="Customer Name" datamember="cusname" format="" order ="10" multiline="1" editable="0" pocketbiztype="text"/>

<item validation="" title="Customer Code" datamember="cuscode" format="" order ="20" multiline="0" editable="0" pocketbiztype="text" />

<item validation="" title="Address" datamember="address" format="" order ="30" multiline="1" editable="1" pocketbiztype="text"/>

<item validation="" title="Draft Order" datamember="blockorder" format="" order ="80" editable="1" pocketbiztype="sql" sql="select '1' as storevalue, 'YES' as displayvalue UNION select '0' as storevalue, 'NO' as displayvalue" />

</section>

</UI>

</header>

Detail XML

Το xml που παραμετροποιεί τον κατάλογο/καλάθι των καταγραφών, φαίνεται παρακάτω.

Είναι πανομοιότυπο με αυτό του Sales και παραμετροποιεί τα παρακάτω:

  • Sql: Το ερώτημα που θα χρησιμοποιηθεί για να φορτώσουν τα data των Details.
    • Type=offline/online αναφέρεται στο Mode το οποίο τρέχει το PocketBiz.
    • Query: Το query που θα εκτελεστεί, χωρισμένο σε parts. Στο query αυτό ανάλογα αν πρόκειται
      • Το from εκτελείται πάντα στον tblMerchProducts.
      • Ανάλογα την οθόνη (Catalogue/Basket) γίνεται το σωστό join με τον tblMerchDataDetails. Catalogue LEFT JOIN ενώ Basket INNER JOIN.
      • Στο select προστίθενται (ακόμα κι αν έχουν γραφτεί από τον consultant) κάποια πεδία που είναι απαραίτητα για την απρόσκοπτη λειτουργία του Merchandise.
  • Fields: Τα πεδία του παραπάνω query, τα οποία θα χρησιμοποιηθούν στην εφαρμογή. Για να εμφανιστεί κάποιο πεδίο στην κεφαλίδα της καταμέτρησης, θα πρέπει να βρίσκεται οπωσδήποτε εδώ. Εδώ δηλώνονται και ιδιότητες που δεν έχουν σχέση με το UI.
    • datamember: Το πεδίο που αντιστοιχεί στο column της βάσης από το οποίο διαβάζεται το δεδομένο.
    • storemember: Το πεδίο που αντιστοιχεί στο column της βάσης στο οποίο αποθηκεύεται το δεδομένο.
    • databasetype: Το πεδίο που περιγράφει τον τύπο του δεδομένου στη βάση. Παίρνει τιμές μεταξύ των
      • float
      • int
      • nvarchar
      • datetime
      • date
    • mandatory: Το πεδίο που δηλώνει αν πρέπει να έχει τιμή αυτό το datamember ώστε να σωθεί στη βάση.
    • defaultvalue: Το πεδίο αυτό δηλώνει την default τιμή στα sql πεδία. Είναι το storevalue της τιμής που θέλουμε να είναι προεπιλεγμένη στις λίστες.
    • previous: Δηλώνει αν και με ποια τιμή προγεμίζει το control του grid. Αν 0, δεν φαίνεται τελευταία καταγραφή και η τιμή του datamember είναι μηδέν. Αν είναι 1, τότε η τελευταία καταγραφή φαίνεται αλλά η τιμή του datamember εξακολουθεί να είναι μηδέν. Τέλος αν είναι 2, τότε η τελευταία καταγραφή φαίνεται αλλά ταυτόχρονα προγεμίζει την τιμή του datamember στο grid.
  • Catalogue/Basket (προαιρετικά): Η παραμετροποίηση του Καταλόγου ή/και του Καλαθιού.
    • Headers: Παραμετροποίηση των κεφαλίδων των columns του grid
      • freezecolumns: Ο αριθμός των columns που δεν μετακινούνται οριζόντια.
      • height: Το ύψος των κεφαλίδων του grid
      • textsize: Το μέγεθος της γραμματοσειράς.
    • Rows: Παραμετροποίηση των γραμμών του grid
      • height: Το ύψος των γραμμών του grid
      • textsize: Το μέγεθος της γραμματοσειράς.
    • Column: Παραμετροποίηση της στήλης του grid
      • order: Η σειρά εμφάνισης της στήλης
      • title: Ο τίτλος της στήλης
      • datamember: Το πεδίο που αντιστοιχεί στο column της βάσης από το οποίο διαβάζεται το δεδομένο.
      • sortable: Δηλώνει αν η στήλη θα ταξινομείται.
      • filterable: Δηλώνει αν η στήλη θα φιλτράρεται.
      • defaultfilter: Η default τιμή του φίλτρου. Εφαρμόζεται αυτούσια.
      • width: Το πλάτος της στήλης.
      • widgettype: Το είδος του control που θα εμφανιστεί στο cell του grid.
        • Text
        • Edittext
        • Html
        • Checkbox
        • List
        • Numeric
        • Image
        • Header
        • Date
        • Sieben_Numeric
        • Photo
        • Searchable_List
        • Info_Header
        • Info
        • Empty
        • Intent
  • ** Widget: Η παραμετροποίηση του control. Τα attributes που εμφανίζονται εδώ ποικίλουν ανάλογα με το widgettype.
      • align: Η ευθυγράμμιση του control μέσα στο cell του grid.
      • beforecomma/aftercomma: Ο αριθμός των ψηφίων στο ακέραιο και δεκαδικό μέρος των controls που δείχνουν αριθμητικές τιμές.
      • showunderbar: Ελέγχει την εμφάνιση της γραμμής κάτω από το χώρο που εισάγεται η τιμή.
      • sql: Το sql clause με το οποίο γεμίζει το datasource των List και Searchable_List.
        • SELECT id AS storevalue, description AS displayvalue FROM table

information Σημείωση

Σημαντική διαφορά με το Sales είναι η υποχρεωτική ύπαρξη του xml tag “basket”. Ενώ στο Sales η ύπαρξή του είναι υποχρεωτική, στο Merchandise το “basket” tag μπορεί να παραληφθεί. Στην περίπτωση αυτή το basket σχεδιάζεται με βάση το xml του catalogue.

  • Summary (to be implemented): Η παραμετροποίηση της σύνοψης που φαίνεται στο κάτω μέρος της οθόνης.
  • ProductInfo (to be implemented): Η παραμετροποίηση της στήλης του grid που ανοίγει την οθόνη πληροφοριών του προϊόντος.

<model>

<sql>

<query type="offline" select="tblmerchproducts.productname, tblmerchdatadetail.face, tblmerchdatadetail.price, tblmerchdatadetail.udfchar1 as MDudfchar1, tblmerchdatadetail.udfdate1 " fromMerchProducts=" left outer join tblMerchCategories on tblMerchCategories.merchcategoryid=ifnull(idparent,0)" where="" range=" INNER JOIN tblCUSSTIRange on tblmerchproducts.stiid = tblCUSSTIRAnge.stiid and tblCUSSTIRAnge.cusid = $CUSID$" groupby="" orderby=""/>

</sql>

<fields>

<field datamember="productname" databasetype="nvarchar"/>

<field datamember="face" databasetype="INT" storemember="face" previous="2" />

<field datamember="price" databasetype="INT" />

<field datamember="udfdate1" storemember="udfdate1" databasetype="datetime" defaultvalue="2018-01-01" previous="3"/>

<field datamember="MDudfchar1" storemember="udfchar1" databasetype="nvarchar" previous="1" /> </fields>

<catalogue>

<grid>

<headers freezecolumns="1" height="100" textsize="14"/>

<rows>

<row height="60" textsize="14"/>

</rows>

<columns>

<column order="10" title="Product" datamember="productname" sortable="1" sortmember="tblmerchproducts.productname" filterable="1" width="320" widgettype="HTML">

<widget align = "LEFT"/>

</column>

<column order="20" title="Faces" datamember="face" sortable="1" filterable="1" width="120" widgettype="SIEBEN_NUMERIC">

<widget align = "CENTER"/>

</column>

<column order="30" title="Price" datamember="price" sortable="1" filterable="0" width="120" widgettype="SIEBEN_NUMERIC">

<widget align = "CENTER" beforecomma="5" aftercomma="2" showunderbar="1"/>

</column>

<column order="40" title="Exp. Date" datamember="udfdate1" sortable="1" sortmember="tblmerchdatadetail.udfdate1" filterable="0" width="200" widgettype="DATE">

<widget align = "CENTER" beforecomma="5" aftercomma="1" showunderbar="0"/>

</column>

<column order="50" title="Distribution" datamember="MDudfchar1" sortable="1" filterable="1" defaultfilter="" width="120" widgettype="LIST">

<widget align = "CENTER" beforecomma="5" aftercomma="0" showunderbar="1" sql="select 'InStock' as displayvalue,'InStock' as storevalue UNION ALL select 'NOOS' as displayvalue,'NOOS' as storevalue UNION ALL select 'OOS' as displayvalue,'OOS' as storevalue"/>

</column>

</columns>

</grid>

</catalogue>

<filters>

<filter filtername="RangeSetting" defaultvalue="true" visible="true" />

<filter filtername="Category" defaultvalue="2" visible="true" select="SELECT MerchCategoryID, descr, outline, mediaid FROM tblMerchCategories" />

</filters>

<summary sql="">

<summaryitem group="" displaytext="" token="" order="" pocketbiztype="" format="" />

</summary>

<ProductInfo>

<productInfoBanner query=""/>

<productInfoSql>

<offline query="" />

</productInfoSql>

<ItemsMediaSQL query=""/>

</ProductInfo>

</model>

Πρόσθετες λειτουργίες

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

Προηγούμενη Καταγραφή

Το Merchandise υποστηρίζει την έννοια της «προηγούμενης καταγραφής». Η προηγούμενη καταγραφή γενικότερα είναι κάτι ασαφές στο Merchandise, ή καλύτερα, είναι ό,τι ορίσει ο εκάστοτε πελάτης. Μπορεί να είναι η καταγραφή κατά την τελευταία επίσκεψη στον πελάτη, ακόμα κι αν δεν έχει καταγραφεί πραγματικά το συγκεκριμένο προϊόν. Μπορεί να είναι η τελευταία επίσκεψη στον πελάτη που όντως υπήρξε καταγραφή του προϊόντος και τέλος μπορεί να είναι απλά η τελευταία επίσκεψη στον πελάτη σε βάθος Χ χρόνου (π.χ. νωρίτερα από 6 μήνες πριν).

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

FROM tblmerchdataheader tblmerchdataheader

INNER JOIN

cus ON tblmerchdataheader.cusid = cus.cusid

INNER JOIN

lee ON lee.leeid = cus.leeid

INNER JOIN

adr ON cus.adriddest = adr.adrid

INNER JOIN

tblmerchscenarios ON tblmerchscenarios.merchscenarioid = tblmerchdataheader.scenarioid

WHERE tblmerchdataheader.cusid = '8358' AND

tblmerchdataheader.slmid = '1' AND

tblmerchdataheader.scenarioid = '32' AND

tblmerchdataheader.merchdataheaderid <> '91F50FE7-0968-432B-B73B-636465E43DD1'

ORDER BY inputdate DESC

LIMIT 1;

Φόρτωση προηγούμενης καταγραφής

Η προηγούμενη καταγραφή του είδους μπορεί να έχει σημασία για τους καταγραφείς. Επομένως δίνεται η δυνατότητα να φορτωθεί η τιμή της προηγούμενης καταγραφής για κάθε κελί (datamember) του grid.

Επιπρόσθετα, δίνεται η δυνατότητα να γεμίζει η τρέχουσα τιμή του control στο grid από την τελευταία.

Ο έλεγχος για τον τρόπο που χρησιμοποιείται η τιμή της τελευταίας καταγραφής για το datamember αυτό γίνεται από το attribute “previous” στο node “field” του Detail Xml. Οι τιμές είναι

  • SHOW_PREVIOUS: Η προηγούμενη καταγραφή απλά φαίνεται στον ειδικό χώρο του κελιού που έχει προβλεφθεί. Δεν γεμίζει την τιμή της τρέχουσας καταγραφής. Αντιστοιχεί στην τιμή 2 στο attribute “previous”.
  • SHOW_AND_LOAD_PREVIOUS: Η προηγούμενη καταγραφή φαίνεται στον ειδικό χώρο του κελιού που έχει προβλεφθεί και ταυτόχρονα γεμίζει την τιμή της τρέχουσας καταγραφής. Αντιστοιχεί στην τιμή 3 στο attribute “previous”.
  • NO_PREVIOUS: Η προηγούμενη καταγραφή αγνοείται. Αντιστοιχεί σε οποιαδήποτε άλλη τιμή του attribute “previous”.

Εικόνα 3: Προηγούμενη καταγραφή και φόρτωση στην τρέχουσα καταγραφή.

Pocketbiz Android Merchandise 8-image5.png

Κατηγορίες

Δίνεται η δυνατότητα να φιλτραριστούν τα προϊόντα του καταλόγου και του καλαθιού με βάση είτε τις κατηγορίες των προϊόντων είτε τις εταιρείες. Το query γράφεται στο αντίστοιχο node όπως φαίνεται παρακάτω.

<filters>

<filter filtername="RangeSetting" defaultvalue="true" visible="true" />

<filter filtername="Category" defaultvalue="2" visible="true" select="SELECT MerchCategoryID, descr, outline, mediaid FROM tblMerchCategories" />

</filters>

Γκάμα

Δίνεται η δυνατότητα να φιλτραριστούν τα προϊόντα του καταλόγου και του καλαθιού με βάση την γκάμα. Εκτελείται inner join με τον srPDARange.

<filters>

<filter filtername="RangeSetting" defaultvalue="true" visible="true" />

<filter filtername="Category" defaultvalue="2" visible="true" select="SELECT MerchCategoryID, descr, outline, mediaid FROM tblMerchCategories" />

</filters>

  1. == Scripting ==
    1. === Γενικά ===

Το Merchandise υποστηρίζει scripting. Μπορεί δηλαδή να εκτελεστεί user defined κώδικας, γραμμένος σε javascript, σε συγκεκριμένα σημεία του flow. Αυτά τα σημεία είναι:

  • Μετά την αλλαγή γραμμής στο grid. Σύνταξη στο script: function CatalogueOnAfterChanged(detail). Χρησιμοποιείται για τον υπολογισμό ή έλεγχο δεδομένων στο grid. Η επιλογή να εκτελείται μετά την αλλαγή γραμμής και όχι μετά την αλλαγή τιμής μέσα σε οποιοδήποτε κελί έγινε για οικονομία χρόνου και υπολογισμών. Αν η εκτέλεση γινόταν με κάθε αλλαγή τιμής μέσα σε οποιοδήποτε κελί του grid, το script θα εκτελούνταν πολλές φορές, και τις περισσότερες από αυτές δεν θα έκανε τίποτα γιατί η τιμή που άλλαξε δεν συμμετείχε στο script.
  • Μετά την αλλαγή δεδομένου στο header. Σύνταξη στο script: function HeaderPropertyChanged(header). Συνήθως χρησιμοποιείται για την αλλαγή ή έλεγχο ενός άλλου πεδίου από αυτό που μόλις τροποποιήθηκε και προκάλεσε την κλήση του script.
  • Πριν την αποθήκευση της καταγραφής. Σύνταξη στο script: function ActivityOnBeforeSave(header). Χρήη κυρίως για ελέγχους πριν την αποθήκευση της καταγραφής.

Όλες οι functions πρέπει στο τέλος να επιστρέφουν true ή false.

information Σημείωση

  • Σε σχέση με το Sales_newEra δεν υποστηρίζεται η μέθοδος που επιστρέφει το τελευταίο datamember που άλλαξε στο header (και που προκάλεσε την εκτέλεση του script).

  • Επίσης δεν υποστηρίζεται η μέθοδος showWarning του Sales_newEra, η οποία μπορούσε να αποτρέψει την αποθήκευση της παραγγελίας.

    1. === Ειδικές μέθοδοι ===

Υπάρχουν ειδικές μέθοδοι, οι οποίες προστίθενται στη λειτουργικότητα του scripting παρόλο που δεν την έχει υλοποιήσει ο consultant στο script.

  • query(select): Επιστρέφει 2d array της μορφής [όνομα κολώνας][τιμή].
  • showDialog(title, msg, positiveButton, negativeButton): Δείχνει dialog με τίτλο (title), μήνυμα (msg), caption για τη θετικό κουμπί (positiveButton) και caption για το αρνητικό κουμπί (negativeButton).
  • showMessage(msg): Δείχνει SnackBar στο κάτω μέρος της οθόνης με το ορισθέν μήνυμα (msg).

Ειδικής χρήσης είναι η εντολή “debugger” που βρίσκεται στην αρχή του script που φαίνεται παρακάτω. Όταν η εντολή αποτελεί μέρος το script (δεν είναι σχολιασμένη δηλαδή), πριν εκτελεστεί το script, ανοίγει ένα παράθυρο στο οποίο εμφανίζεται το script. Εκεί μπορεί ο χρήστης να κάνει αλλαγές και να το σώσει, να το εκτελέσει (χωρίς να το σώσει) ή να αναιρέσει τις αλλαγές του. Αν η λειτουργικότητα δεν είναι επιθυμητή, βάζετε σε σχόλια (//) την εντολή debugger;

Εικόνα 4: Script debugger

Pocketbiz Android Merchandise 8-image6.png

Παράδειγμα Script

//debugger;

function HeaderPropertyChanged(header) {

if (parseInt(header.getValue('blockorder')) == 1) { //type conversion poc

header.setValue('udfchar1', 'This is a draft order'); //model and dynamic form UI update poc

showMessage('Draft order');

} else {

header.setValue('udfchar1', 'This is a simple order');

showMessage('Simple order');

}

// showDialog('Script result', 'Success', 'OK', 'Cancel');

showMessage('HeaderPropertyChanged');

return true;

}

function ActivityOnBeforeSave(header) {

var slm = query("SELECT * FROM SLM"); //execute query to DB

showDialog('SLM', slm[0][0], 'OK', 'NOT OK'); //show data

showMessage('ActivityOnBeforeSave');

return true;

}

function CatalogueOnAfterChanged(detail) {

var faces = parseInt(detail.getValue('face')); //get data from detail

detail.setValue('price', faces * 2); //set value to detail

//showDialog('Script result', 'Success', 'OK', 'Cancel');

//showMessage('Price = Faces x 2');

showMessage('CatalogueOnAfterChanged');

return true;

}

Ενέργειες γραμμών

Υποστηρίζεται εφαρμογή ενεργειών σε πολλές γραμμές, τις οποίες έχει επιλέξει ο χρήστης. Για την επιλογή γραμμών υπάρχουν 3 modes.

  • No selection mode
  • Single selection mode
  • Multi selection mode

Οι ενέργειες αυτές είναι

  • Exit selection mode
  • Select All/Deselect Al
  • Edit (to be implemented)
  • Delete

Εικόνα 5: Ενέργειες γραμμών

Pocketbiz Android Merchandise 8-image7.png

  1. To be implemented. Υποστηρίζονται από το DateControl αλλά το Merchandise δεν διαβάζει τα attributes από το xml.


PDF Version