Jaa


Varaston näkyvyys -sovelluksen julkiset ohjelmointirajapinnat

Huomautus

Azure Active Directory on nyt Microsoft Entra ID. Lisätietoja

Tässä artikkelissa käsitellään varaston näkyvyyden julkisia ohjelmointirajapintoja.

Varaston näkyvyyden apuohjelman julkinen REST API sisältää useita nimenomaisia integroinnin päätepisteitä. Se tukee neljää pääasiallista vuorovaikutustyyppiä:

  • Käytettävissä olevan varastomäärän muutosten kirjaaminen apuohjelmaan ulkoisesta järjestelmästä
  • Käytettävissä olevien varastosaldomäärien määrittäminen tai ohittaminen ulkoisesta järjestelmästä apuohjelmassa
  • Varaustapahtumien kirjaaminen apuohjelmaan ulkoisesta järjestelmästä
  • Nykyisten käytettävissä olevien määrien kysely ulkoisesta järjestelmästä

Seuraavassa taulukossa on tällä hetkellä käytettävissä olevat ohjelmointirajapinnat:

Polku Menetelmä Kuvaus
/api/environment/{environmentId}/onhand Kirjaus Yhden käytettävissä olevan varastosaldon muutostapahtuman luominen
/api/environment/{environmentId}/onhand/bulk Kirjaus Useiden muutostapahtumien luominen
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk Kirjaus Käytettävissä olevien varastosaldomäärien määrittäminen tai ohittaminen
/api/environment/{environmentId}/onhand/reserve Kirjaus Yhden alustavan varauksen tapahtuman luominen
/api/environment/{environmentId}/onhand/reserve/bulk Kirjaus Useiden alustavien varausten tapahtumien luominen
/api/environment/{environmentId}/onhand/unreserve Kirjaus Yhden alustavan varauksen tapahtuman peruuttaminen
/api/environment/{environmentId}/onhand/unreserve/bulk Kirjaus Useiden alustavien varausten tapahtumien peruuttaminen
/api/environment/{environmentId}/onhand/reserve/resyncjob Kirjaus Varaustietojen puhdistaminen
/api/environment/{environmentId}/onhand/changeschedule Kirjaus Yhden aikataulutetun käytettävissä olevan saldon muutoksen luominen
/api/environment/{environmentId}/onhand/changeschedule/bulk Kirjaus Useiden käytettävissä olevien varastosaldojen muutosten ja päivämäärien luominen
/api/environment/{environmentId}/onhand/indexquery Kirjaus Post-menetelmää käyttävä kysely (suositeltu)
/api/environment/{environmentId}/onhand Hae Get-menetelmää käyttävä kysely
/api/environment/{environmentId}/onhand/exactquery Kirjaus Post-menetelmää käyttävä tarkka kysely
/api/environment/{environmentId}/allocation/allocate Kirjaus Yhden kohdistustapahtuman luominen
/api/environment/{environmentId}/allocation/unallocate Kirjaus Yhden kohdistuksenpoistotapahtuman luominen
/api/environment/{environmentId}/allocation/reallocate Kirjaus Yhden uudelleenkohdistustapahtuman luominen
/api/environment/{environmentId}/allocation/consume Kirjaus Yhden kulutustapahtuman luominen
/api/environment/{environmentId}/allocation/query Kirjaus Kyselyn kohdistustulos
/api/environment/{environmentId}/onhand/productsearch/indexquery Kirjaus Kirjaa indeksikysely tuotehaun kanssa
/api/environment/{environmentId}/onhand/productsearch/exactquery Kirjaus Kirjaa tarkka kysely tuotehaun kanssa

Huomautus

Polun {environmentId}-osa on ympäristötunnus Microsoft Dynamics Lifecycle Servicesissä.

Joukkotoimintosovellusliittymä voi palauttaa kullekin pyynnölle enintään 512 tietuetta.

Todennus

Varaston näkyvyyden julkisen ohjelmointirajapinnan kutsumiseen käytetään ympäristön suojaustunnusta. Tätä varten sinun on luotava Microsoft Entra -tunnus käyttämällä Microsoft Entra -sovellusta. Tämän jälkeen Microsoft Entra -tunnuksen avulla saat käyttöoikeustunnuksen suojauspalvelusta.

