Microsoft Dynamics 365 Business Central, özellikle Microsoft ekosistemine yatırım yapmış orta ölçekli şirketler için tercih edilen ERP’dir. WooCommerce ile entegre etmek, D365’in API manzarasını anlamayı ve ölçeğiniz ile karmaşıklığınız için doğru entegrasyon kalıbını seçmeyi gerektirir.

D365 Business Central API Seçenekleri

OData/REST API’leri (Standart)

Business Central, OData v4 endpoint’leri aracılığıyla standart varlıkları sunar:

GET https://{tenant}.api.businesscentral.dynamics.com/v2.0/{environment}/api/v2.0/items

GET https://{tenant}.api.businesscentral.dynamics.com/v2.0/{environment}/api/v2.0/salesOrders

GET https://{tenant}.api.businesscentral.dynamics.com/v2.0/{environment}/api/v2.0/customers

Kimlik Doğrulama: Azure AD üzerinden OAuth 2.0. Azure Portal’da bir uygulama kaydedin, Financials.ReadWrite.All izinlerini verin.

Özel API’ler (AL Uzantıları)

Karmaşık entegrasyonlar için, AL dili kullanarak Business Central’da özel API endpoint’leri oluşturun:

page 50100 "WooCommerce Items API"

{

PageType = API;

APIPublisher = 'wpclan';

APIGroup = 'woocommerce';

APIVersion = 'v1.0';

EntityName = 'item';

EntitySetName = 'items';

SourceTable = Item;

// ... alan tanımları

}

Dataverse (Gelişmiş)

Değişiklik takibi ile çift yönlü senkronizasyon için, Business Central verileri Dataverse’e (eski adıyla Common Data Service) senkronize edebilir. Bu, webhook benzeri değişiklik bildirimleri sağlar.

Entegrasyon Kalıpları

Kalıp 1: Power Automate (Düşük Kodlu)

En uygun: Basit entegrasyonlar, günde < 100 sipariş

Microsoft Power Automate, HTTP bağlayıcıları aracılığıyla D365’i WooCommerce’e bağlayabilir:

Tetikleyici: WooCommerce siparişi oluşturulduğunda (HTTP webhook)

→ JSON Ayrıştır (sipariş verisi)

→ D365: Müşteri bul veya oluştur

→ D365: Satış siparişi oluştur

→ D365: Satır öğeleri ekle

→ WooCommerce: Sipariş meta'sını D365 referansıyla güncelle

Artıları: Kod yok, görsel iş akışı, yerleşik hata işleme
Eksileri: API çağrı sınırları (Performance planı gerekli), daha yavaş yürütme, sınırlı dönüşüm mantığı

Kalıp 2: Azure Functions + Service Bus (Bulut-Yerel)

En uygun: Orta-yüksek hacim, Microsoft-yığın ekipleri

WooCommerce Webhook → Azure Function → Service Bus Queue → Azure Function → D365 API

D365 Change Feed → Azure Function → Service Bus Queue → Azure Function → WooCommerce API

Azure Functions, API çağrılarını ve veri dönüşümünü işler. Service Bus, dead-letter desteği ile güvenilir mesaj kuyruğu sağlar.

Kalıp 3: Özel Node.js Middleware (Tam Kontrol)

En uygun: Karmaşık gereksinimler, özel iş mantığı

// D365 Business Central istemcisi

class D365Client {

constructor(tenantId, clientId, clientSecret, environment) {

this.baseUrl = https://api.businesscentral.dynamics.com/v2.0/${environment}/api/v2.0;

this.tokenUrl = https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token;

this.clientId = clientId;

this.clientSecret = clientSecret;

}

async getToken() {

const response = await fetch(this.tokenUrl, {

method: 'POST',

headers: { 'Content-Type': 'application/x-www-form-urlencoded' },

body: new URLSearchParams({

grant_type: 'client_credentials',

client_id: this.clientId,

client_secret: this.clientSecret,

scope: 'https://api.businesscentral.dynamics.com/.default'

})

});

const data = await response.json();

return data.access_token;

}

async getItems() {

const token = await this.getToken();

const response = await fetch(${this.baseUrl}/items, {

headers: { 'Authorization': Bearer ${token} }

});

return response.json();

}

async createSalesOrder(orderData) {

const token = await this.getToken();

return fetch(${this.baseUrl}/salesOrders, {

method: 'POST',

headers: {

'Authorization': Bearer ${token},

'Content-Type': 'application/json'

},

body: JSON.stringify(orderData)

});

}

}

