Web Service

Web Service

Web Service

Τι είναι το Web Service ή διαδικτυακή υπηρεσία;

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

Η πρώτη έκδοση που υποστηρίζει Web Service & Rest API είναι η 2.9.1.10

https://mysoftwarehouse.gr/topver/2.9/2.9.1/2.9.1.10/

 

Installation

  1. Στον ήδη υπάρχον φάκελο εγκατάσταση του Topvalue, αντιγράφουμε το TopValueSrv.exe όπου το έχουν κατεβάσει από τον παραπάνω σύνδεσμο.
  2. Ανοίγουμε ένα Command Prompt Line (cmd) με δικαιώματα διαχειριστή και πηγαίνουμε στον φάκελο εγκατάστασης του Topvalue.
  3. Δημιουργούμε ένα αρχείο service.ini Η σύνταξη του είναι όπως αναγράφεται και στην ενότητα Εισαγωγή Παραμέτρων στο Login
    Παράδειγμα:
    [APPLICATION]
    C=test1
    U=supervisor
    apiUser=kostas
    apiPass=@apo@123
    ApiRoot=root
    ApiPort=190
    log=2

    log parameter can be=

    • 0 no log,
    • 1 log url string,
    • 2 log also in body

    Τα αρχεία καταγραφής (log) είναι ανά ημέρα, στον φάκελο LOG μέσα στον φάκελο εγκατάσταση του Topvalue.
    ****Στο prm αρχείο να προτιμάται ο sql χρήστης και password. Σε περίπτωση Windows authentication, θα πρέπει ο χρήστης των Windows που τρέχει το Service, να έχει δικαιώματα πρόσβασης στον Sql Server.

  4. Εκτελούμε την εντολή TopValueSrv.exe /install
  5. Ξεκινάμε το service.Έχουμε 2 επιλογές
    • Τρέχουμε την συντόμευση TopValueSrv
    • Ανοίγουμε τα services των Windows, βρίσκουμε από την λίστα το My Software House TopValue Service και κάνουμε Start.

Οποιοδήποτε σφάλμα προκύψει, καταγράφεται στο TopValue.log

Επικύρωση

Η επικύρωση των στοιχείων πρόσβασης γίνεται ως εξής:

  • Basic (Περίπτωση που κάνουμε request από Postman)
    username= ApiUsername   eg kostas
    password= ApiPassWord + #SerialNumber    eg @apo@123#301-00999
  • Base64 (Περίπτωση που κάνουμε request μέσα από script) eg a29zdGFzOkBhcG9AMTIzIzMwMS0wMDk5OQ== (Σχετικό παράδειγμα μπορείτε να βρείτε στην ενότητα Script Examples)

REST API Endpoint