Palvelun suojaustunnus haetaan seuraavasti:

  1. Kirjaudu Azure-portaaliin ja etsi sen avulla Dynamics 365 Supply Chain Management -sovelluksen clientId- ja clientSecret-arvot.

  2. Nouda Microsoft Entra -tunnus (aadToken) lähettämällä HTTP-pyyntö, jossa on seuraavat ominaisuudet:

    • URL-osoite:https://login.microsoftonline.com/${aadTenantId}/oauth2/v2.0/token

    • Tapa:GET

    • Tekstisisältö (lomaketiedot):

      Avain Arvo
      client_id ${aadAppId}
      client_secret ${aadAppSecret}
      grant_type client_credentials
      vaikutusalue 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.oletusarvo

    Vastauksena pitäisi olla Microsoft Entra -tunnus (aadToken). Tarran pitäisi on seuraavan esimerkin kaltainen:

    {
        "token_type": "Bearer",
        "expires_in": "3599",
        "ext_expires_in": "3599",
        "access_token": "eyJ0eX...8WQ"
    }
    
  3. Muodosta seuraavaa esimerkkiä muistuttava JavaScript Object Notation (JSON) -pyyntö.

    {
        "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"
    }
    

    Huomaa seuraavat seikat:

    • client_assertion-arvon on oltava edellisessä vaiheessa vastaanotettu Microsoft Entra -tunnus (aadToken).
    • context-arvon on oltava sen Lifecycle Services -ympäristön tunnus, jossa apuohjelma halutaan ottaa käyttöön.
    • Kaikki muut arvot määritetään samoiksi kuin esimerkissä.
  4. Nouda käyttöoikeustietue (access_token) lähettämällä HTTP-pyyntö, jossa on seuraavat ominaisuudet:

    • URL-osoite:https://securityservice.operations365.dynamics.com/token
    • Tapa:POST
    • HTTP-otsikko: Ohjelmointirajapinnan versio on sisällytettävä. (Avain on Api-Version ja arvo 1.0.)
    • Tekstisisältö: sisällytetään edellisessä vaiheessa luotu JSON-pyyntö.

    Vastauksena pitäisi olla käyttöoikeustietue (access_token). Tätä tunnusta on käytettävä haltijatunnuksena, jolla varaston näkyvyyden ohjelmointirajapintaa kutsutaan. Alla on esimerkki.

    {
        "access_token": "{Returned_Token}",
        "token_type": "bearer",
        "expires_in": 3600
    }
    

Seteli

URL-osoite https://securityservice.operations365.dynamics.com/token on suojauspalvelun yleinen URL-osoite. Kun kutsut URL-osoitetta, ensimmäinen vastaus on http:n uudelleenohjausvastaus, joka tilakoodi vastausotsikoissa on 307 ja Sijainti-avaimen sisältävä syöttö, jossa on suojauspalvelun kohde-URL-osoite. URL-osoitteen muoto on https://gw.{$geo}-il101.gateway.prod.island.powerapps.com/securityservice/token. Jos ympäristö sijaitsee Yhdysvaltain maantieteellisellä alueella, URL-osoite voi olla https://gw.us-il101.gateway.prod.island.powerapps.com/securityservice/token. Jos 307-vastauksen tilakoodia ei voida hyväksyä, voit manuaalisesti muodostaa todellisen URL-osoitteen FinOps-ympäristön sijainnin mukaan. Yksinkertaisin tapa on avata kohta https://gw.as-il101.gateway.prod.island.powerapps.com/securityservice/token selaimessa ja kopioida osoiterivin osoite.

Käytettävissä olevan varastosaldon muutostapahtumien luominen

Käytettävissä olevien varastosaldon muutostapahtumien luontiin on käytettävissä kaksi ohjelmointirajapintaa:

  • Yhden tietueen luonti: /api/environment/{environmentId}/onhand
  • Useiden tietueiden luonti: /api/environment/{environmentId}/onhand/bulk

Seuraavassa taulukossa on yhteenveto JSON-tekstiosan kunkin kentän merkityksestä.

Kentän tunnus Kuvaus
id Tietyn muutostapahtuman yksilöivä tunnus. Jos uudelleenlähettäminen tapahtuu palvelun virheen vuoksi, tämän tunnuksen avulla varmistetaan, että samaa tapahtumaa ei lasketa järjestelmässä kahdesti.
organizationId Tapahtumaan linkitetyn organisaation tunniste. Tämä arvo yhdistetään Supply Chain Managementin organisaatioon tai tietoalueen tunnukseen.
productId Tuotteen tunniste.
quantities Määrä, jolla käytettävissä olevaa varastosaldoa on muutettava. Jos hyllylle lisättiin esimerkiksi 10 uutta kirjaa, tämä arvo on quantities:{ shelf:{ received: 10 }}. Jos hyllystä poistettiin tai myytiin kolme kirjaa, tämä arvo on quantities:{ shelf:{ sold: 3 }}.
dimensionDataSource Muutostapahtuman kirjauksessa ja kyselyssä käytettävien dimensioiden tietolähde. Jos tietolähde määritetään, määritetyn tietolähteen mukautettuja dimensioita voidaan käyttää. Varaston näkyvyyssovellus voi käyttää dimensiomääritystä mukautettujen dimensioiden yhdistämiseen yleisiin oletusdimensioihin. Jos dimensionDataSource-arvoa ei ole määritetty, kyselyissä voi käyttää vain yleisiä perusdimensioita.
dimensions Dynaaminen avain- ja arvopari. Arvot yhdistetään joihinkin Supply Chain Managementin dimensioihin. Lisäksi voidaan kuitenkin lisätä myös mukautettuja dimensioita (kuten Lähde) ilmaisemaan, tuleeko tapahtuma Supply Chain Managementista vai ulkoisesta järjestelmästä.

Huomautus

Jos tietojen osiosäännöksi on määritetty Tuotetunnuksen mukaan, siteId ja locationId ovat valinnaisia dimensioita. Muussa tapauksessa ne ovat pakollisia dimensioita. Tämä sääntö koskee myös kohdistusta, alustavaa varausta ja muutosaikataulun ohjelmointirajapintaa.

Seuraavissa aliosissa on esimerkkejä näiden ohjelmointirajapintojen käytöstä.

Yhden käytettävissä olevan varastosaldon muutostapahtuman luominen

Tämä ohjelmointirajapinta luo yhden käytettävissä olevan varastosaldon muutostapahtuman.

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,
            },
        },
    }

Seuraavassa esimerkissä on näytteen tekstisisältö. Tässä esimerkissä yrityksellä on myyntipistejärjestelmä, joka käsittelee myymälän tapahtumia ja näin ollen myös varastomuutoksia. Asiakas on palauttanut punaisen T-paidan myymälään. Muutoksen vuoksi kirjataan muutostapahtuma T-paita-tuotteelle. Tämä tapahtuma lisää T-paita-tuotteen määrää yhdellä.

{
    "id": "Test201",
    "organizationId": "usmf",
    "productId": "T-shirt",
    "dimensionDataSource": "pos",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "posMachineId": "0001",
        "colorId": "red"
    },
    "quantities": {
        "pos": {
            "inbound": 1
        }
    }
}

Seuraavassa esimerkissä on näytteen tekstisisältö ilman dimensionDataSource-arvoa. Tässä tapauksessa dimensions-parametri toimii perusdimensioina. Jos dimensionDataSource on määritetty, dimensions voi toimia joko tietolähdedimensioina tai perusdimensioina.

{
    "id": "Test202",
    "organizationId": "usmf",
    "productId": "T-shirt",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    },
    "quantities": {
        "pos": {
            "inbound": 1
        }
    }
}

Useiden muutostapahtumien luominen

Tämä ohjelmointirajapinta voi luoda muutostapahtumia samalla tavalla kuin yhden tapahtuman ohjelmointirajapinta. Ainoa ero on, että tällä ohjelmointirajapinnalla voidaan luoda useita tietueita samanaikaisesti. Näin ollen arvot Path ja Body ovat erilaiset. Tässä ohjelmointirajapinnassa Body tuottaa tietuematriisin. Tietueiden enimmäismäärä on 512. Näin ollen varastosaldon muutoksen joukkotoiminto-ohjelmointirajapinta voi tukea jopa 512:n muutostapahtuman tekemistä kerralla.

Esimerkiksi vähittäismyymälän myyntipisteen kone käsitteli seuraavat kaksi tapahtumaa:

  • Yksi palautustilaus yhdelle punaiselle T-paidalle
  • Yksi myyntitapahtuma kolmelle mustalle T-paidalle

Tässä tapauksessa molemmat varastopäivitykset voidaan sisällyttää ohjelmointirajapintakutsuun.

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

Seuraavassa esimerkissä on näytteen tekstisisältö.

[
    {
        "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 }
        }
    }
]

Käytettävissä olevien varastosaldomäärien määrittäminen tai ohittaminen

