Inventory Visibility genel API'leri
Not
Azure Active Directory, artık Microsoft Entra ID'dir. Daha fazla bilgi
Bu makalede, Stok Görünürlüğü tarafından sağlanan genel API'ler açıklanmaktadır.
Stok Görünürlüğü Eklentisi'nin genel REST API'si, birkaç özel tümleştirme uç noktası sunar. Dört ana etkileşim türünü destekler:
- Harici bir sistemden eldeki stok değişiklikleri eklentiye deftere nakletmek
- Harici bir sistemden eklentide eldeki stok miktarlarını ayarlama veya geçersiz kılma
- Harici bir sistemden eklentiye rezervasyon olayları nakletme
- Harici bir sistemden eldeki geçerli miktarları sorgulamak
Aşağıdaki tabloda, şu anda kullanılabilen API'ler listelenmektedir:
Yol | Yöntem | Açıklama |
---|---|---|
/api/environment/{environmentId}/onhand |
Gönder | Eldeki değişiklik olayı oluşturma |
/api/environment/{environmentId}/onhand/bulk |
Gönder | Birden fazla değişiklik olayı oluşturma |
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk |
Gönder | Eldeki miktarları ayarlama/geçersiz kılma |
/api/environment/{environmentId}/onhand/reserve |
Gönder | Bir geçici rezervasyon olayı oluşturma |
/api/environment/{environmentId}/onhand/reserve/bulk |
Gönder | Birden çok geçici rezervasyon olayı oluşturma |
/api/environment/{environmentId}/onhand/unreserve |
Gönder | Bir geçici rezervasyon olayını tersine çevirme |
/api/environment/{environmentId}/onhand/unreserve/bulk |
Gönder | Birden çok geçici rezervasyon olayını tersine çevirme |
/api/environment/{environmentId}/onhand/reserve/resyncjob |
Gönder | Rezervasyon verilerini temizleme |
/api/environment/{environmentId}/onhand/changeschedule |
Gönder | Bir zamanlanan eldeki değişiklik oluşturma |
/api/environment/{environmentId}/onhand/changeschedule/bulk |
Gönder | Tarihlerle birden çok eldeki stok değişikliği oluşturma |
/api/environment/{environmentId}/onhand/indexquery |
Gönder | Post yöntemini kullanarak sorgulama (önerilir) |
/api/environment/{environmentId}/onhand |
Al | Get yöntemini kullanarak sorgulama |
/api/environment/{environmentId}/onhand/exactquery |
Gönder | Post yöntemini kullanarak tam sorgulama |
/api/environment/{environmentId}/allocation/allocate |
Gönder | Bir tahsisat olayı oluşturma |
/api/environment/{environmentId}/allocation/unallocate |
Gönder | Bir tahsisattan kaldırma olayı oluşturma |
/api/environment/{environmentId}/allocation/reallocate |
Gönder | Bir yeniden tahsis etme olayı oluşturma |
/api/environment/{environmentId}/allocation/consume |
Gönder | Bir tüketme olayı oluşturma |
/api/environment/{environmentId}/allocation/query |
Gönder | Tahsisat sorgusu sonucu |
/api/environment/{environmentId}/onhand/productsearch/indexquery |
Gönder | Ürün aramayla dizin sorgusu yayınlama |
/api/environment/{environmentId}/onhand/productsearch/exactquery |
Gönder | Ürün aramayla tam sorgu yayınlama |
Not
Yolun {environmentId} bölümü, Microsoft Dynamics Lifecycle Services'teki ortam kimliğidir.
Toplu API, her istek için en fazla 512 kayıt döndürebilir.
Kimlik doğrulama
Platform güvenlik belirteci, Stok Görünürlüğü genel API'sini çağırmak için kullanılır. Bu nedenle, Microsoft Entra uygulamanızı kullanarak bir Microsoft Entra belirteci oluşturmanız gerekir. Daha sonra güvenlik hizmetinden erişim belirtecini almak için Microsoft Entra belirteci kullanmanız gerekir.
Güvenlik hizmeti belirteci almak için aşağıdaki adımları izleyin.
Azure portalda oturum açın ve bu portalı kullanarak Dynamics 365 Supply Chain Management uygulamanız için
clientId
veclientSecret
değerlerini bulun.Aşağıdaki özelliklere sahip bir HTTP isteği göndererek Microsoft Entra belirteci (
aadToken
) getirin:URL:
https://login.microsoftonline.com/${aadTenantId}/oauth2/v2.0/token
Yöntem:
GET
Gövde içeriği (form verileri):
Anahtar Değer client_id ${aadAppId} client_secret ${aadAppSecret} grant_type client_credentials kapsam 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default
Yanıtta bir Microsoft Entra belirteci (
aadToken
) almanız gerekir. Bu etiket, aşağıdaki örneğe benzeyecektir.{ "token_type": "Bearer", "expires_in": "3599", "ext_expires_in": "3599", "access_token": "eyJ0eX...8WQ" }
Aşağıdaki örneğe benzer bir JavaScript Nesne Gösterimi (JSON) isteği düzenleyin.
{ "grant_type": "client_credentials", "client_assertion_type": "aad_app", "client_assertion": "{Your_Microsoft EntraToken}", "scope": "https://inventoryservice.operations365.dynamics.com/.default", "context": "{$LCS_environment_id}", "context_type": "finops-env" }
Aaşağıdaki noktaları unutmayın:
client_assertion
değeri, önceki adımda aldığınız Microsoft Entra belirteci (aadToken
) olmalıdır.context
değeri, eklentiyi dağıtmak istediğiniz Lifecycle Services ortam kimliği olmalıdır.- Diğer tüm değerleri örnekte gösterildiği gibi ayarlayın.
Aşağıdaki özelliklere sahip bir HTTP isteği göndererek erişim belirteci (
access_token
) getirin:- URL:
https://securityservice.operations365.dynamics.com/token
- Yöntem:
POST
- HTTP üst bilgisi: API sürümünü ekleyin. (Anahtar
Api-Version
ve değer1.0
.) - Gövde içeriği: Önceki adımda oluşturduğunuz JSON isteğini ekleyin.
Yanıtta bir erişim belirteci (
access_token
) almanız gerekir. Stok Görünürlüğü API'sini çağırmak için taşıyıcı belirteç olarak bu belirteci kullanmanız gerekir. Aşağıda bir örnek verilmiştir.{ "access_token": "{Returned_Token}", "token_type": "bearer", "expires_in": 3600 }
- URL:
Dekont
https://securityservice.operations365.dynamics.com/token
URL, güvenlik hizmeti için genel bir URL'dir. URL'yi çağırdığınızda, ilk yanıt, yanıt başlığında 307
durum kodu bulunan bir http yeniden yönlendirme yanıtı ve güvenlik hizmeti için hedef URL'yi içeren temel "Konum" bulunan bir giriştir. URL biçimi şu şekildedir: https://gw.{$geo}-il101.gateway.prod.island.powerapps.com/securityservice/token
. Örneğin, ortamınız ABD coğrafi bölgesindeyse URL'niz şu olabilir: https://gw.us-il101.gateway.prod.island.powerapps.com/securityservice/token
. 307 yanıt durum kodu sizin için kabul edilebilir değilse, gerçek URL'yi FinOps ortamı konumuna uygun şekilde el ile oluşturabilirsiniz. En kolay yolu https://gw.as-il101.gateway.prod.island.powerapps.com/securityservice/token
bağlantısını tarayıcınızla açıp adres çubuğundaki adresi kopyalamaktır.
Eldeki değişiklik olayları oluşturma
Eldeki değişiklik olayları oluşturmak için iki API vardır:
- Bir kayıt oluşturun:
/api/environment/{environmentId}/onhand
- Birden çok kayıt oluşturun:
/api/environment/{environmentId}/onhand/bulk
Aşağıdaki tabloda, JSON gövdesindeki her bir alanın anlamı özetlenmektedir.
Alan kodu | Açıklama |
---|---|
id |
Belirli bir değişiklik olayı için benzersiz bir kimlik. Bir hizmet hatası nedeniyle yeniden gönderim meydana gelirse bu kimlik, aynı olayın sistemde iki kez sayılmamasını sağlamak için kullanılır. |
organizationId |
Olayla bağlantılı kuruluşun tanımlayıcısı. Bu değer, Supply Chain Management'ta bir kuruluş veya veri alanı kimliğiyle eşlenir. |
productId |
Ürünün tanımlayıcısı. |
quantities |
Eldeki miktarın değiştirilmesi gereken miktar. Örneğin, bir rafa 10 yeni kitap eklenirse bu değer quantities:{ shelf:{ received: 10 }} olur. Üç kitap raftan kaldırılırsa veya satılırsa bu değer quantities:{ shelf:{ sold: 3 }} olur. |
dimensionDataSource |
Deftere nakil değişikliği olayı ve sorgusunda kullanılan boyutların veri kaynağı. Veri kaynağını belirtirseniz belirtilen veri kaynağındaki özel boyutları kullanabilirsiniz. Stok Görünürlüğü, özel boyutları genel varsayılan boyutlarla eşleştirmek için boyut yapılandırmasını kullanır. dimensionDataSource değeri belirtilmezse sorgularınızda yalnızca temel boyutları kullanabilirsiniz. |
dimensions |
Dinamik bir anahtar-değer çifti. Değerler, Supply Chain Management'ta bazı boyutlarla eşleştirilir. Ancak olayın Supply Chain Management'tan veya harici bir sistemden geldiğini belirtmek için özel boyutlar da (örneğin, Kaynak) ekleyebilirsiniz. |
Not
Veri bölümleme kuralınız, Ürün kimliğine göre ise, siteId
ve locationId
isteğe bağlı boyutlardır. Aksi takdirde, bunlar gerekli boyutlardır. Bu kural tahsisat, geçici rezervasyon ve değişiklik zamanlaması API'leri için de geçerlidir.
Aşağıdaki alt bölümlerde bu API'lerin nasıl kullanıldığını gösteren örnekler verilmektedir.
Eldeki değişiklik olayı oluşturma
Bu API, tek bir eldeki değişiklik olayı oluşturur.
Path:
/api/environment/{environmentId}/onhand
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
id: string,
organizationId: string,
productId: string,
dimensionDataSource: string, # Optional
dimensions: {
[key:string]: string,
},
quantities: {
[dataSourceName:string]: {
[key:string]: number,
},
},
}
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir. Bu örnekte, şirket mağaza içi hareketleri ve stok değişikliklerini işleyen bir satış noktası (POS) sistemine sahiptir. Müşteri, kırmızı bir tişörtü mağazanıza iade etti. Değişikliği yansıtmak için Tişört ürünü için tek bir değişiklik olayını deftere nakledersiniz. Bu olay, Tişört ürünü miktarını 1 artırır.
{
"id": "Test201",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensionDataSource": "pos",
"dimensions": {
"siteId": "1",
"locationId": "11",
"posMachineId": "0001",
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 1
}
}
}
Aşağıdaki örnekte, dimensionDataSource
olmadan örnek gövde içeriği gösterilmektedir. Bu durumda,dimensions
temel boyutlar olur. dimensionDataSource
ayarlanırsa dimensions
veri kaynağı boyutları veya temel boyutlar olabilir.
{
"id": "Test202",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensions": {
"siteId": "1",
"locationId": "11",
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 1
}
}
}
Birden fazla değişiklik olayı oluşturma
Bu API, tek olay API'sinin yaptığı gibi değiştirme olayları oluşturabilir. Tek fark, bu API'nin aynı anda birden çok kayıt oluşturabilmesidir. Bu nedenle Path
ve Body
değerleri farklıdır. Bu API için Body
bir dizi kayıt sağlar. Maksimum kayıt sayısı 512'dir. Bu nedenle, eldeki stok değişikliği toplu API'si tek seferde 512 adede kadar değişiklik olayını destekleyebilir.
Örneğin, bir perakende mağazası POS makinesi aşağıdaki iki hareketi işlemiştir:
- Bir kırmızı tişört için bir iade siparişi
- Üç siyah tişört için bir satış hareketi
Bu durumda, her iki stok güncelleştirmesini tek bir API çağrısına dahil edebilirsiniz.
Path:
/api/environment/{environmentId}/onhand/bulk
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
{
id: string,
organizationId: string,
productId: string,
dimensionDataSource: string, # Optional
dimensions: {
[key:string]: string,
},
quantities: {
[dataSourceName:string]: {
[key:string]: number,
},
},
},
...
]
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir.
[
{
"id": "Test203",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensionDataSource": "pos",
"dimensions": {
"SiteId": "Site1",
"LocationId": "11",
"posMachineId": "0001"
"colorId": "red"
},
"quantities": {
"pos": { "inbound": 1 }
}
},
{
"id": "Test204",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensions": {
"siteId": "1",
"locationId": "11",
"colorId": "black"
},
"quantities": {
"pos": { "outbound": 3 }
}
}
]
Eldeki miktarları ayarlama/geçersiz kılma
Eldekini ayarlama API'si, belirtilen ürün için geçerli verileri geçersiz kılar. Bu işlev genellikle stok sayımı güncelleştirmeleri yapmak için kullanılır. Örneğin, günlük stok sayımı sırasında bir mağaza kırmızı tişört için eldeki geçerli stoğun 100 adet olduğunu görebilir. Bu nedenle POS gelen miktarı önceki miktarın ne olduğundan bağımsız olarak 100'e güncelleştirilmelidir. Bu API'yi mevcut değeri geçersiz kılmak için kullanabilirsiniz.
Path:
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
{
id: string,
organizationId: string,
productId: string,
dimensionDataSource: string, # Optional
dimensions: {
[key:string]: string,
},
quantities: {
[dataSourceName:string]: {
[key:string]: number,
},
},
modifiedDateTimeUTC: datetime,
},
...
]
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir. Bu API'nin davranışı, bu makalede daha önce Eldeki değişiklik olayları oluşturma bölümünde açıklanan API'lerin davranışından farklıdır. Bu örnekte, Tişört ürünü miktarı 1 olarak ayarlanır.
[
{
"id": "Test204",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensionDataSource": "pos",
"dimensions": {
"SiteId": "1",
"LocationId": "11",
"posMachineId": "0001"
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 100
}
}
}
]
Rezervasyon olayları oluşturma
Rezerve Etme API'sini kullanmak için rezervasyon özelliğini açmanız ve rezervasyon yapılandırmasını tamamlamanız gerekir. Daha fazla bilgi için (veri akışı ve örnek senaryo dahil) bkz. Stok Görünürlüğü rezervasyonları.
Rezervasyon olayı oluşturma
Rezervasyon, farklı veri kaynağı ayarları için yapılabilir. Bu tür bir rezervasyonu yapılandırmak için öncelikle dimensionDataSource
parametresinde veri kaynağını belirtin. Ardından dimensions
parametresinde, hedef veri kaynağındaki boyut ayarlarına göre boyutları belirtin.
Rezervasyon API'sini çağırdığınızda istek gövdesinde Boolean ifCheckAvailForReserv
parametresini belirterek rezervasyon doğrulamasını denetleyebilirsiniz. True
değeri, doğrulamanın gerekli olduğu anlamına ve False
değeri, doğrulamanın gerekli olmadığı anlamına gelir. Varsayılan değer True
değeridir.
Rezervasyonu tersine çevirmek veya belirtilen stok miktarlarının rezervasyonunu kaldırmak istiyorsanız miktarı negatif bir değere ayarlayın ve doğrulamayı atlamak için ifCheckAvailForReserv
parametresini False
olarak ayarlayın. Ayrıca, aynı işlemi gerçekleştirmek için adanmış bir rezervasyonu kaldırma API'si de vardır. Fark yalnızca iki API'nin çağrılma biçimindedir. Rezervasyonu kaldırma API'si ile reservationId
öğesini kullanarak belirli bir rezervasyon olayını tersine çevirmek daha kolaydır. Daha fazla bilgi için Bir rezervasyon olayının rezervasyonunu kaldırma bölümüne bakın.
Path:
/api/environment/{environmentId}/onhand/reserve
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
id: string,
organizationId: string,
productId: string,
dimensionDataSource: string,
dimensions: {
[key:string]: string,
},
quantityDataSource: string, # optional
quantities: {
[dataSourceName:string]: {
[key:string]: number,
},
},
modifier: string,
quantity: number,
ifCheckAvailForReserv: boolean,
}
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir.
{
"id": "reserve-0",
"organizationId": "SCM_IV",
"productId": "iv_contoso_product",
"quantity": 1,
"quantityDataSource": "iv",
"modifier": "softReservOrdered",
"ifCheckAvailForReserv": true,
"dimensions": {
"siteId": "iv_contoso_site",
"locationId": "iv_contoso_location",
"colorId": "red",
"sizeId": "small"
}
}
Aşağıdaki örnekte başarılı bir yanıt gösterilmektedir.
{
"reservationId": "RESERVATION_ID",
"id": "ohre~id-822-232959-524",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Birden fazla rezervasyon olayı oluşturma
Bu API, tek olay API'sinin toplu bir sürümüdür.
Path:
/api/environment/{environmentId}/onhand/reserve/bulk
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
{
id: string,
organizationId: string,
productId: string,
dimensionDataSource: string,
dimensions: {
[key:string]: string,
},
quantityDataSource: string, # optional
quantities: {
[dataSourceName:string]: {
[key:string]: number,
},
},
modifier: string,
quantity: number,
ifCheckAvailForReserv: boolean,
},
...
]
Rezervasyon olaylarını tersine çevirme
Rezervasyonu kaldırma API'si, Rezervasyon olayları için ters işlem görevi görür. Bu, reservationId
ile belirtilen bir rezervasyon olayını tersine çevirmek veya rezervasyon miktarını azaltmak için bir yol sağlar.
Bir rezervasyon olayını tersine çevirme
Bir rezervasyon oluşturulduğunda, yanıt gövdesine bir reservationId
dahil edilir. Rezervasyonu iptal etmek için aynı reservationId
öğesini sağlamalısınız ve rezervasyon API çağrısı için kullanılan aynı organizationId
, productId
ve dimensions
öğelerini dahil etmelisiniz. Son olarak, önceki rezervasyondan serbest bırakılacak maddelerin sayısını temsil eden bir OffsetQty
değeri belirtin. Rezervasyon, belirtilen OffsetQty
değerine göre tamamen veya kısmen tersine çevrilebilir. Örneğin, bir maddenin 100 birimi rezerve edilmişse, başlangıçtaki rezerve edilen miktarın 10'unun rezervasyonunu kaldırmak için OffsetQty: 10
belirtebilirsiniz.
Path:
/api/environment/{environmentId}/onhand/unreserve
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
id: string,
organizationId: string,
productId: string,
reservationId: string,
dimensions: {
[key:string]: string,
},
OffsetQty: number
}
Aşağıdaki kodda, örnek bir gövde içeriği gösterilmektedir.
{
"id": "unreserve-0",
"organizationId": "SCM_IV",
"productId": "iv_contoso_product",
"reservationId": "RESERVATION_ID",
"dimensions": {
"siteid":"iv_contoso_site",
"locationid":"iv_contoso_location",
"ColorId": "red",
"SizeId": "small"
},
"OffsetQty": 1
}
Aşağıdaki kodda başarılı bir yanıt gövdesi örneği gösterilmektedir.
{
"reservationId": "RESERVATION_ID",
"totalInvalidOffsetQtyByReservId": 0,
"id": "ohoe~id-823-11744-883",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Dekont
Yanıt gövdesinde, OffsetQty
değeri rezervasyon miktarından küçük veya bu değere eşit olduğunda processingStatus
"success" durumunda ve totalInvalidOffsetQtyByReservId
0 olur.
OffsetQty
değeri rezerve edilen miktardan büyükse, processingStatus
"partialSuccess" durumunda olur ve totalInvalidOffsetQtyByReservId
, OffsetQty
ile rezerve edilen miktar arasındaki farka eşit olur.
Örneğin, rezervasyonun miktarı 10 ve OffsetQty
değeri 12 ise totalInvalidOffsetQtyByReservId
2 olur.
Birden fazla rezervasyon olayını tersine çevirme
Bu API, tek olay API'sinin toplu bir sürümüdür.
Path:
/api/environment/{environmentId}/onhand/unreserve/bulk
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
{
id: string,
organizationId: string,
productId: string,
reservationId: string,
dimensions: {
[key:string]: string,
},
OffsetQty: number
}
...
]
Rezervasyon verilerini temizleme
Rezervasyon verilerini temizle API, geçmiş rezervasyon verilerini temizlemek için kullanılır. Gövde veri kaynaklarının bir listesi olmalıdır. Liste boşsa tüm veri kaynakları temizlenecektir.
Path:
/api/environment/{environmentId}/onhand/reserve/resyncjob
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
"iv",
"pos"
]
Eldekini sorgulama
Ürünlerinize ait mevcut eldeki stok verilerini getirmek için Eldekini sorgulama API'sını kullanın. Bu API'yi, e-ticaret web sitenizde ürün stok düzeylerini gözden geçirmek istediğinizde veya bölgeler arasında ya da yakındaki mağazalarda ve ambarlarda ürün kullanılabilirliğini denetlemek istediğinizde, stoğu bilmeniz gerektiğinde kullanabilirsiniz. API şu anda productID
değerine göre en çok 5000 ayrı öğeye kadar sorgulamayı desteklemektedir. Her sorguda birden çok siteID
ve locationID
değeri de belirtilebilir. Veri bölümleme kuralınız, Konuma göre ise, maksimum sınır aşağıdaki denklemle tanımlanır:
NumOf(SiteID) × NumOf(LocationID) <= 10.000.
Post yöntemini kullanarak sorgulama
Posta API'sine göre sorgulama iki sürümde kullanılabilir. Aşağıdaki tabloda farklılıklar özetlenmiştir.
API sürüm 1.0 | API sürüm 2.0 |
---|---|
Yalnızca bir kuruluş kimliğini sorgulayabilir. | Birden çok kuruluş kimliğini sorgulayabilir. |
10.000'e kadar tesis ve ambar kombinasyonunu sorgulayabilir. | 10.000'den fazla kuruluş kimliği, tesis ve ambar kombinasyonunu sorgulayabilir. Sonuçları birden çok sayfada döndürebilir. |
Aşağıdaki alt bölümlerde her API sürümünün nasıl kullanılacağı gösterilmektedir.
Gönderi API'si sürüm 1.0'a göre sorgulama
Path:
/api/environment/{environmentId}/onhand/indexquery
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
dimensionDataSource: string, # Optional
filters: {
organizationId: string[],
productId: string[],
siteId: string[],
locationId: string[],
[dimensionKey:string]: string[],
},
groupByValues: string[],
returnNegative: boolean,
}
Bu isteğin gövde kısmında, dimensionDataSource
isteğe bağlı bir parametredir. Ayarlanmamışsa filters
temel boyutlar olarak kabul edilir.
returnNegative
parametresi, sonuçların negatif girişler içerip içermediğini denetler.
Konuma göre depolanan sorgu verisi
Bu bölüm, veri bölümleme kuralınız, Konuma göre ise geçerlidir.
organizationId
tam olarak bir değer içeren bir dizi olmalıdır.productId
bir veya daha fazla değer içerebilir. Boş bir diziyse sistem, belirlenmiş sitelerin ve konumların tüm ürünlerini döndürür. Bu durumdasiteId
velocationId
boş olmamalıdır.siteId
velocationId
bölümleme için kullanılır. Eldekini sorgulama isteğinde birden fazlasiteId
velocationId
değeri belirtebilirsiniz. İki dizi de boş ise sistem, belirlenen ürünlerin tüm tesislerini ve konumlarını döndürür. Bu durumda,productId
boş olmamalıdır.
Dizin yapılandırmanız ile tutarlı bir şekilde groupByValues
parametresinin kullanılmasını öneririz. Daha fazla bilgi için bkz. Eldeki dizin yapılandırması.
Ürün Kimliğine göre depolanan sorgu verileri
Bu bölüm, veri bölümleme kuralınız, Ürün kimliğine göre ise geçerlidir. Bu durumda, iki filters
alan gereklidir: organizationId
, productId
.
organizationId
tam olarak bir değer içeren bir dizi olmalıdır.productId
en az bir değer içeren bir dizi olmalıdır.
Verileri konuma göre depolamaktan farklı olarak değerleri siteId
ve locationId
için belirlemezseniz, her bir ürün kimliğine ilişkin envanter bilgileri tüm sitelerde ve/veya konumlarda toplanır.
Not
Eldeki değişiklik zamanlamasını ve karşılanabilir (KM) miktar özelliklerini etkinleştirdiyseniz sorgunuz, sorgu sonuçlarının KM bilgilerini içerip içermediğini denetleyen QueryATP
Boole parametresini de içerebilir. Daha fazla bilgi ve örnekler için bkz. Stok Görünürlüğü eldeki değişiklik zamanlamaları ve karşılanabilir miktarı.
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir. Eldeki stoğu birden fazla yerleşimden (ambar) sorgulayabileceğinizi gösterilir.
{
"dimensionDataSource": "pos",
"filters": {
"organizationId": ["usmf"],
"productId": ["T-shirt"],
"siteId": ["1"],
"locationId": ["11","12","13"],
"colorId": ["red"]
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Aşağıdaki örnekte, belirli bir tesis ve yerleşimdeki tüm ürünlerin nasıl sorgulanacağı gösterilmektedir.
{
"filters": {
"organizationId": ["usmf"],
"productId": [],
"siteId": ["1"],
"locationId": ["11"],
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Gönderi API'si sürüm 2.0'a göre sorgulama
Path:
/api/environment/{environmentId}/onhand/indexquery?pageNumber={pageNumber}&pageSize={pageSize}
Method:
Post
Headers:
Api-Version="2.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
# Same as version 1.0
API sürüm 2.0 için istek biçimi, sürüm 1.0'ınkine benzer, ancak aynı zamanda iki isteğe bağlı parametreyi de destekler: pageNumber
ve pageSize
, sistemin tek bir büyük sonucu birkaç küçük belgeye bölmesine olanak tanır. Sonuçlar ambara (locationId
) göre sıralanır ve sonuçları sayfalara bölmek için parametreler aşağıdaki gibi kullanılır:
pageSize
Her sayfada döndürülen ambarların (locationId
değerlerin) sayısını belirler.pageNumber
Döndürülen sayfa numarasını belirler.
Bu biçimdeki bir istek, ambar numarasından ({pageNumber} − 1) başlayarak eldeki stok verilerini döndürür × {pageSize} ve sonraki {pageSize} ambarlara ait verileri içerir.
API sürüm 2.0, aşağıdaki yapıyı kullanan bir belgeyle yanıt verir:
{
Value: { # Response same as Api-Version=1.0 }
nextLink: onhand/indexquery?pageNumber={pageNumber+1}&pageSize={pageSize}
}
İstek son ambara (locationId
) ulaştığında, nextLink
değer boş bir dize olur.
API sürüm 2.0, isteğinizde birden fazla kuruluş kimliği belirtmenize de olanak tanır. Bunu yapmak için, istek belgenizin filtresine organizationId
virgülle ayrılmış bir kuruluş kimlikleri listesi ekleyin. Örneğin, "organizationId": ["org1", "org2", "org3"]
.
Get yöntemini kullanarak sorgulama
Path:
/api/environment/{environmentId}/onhand
Method:
Get
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Query(Url Parameters):
groupBy
returnNegative
[Filters]
Aşağıda, örnek bir alma URL'si bulunmaktadır. Bu alma isteği, daha önce sağlanan deftere nakletme örneği ile tam olarak aynıdır.
/api/environment/{environmentId}/onhand?organizationId=SCM_IV&productId=iv_contoso_product&siteId=iv_contoso_site&locationId=iv_contoso_location&colorId=red&groupBy=colorId,sizeId&returnNegative=true
Sistem, GET yöntemiyle birden çok kuruluş kimliği üzerinden stok sorgulamayı desteklemez.
Eldeki stok tam sorgusu
Eldeki stok tam sorguları normal eldeki stok sorgularına benzer ancak tesis ve yerleşim arasında bir eşleme hiyerarşisi belirtmenize olanak tanır. Örneğin, aşağıdaki iki tesise sahipsiniz:
- Tesis 1, A yerleşimi ile eşlenen
- Tesis 2, B yerleşimi ile eşlenen
Normal eldeki stok sorgusu için "siteId": ["1","2"]
ve "locationId": ["A","B"]
belirtirseniz, Stok Görünürlüğü aşağıdaki tesisler ve yerleşimler için sonucu otomatik olarak sorgular.
- Tesis 1, A yerleşimi
- Tesis 1, B yerleşimi
- Tesis 2, A yerleşimi
- Tesis 2, B yerleşimi
Gördüğünüz gibi, normal eldeki stok sorgusu A yerleşiminin yalnızca tesis 1'de var olduğunu ve B yerleşiminin yalnızca tesis 2'de var olduğunu tanımaz. Bu nedenle, gereksiz sorgular yapar. Bu hiyerarşik eşlemeye uyum sağlamak için, eldeki stok tam sorgusu kullanabilir ve sorgu gövdesinde yerleşim eşlemelerini belirtebilirsiniz. Bu durumda, yalnızca tesis 1, A yerleşimi ve tesis 2 B yerleşimi ile ilgili sonuçları sorgular ve sonuç alırsınız.
Post yöntemini kullanarak eldeki tam sorgu sorgusu
Posta API'sine göre eldeki tam sorgu iki sürümde mevcuttur. Aşağıdaki tabloda farklılıklar özetlenmiştir.
API sürüm 1.0 | API sürüm 2.0 |
---|---|
Yalnızca bir kuruluş kimliğini sorgulayabilir. | Birden çok kuruluş kimliğini sorgulayabilir. |
Post API sürüm 1.0'a göre eldeki tam sorgu
Path:
/api/environment/{environmentId}/onhand/exactquery
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
dimensionDataSource: string, # Optional
filters: {
organizationId: string[],
productId: string[],
dimensions: string[],
values: string[][],
},
groupByValues: string[],
returnNegative: boolean,
}
Bu isteğin gövde kısmında, dimensionDataSource
isteğe bağlı bir parametredir. Ayarlanmamışsa filters
içindeki dimensions
temel boyutlar olarak kabul edilir. filters
için organizationId
, productId
, dimensions
ve values
olmak üzere dört gerekli alan vardır.
organizationId
yalnızca bir değer içermelidir ancak yine de bir dizidir.productId
bir veya daha fazla değer içerebilir. Bu boş bir diziyse tüm ürünler döndürülür.dimensions
dizisinde,siteId
velocationId
yalnızca size ait veri bölümleme kuralıKonuma göre ayarlandıysa gereklidir. Bu durumda herhangi bir sırada diğer öğelerle birlikte görüntülenebilirler.values
,dimensions
öğesine karşılık gelen bir veya daha fazla farklı değer grubu içerebilir.
filters
içindeki dimensions
otomatik olarak groupByValues
öğesine eklenir.
returnNegative
parametresi, sonuçların negatif girişler içerip içermediğini denetler.
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir.
{
"dimensionDataSource": "pos",
"filters": {
"organizationId": ["SCM_IV"],
"productId": ["iv_contoso_product"],
"dimensions": ["siteId", "locationId", "colorId"],
"values" : [
["iv_contoso_site", "iv_contoso_location", "red"],
["iv_contoso_site", "iv_contoso_location", "blue"],
]
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Aşağıdaki örnekte, birden çok tesis ve konumdaki tüm ürünlerin nasıl sorgulanacağı gösterilmektedir.
{
"filters": {
"organizationId": ["SCM_IV"],
"productId": [],
"dimensions": ["siteId", "locationId"],
"values" : [
["iv_contoso_site_1", "iv_contoso_location_1"],
["iv_contoso_site_2", "iv_contoso_location_2"],
]
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Post API sürüm 2.0'a göre eldeki tam sorgu
Path:
/api/environment/{environmentId}/onhand/exactquery
Method:
Post
Headers:
Api-Version="2.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
dimensionDataSource: string, # Optional
filters: {
productId: string[],
keys: string[],
values: string[][],
},
groupByValues: string[],
returnNegative: boolean,
}
API sürüm 2.0, sürüm 1.0'dan aşağıdaki şekillerde farklılık gösterir:
- Bölümde
filters
artık alankeys
yerine alan vardimensions
. Alankeys
, sürüm 1.0'dakidimensions
alan gibi çalışır, ancak artık şunları da içerebilirorganizationId
. Anahtarları herhangi bir sırada belirtebilirsiniz. - Bu
filters
bölüm artık alanı desteklemiyororganizationId
. Bunun yerine, alandaki boyutlar arasına dahilorganizationId
edebilir (örneğinkeys
,) ve alandaki eşleşen konumdakeys: ["organizationId", "siteId", "locationId"]
kuruluş kodu değerleri tanımlayabilirsiniz (örneğin,values
).values: ["SCM_IV", "iv_contoso_site_1", "iv_contoso_location_1"]
Diğer alanlar API sürüm 1.0 ile aynıdır.
Ürün aramayla sorgulama
Aşağıdaki hazır sorgu API'leri, ürün aramayı destekleyecek şekilde geliştirilmiştir:
Dekont
Ürün aramayı kullanan bir Stok Görünürlüğü sorgusu yayınladığınızda ürün kimliğine göre bulmak veya filtrelemek için productSearch
istek parametresi (içinde ProductAttributeQuery
nesnesiyle birlikte) kullanın. Daha yeni API'ler istek gövdesinde artık eski productid
istek parametresini desteklemiyor.
Ön Koşullar
Ürün arama API'lerini kullanmaya başlamanız için sisteminizin aşağıdaki gereksinimleri karşılaması gerekir:
- Dynamics 365 Supply Chain Management 10.0.36 veya daha üstünü çalıştırıyor olmalısınız.
- Stok Görünürlüğü 1.2.2.54 veya üstü kurulmalı ve Stok Görünürlüğünü yükleme ve ayarlama bölümünde açıklanmalıdır.
- Stok Görünürlüğü arama hizmeti, Stok Görünürlüğü için ürün aramayı ayarlama bölümünde açıklandığı gibi kurulmalı ve ayarlanmalıdır.
Ürün arama sözleşmesi
Ürün arama sözleşmesi, ürün arama API'leriyle iletişim kurma kurallarını tanımlar. Ürün arama özelliklerinin yeteneklerini ve davranışını tanımlamak için standartlaştırılmış bir yol sağlar. Bu nedenle kullanıcılar, Stok Görünürlüğü API'lerini kullanan uygulamaları daha kolay anlayabilir, bunlarla etkileşime geçebilir ve geliştirebilir.
Aşağıdaki örnekte, örnek bir sözleşme gösterilmektedir.
{
"productFilter": {
"logicalOperator": "And",
"conditions": [
{
"conditionOperator": "Contains",
"productName": [
"Deluxe"
],
},
],
"subFilters": [
{
"conditions": [
{
"conditionOperator": "IsExactly",
"productType": [
"Item"
]
}
]
}
]
},
"attributeFilter": {
"logicalOperator": "Or",
"conditions": [
{
"attributeName": "Weight Limit",
"attributeTypeName":"PoundDomain",
"attributeArea": " ProductAttribute",
"attributeValues": [
"370"
],
"conditionOperator": "GreaterEqual"
}
],
"subFilters": [
{
"conditions": [
{
"attributeName": "Weight Limit",
"attributeTypeName":"PoundDomain",
"attributeArea": " ProductAttribute",
"attributeValues": [
"330"
],
"conditionOperator": "LessEqual"
}
]
}
]
},
}
Aşağıdaki tabloda, sözleşmede kullanılan alanlar açıklanmaktadır.
Alan kodu | Açıklama |
---|---|
logicalOperator |
Olası değerler And ve Or 'dur. Birden fazla koşulu veya koşulu ve alt filtreyi bağlamak için bu alanı kullanın. Aslında subFilters 'un bir productFilter ya da attributeFilter nesne olduğu unutulmamalıdır. Bu nedenle, subFilters içinde subFilters 'iniz olabilir. |
conditionOperator |
Olası değerler: IsExactly , IsNot , Contains , DoesNotContain , BeginsWith , IsOneOf , GreaterEqual , LessEqual ve Between . |
ProductFilter |
Ürünleri ürünle ilgili bilgilere göre filtrelemek için bu alanı kullanın. Örneğin, iş ihtiyaçlarınıza uyacak şekilde sözleşmede productName 'u Company , itemNumber , productSearchName , productType , productName , productDescription , inventoryUnitSymbol , salesUnitSymbol , veya purchaseUnitSymbol olarak değiştirebilirsiniz. |
AttributeFilter |
Ürünleri öznitelikle ilgili bilgilere göre filtrelemek için bu alanı kullanın. |
attributeArea |
Olası değerler: ProductAttribute , DimensionAttribute ve BatchAttribute . |
Ürün aramayla sorgulama
Path:
/api/environment/{environmentId}/onhand/productsearch/indexquery
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
productSearch: {ProductAttributeQuery contract object inherited from Product Search}
dimensionDataSource: string, # Optional
filters: {
organizationId: string[],
siteId: string[],
locationId: string[],
[dimensionKey:string]: string[],
},
groupByValues: string[],
returnNegative: boolean,
}
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"returnNegative": true,
"filters":
{
"organizationId": ["usmf"],
"siteId": ["1"],
"locationId": ["13"],
},
"groupByValues": ["colorid"],
}
Aşağıdaki örnekte başarılı bir yanıt gösterilmektedir.
[
{
"productId": "M0030",
"dimensions": {
"ColorId": "White",
"siteid": "1",
"locationid": "13"
},
"quantities": {
"fno": {
"arrived": 0,
"availordered": 20,
"onorder": 5,
"ordered": 20,
"physicalinvent": 0,
"reservordered": 0,
"reservphysical": 0,
"orderedsum": 20,
"softreserved": 0
},
"iv": {
"ordered": 0,
"softreserved": 0,
"softreservphysical": 0,
"softreservordered": 0,
"total ordered": 20,
"total on order": 5,
"availabletoreserve": 20,
"totalavailable": 20,
"totalordered": 20,
"totalonorder": 5
},
"pos": {
"inbound": 0,
"outbound": 0
},
"@iv": {
"@allocated": 0
}
}
},
{
"productId": "M0030",
"dimensions": {
"ColorId": "Black",
"siteid": "1",
"locationid": "13"
},
"quantities": {
"fno": {
"arrived": 0,
"availordered": 3,
"ordered": 3,
"physicalinvent": 0,
"reservordered": 0,
"reservphysical": 0,
"orderedsum": 3,
"softreserved": 0
},
"iv": {
"ordered": 0,
"softreserved": 0,
"softreservphysical": 0,
"softreservordered": 0,
"total ordered": 3,
"availabletoreserve": 3,
"totalavailable": 3,
"totalordered": 3
},
"pos": {
"inbound": 0,
"outbound": 0
},
"@iv": {
"@allocated": 0
}
}
}
]
Ürün aramayla tam sorgu
Path:
/api/environment/{environmentId}/onhand/productsearch/exactquery
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
{
productSearch: {ProductAttributeQuery contract object inherited from Product Search}
dimensionDataSource: string, # Optional
filters: {
organizationId: string[],
dimensions: string[],
values: string[][],
},
groupByValues: string[],
returnNegative: boolean,
}
Aşağıdaki örnekte, örnek gövde içeriği gösterilmektedir.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"filters": {
"organizationId": ["usmf"],
"dimensions": ["siteId", "locationId", "colorid"],
"values" : [
["1", "13", "Black"],
]
},
"groupByValues": [],
"returnNegative": true
}
Aşağıdaki örnekte başarılı bir yanıt gösterilmektedir.
[
{
"productId": "M0030",
"dimensions": {
"ColorId": "Black",
"siteid": "1",
"locationid": "13"
},
"quantities": {
"fno": {
"arrived": 0,
"availordered": 3,
"ordered": 3,
"physicalinvent": 0,
"reservordered": 0,
"reservphysical": 0,
"orderedsum": 3,
"softreserved": 0
},
"iv": {
"ordered": 0,
"softreserved": 0,
"softreservphysical": 0,
"softreservordered": 0,
"total ordered": 3,
"availabletoreserve": 3,
"totalavailable": 3,
"totalordered": 3
},
"pos": {
"inbound": 0,
"outbound": 0
},
"@iv": {
"@allocated": 0
}
}
}
]
Karşılanabilir miktar
Gelecekteki eldeki değişiklikleri zamanlamanıza ve KM miktarlarını hesaplamanıza olanak tanıyan Stok Görünürlüğü'nü ayarlayabilirsiniz. KM, mevcut bulunan ve sonraki dönemde müşteriye vaat edilebilecek bir maddenin miktarıdır. KM hesaplamasının kullanımı, sipariş karşılama yeteneğinizi büyük ölçüde artırabilir. Bu özelliği etkinleştirme ve özellik etkinleştirildikten sonra API aracılığıyla Stok Görünürlüğü ile etkileşim kurma hakkında bilgi için bkz. Stok Görünürlüğü eldeki değişiklik zamanlamaları ve karşılanabilir miktarı.
Tahsisat
Tahsisat ile ilgili API'ler Stok Görünürlüğü tahsisatında yer alır.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin