Aracılığıyla paylaş


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.

  1. Azure portalda oturum açın ve bu portalı kullanarak Dynamics 365 Supply Chain Management uygulamanız için clientId ve clientSecret değerlerini bulun.

  2. 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"
    }
    
  3. 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.
  4. 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ğer 1.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
    }
    

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/tokenbağ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,dimensionstemel 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 totalInvalidOffsetQtyByReservId0 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 totalInvalidOffsetQtyByReservId2 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 filterstemel 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 durumda siteId ve locationId boş olmamalıdır.
  • siteId ve locationId bölümleme için kullanılır. Eldekini sorgulama isteğinde birden fazla siteId ve locationId 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 dimensionstemel 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 ve locationId 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 alan keys yerine alan var dimensions . Alan keys , sürüm 1.0'daki dimensions alan gibi çalışır, ancak artık şunları da içerebilir organizationId. Anahtarları herhangi bir sırada belirtebilirsiniz.
  • Bu filters bölüm artık alanı desteklemiyor organizationId . Bunun yerine, alandaki boyutlar arasına dahil organizationId edebilir (örneğin keys ,) ve alandaki eşleşen konumda keys: ["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:

Ü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.
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
            }
        }
    }
]
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.