Set on-hand-ohjelmointirajapinta ohittaa määritetyn tuotteen nykyiset tiedot. Tätä toimintoa käytetään yleensä varaston inventointipäivitysten yhteydessä. Esimerkiksi päivittäisen varastoinventoinnin yhteydessä myymälässä saatetaan havaita, että punaisten T-paitojen todellinen varastosaldo on 100. Tämän vuoksi myyntipisteen saapuva määrä on päivitettävä arvoksi 100 siitä huolimatta, mikä edellinen määrä oli. Voit ohittaa aiemmin luodun arvon käyttämällä tätä ohjelmointirajapintaa.

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

Seuraavassa esimerkissä on näytteen tekstisisältö. Tämän ohjelmointirajapinnan toiminta eroaa aiemmin tässä artikkelissa kohdassa Käytettävissä olevan varastosaldon muutostapahtumien luominen kuvattujen ohjelmointirajapintojen toiminnasta. Tässä näytteessä T-paita-tuotteen määräksi määritetään 1.

[
    {
        "id": "Test204",
        "organizationId": "usmf",
        "productId": "T-shirt",
        "dimensionDataSource": "pos",
        "dimensions": {
            "SiteId": "1",
            "LocationId": "11",
            "posMachineId": "0001"
            "colorId": "red"
        },
        "quantities": {
            "pos": {
                "inbound": 100
            }
        }
    }
]

Varaustapahtumien luominen

Reserve-ohjelmointirajapinnan käyttäminen edellyttää varausominaisuuden ottamista käyttöön ja varausmääritysten tekemistä. Lisätietoja (myös tietovuosta ja esimerkkiskenaariosta) on kohdassa Varaston näkyvyyden varaukset.

Yhden varaustapahtuman luominen

Varauksia voidaan tehdä erilaisten tietolähdeasetusten perusteella. Voit määrittää tämän varaustyypin määrittämällä ensin tietolähteen dimensionDataSource-parametrissa. Määritä sitten dimensions-parametrissa dimensiot kohdetietolähteen dimensioasetusten mukaisesti.

Kun kutsut varausten ohjelmointirajapintaa, voit ohjata varausten vahvistamista määrittämällä ifCheckAvailForReserv-totuusarvoparametrin pyynnön tekstiosassa. True-arvo tarkoittaa, että vahvistus vaaditaan, ja False-arvo, että vahvistusta ei vaadita. Oletusarvona on True.

Jos haluat peruuttaa varauksen tai poistaa tiettyjen varastomäärien varauksen, määritä määräsi negatiivinen arvo ja ohita vahvistus määrittämällä ifCheckAvailForReserv-parametrin arvoksi False. Lisäksi on olemassa määritetty unreserve-ohjelmointirajapinta, joka tekee samat toiminnot. Erona on ainoastaan se, miten näitä kahta ohjelmointirajapintaa kutsutaan. On helpompi peruuttaa tietty varaustapahtuma käyttämällä tunnusta reservationId kuin unreserve-ohjelmointirajapintaa. Lisätietoja on Yhden varaustapahtuman varauksen poistaminen -osassa.

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,
    }

Seuraavassa esimerkissä on näytteen tekstisisältö.

{
    "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"
    }
}

Seuraavassa esimerkissä näytetään onnistunut vastaus.

{
    "reservationId": "RESERVATION_ID",
    "id": "ohre~id-822-232959-524",
    "processingStatus": "success",
    "message": "",
    "statusCode": 200
}

Useiden varaustapahtumien luominen

Tämä ohjelmointirajapinta on yhden tapahtuman ohjelmointirajapinnan joukkoversio.

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

Varaustapahtumien peruuttaminen

Unreserve-ohjelmointirajapinta toimii varaustapahtumien peruutustoimintona. Sen avulla voi peruuttaa varaustapahtuman, jonka reservationId on määrittänyt, tai vähentää varausmäärää.

Yhden varaustapahtuman peruuttaminen

Kun varaus luodaan, reservationId sisällytetään vastauksen tekstiin. Anna sama reservationId, jos haluat peruuttaa varauksen, ja sisällytä samat varauksen ohjelmointirajapintakutsussa käytetyt tunnukset organizationId, productId ja dimensions. Määritä lopuksi arvo OffsetQty, joka vastaa edellisestä varauksesta vapautettujen nimikkeiden määrää. Varaus voidaan varata kokonaan tai osittain määritetyn arvon OffsetQty mukaisesti. Jos esimerkiksi varattiin 100 yksikköä, voit määrittää arvoksi OffsetQty: 10, jolloin alkuperäisestä varausmäärästä poistetaan 10 varausta.

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
    }

Seuraavassa koodissa on esimerkki tekstisisällöstä.

{
    "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
}

Seuraavassa koodissa näytetään onnistuneen vastaustekstin esimerkki.

