Node.js Worker

Node.js Worker

Farklı entegrasyon ihtiyaçlarını karşılamak, mantıksal sınama sonuçlarına göre farklı entegrasyon akışları uygulamak ya da bir hesaplama sonucunu döndürmek gibi işlemleri yapabilmek adına Node.js Worker altyapısını kullanabilirsiniz. Worker altyapısında JavaScript veya TypeScript kullanabilirsiniz. Node.js Worker altyapısı sürekli güncelleme ve gelişim içerisindedir. Yeni özelliklerden haberdar olmak için bu makaleyi takip edebilirsiniz.
Bir worker geliştirmeden önce DEXA'nın nasıl çalıştığını anlamak geliştireceğiniz scriptlerin nasıl işleneceğini anlamak ve temel kavramlara hakim olmak adına önemlidir. Bu makaleye devam etmeden önce DEXA Nasıl Çalışır? makalesini okumanız önerilir.

Dexa.js Kütüphanesi

DEXA Node.js Workerlarında yapılan işlemlerin DEXA ile entegre edilmesi ve hazır sunulan entegrasyon özelliklerinin kullanılabilmesi için worker scriptlerinde dexa.js kütüphanesi kullanılmalıdır.

Dexa Helpers

DEXA'da yer alan ayarlara erişmek, çağırılan query ile ilgili işlemler yapmak vb. temel fonksiyonları barındıran helperlardır.
Worker scriptlerinizde require kullanarak kütüphaneye erişim sağlayabilirsiniz.
var dexa = require('../dexa');

Configuration

Worker içerisinden DEXA ayarlarına erişmek için kullanılır.
var dexaConfig = dexa.configuration();

Headers

Worker içerisinden DEXA'ya istek gönderen kullanıcının HTTP Request Header'larına erişmek için kullanılır. Authorization header'ı kullanılarak Devoplus API'a kullanıcı adına erişim sağlanabilir.
var authorizationHeader = dexa.headers().Authorization;

Message

Worker'ı tetikleyen Data Exchange Request'e ait bilgilere erişmek için kullanılır. Message parametreleri ile ilgili daha detaylı bilgiye "DEXA Nasıl Çalışır?" makelesinden erişebilirsiniz.
{
    "MessageGuid": "536183a2-3f10-4e06-9413-ffcffcfce487",
    "QueryStoreType": 4,
    "QueryStoreKey": "FunctionTest1",
    "Parameters": {
        "CompanyCode": "1",
        "OfficeCode": "D",
        "WarehouseCode": "D101",
        "PickingDate": "2024-05-20T03:00:00+03:00",
        "OperationDate": "2024-05-20T03:00:00+03:00",
        "ShippingDate": "2024-05-20T03:00:00+03:00",
        "ToWarehouseCode": "B002",
        "ToStoreCode": "B002",
        "ShippingPostalAddressID": "23000F1B-38DA-4690-A85D-B091006509FA",
        "DeliveryCompanyCode": "W4458A",
        "Lines": [
            {
                "DispOrderLineID": "6E9B4DAB-5676-4F84-B70C-B0F900CC1DBC",
                "Qty1": 1
            }
        ]
    },
    "Created": "2024-05-17T16:48:32.542+03:00"
}

GetInformation

Worker ile ilgili bilgilerin console'a basılması için kullanılır. Herhangi bir veri dönüşü yoktur.
----------------------------------------------------------------------------------------------------------
DEXA Query Information
Function Key: FunctionTest1
Message Guid: 536183a2-3f10-4e06-9413-ffcffcfce487
Created: 2024-05-17T16:48:32.542+03:00
----------------------------------------------------------------------------------------------------------

SetResponse

Çalışan worker'ın işlemini tamamlamasının ardından ürettiği uygulama yanıtını sunucuya göndermesi için kullanılır. Parametre olarak verilen değer JSON formatına dönüştürülerek sorguyu başlatan kaynağa iletilir.
dexa.setResponse(data);

Dexa.Devoplus

Devoplus API'larına erişmek için kullanılır. API erişimi sağlamak için Devoplus Access Token değeri sağlanmalıdır. Headers helper'ından dönen Authorization header değeri kullanılarak kullanıcı adına işlem yapılabilir.
var devoplus = new dexa.Devoplus(dexa.headers().Authorization);

Opsiyonel olarak debugMode ve timeoutMs parametreleri sağlanabilir. debugMode true olarak gönderildiğinde Devoplus API'ın staging versiyonu kullanılır. timeoutMS değeri ile milisaniye cinsinden zaman aşımı süresi tanımlanabilir.
var devoplus = new dexa.Devoplus(dexa.headers().Authorization, true, 30000);

Get

Devoplus API'a HTTP GET isteği göndermek için kullanılır.
devoplus.get("User/Me", function (result, error) {
    if (error == null) {
        console.log(result);
    } else {
        console.log(result);
        console.error(error);
    }
});

Post, Put, Delete

Devoplus API'a HTTP POST, PUT ve DELETE istekleri göndermek için kullanılır.
var feedback = {
    FeedbackType: 1,
    Message: "Lorem ipsum dolor sit amet."
};

devoplus.post("Feedback", feedback, function (result, error) {
    if (error == null) {
        console.log(result);
    } else {
        console.log(result);
        console.error(error);
    }
});

Dexa.NebimV3Integrator

Nebim V3 Integrator'e erişmek için kullanılır. Token ya da kullanıcı adı - şifre ile oturum açılabilir. Başlamak için Integrator URL değeri sağlanmalıdır.
var integrator = new dexa.NebimV3Integrator("http://10.10.10.10/", 120000);

Connect

Nebim V3 Integrator'e kullanıdı adı - şifre ile oturum açmak için kullanılır.
integrator.connect("Devoplus", "001", "test", "******", function (connectionResult) {
    console.log(connectionResult);
});

ConnectWithToken

Nebim V3 Integrator'e token ile oturum açmak için kullanılır.
integrator.connectWithToken("*****************", function (connectionResult) {
    console.log(connectionResult);
});

Disconnect

Nebim V3 Integrator'de başlatılan oturumu sonlandırmak için kullanılır.
integrator.disconnect(function (disconnectResult) {
    console.log(disconnectResult);
})

GetUserInfo

Connect ya da ConnectWithToken ile oturum başlatıldıktan sonra oturum açan kullanıcı bilgilerini almak için kullanılır. Bu metodu kullanarak oturumun doğrulaması da sağlanabilir.
integrator.getUserInfo(function (getUserInfoResult) {
    console.log(getUserInfoResult);
});

Call

Nebim V3 Integrator'e istek göndermek için kullanılır. 
var createPickingRequest = {
    ModelType: 107,
    CompanyCode: dexa.message().Parameters.CompanyCode,
    OfficeCode: dexa.message().Parameters.OfficeCode,
    WarehouseCode: dexa.message().Parameters.WarehouseCode,
    PickingDate: dexa.message().Parameters.PickingDate,
    ToWarehouseCode: dexa.message().Parameters.ToWarehouseCode,
    ToStoreCode: dexa.message().Parameters.ToStoreCode,
    IsCompleted: true,
    Lines: dexa.message().Parameters.Lines
};

integrator.call("IntegratorService/POST", createPickingRequest, function (createPickingResult) {
    console.log(createPickingResult);
    dexa.setResponse(createPickingResult);
});

Dexa.HTTP

Worker üzerinden HTTP isteği göndermek için kullanılır. Gönderilecek istekler için timeout değeri sağlanmalıdır.
var http = new dexa.HTTP(30000);

Get

HTTP GET isteği göndermek için kullanılır. URL ve headers değerleri sağlanmalıdır.
http.get("https://jsonplaceholder.org/posts", { 'Accept': 'application/json', 'Content-Type': 'application/json' }, function (response) {
    console.log(response);
});

Post, Put, Delete

HTTP POST isteği göndermek için kullanılır. URL, headers ve body değerleri sağlanmalıdır.
var body = {
    Hello: "World"
};
http.post("https://postman-echo.com/post", { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body, function (response) {
    console.log(response);
});
    • Related Articles

    • DEXA Nasıl Çalışır?

      DEXA temelde 2 farklı uygulama olarak çalışır. İlk uygulama DEXA'nın arkaplan işlemlerini yapmasını sağlayan ve Devoplus Portal ile iletişim kurduğu servis katmanıdır. İkinci uygulama ise bu servisin yönetilmesini sağlayan bir arayüz katmanıdır. ...
    • Query Store Nedir?

      Query Store; Devoplus Portal ile kendi sunucularınız arasında veri alışverişini yönetmek için kullanılır. Query Store altında SQL Server, Nebim V3 Integrator, HTTP ve Node.js Worker tiplerinde hazır veri modelleri saklayabilir, bu modelleri kendi ...