Σύνδεση SoftOne με Rest API

3,143 views
Skip to first unread message

indat...@gmail.com

unread,
Oct 2, 2018, 3:08:17 AM10/2/18
to Softone Developers Network
Καλημέρα και καλό Μήνα , 

Έχει προκύψει η ανάγκη γέφυρας της εφαρμογής (SoftOne) με API άλλης εφαρμογής , 
κατά την οποία θα πρέπει να δημιουργώ τα HTTP requests μέσα από το SoftOne και 
με τα dataset που θα λαμβάνω από τα Responses θα πρέπει να ενημερώνω το SoftOne (π.χ MTRL)

Σκέφτηκα να εκμεταλλευτώ το softone ,πριν πάω σε κάποια Custom λύση (π.χ εξωτερικός connector σε JAVA), 
χρησιμοποιώντας  S1 Import (Javascript)  ή κάποιο custom Object που να "τρέχει" πάνω στην προβολή του
αντίστοιχη Javascript για την ένωση , αλλά δεν μου φαίνονται πολύ τρομερές ιδέες.

Σας έχει παρουσιαστεί κάτι αντίστοιχο ή έχετε κάποια ιδέα για την παραπάνω υλοποίηση;

Δημήτρης 

Νίκος Μάλιακκας

unread,
Oct 3, 2018, 3:51:03 AM10/3/18
to Softone Developers Network
Αφού θα έχεις και http calls γιατί δεν το γράφεις όλο σε HTML/Javascript;


Αν σηκώσεις web σελίδα από το softone (νεα εργασία μενού->web σελίδα)
τότε αν στο javascript της σελίδας έχεις το Χ=external;
τότε το Χ είναι το softone, όπως και στην javascript των objects.

έτσι από τον ίδιο κώδικα θα έχεις πρόσβαση και στο API, και στο softone.
Αν ειδικά το γράψεις και σε δικό σου server, τότε μπορείς να το αλλάζεις on the fly χωρίς να χρειαστεί να πηγαίνεις στην εγκατάσταση του/των πελατών.

Το μόνο ίσως μειονέκτημα είναι η έκδοση του internet explorer και του web browser component που δεν έχει όλα τα καινούρια καλούδια όσον αφορά το CSS, αλλά για μια διαδικασία μεταφοράς δεδομένων σίγουρα είναι πολύ περισσότερα από αυτά που χρειάζεσαι.

Tasos Rontsis

unread,
Oct 4, 2018, 1:29:53 AM10/4/18
to Softone Developers Network
μέσω σελίδας μπορεί να έχεις πρόβλημα

όταν έχεις πολλά δεδομένα και το script αργεί να τελειώσει πετάει κάτι περίεργα μηνύματα
δεν μπορείς να αποφύγεις εύκολα τα warning του S1 και στα πετάει δεξιά και αριστερά.

έχει δοκιμάσει κανείς το BAM ?
 
 


On Tuesday, October 2, 2018 at 10:08:17 AM UTC+3, indat...@gmail.com wrote:

Θανάσης Στυλιανόπουλος

unread,
Oct 4, 2018, 5:45:46 AM10/4/18
to Softone Developers Network
Καλημέρα,
Εχω κάνει κάποια interfaces με άλλα συστήματα over the internet using web srvices (και με wordpress) με δύο τρόπους:

α) Τρόπος. Μέσα από Form Javascript:
---------------------------------------------------------------------------------
Χρημσιμοποιώντας το ActiveXObject καλώ το web service :
  this.request = new ActiveXObject("MSXML2.XMLHTTP");
 this.request.open('GET', url, true);
 this.request.setRequestHeader('apiKey', 'blablablabla.....');
 this.request.onreadystatechange=function() 
{
...............
}
( Το this είναι της function μεσα στο οποία ανήκει ο κώδικας )

To response είναι Json το οποίο το μετατρέπω σε javascipt object με την εντολή:
eval('var data = ' + reply);
Το data πλέον μπορείς να το δουλεψεις ευκολα, πχ.  ΙΤΕΜ.CODE = data.itemcode, κ.λπ.
Και απο εκεί και πέρα τα πράγματα είναι εύκολα.

Credits στη Softone και στον κο Γεωργουλάκη για τα παραδείγματα από το blackbook και το wiki.


Β) Τρόπος:  InProcess c# dll μέσα στο οποίο τα http calls, json κ.λπ. είναι ετοιμα


ΠΕΡΙΟΡΙΣΜΟΙ:  Απατείται windows λειτουργικό και mictosoft inernet explorer


Ελπίζω να βοήθησα.

indat...@gmail.com

unread,
Oct 4, 2018, 6:57:11 AM10/4/18
to Softone Developers Network
Αρχικά ευχαριστώ για τις απαντήσεις σας , 

Γενικά η ιδέα όπως την περιγράφει ο Νίκος και ο Θανάσης  είναι αντικειμενικά υπέροχη ,να μπορείς δηλαδή να έχεις ταυτόχρονα 
πρόσβαση και στο SoftOne άλλα και σε οποιοδήποτε ΑPI , αναπτύσσοντας μόνο σε ένα σημείο (Web Page / Form  που θα τρέχει από το SoftOne).
Αλλά ο μεγάλος ενδοιασμός είναι αυτό που λέει ο Τάσος. Θεωρώ πως το development  μέσα από Internet Explorer (μέσα από SoftOne)
μπορεί να αποβεί μοιραίο , περισσότερο λόγω συμβατότητας.

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