{
    "reservationId": "RESERVATION_ID",
    "totalInvalidOffsetQtyByReservId": 0,
    "id": "ohoe~id-823-11744-883",
    "processingStatus": "success",
    "message": "",
    "statusCode": 200
}

Muistiinpano

Jos vastaustekstissä OffsetQty on pienempi tai yhtä suuri kuin varausmäärä, processingStatus on success ja totalInvalidOffsetQtyByReservId on 0.

Jos OffsetQty on suurempi kuin varattu summa, processingStatus on partialSuccess ja totalInvalidOffsetQtyByReservId on arvon OffsetQty ja varatun summan välinen ero.

Jos varauksen määrä on esimerkiksi 10 ja kohdassa OffsetQty on arvo 12, totalInvalidOffsetQtyByReservId on 2.

Useiden varaustapahtumien peruuttaminen

Tämä ohjelmointirajapinta on yhden tapahtuman ohjelmointirajapinnan joukkoversio.

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

Varaustietojen puhdistaminen

Varaustietojen puhdistamisen ohjelmointirajapintaa käytetään historiallisten varaustietojen puhdistamisessa. Tekstiosan tulisi olla luettelo tietolähteistä. Jos luettelo on tyhjä, kaikki tietolähteet puhdistetaan.

Path:
    /api/environment/{environmentId}/onhand/reserve/resyncjob
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    [      
        "iv",
        "pos"
    ]

Käytettävissä olevan varastosaldon kysely

Query on-hand-ohjelmointirajapinnalla voit noutaa tuotteiden tämän hetkiset käytettävissä olevat varastosaldotiedot. Voit käyttää tätä ohjelmointirajapintaa aina, kun haluat tietää varaston määrän. Näin saattaa tapahtua esimerkiksi silloin, jos haluat tarkistaa tuotteen varastotasot sähköisen kaupankäynnin sivustossa tai tuotteen saatavuuden eri alueilla tai läheisissä myymälöissä ja varastoissa. Sovellusrajapinta tukee tällä hetkellä kyselyä, jossa on enintään 5000 yksittäistä nimikettä productID-arvon mukaan. Jokaisessa kyselyssä voi määrittää myös useita siteID- ja locationID-arvoja. Kun datan osiosäännöksi on määritetty sijainnin mukaan, enimmäisraja määritetään seuraavassa laskukaavoissa:

NumOf(SiteID) × NumOf(LocationID) <= 10 000.

Post-menetelmää käyttävä kysely

Kysely postitse -sovellusliittymä on käytettävissä kahdessa versiossa. Seuraavassa taulukossa kuvataan erot.

API-versio 1.0 API-versio 2.0
Vain yhden organisaatiotunnuksen kysely. Voi tehdä kyselyjä useista organisaatiotunnuksista.
Voi tehdä kyselyitä enintään 10 000:lle toimi- ja varastoyhdistelmälle. Voi tehdä kyselyitä yli 10 000:sta organisaation tunnusten, toimi sivustojen ja varastojen yhdistelmästä. Voit palauttaa tuloksia useilla sivuilla.

Seuraavissa alisivustoissa näytetään, kuinka kutakin API-versiota käytetään.

Kysely postitse API-versio 1.0

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,
    }

Tämän pyynnön tekstiosassa dimensionDataSource on valinnainen parametri. Jos sitä ei ole määritetty, sitä filters-parametria käytetään perusdimensioina.

Parametri returnNegative määrittää, sisältävätkö tulokset negatiivisia merkintöjä.

Sijainnin mukaan tallennettujen kyselytietojen kysely

Tämä osa on käytössä, kun tietojen osiosäännöksi määritetään Sijainnin mukaan.

  • organizationId -arvon tulee olla taulukko, joka sisältää tasan yhden arvon.
  • productId voi sisältää yhden arvon tai useita arvoja. Jos se on tyhjä matriisi, järjestelmä palauttaa kaikki tuotteet tietyille toimipaikoille ja sijainneille. Tässä tapauksessa siteId ja locationId eivät voi olla tyhjiä.
  • siteId ja locationId ovat käytössä osioinnissa. Varastosaldokysely-pyynnössä voi määrittää useita siteId- ja locationId-arvoja. Jos molemmat matriisit ovat tyhjiä, järjestelmä palauttaa kaikki toimipaikat ja sijainnit tietyille tuotteille. Tässä tapauksessa productId ei voi olla tyhjä.

groupByValues-parametria kannattaa käyttää tavalla, joka on yhdenmukainen indeksimäärityksen kanssa. Lisätietoja on kohdassa Käytettävissä olevan varaston hakemistomääritys.

