KodDeltaRehberler

SAP Business One Service Layer: kendi yazılımınızı B1'e nasıl bağlarsınız?

~10 dk okuma

Service Layer, SAP Business One'ın iş nesnelerini (cari, sipariş, fatura, stok) HTTPS üzerinden OData protokolüyle açan resmi web servis katmanıdır. Uygulama POST /Login ile şirket veritabanı, kullanıcı ve şifre gönderir; dönen B1SESSION çerezini sonraki isteklerde taşır. Varsayılan kapı 50000, varsayılan boşta kalma süresi 30 dakikadır. Kayıtlar B1'in kendi iş kuralları çalışarak oluşur; DI API'nin yaptığı doğrulamalar burada da geçerlidir.

Service Layer nedir, DI API’nin yerine mi geldi?

SAP Business One’a program yazan herkes uzun süre DI API ile çalıştı: Windows’a bağlı, COM/.NET tabanlı bir nesne katmanı. Service Layer aynı iş mantığını HTTP’ye taşıdı. Apache HTTP sunucusu üzerine kurulu bir uygulama sunucusudur; iş nesnelerini OData protokolüyle, JSON gövdelerle açar. SAP HANA ve Microsoft SQL Server sürümlerinin ikisinde de çalışır; SUSE Linux’ta ve 10.0 PL01’den itibaren Windows’ta da kurulur.

Bu yazıdaki teknik gerçekler SAP’nin “Working with SAP Business One Service Layer” dokümanından 2 Eylül 2026’da doğrulandı. Kurulumunuzun sürümü, kapı numarası ve yerelleştirme eklentileri için kendi sistem yöneticinizin ve yerel iş ortağınızın bilgisi esastır.

Adres kalıbı iki sürümlü:

AdresProtokolNe zaman
https://sunucu:50000/b1s/v1OData sürüm 3Mevcut istemci kütüphaneleri v3 bekliyorsa
https://sunucu:50000/b1s/v2OData sürüm 4Yeni projelerde

Varsayılan kapı 50000, protokol HTTPS. Meta veri $metadata ucundan okunur; hangi nesnelerin (BusinessPartners, Orders, Items, Invoices…) hangi alanlarla açıldığı buradan görülür.

Oturum: Login, B1SESSION ve 30 dakika

POST https://sunucu:50000/b1s/v1/Login
Content-Type: application/json

{"CompanyDB": "SBO_FIRMA", "UserName": "entegrasyon", "Password": "•••"}
HTTP/1.1 200 OK
Set-Cookie: B1SESSION=PTRzIjYK-weN6-1Lx1-ZG0J-3ARxfjcU0Shy; HttpOnly;
Set-Cookie: ROUTEID=.node1; path=/b1s

{"SessionId": "PTRzIjYK-weN6-1Lx1-ZG0J-3ARxfjcU0Shy", "Version": "1000110", "SessionTimeout": 30}

İki çerez var ve ikisi de geri gönderilir: B1SESSION oturumun kendisi, ROUTEID ise yük dengeleyicinin isteği aynı Service Layer düğümüne yönlendirmesi için. SessionTimeout boşta kalma süresidir, varsayılan 30 dakika; b1s.conf dosyasından değiştirilir. Oturum POST /Logout ile kapatılır.

Bizim ara katmanımızın oturum kuralı üç maddedir: tek oturum havuzu (her uygulama kendi login’ini atmaz), süre dolduğunda sessiz yeniden giriş, ve Service Layer kullanıcısının B1’de yalnız gereken yetkilerle tanımlanması. Kullanıcı bir B1 kullanıcısıdır; lisans ve yetki kurgusu onun üzerinden işler.

Okuma: OData sorguları

Service Layer’ın en güçlü yanı sorgu dili. Aynı Orders ucu farklı sorularla çağrılır:

GET /b1s/v1/Orders?$filter=DocTotal gt 3000&$select=DocEntry,DocNum,CardCode,DocTotal&$orderby=DocEntry desc
GET /b1s/v1/Orders?$top=3&$skip=2
GET /b1s/v1/BusinessPartners?$filter=contains(CardCode, 'c2')&$select=CardCode
B1S-CaseInsensitive: true
  • Sayfalama $top ve $skip ile ya da Prefer: odata.maxpagesize=50 başlığıyla yapılır; yanıt Preference-Applied başlığıyla kabul edilip edilmediğini söyler. Sayfa boyutu B1S-PageSize başlığı veya b1s.conf içindeki PageSize ile de ayarlanır.
  • $expand bağlı nesneleri (sipariş satırları gibi) tek istekte getirir; $select ile birlikte kullanılabilir.
  • $crossjoin aralarında tanımlı ilişki olmayan nesne kümelerini birlikte sorgular; QueryService_PostQuery uzun sorguları POST gövdesinde taşır.
  • SQLQueries kayıtlı sorguları bir uç olarak açar; kullanıcı tanımlı tablo ve nesneleri de kapsar.
  • Semantic Layer görünümleri yalnız SAP HANA sürümünde (9.3 PL02 ve sonrası) OData ucu olarak açılır.

Yönetim kokpiti ve rapor işlerinde bu okuma uçları yeterlidir; B1 veritabanına doğrudan SQL ile gitmeye gerek kalmaz.

Yazma: sipariş oluşturma, güncelleme ve toplu istek

POST /b1s/v1/Orders
Cookie: B1SESSION=…; ROUTEID=.node1

{
  "CardCode": "C20000",
  "NumAtCard": "WEB-2026-000118",
  "DocDueDate": "2026-09-12",
  "DocumentLines": [
    {"ItemCode": "A00001", "Quantity": 240},
    {"ItemCode": "A00002", "Quantity": 60}
  ]
}

Başarılı yanıt 201 Created ile B1’in ürettiği DocEntry ve DocNum değerlerini döndürür. NumAtCard alanına dış sistemin belge numarasını yazmak, tekrarlanan gönderimi yakalamanın en ucuz yoludur: köprü aynı numarayı ikinci kez görünce yeni sipariş açmaz, mevcut kaydın DocEntry değerini döner.

Güncelleme PATCH ile yapılır; bir koleksiyonun tamamının değiştirilmesi isteniyorsa B1S-ReplaceCollectionsOnPatch: true başlığı eklenir. Birden çok işlem tek HTTP isteğinde POST /b1s/v1/$batch ile gönderilir. Bir sınır dokümanda açıkça yazılı: işlemler istek içinde kalır; DI API’deki StartTransaction/EndTransaction gibi istekler arası bir kullanıcı işlemi yoktur. Beş belgeyi “ya hepsi ya hiçbiri” yazmak istiyorsanız tek $batch içinde gönderirsiniz.

B1’den dışarı: EventSubscriptions webhook’ları

Dış sistemin B1’i sürekli sorgulaması yerine B1’in haber vermesi mümkün. EventSubscriptions ucuna bir abonelik yazılır:

POST /b1s/v1/EventSubscriptions

{
  "WebhookID": "SiparisOlustu",
  "WebhookURL": "https://kopru.sirket.local/b1/siparis",
  "AuthenticationType": "None",
  "Handshake": "tNO",
  "EventCollection": [
    {"BusinessObject": "Orders", "TransactionType": "Created"}
  ]
}

Bildirimleri Webhook Messenger bileşeni iletir; varsayılan kapısı 40008’dir ve erişilebilirliği telnet ile sınanabilir. Sevkiyat, üretim veya bayi portalı gibi dış sistemlerin B1’deki değişikliği dakikalar değil saniyeler içinde görmesi bu yolla sağlanır. Abonelikleri güncellerken koleksiyonu tamamen değiştirmek için yine B1S-ReplaceCollectionsOnPatch başlığı kullanılır.

Service Layer’ın DI API’ye göre sınırları