return
{"App":"TopValue", "SN":"301-00187"}
body
{
    "bo": "TCustomerbo",
    "Keyvalues": [
        1960027845
    ],
    "// or fromKey": "integer",
    "count": "integer optional default 50"
}
return:if result is many Array of Object(row) or Object(row) if one
{
    "ID": 1960027845,
    "RowType": 1,
    "Code": "json2",
    "Account_Type": 200,
    "Name": "json επωνυμία",
    "Profession": "a",
    "Vat_Type": 1,
    "Address1": "δεν",
    "City1": "no city",
    "Country1_ID": 1,
    "Discount_Perc": 0,
    "KEPYO_Type": 0,
    "KEPYO_Flag": 0,
    "Active": true,
    "Acc_Code": "30.00.01",
    "luCountry1Name": "ΕΛΛΑΔΑ",
    "BranchID": 99,
    "ValBehave": 0,
    "ValuerDays": 0,
    "CompType": 0,
    "HeadOffice": 1960027845,
    "CusHeadCode": "json2",
    "CusHeadName": "json επωνυμία",
    "Creation_Date": "2022-10-16T09:09:28",
    "GLCodeBuildType": 0,
    "CreditValAsPay": true,
    "ChqGrpCodeID": 1,
    "ChqType": 1,
    "ChqMove": 10,
    "calcChqAuto": false,
    "calcChqMoveTrn": false,
    "calcChqChoice": true,
    "calcChangeOwner": true,
    "calcChangeRemainAsIS": false,
    "calcChangePayDate": false,
    "isTransf": true,
    "isRetailFund": 0,
    "FundCreDeb": 0,
    "CoinCodeID": 1,
    "ValidFromDate": "2000-01-01",
    "ValidToDate": "9999-01-01",
    "BalancedTrn": false,
    "UpdateItemAllMaster": true,
    "DoOpenItem": 0,
    "OpenItemBehavior": false,
    "HandleFC": false,
    "MoveType": true,
    "Priority": 0,
    "BillToAmID": 1960027845,
    "BillToCode": "json2",
    "BillToName": "json επωνυμία",
    "PrPolicyUseShipTo": false,
    "DoEInvoice": false,
    "DeliveryPriority": 0,
    "eMarketing": 0,
    "BaseAGrpByID": 2,
    "MSH_Not_LogoURL_inLabels": false
}
body
{
    "bo": "TCustomerbo",
    "data": [
        {
            "code": "json2",
            "name": "json επωνυμία",
            "Profession": "a",
            "Address1": "δεν",
            "city1": "no city",
            "#echo": "e"
        },
        {
            "code": "json3",
            "name": "json επωνυμία",
            "Profession": "a",
            "Address1": "δεν",
            "city1": "no city"
        },
        {
            "code": "json4",
            "name": "json επωνυμία",
            "Profession": "a",
            "Address1": "δεν",
            "city1": "no city",
            "#echo": "d"
        }
    ]
}
return
[
    {
        "#echo": "e",
        "ID": 1960027845
    },
    {
        "ID": 1960027846
    },
    {
        "ID": 1960027847
    },
    {
        "ID": 1960027848
    },
    {
        "#echo": "d",
        "ID": 1960027849
    }
]
body
{
    "sql": "select top 10 afm from customer where id>:0 order by id",
    "usenulls": true,
    "params": [
        3007
    ]
}
return always an array of values
[
    "036611318",
    "0000000",
    "000000",
    "X-00.0002",
    "X-00.0003",
    "X-00.0004",
    "X-00.0005",
    "X-00.0006",
    "X-00.0007",
    "X-00.0008"
]
body
{
    "sql": "select top 10 id,code,name from customer where id>:0 order by id",
    "addnulls": false,
    "params": [
        3007
    ]
}
return always an array of objects (rows)
[
    {
        "id": 1960020580,
        "code": "30.0",
        "name": "ΜΕΝΤΖΕΛΙΔΗΣ ΜΙΛΤΟΣ ΑΕ"
    },
    {
        "id": 1960021364,
        "code": "301",
        "name": "Καραγκικας δημ"
    },
    {
        "id": 1960021365,
        "code": "302",
        "name": "Καραμολεγκος Τακης"
    },
    {
        "id": 1960021366,
        "code": "00.0002",
        "name": "ΑΓΡΙΟΓΙΑΝΝΗ ΕΛΕΝΗ ΤΟΥ ΝΙΚΟΛΑΟΥ"
    },
    {
        "id": 1960021367,
        "code": "00.0003",
        "name": "ΑΝΤΩΝΙΟΥ ΔΗΜΗΤΡΙΟΣ ΤΟΥ ΗΛΙΑ"
    },
    {
        "id": 1960021368,
        "code": "00.0004",
        "name": "ΦΟΥΦΑΣ ΠΑΝ/ΤΗΣ ΤΟΥ ΣΑΡΑΝΤΟΥ"
    },
    {
        "id": 1960021369,
        "code": "00.0005",
        "name": "SINGER PETER"
    },
    {
        "id": 1960021370,
        "code": "00.0006",
        "name": "ΕΥΘΥΜΙΟΥ ΔΗΜΗΤΡΙΟΣ & ΑΙΚΑΤΕΡΙΝΗa"
    },
    {
        "id": 1960021371,
        "code": "00.0007",
        "name": "ΤΣΙΟΥΛΟΣ ΔΗΜΟΣ"
    },
    {
        "id": 1960021372,
        "code": "00.0008",
        "name": "ΝΙΚΗΤΟΠΟΥΛΟΥ"
    }
]
body
{
    "sql": "declare @x varchar(max)=(select top 3 * from customer where id>:0 order by id for json auto) select @x",
    "addnulls": false,
    "dbfqr": true,
    "params": [
        3007
    ]
}
** dbFQR is optional FQR=Format Query Result.If true means service not convert result to json (“result format created in db”). Best practice is to use it with “for json” clause.
return an object(if dbfqr<>true)
[
    {
        "code": "00.0002",
        "name": "ΑΓΡΙΟΓΙΑΝΝΗ ΕΛΕΝΗ ΤΟΥ ΝΙΚΟΛΑΟΥ",
        "afm": "X-00.0002"
    },
    {
        "code": "00.0003",
        "name": "ΑΝΤΩΝΙΟΥ ΔΗΜΗΤΡΙΟΣ ΤΟΥ ΗΛΙΑ",
        "afm": "X-00.0003"
    },
    {
        "code": "00.0004",
        "name": "ΦΟΥΦΑΣ ΠΑΝ/ΤΗΣ ΤΟΥ ΣΑΡΑΝΤΟΥ",
        "afm": "X-00.0004"
    }
]

Επεξηγήσεις

  • Το property BO παίρνει το όνομα του Topvalue Business Object όπου θα γίνει καταχώρηση.
  • Τα data είναι array of rows (objects) ή object(row), χωρίς περιορισμούς. Μία καλή πρακτική είναι, το μέγεθος του body να μην ξεπερνάει το 1ΜΒ.
  • Κάθε γραμμή (ως Js object) περιέχει ζεύγος πεδίων (όνομα πεδίου – τιμή πεδίου) όπως περιγράφεται στο ΒΟ του Topvalue. Μπορεί επίσης να περιέχει ειδικά πεδία (#rus, #echo)
  • Προσοχή στη σειρά που εμφανίζονται. το πεδίο #rus πρέπει να είναι πρώτο, όλα τα πεδία του ΒΟ όπως εμφανίζονται στο JSON. Τα ένθετα σύνολα να είναι στο τέλος.
  • Πεδίο #rus (row update status)
    • 0=insert is default,
    • 1=update,
    • 2=delete.
  • Κάθε γραμμή (object) μπορεί να έχει το πεδίο #rus αλλά πρέπει να είναι πρώτο στη σειρά.
  • Πεδίο #echo. Είναι ένα πεδίο χρήστη που μπορεί να υπάρχει σε κάθε master σειρά, εάν υπάρχει θα επιστρέψει από το service όπως ελήφθη. Η βέλτιστη πρακτική είναι να το χρησιμοποιήσετε για να συγκρίνεται τα κλειδιά με αυτά του Topvalue
  • Η επιστροφή που λαμβάνουμε όταν κάνουμε request ApplyBOData είναι οι εξής:
    • #rus=0 (insert): Ένα object που περιέχει το #echo (εάν υπάρχει) και τα ID ή το σφάλμα σε περίπτωση λάθους.
    • #rus=1 (update): Ένα object που περιέχει το #echo (εάν υπάρχει) ή το σφάλμα σε περίπτωση λάθους.
    • #rus=2 (delete): Ένα object που περιέχει το #echo (εάν υπάρχει) ή το σφάλμα σε περίπτωση λάθους.
Was this article helpful to you? Yes No

How can we help?