Kyselytiedot tallennetaan tuotetunnusten mukaan

Tämä osa on käytössä, kun tietojen osiosäännöksi määritetään Tuotetunnuksen mukaan. Tässä tapauksessa tarvitaan kaksi filters-kenttää: organizationId, productId.

  • organizationId -arvon tulee olla taulukko, joka sisältää tasan yhden arvon.
  • productId -arvon tulee olla taulukko, joka sisältää vähintään yhden arvon.

Toisin kuin tallennettaessa tietoja sijainnin mukaan, jos et määritä arvoja siteId- ja locationId-arvoille, kunkin tuotetunnuksen varastotiedot kootaan kaikista sivustoista ja/tai sijainneista.

Huomautus

Jos olet ottanut käyttöön käytössä olevan muutoksen aikataulun ja ATP-ominaisuudet, kyselysi voi sisältää myös QueryATP Boolean-parametrin, joka määrittää, sisältävätkö kyselyn tulokset ATP-tietoja. Lisätietoja ja esimerkkejä on kohdassa Käytettävissä olevan varaston näkyvyyden muutosaikataulut ja luvattavissa olevat aikataulut.

Seuraavassa esimerkissä on näytteen tekstisisältö. Tämä osoittaa, että voit tehdä kyselyn varastosaldosta useissa sijainneissa (varastoissa).

{
    "dimensionDataSource": "pos",
    "filters": {
        "organizationId": ["usmf"],
        "productId": ["T-shirt"],
        "siteId": ["1"],
        "locationId": ["11","12","13"],
        "colorId": ["red"]
    },
    "groupByValues": ["colorId", "sizeId"],
    "returnNegative": true
}

Seuraavassa esimerkissä esitetään, miten kaikkia tuotteita kysellään tietyllä sivustolla ja tietyssä sijainnissa.

{
    "filters": {
        "organizationId": ["usmf"],
        "productId": [],
        "siteId": ["1"],
        "locationId": ["11"],
    },
    "groupByValues": ["colorId", "sizeId"],
    "returnNegative": true
}

Kysely postitse API-version 2.0 mukaan

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-version 2.0 pyyntömuoto muistuttaa versiota 1.0, mutta se tukee myös kahta valinnaista parametria, pageNumber pageSize ja näin järjestelmä voi jakaa yhden suuren tuloksen useisiin pienempiin tiedostoihin. Tulokset lajitellaan varaston mukaan (locationId), ja parametreja käytetään seuraavasti, kun tulokset jaetaan sivuille:

  • pageSize määrittää kullakin sivulla palautettujen varastojen (locationId arvojen) määrän.
  • pageNumber lisää palautetun sivun numero sen mukaan,

Tämän muodon pyyntö palauttaa käytettävissä olevan varaston tiedot varastonumerosta ({pageNumber} − 1) × {pageSize} sisältää seuraavien varastojen {pageSize} tiedot.

API-versio 2.0 vastaa asiakirjaan, joka käyttää seuraavaa rakennetta:

{
    Value: { # Response same as Api-Version=1.0 }
    nextLink: onhand/indexquery?pageNumber={pageNumber+1}&pageSize={pageSize}
}

Kun pyyntö saavuttaa viimeisen varaston (locationId), arvo nextLink on tyhjä merkkijono.

API-versio 2.0:n avulla voit myös määrittää pyyntöön useamman kuin yhden organisaatiotunnuksen. Jos haluat tehdä nämä tunnukset, sisällytä pyyntöasiakirjan suodattimeen organizationId pilkuilla erotettu luettelo organisaatiotunnuksista. Esimerkiksi. "organizationId": ["org1", "org2", "org3"]

Get-menetelmää käyttävä kysely

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]

Alla on get URL -esimerkki. Tämä get-pyyntö täsmälleen sama kuin aiemmin annettu post-näyte.

/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

Järjestelmä ei tue varastokyselyä useiden organisaatiotunnuksen avulla GET-menetelmällä.

Varastosaldon tarkka kysely

Varastosaldon tarkka kysely muistuttaa tavallisia varastosaldokyselyjä, mutta niissä voi määrittää yhdistämismäärityksen hierarkian toimipaikan ja sijainnin välille. Esimerkissä käsitellään seuraavia kahta toimipaikkaa:

  • Toimipaikka 1, joka on yhdistetty sijaintiin A
  • Toimipaikka 2, joka on yhdistetty sijaintiin B