KonuDI APIService Layer
PlatformWindows, COM/.NETHTTP konuşan her platform
RecordSet ile doğrudan SQLVarYok — okuma OData sorgularıyla
ImportFromXML / ExportToXMLVarYok
Yeni UDO / UDF / UDTAnındaService Layer yeniden başlatılınca görünür
İstekler arası işlem (transaction)StartTransaction / EndTransactionYok — işlem tek istek veya tek $batch içinde
Yük dengeleme—Apache yük dengeleyici, ROUTEID ile yapışkan oturum

Uygulamada çoğu proje için bu sınırlar sorun değildir; XML içe aktarma ve doğrudan SQL zaten iyi tasarlanmış bir entegrasyonda yer almaz. Sürpriz olan tek madde UDO/UDF yeniden başlatma şartıdır — kullanıcı tanımlı alan ekleyen bir proje, bunu bakım penceresine planlar.

Türkiye e-fatura tarafı: standart dokümanda yok

Service Layer dokümanında UBL-TR, GİB veya e-arşiv adına bir uç yoktur. Türkiye’deki SAP Business One kurulumlarında e-belge, yerelleştirme ve e-belge eklentileriyle yürür; hangi eklentinin kurulu olduğu, faturanın hangi alanının hangi belge türünü tetiklediği kurulumdan kuruluma değişir. Bu yüzden entegrasyonu üç parça olarak kurarız: belge B1’de doğar (Service Layer ile), e-belgeyi mevcut eklenti gönderir, dış sistem eklentinin yazdığı durum alanını geri okur. Senaryo seçimi, durum kuyruğu ve mutabakat disiplini e-fatura entegrasyonu rehberinde programdan bağımsız anlatılıyor.

En sık kurulan SAP Business One entegrasyon senaryoları

1. B2B bayi ve müşteri portalı

BusinessPartners, Items ve fiyat listeleri Service Layer'dan artımlı okunur; portalda onaylanan sipariş Orders ucuna yazılır, Created olayı webhook'la geri döner ve bayi ekranında belge numarası görünür.

2. Depo ve üretim el terminali

Mal kabul, sayım ve sevkiyat el terminalinden girilir; stok hareketleri B1'e Service Layer üzerinden yazılır, çevrimdışıyken kayıt cihazda bekler.

3. Saha satış uygulaması

Plasiyer cari bakiyeyi, açık faturaları ve stoğu telefonda görür; sipariş kuyruktan B1'e düşer, NumAtCard ile çift kayıt engellenir.

4. Yönetim kokpiti

SQLQueries ve OData okuma uçlarıyla gece toplanan satış, tahsilat ve stok verisi kendi veritabanınızda birleşir; pano sabah B1'i hiç yormaz.

Aynı senaryoların Logo, Netsis ve Mikro karşılıklarını Logo, Netsis REST API ve Mikro yazılarında; bulut ERP tarafını DİA Web Servis API yazısında anlattık.

Entegrasyonda dikkat edilecek noktalar

  1. ROUTEID’yi düşürmeyin. Yük dengeli kurulumda yalnız B1SESSION gönderen istemci farklı düğüme düşer ve oturum yokmuş gibi 401 alır.
  2. Boşta kalan oturum. 30 dakika sessizlik oturumu kapatır; köprü 401’i yakalayıp yeniden login olur, uygulama bunu görmez.
  3. Tek gönderim kimliği. Dış belge numarası NumAtCard alanına yazılır; tekrar denemede yeni belge doğmaz.
  4. Sürüm sabitleme. Meta veri sürümle değişir; köprü $metadata çıktısını versiyonlar ve yükseltme sonrası alan farklarını raporlar.
  5. Yetkiyi dar tutmak. Service Layer kullanıcısı yalnız gereken nesnelere yetkili olur; şifre ve çerez uygulama sunucusunda kalır.

Bütçe ve süre