Ευχαριστώ και πάλι. 

Θανάσης Στυλιανόπουλος

unread,
Oct 4, 2018, 1:04:07 PM10/4/18
to Softone Developers Network
Νομίζω ότι το  Χ=external; βασίζεται στον internet explorer οπότε έχεις περιορισμούς.
Οπως επίσης έχεις και με το ActiveXObject("MSXML2.XMLHTTP"); (αν η microsoft το αλλάξει).

Το inprocess c# dll με .net είναι λίγο πιο ασφαλές όσον αφορά στη διάρκεια λειτουργίας. Και δίνει περισσότερη ευελιξια με custome headers, πρωροκλολλα SSL/TLS κ.λπ.
(** προσφατα μου έτυχε τέτοιο περιστατικό με αλλαγή πρωτοκόλλου ασφαλείας και χρειάστηκε να ξαναγράψω το Dll).

μπορείς ακόμα και να χρησιμοποιήσεις εξωτερικά προγράμματα (π.χ. php curl κ.λπ.) αλλα μια που μιλάμε για ms περιβάλλον, εγώ καταλλήγω στο dll.

Νίκος Μάλιακκας

unread,
Oct 6, 2018, 8:36:34 AM10/6/18
to Softone Developers Network
Θέλησα να δοκιμάσω αυτό που λέει ο Τάσος,
Χρησιμοποιώ την διαδικασία με html/javascript στην τοπική ΔΕΥΑ (υδρευση). Διαβάζει τις εισπράξεις των πελατών από το σύστημα ΔΙΑΣ. 
Τα παραστατικά των εισπράξεων που μπορεί να δημιουργηθούν μπορεί να φτάνουν και τα 250 με 300 την φορά.
εδώ και 5 χρόνια δεν μου έχουν παραπονεθεί ότι κολλάει.

Εφτιαξα μια σελίδα για δοκιμή
Για να μπορέσω να εξομοιώσω την καθυστέρηση χρησιμοποίησα την παρακάτω:

        function sleep_s(secs) {
            secs = (+new Date) + secs * 1000;
            while ((+new Date) < secs);
        }

που όμως μπλοκάρει όλο τον browser, και το softone.

Εφτιαξα και μια loop για να δω πόσο αντέχει . Όντως έβγαλε μήνυμα μετά από 130 δευτερόλεπτα (Στα windows 10 το μήνυμα βγαίνει χωρίς κείμενο μόνο με το Ναί/Οχι να φαίνονται). Αν πατήσεις το Οχι, το script συνεχίζει για τα επόμενα 130 δευτερόλεπτα.

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

Παρόλα αυτά παίζοντας με το script, κατάφερα να το κάνω να παίζει χωρίς να πετάει το μήνυμα χρησιμοποιώντας τις
window.setTimeout
και την 
X.PROCESSMESSAGES(); (Σημείωση: Σωκράτη αυτή την ξεχάσατε στο black book)
και την sleep_s

Άρα αν αντί να γράψεις τις διαδικασίες σε ένα for loop, τις γράφεις: να τρέξει η πρώτη και όταν τελειώσει να βάλει σε σειρά την επόμενη διαδικασία με την setTimeout , τότε δεν θα έχεις τίποτα που να μπλοκάρει και να υπερβαίνει τα όρια.

To αποτέλεσμα το έχω αφήσει στο
Δοκιμάστε το ανοίγοντας το ως web σελίδα μέσα από το softone

Το καλό με το να γράφεις στον embeded browser είναι ότι έχεις και full Softone support (X=external;) και full DOM support (με ότι κάνει ο browser και δεν τα κάνει η pure javascript)
Wishlist συνέχεια: Τι καλά να είχαμε DOM support σε όλα τα objects!


On Tuesday, October 2, 2018 at 10:08:17 AM UTC+3, indat...@gmail.com wrote:

Pericles Argyriades

unread,
Jun 22, 2020, 7:08:17 AM6/22/20
to Softone Developers Network
Περσινά ξινά σταφύλια, υποθέτω ότι έχουν αλλάξει τα δεδομένα από το 2018 (ελπίζω προς το καλύτερο). Αν παρ' όλα αυτά δεν... θα μπορούσες συνάδελφε @Νίκο, να σηκώσεις κάπου το script μήπως μπορέσω να πετύχω κάτι παράτολμο;

Θέλω ουσιαστικά να καλώ ένα http request στην ON_AFTERPOST. Το έχω υλοποιήσει μέσω form script, με τη χρήση της ActiveXObject("MSXML2.XMLHTTP") αλλά δεν παίζει όταν καλείται από web περιβάλλον (s360 για παράδειγμα) γιατί προφανώς δε μπορεί να καλέσει το συγκεκριμένο.
Είναι μια λύση προς τη σωστή κατεύθυνση το παραπάνω που συζητάτε;

@Τάσο, λες αυτό να υλοποιείται με BAM;
Reply all
Reply to author
Forward
0 new messages