Jos tavallisessa varastosaldokyselyssä määritetään "siteId": ["1","2"] ja "locationId": ["A","B"], Inventory Visibility tekee automaattisesti kyselyn tuloksista seuraavissa toimipaikoissa ja sijainneissa:

  • Toimipaikka 1, sijainti A
  • Toimipaikka 1, sijainti B
  • Toimipaikka 2, sijainti A
  • Toimipaikka 2, sijainti B

Tavallinen varastosaldokysely ei siis tunnista sitä, että sijainti A on vain toimipaikassa 1 ja sijainti B vain toimipaikassa 2. Tämän vuoksi se tekee tarpeettomia kyselyjä. Voit käyttää tätä hierarkkista yhdistämismääritystä varastosaldokyselyn avulla määrittämällä sijainnin yhdistämismääritykset kyselyn tekstiosaan. Tässä tapauksessa voit tehdä kyselyn ja vastaanottaa tulokset vain toimipaikasta 1, sijainnista A ja toimipaikasta 2, sijainnista B.

Tarkka kysely käytössä käyttäen kirjaamismenetelmää

Käytettävissä oleva täsmällinen kysely post-api:n mukaan on käytettävissä kahdessa versiossa. Seuraavassa taulukossa kuvataan erot.

API-versio 1.0 API-versio 2.0
Vain yhden organisaatiotunnuksen kysely. Voi tehdä kyselyjä useista organisaatiotunnuksista.

Käsillä oleva kysely postitse API-version 1.0 mukaan

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,
    }

Tämän pyynnön tekstiosassa dimensionDataSource on valinnainen parametri. Jos sitä ei ole määritetty, kohdan filters arvoa dimensions käytetään perusdimensioina. filters-parametrilla on neljä pakollista kenttää: organizationId, productId, dimensions ja values.

  • organizationId-kentän pitäisi sisältää vain yksi arvo, mutta se on silti matriisi.
  • productId voi sisältää yhden tai useampia arvoja. Jos se on tyhjä matriisi, kaikki tuotteet palautetaan.
  • dimensions-taulukossa vaaditaan siteId- ja locationId-arvoja jos ja vain jos tietojen osiosääntö on asetettu Sijainnin mukaan -arvoon. Tässä tapauksessa ne voivat näkyä muiden elementtien kanssa missä tahansa järjestyksessä.
  • values voi sisältää vähintään yhden erillisen arvojen monikon, joka vastaa kohdetta dimensions.

dimensions kohteessa filters lisätään automaattisesti kohteeseen groupByValues.

Parametri returnNegative määrittää, sisältävätkö tulokset negatiivisia merkintöjä.

Seuraavassa esimerkissä on näytteen tekstisisältö.

{
    "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
}

Seuraavassa esimerkissä esitetään, miten kaikista tuotteista tehdään kysely useissa sivustoissa ja sijainneissa.

{
    "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
}

Käsillä oleva kysely postitse API-version 2.0 mukaan

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-versio 2.0 eroaa versiosta 1.0 seuraavilla tavoilla:

  • Osassa filters on nyt kenttä keys kentän dimensions sijaan. Kenttä keys toimii kuten version dimensions 1.0 kenttä, mutta se voidaan nyt sisällyttää myös organizationId. Avaimet voi määrittää missä tahansa järjestyksessä.
  • Osa filters ei enää tue organizationId kenttää. Sen sijaan voit sisällyttää organizationId dimensioiden välillä keys kenttään ( keys: ["organizationId", "siteId", "locationId"]esimerkiksi) values ja määrittää organisaation tunnuksen arvot kentän vastaavaan kohtaan (esimerkiksi values: ["SCM_IV", "iv_contoso_site_1", "iv_contoso_location_1"]).

Muut kentät ovat identtiset API-version 1.0 kanssa.

Kyselyn tekeminen tuotehaulla

Seuraavia käytettävissä olevia kyselyohjelmointirajapintoja on parannettu tukemaan tuotehakua:

Huomautus

Kun kirjaat varaston näkyvyyskyselyn, jossa käytetään tuotehakua, käytä productSearch-pyyntöparametria (jossa on sisällä ProductAttributeQuery-objekti) löytääksesi tuotetunnuksen tai suodattaaksesi tuotetunnuksen mukaan. Uudemman ohjelmointirajapinnat eivät enää tue vanhempaa productid-pyyntöparametria pyyntötekstissä.

Edellytykset