Veri Eşleme: D365 → WooCommerce

Öğeler’den Ürünlere

D365 Alanı WooCommerce Notlar
number sku Eşleme için birincil anahtar
displayName name
unitPrice regular_price Fiyat listesinden
inventory stock_quantity Gerçek zamanlı kritik
itemCategoryCode categories Kodları WC kategori ID’lerine eşle
blocked status blocked=true → draft
gtin meta: _gtin Schema markup için

Satış Siparişleri

WooCommerce D365 Satış Siparişi Notlar
order.id externalDocumentNumber Çapraz referans
billing.email customerNumber E-posta ile eşleştir
line_items[].sku salesOrderLines[].itemId Öğe numarasıyla eşleştir
line_items[].quantity salesOrderLines[].quantity
line_items[].total salesOrderLines[].unitPrice İndirimler için yeniden hesapla
shipping_total Ayrı satır veya navlun ücreti olarak ekle

D365’in Sayfalandırmasını İşleme

Business Central API’leri maksimum 20.000 kayıt döner ve sayfalandırma için @odata.nextLink kullanır:

async function getAllItems(client) {

let items = [];

let url = ${client.baseUrl}/items?$top=1000;

while (url) {

const response = await client.authenticatedFetch(url);

const data = await response.json();

items = items.concat(data.value);

url = data['@odata.nextLink'] || null;

}

return items;

}

Envanter Senkronizasyon Stratejisi

D365 Business Central, envanteri lokasyon (depo) seviyesinde takip eder. Senkronizasyonunuz şunları karar vermelidir:

  • Tek bir WooCommerce stok sayısı için tüm lokasyonları toplamak?
  • Belirli lokasyonları senkronize etmek (örn., sadece e-ticaret deposu)?
  • Tampon stok rezerve etmek (aşırı satışı önlemek için gerçek stokun %90’ını göstermek)?
async function syncInventory() {

const d365Items = await d365.getItems();

const updates = d365Items.value

.filter(item => !item.blocked)

.map(item => ({

sku: item.number,

stock_quantity: Math.floor(item.inventory * 0.95), // %5 tampon

stock_status: item.inventory > 0 ? 'instock' : 'outofstock'

}));

// WooCommerce toplu güncelleme

for (let i = 0; i < updates.length; i += 100) {

await wooApi.post('products/batch', {

update: updates.slice(i, i + 100).map(u => ({

sku: u.sku, // ürün ID'si almak için SKU araması gerektirir

stock_quantity: u.stock_quantity,

stock_status: u.stock_status

}))

});

}

}

Yaygın D365 Entegrasyon Tuzakları

  • OAuth token süre dolumu: Token’ler 1 saat sonra süresi dolar. API çağrılarından önce her zaman yenileyin.
  • Hız sınırlaması: Business Central, tenant başına dakikada 600 çağrı sınırına sahiptir. İsteklerinizi toplu halde gönderin.
  • Numara dizileri: D365 belge numaralarını otomatik oluşturur. Bunları manuel olarak ayarlamaya çalışmayın.
  • Boyutlar: D365’in finansal boyutları (maliyet merkezi, departman) WooCommerce eşdeğeri yoktur. Bunları nasıl işleyeceğinizi planlayın.
  • Çoklu para birimi: D365 çoklu para birimini doğal olarak işler. WooCommerce çoklu para birimi için bir eklentiye ihtiyaç duyar. Döviz kurlarını dikkatli eşleyin.

Sonuç

D365 Business Central + WooCommerce güçlü bir kombinasyondur. Power Automate basit, düşük hacimli entegrasyonlar için çalışır. Azure Functions güvenilirliğe ihtiyaç duyan Microsoft-yığın ekipleri için uygundur. Özel middleware karmaşık senaryolar için size tam kontrol verir. Kalıp ne olursa olsun, temel şeyler aynıdır: verilerinizi dikkatli eşleyin, envanteri en yüksek öncelikli senkronizasyon olarak işleyin ve ilk günden itibaren sağlam hata işleme oluşturun.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Close Search Window