Service Layer köprüsü kendi sisteminizin yanına ek modül olarak kurulur: kapsama göre 8.000 - 45.000 ₺ bandında, tek yönlü okuma veya sipariş aktarımı 2-3 haftada, webhook’lu çift yönlü akış 2-4 haftada devreye girer. Bantların tamamı fiyat sayfasında; SAP lisansı ve yerel iş ortağı bedelleri sizinle onlar arasındaki sözleşmeye göre ayrıca işler.

Kurulumunuzun sürümünü, HANA mı SQL Server mı olduğunu ve hangi süreçlerin dışarı açılacağını yazın; teklif formundan başlayalım, ilk fazın kapsamını meta verinizle birlikte çıkaralım.


İlgili Bayi ve Sipariş Rehberleri

Sıkça sorulan sorular

SAP Business One Service Layer nedir?

SAP Business One'ın Apache HTTP sunucusu üzerine kurulu, iş nesnelerini OData protokolüyle HTTPS üzerinden açan uygulama sunucusudur. SAP HANA ve Microsoft SQL Server sürümlerinde çalışır; SUSE Linux'ta ve SAP Business One 10.0 PL01'den itibaren Windows'ta da kurulur. Varsayılan adres https://sunucu:50000/b1s/v1 biçimindedir.

Service Layer'da /b1s/v1 ile /b1s/v2 arasındaki fark nedir?

/b1s/v1 OData sürüm 3, /b1s/v2 OData sürüm 4 ile konuşur. Aynı iş nesneleri iki yoldan da erişilebilir; fark sorgu sözdizimi ve meta veri biçimindedir. Yeni projelerde v2 (OData 4) tercih edilir, mevcut istemci kütüphanesi v3 bekliyorsa v1 kullanılır.

Service Layer'a nasıl login olunur?

POST /b1s/v1/Login gövdesinde CompanyDB, UserName ve Password gönderilir. Başarılı yanıt Set-Cookie ile B1SESSION ve ROUTEID çerezlerini, gövdede SessionId, Version ve SessionTimeout değerlerini döndürür. Sonraki her istek bu çerezlerle gönderilir; POST /Logout oturumu kapatır. SessionTimeout varsayılanı 30 dakikadır ve b1s.conf dosyasından değiştirilir.

Service Layer ile DI API arasındaki fark nedir?

İkisi de aynı iş mantığını çalıştırır; fark erişim yoludur. DI API COM/.NET tabanlı ve Windows'a bağlıdır, Service Layer ise HTTP konuşan her platformdan çağrılır. Service Layer'ın sınırları da dokümanda yazılıdır: RecordSet ile doğrudan SQL yok, ImportFromXML/ExportToXML yok, yeni oluşturulan UDO/UDF/UDT için yeniden başlatma gerekir ve istekler arası kullanıcı işlemi (transaction) desteklenmez.

SAP Business One'dan dış sisteme anlık bildirim alınabilir mi?

Evet. Service Layer'ın EventSubscriptions ucuna bir webhook tanımı gönderilir: hangi iş nesnesinde (örneğin Orders) hangi olay (Created, Updated) olduğunda hangi adrese bildirim gideceği belirtilir. Bildirimleri Webhook Messenger bileşeni iletir; varsayılan kapısı 40008'dir.

SAP Business One'da Türkiye e-fatura Service Layer'dan gönderilir mi?

Service Layer'ın standart dokümanında UBL-TR veya GİB'e özel bir uç yoktur. Türkiye e-belge süreçleri yerelleştirme ve e-belge eklentileriyle yürür; entegrasyon, kurulumunuzdaki eklentinin alanlarına ve durum kodlarına göre yazılır. Bizim önerimiz: fatura B1'de doğar, e-belgeyi mevcut eklenti gönderir, dış sistem durumu geri okur.

İlgili rehberler

Hizmet sayfası: Entegrasyon hizmeti

Mevcut muhasebe ve ERP entegrasyonunu netleştirelim.

Logo, Netsis, Mikro, Vega: hangi veri, hangi yön, ne kadar sürede? 30 dakikada yol haritası.