Ennen kuin voit aloittaa tuotehaun ohjelmointirajapintoja, järjestelmäsi on täytettävä seuraavat vaatimukset:

  • Käytössä on oltava vähintään Dynamics 365 Supply Chain Managementin versio 10.0.36.
  • Vähintään varaston näkyvyyden version 1.2.2.54 on oltava asennettuna ja määritettynä kohdassa Varaston näkyvyyden asennus ja määritys kuvatulla tavalla.
  • Varaston näkyvyyden hakupalvelun on oltava asennettuna ja määritettynä kohdassa Varaston näkyvyyden määrittäminen kuvatulla tavalla.

Tuotehakusopimus

Tuotehakusopimus määrittelee säännöt viestinnälle tuotehaun ohjelmointirajapintojen kanssa. Se tarjoaa standardoidun tavan kuvata tuotehakuominaisuuksien ominaisuudet ja toimintatapa. Siten käyttäjät voivat ymmärtää varaston näkyvyyden ohjelmointirajapintoja, olla vuorovaikutuksessa niiden kanssa ja luoda niitä käyttäviä sovelluksia.

Seuraavassa esimerkissä on esimerkkisopimus.

{
    "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"
                    }
                ]
            }
        ]
    },
}

Seuraavassa taulukossa kuvataan sopimuksessa käytettävät kentät.

Kentän tunnus Kuvaus
logicalOperator Mahdolliset arvot ovat And ja Or. Tämän kentän avulla voit yhdistää useita ehtoja tai ehtoja ja alisuodattimia. Huomaa, että subFilters on tosiasiassa productFilter- tai attributeFilter-objekti. Siten sinulla voi olla subFilters-suodattimia subFilters-suodatinten sisällä.
conditionOperator Mahdolliset arvot ovat IsExactly, IsNot, Contains, DoesNotContain, BeginsWith, IsOneOf, GreaterEqual, LessEqual ja Between.
ProductFilter Tämän kentän avulla voit suodattaa tuotteita tuotteeseen liittyvien tietojen perusteella. Voit esimerkiksi vaihtaa arvon productName sopimuksessa arvoksi Company, itemNumber, productSearchName, productType, productName, productDescription, inventoryUnitSymbol, salesUnitSymbol tai purchaseUnitSymbol liiketoimintatarpeidesi mukaan.
AttributeFilter Tämän kentän avulla voit suodattaa tuotteita määritteisiin liittyvien tietojen perusteella.
attributeArea Mahdolliset arvot ovat ProductAttribute, DimensionAttribute ja 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,
    }

Seuraavassa esimerkissä on näytteen tekstisisältö.

{
    "productSearch": {
        "productFilter": {
            "conditions": [
                {
                    "conditionOperator": "contains",
                    "productName": [
                        "speaker cable"
                    ],
                },
            ],
        },
    },
    "returnNegative": true, 
    "filters": 
    {
        "organizationId": ["usmf"], 
        "siteId": ["1"], 
        "locationId": ["13"],
    },
    "groupByValues": ["colorid"],
}

Seuraavassa esimerkissä näytetään onnistunut vastaus.

[
    {
        "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,
    }

Seuraavassa esimerkissä on näytteen tekstisisältö.

{
    "productSearch": {
        "productFilter": {
            "conditions": [
                {
                    "conditionOperator": "contains",
                    "productName": [
                        "speaker cable"
                    ],
                },
            ],
        },
    },
    "filters": {
        "organizationId": ["usmf"],
        "dimensions": ["siteId", "locationId", "colorid"],
        "values" : [
            ["1", "13", "Black"],
        ]
    },
    "groupByValues": [],
    "returnNegative": true
}

Seuraavassa esimerkissä näytetään onnistunut vastaus.

[
    {
        "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
            }
        }
    }
]

Luvattavissa oleva määrä (ATP)

Voit määrittää varaston näkyvyyden sallimaan tulevien käytettävissä olevien muutosten ajoituksen ja ATP-määrien laskemisen. ATP on tuotteen määrä, joka on saatavilla ja joka voidaan luvata asiakkaalle seuraavalla kaudella. ATP-laskelman käyttö voi lisätä tilauksen täyttämiskykyä merkittävästi. Tietoja siitä, miten tämä ominaisuus otetaan käyttöön ja miten varaston näkyvyys otetaan käyttöön sen API-liittymän kautta ominaisuuden käytön jälkeen, on kohdassa Varaston näkyvyyden käytettävissä olevan varaston muutosaikataulut ja luvattavissa olevat määrät.

Varaus

Kohdistukseen liittyvät ohjelmointirajapinnat sijaitsevat kohdassa Varaston näkyvyyden kohdistus.