Offentlige API-er for Inventory Visibility
Obs!
Azure Active Directory er nå Microsoft Entra ID. Mer informasjon
Denne artikkelen beskriver de offentlige API-ene som leveres av Lagersynlighet.
Den offentlige REST-API-en i tillegget for lagersynlighet viser flere spesifikke endepunkter for integrering. Det støtter fire hovedtyper for samhandling:
- Postering av beholdningsendringer i tillegget fra et eksternt system
- Angi eller overstyre lagerbeholdningsantall i tillegget fra et eksternt system
- Postering av reservasjonshendelser i tillegget fra et eksternt system
- Spørring etter gjeldende antall i beholdningen fra et eksternt system
Følgende tabell viser API-ene som er tilgjengelige for øyeblikket:
Bane | Metode | Beskrivelse |
---|---|---|
/api/environment/{environmentId}/onhand |
Publiser | Opprett én lagerendringshendelse |
/api/environment/{environmentId}/onhand/bulk |
Publiser | Opprett flere endringshendelser |
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk |
Publiser | Angi/overstyre lagerbeholdninger |
/api/environment/{environmentId}/onhand/reserve |
Publiser | Opprett én ikke-forpliktende reservasjonshendelse |
/api/environment/{environmentId}/onhand/reserve/bulk |
Publiser | Opprett flere ikke-forpliktende reservasjonshendelser |
/api/environment/{environmentId}/onhand/unreserve |
Publiser | Tilbakefør én ikke-forpliktende reservasjonshendelse |
/api/environment/{environmentId}/onhand/unreserve/bulk |
Publiser | Tilbakefør flere ikke-forpliktende reservasjonshendelser |
/api/environment/{environmentId}/onhand/reserve/resyncjob |
Publiser | Opprydding i reservasjonsdata |
/api/environment/{environmentId}/onhand/changeschedule |
Publiser | Opprett én planlagt lagerendring |
/api/environment/{environmentId}/onhand/changeschedule/bulk |
Publiser | Opprett flere lagerendringer med datoer |
/api/environment/{environmentId}/onhand/indexquery |
Publiser | Spørring ved å bruke posteringsmetoden (anbefalt) |
/api/environment/{environmentId}/onhand |
Hent | Spør ved å bruke hentemetoden |
/api/environment/{environmentId}/onhand/exactquery |
Publiser | Nøyaktig spørring ved å bruke posteringsmetoden |
/api/environment/{environmentId}/allocation/allocate |
Publiser | Opprett én tildelingshendelse |
/api/environment/{environmentId}/allocation/unallocate |
Publiser | Opprett én ikke-tilordnet-hendelse |
/api/environment/{environmentId}/allocation/reallocate |
Publiser | Opprett én hendelse for ny tildeling |
/api/environment/{environmentId}/allocation/consume |
Publiser | Opprett én konsumeringshendelse |
/api/environment/{environmentId}/allocation/query |
Publiser | Fordelingsresultat for spørring |
/api/environment/{environmentId}/onhand/productsearch/indexquery |
Publiser | Poster indeksspørring med produktsøk |
/api/environment/{environmentId}/onhand/productsearch/exactquery |
Publiser | Poster nøyaktig spørring med produktsøk |
Obs!
Delen {environmentId} av banen er miljø-IDen i Microsoft Dynamics Lifecycle Services.
Bulk-API-en kan returnere maksimalt 512 poster for hver forespørsel.
Godkjenning
Platformsikkerhetstokenet brukes til å kalle inn den offentlige API-en for lagersynlighet. Derfor må du generere et Microsoft Entra-token ved hjelp av Microsoft Entra-programmet. Du må deretter bruke Microsoft Entra-tokenet til å få tilgangstokenet fra sikkerhetstjenesten.
Hvis du vil hente et token for sikkerhetstjeneste, gjør du følgende:
Logg på Azure-portalen, og bruk den til å finne
clientId
- ogclientSecret
-verdiene for Dynamics 365 Supply Chain Management-appen.Hent et Microsoft Entra-token (
aadToken
) ved å sende en HTTP-forespørsel som har følgende egenskaper:URL-adresse:
https://login.microsoftonline.com/${aadTenantId}/oauth2/v2.0/token
Metode:
GET
Meldingstekst (skjemadata):
Nøkkel Verdi client_id ${aadAppId} client_secret ${aadAppSecret} grant_type client_credentials scope 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default
Du skal motta et Microsoft Entra-token (
aadToken
) som svar. Den skal ligne følgende eksempel.{ "token_type": "Bearer", "expires_in": "3599", "ext_expires_in": "3599", "access_token": "eyJ0eX...8WQ" }
Former en JavaScript Object Notation-forespørsel (JSON) som ligner på følgende eksempel.
{ "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" }
Merk følgende punkt:
- Verdien for
client_assertion
må være Microsoft Entra-tokenet (aadToken
) som du mottok i forrige trinn. - Verdien for
context
må være Lifecycle Services-miljø-ID-en der du vil implementere tillegget. - Angi de andre verdiene som vist i eksemplet.
- Verdien for
Hent et tilgangstoken (
access_token
) ved å sende en HTTP-forespørsel som har følgende egenskaper:-
URL-adresse:
https://securityservice.operations365.dynamics.com/token
-
Metode:
POST
-
HTTP-hode: Inkluder API-versjonen. (Nøkkelen er
Api-Version
, og verdien er1.0
.) - Meldingstekst: Ta med JSON-forespørselen du opprettet i forrige trinn.
Du skal motta et tilgangstoken (
access_token
) som svar. Du må bruke dette tokenet som bærertoken for å kalle opp lagersynlighets-API-en. Her er et eksempel.{ "access_token": "{Returned_Token}", "token_type": "bearer", "expires_in": 3600 }
-
URL-adresse:
Notat
Nettadressen https://securityservice.operations365.dynamics.com/token
er en generell nettadresse for sikkerhetstjenesten. Når du kaller opp nettadressen, er det første svaret et HTTP-omdirigert svar med statuskoden 307
i svartopptekstene, og en oppføring med nøkkelen Posisjon som inneholder målnettadressen for sikkerhetstjenesten. Nettadressen er i dette formatet: https://gw.{$geo}-il101.gateway.prod.island.powerapps.com/securityservice/token
. Hvis for eksempel miljøet ditt befinner seg i USA, kan nettadressen være https://gw.us-il101.gateway.prod.island.powerapps.com/securityservice/token
. Hvis 307-svarstatuskoden ikke er akseptabelt for deg, kan du konstruere den faktiske nettadressen manuelt i henhold til FinOps-miljølokasjonen. Den enkleste måten er å åpne https://gw.as-il101.gateway.prod.island.powerapps.com/securityservice/token
med nettleseren og deretter kopiere adressen i adresselinjen.
Opprett lagerendringshendelser
Det finnes to API-er for oppretting av lagerendringshendelser:
- Opprett én oppføring:
/api/environment/{environmentId}/onhand
- Opprett flere oppføringer:
/api/environment/{environmentId}/onhand/bulk
Tabellen nedenfor summerer betydningen av hvert felt i JSON-teksten.
Felt-ID | Beskrivelse |
---|---|
id |
En unik ID for den bestemte endringshendelsen. Hvis det forekommer en ny sending på grunn av en tjenestefeil, brukes denne ID-en til å sikre at samme hendelse ikke telles to ganger i systemet. |
organizationId |
Identifikatoren til organisasjonen som er koblet til hendelsen. Denne verdien tilordnes til en ID for organisasjon eller dataområde i Supply Chain Management. |
productId |
Identifikatoren for produktet. |
quantities |
Antallet som antall på lager må endres etter. Hvis for eksempel 10 nye bøker legges til på en hylle, vil denne verdien være quantities:{ shelf:{ received: 10 }} . Hvis tre bøker fjernes fra hyllen eller selges, vil denne verdien være quantities:{ shelf:{ sold: 3 }} . |
dimensionDataSource |
Datakilden for dimensjonene som brukes i posteringsendringshendelsen og -spørringen. Hvis du angir datakilden, kan du bruke de egendefinerte dimensjonene fra den angitte datakilden. Lagersynlighet kan bruke dimensjonskonfigurasjonen til å tilordne de egendefinerte dimensjonene til de generelle standarddimensjonene. Hvis ingen dimensionDataSource -verdi er angitt, kan du bare bruke de generelle basisdimensjonene i spørringene. |
dimensions |
Et dynamisk nøkkel/verdi-par. Verdiene er tilordnet til noen av dimensjonene i Supply Chain Management. Du kan imidlertid også legge til egendefinerte dimensjoner (for eksempel Kilde) for å angi om hendelsen kommer fra Supply Chain Management eller et eksternt system. |
Obs!
Hvis datapartisjonsregelen er angitt til Etter produkt-ID, siteId
og locationId
er valgfrie dimensjoner. Ellers er de nødvendige dimensjoner. Denne regelen gjelder også for APIer for tildeling, ikke-forpliktende og endringsplan.
Følgende del er eksempler som viser hvordan du bruker disse APIene.
Opprett én lagerendringshendelse
Denne API-en oppretter én enkelt lagerendringshendelse.
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,
},
},
}
Følgende eksempel viser eksempeltekstinnholdet. I dette eksemplet har firmaet et POS-system (salgssted) som behandler transaksjoner i butikk og dermed lagerendringer. Kunden har returnert en rød T-skjorte til butikken. For å reflektere endringer kan du postere en endringshendelse for produktet T-skjorte. Denne hendelsen vil øke antallet for produktet T-skjorte med 1.
{
"id": "Test201",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensionDataSource": "pos",
"dimensions": {
"siteId": "1",
"locationId": "11",
"posMachineId": "0001",
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 1
}
}
}
Følgende eksempel viser eksempeltekstinnholdet uten dimensionDataSource
. I dette tilfellet vil dimensions
være basisdimensjoner. Hvis dimensionDataSource
er angitt, kan dimensions
være enten datakildedimensjonene eller basisdimensjonene.
{
"id": "Test202",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensions": {
"siteId": "1",
"locationId": "11",
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 1
}
}
}
Opprett flere endringshendelser
Denne API-en kan opprette endringshendelser, på samme måten som API-en med enkelthendelser kan. Den eneste forskjellen er at denne API-en kan opprette flere poster samtidig. Derfor er verdiene Path
og Body
forskjellige. For denne API-en inneholder Body
en matrise med poster. Maksimalt antall oppføringer er 512. Derfor kan bulk-API-en for lagerbeholdningendring støtte opptil 512 endringshendelser om gangen.
En detaljhandelsbutikk POS-maskin behandlet for eksempel følgende to transaksjoner:
- En returordre med en rød T-skjorte
- En salgstransaksjon av tre sorte T-skjorter
I dette tilfellet kan du ta med begge lageroppdateringene i én API-samtale.
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,
},
},
},
...
]
Følgende eksempel viser eksempeltekstinnholdet.
[
{
"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 }
}
}
]
Angi/overstyre lagerbeholdninger
API-en Angi lagerbeholdning overstyrer de gjeldende dataene for det angitte produktet. Denne funksjonaliteten brukes vanligvis til å oppdatere lageropptelling. I løpet av den daglige lageropptellingen kan for eksempel en butikk finne ut at den faktiske lagerbeholdningen for en rød T-skjorte er 100. Derfor må det innkommende antallet i POS oppdateres til 100, uansett hva det forrige antallet var. Du kan bruke denne API-en til å overstyre den eksisterende verdien.
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,
},
...
]
Følgende eksempel viser eksempeltekstinnholdet. Virkemåten til denne API-en er forskjellig fra virkemåten til API-ene som er beskrevet i delen Opprett lagerendringshendelser tidligere i denne artikkelen. I dette eksemplet blir antallet for produktet T-skjorte angitt til 1.
[
{
"id": "Test204",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensionDataSource": "pos",
"dimensions": {
"SiteId": "1",
"LocationId": "11",
"posMachineId": "0001"
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 100
}
}
}
]
Opprett reservasjonshendelser
Hvis du vil bruke API-en Reserver, må du aktivere reservasjonsfunksjonen og fullføre reservasjonskonfigurasjonen. Hvis du vil ha mer informasjon (inkludert en dataflyt og et eksempelscenario), kan du se Lagersynlighet-reservasjoner.
Opprett én reservasjonshendelse
En reservering kan gjøres mot ulike datakildeinnstillinger. Hvis du vil konfigurere denne reserveringstypen, må du først angi datakilden i dimensionDataSource
parameteren. I parameteren dimensions
kan du deretter angi dimensjoner i henhold til dimensjonsinnstillingene i måldatakilden.
Når du kaller reservasjons-API, kan du styre reservasjonsvalideringen ved å angi den boolske ifCheckAvailForReserv
parameteren i forespørselsteksten. Verdien True
betyr at valideringen kreves, mens en verdi å False
betyr at valideringen ikke er nødvendig. Standardverdien er True
.
Hvis du vil tilbakeføre en reservering eller ikke reservere angitte lagerantall, setter du antallet til en negativ verdi og setter parameteren ifCheckAvailForReserv
til False
for å hoppe over valideringen. Det finnes også en dedikert API for opphevelse av reservasjon som gjør det samme. Forskjellen er bare i måten de to API-ene kalles opp på. Det er enklere å tilbakeføre en bestemt reservasjonshendelse ved å bruke reservationId
med API-en for opphevelse av reservasjon. Hvis du vil ha mer informasjon, kan du se delen Oppheve reservasjon av én reservasjonshendelse.
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,
}
Følgende eksempel viser eksempeltekstinnholdet.
{
"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"
}
}
Følgende eksempel viser et vellykket svar.
{
"reservationId": "RESERVATION_ID",
"id": "ohre~id-822-232959-524",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Opprett flere reservasjonshendelser
Denne API-en er en masseversjon av API-en for enkelthendelser.
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,
},
...
]
Tilbakefør reservasjonshendelser
API-en Opphev reservasjon fungerer som tilbakeføringsoperasjonen for Reservasjon-hendelser. Det brukes til å tilbakeføre en reservasjonshendelse som er angitt av reservationId
, eller til å redusere reserveringsantallet.
Tilbakefør én reservasjonshendelse
Når en reservasjon opprettes, blir en reservationId
tatt med i svarteksten. Du må angi samme reservationId
for å avbryte reservasjonen og ta med samme organizationId
, productId
og dimensions
som brukes for reservasjons-API-oppkallet. Til slutt angir du en OffsetQty
-verdi som representerer antall varer som skal frigjøres fra forrige reservasjon. En reservasjon kan enten tilbakeføres fullstendig eller delvis, avhengig av angitt OffsetQty
. Hvis for eksempel 100 enheter med varer er reservert, kan du angi OffsetQty: 10
for å oppheve reservasjonen av 10 av den opprinnelige reserverte mengden.
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
}
Følgende kode viser et eksempel på tekstinnhold.
{
"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
}
Følgende kode viser et eksempel på en vellykket svartekst.
{
"reservationId": "RESERVATION_ID",
"totalInvalidOffsetQtyByReservId": 0,
"id": "ohoe~id-823-11744-883",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Notat
Når OffsetQty
er mindre enn eller lik reservasjonsmengden i svarteksten, blir processingStatus
"success" og totalInvalidOffsetQtyByReservId
0.
Hvis OffsetQty
er større enn den reserverte mengden, blir processingStatus
"partialSuccess" og totalInvalidOffsetQtyByReservId
differansen mellom OffsetQty
og den reserverte mengden.
Hvis reservasjonen for eksempel har et antall på 10 og OffsetQty
har verdien 12, blir totalInvalidOffsetQtyByReservId
2.
Tilbakefør flere reservasjonshendelser
Denne API-en er en masseversjon av API-en for enkelthendelser.
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
}
...
]
Opprydding i reservasjonsdata
API-en for opprydding i reservasjonsdata brukes til å rydde opp i historiske reservasjonsdata. Brødteksten skal være en liste over datakilder. Hvis listen er tom, vil alle datakilder bli ryddet opp.
Path:
/api/environment/{environmentId}/onhand/reserve/resyncjob
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
"iv",
"pos"
]
Spør om beholdning
Bruk API-en Spør om beholdning til å hente gjeldende lagerbeholdningsdata for produktene dine. Du kan bruke denne API-en hver gang du må vite beholdningen, for eksempel når du vil gå gjennom produktbeholdningsnivåene på webområdet for e-handel, eller når du vil kontrollere produkttilgjengeligheten i alle regioner eller i butikker og lagre i nærheten. API støtter for øyeblikket spørringer på opptil 5000 individuelle varer etter productID
-verdi. Flere siteID
- og locationID
-verdier kan også angis i hver spørring. Når datapartisjonsregelen er angitt til Etter lokasjon, defineres maksimumsgrensen ved følgende ligning:
NumOf(SiteID) × NumOf (LocationID) <= 10 000.
Spør ved å bruke posteringsmetoden
Spørringen etter posterings-API er tilgjengelig i to versjoner. Tabellen nedenfor viser forskjellene.
API versjon 1.0 | API versjon 2.0 |
---|---|
Kan bare spørre på én organisasjons-ID. | Kan utføre spørringer for flere organisasjons-IDer. |
Kan utføre spørringer på opptil 10 000 kombinasjoner av områder og lagre. | Kan utføre spørringer for flere enn 10 000 kombinasjoner av organisasjons-IDer, områder og lagre. Kan returnere resultater på flere sider. |
De følgende sekundære punktene viser hvordan du bruker hver API-versjon.
Spørring etter posterings-API versjon 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,
}
I hoveddelen av denne forespørselen er dimensionDataSource
en valgfri parameter. Hvis den ikke er definert, behandles filters
som basisdimensjoner.
Parameteren returnNegative
styrer om resultatene inneholder negative oppføringer.
Spør på data som er lagret etter lokasjon
Denne delen gjelder når datapartisjonsregelen er angitt til Etter lokasjon.
-
organizationId
bør være en matrise som inneholder nøyaktig én verdi. -
productId
kan inneholde én eller flere verdier. Hvis det er en tom matrise, vil systemet returnere alle produktene for de spesifikke nettstedene og plasseringene. I dette tilfellet måsiteId
oglocationId
ikke være tomme. -
siteId
oglocationId
brukes for partisjonering. Du kan angi mer enn énsiteId
oglocationId
verdi i en forespørsel om lagerbeholdning. Hvis begge matriser er tomme, vil systemet returnere alle nettstedene og plasseringene for de angitte produktene. I dette tilfellet måproductId
ikke være tom.
Vi anbefaler at du bruker groupByValues
-parameteren på en måte som samsvarer med indekskonfigurasjonen. Hvis du vil ha mer informasjon, kan du se Beholdningsindekskonfigurasjon.
Spørre lagrede data etter produkt-ID
Denne delen gjelder når datapartisjonsregelen er angitt til Etter produkt-ID. I dette tilfellet kreves to filters
-felt: organizationId
, productId
.
-
organizationId
bør være en matrise som inneholder nøyaktig én verdi. -
productId
bør være en matrise med minst én verdi.
I motsetning til ved lagring av data etter lokasjon vil lagerinformasjon for hver produkt-ID samles opp på tvers av alle områder og/eller lokasjoner hvis du ikke angir verdier for siteId
og locationId
.
Obs!
Hvis du har aktivert endringsplanen for lagerbeholdning og ATP-funksjoner (available-to-promise), kan spørringen også omfatte den boolske QueryATP
-parameteren, som styrer om resultatet av spørringen omfatter ATP-informasjon. Hvis du vil ha mer informasjon og flere eksempler, kan du se Tidsplaner for lagerendringer i Lagersynlighet og leveringskapasitet.
Følgende eksempel viser eksempeltekstinnholdet. Det viser at du kan spørre i lagerbeholdningen fra flere lokasjoner (lagre).
{
"dimensionDataSource": "pos",
"filters": {
"organizationId": ["usmf"],
"productId": ["T-shirt"],
"siteId": ["1"],
"locationId": ["11","12","13"],
"colorId": ["red"]
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Eksemplet nedenfor viser hvordan du spør på alle produkter på et bestemt område og sted.
{
"filters": {
"organizationId": ["usmf"],
"productId": [],
"siteId": ["1"],
"locationId": ["11"],
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Spørring etter posterings-API versjon 2.0
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
Forespørselsformatet for API versjon 2.0 ligner på versjon 1.0, men støtter også to valgfrie parametere: pageNumber
pageSize
og gjør det mulig for systemet å dele et enkelt stort resultat i flere mindre dokumenter. Resultatene sorteres etter lager (locationId
), og parameterne brukes på følgende måte for å dele resultatene inn i sider:
-
pageSize
etablerer antallet lagre (locationId
verdier) som returneres på hver side. -
pageNumber
etablerer sidetallet som returneres.
Forespørsel om dette formatet returnerer lagerbeholdningsdata fra lagernummer({pageNumber} − 1) × {pageSize} og inneholder data for de neste {pageSize} lagrene.
API versjon 2.0 svarer med et dokument som bruker følgende struktur:
{
Value: { # Response same as Api-Version=1.0 }
nextLink: onhand/indexquery?pageNumber={pageNumber+1}&pageSize={pageSize}
}
Når forespørselen når det siste lageret (locationId
), er nextLink
verdien en tom streng.
MED API versjon 2.0 kan du også angi mer enn én organisasjons-ID i forespørselen. Dette gjør du ved å ta med en kommaseparert liste over organisasjons-IDer i filteret for forespørselsdokumentet organizationId
. Dette kan for eksempel være et eksempel "organizationId": ["org1", "org2", "org3"]
.
Spør ved å bruke hentemetoden
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]
Her er et eksempel på henting av en nettadresse. Denne hentforespørselen er nøyaktig den samme som posteringseksemplet som ble angitt tidligere.
/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
Systemet støtter ikke spørringer av lagerbeholdning over flere organisasjons-IDer med GET-metoden.
Nøyaktig spørringsforespørsel om beholdning
Nøyaktig spørringsforespørsel om beholdning ligner vanlige lagerbeholdningsspørringer, men de lar deg angi et tilordningshierarki mellom et område og en lokasjon. Du har for eksempel følgende to områder:
- Område 1, som er tilordnet til lokasjon A
- Område 2, som er tilordnet til lokasjon B
For en vanlig beholdningsspørring, hvis du angir "siteId": ["1","2"]
og "locationId": ["A","B"]
, vil lagersynlighet automatisk spørre etter resultatet for følgende områder og lokasjoner:
- Område 1, plassering A
- Område 1, plassering B
- Område 2, plassering A
- Område 2, plassering B
Som du ser, gjenkjenner ikke den vanlige lagerbeholdning at lokasjon A bare finnes i område 1, og lokasjon B finnes bare i område 2. Derfor gjør det overflødige spørringer. For å legge til rette for denne hierarkiske tilordningen, kan du bruke en nøyaktig spørring på lager og angi lokasjonstilordningene i spørringsteksten. I dette tilfellet vil du utføre spørringer og motta resultater for område 1, sted A og område 2, lokasjon B.
Nøyaktig spørring på lager ved hjelp av posteringsmetoden
Den nøyaktige spørringen etter posterings-API er tilgjengelig i to versjoner. Tabellen nedenfor viser forskjellene.
API versjon 1.0 | API versjon 2.0 |
---|---|
Kan bare spørre på én organisasjons-ID. | Kan utføre spørringer for flere organisasjons-IDer. |
Nøyaktig spørring på lager ved hjelp av postering av API versjon 1.0
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,
}
I hoveddelen av denne forespørselen er dimensionDataSource
en valgfri parameter. Hvis den ikke er definert, behandles dimensions
i filters
som basisdimensjoner. Det finnes fire obligatoriske felt for filters
: organizationId
, productId
, dimensions
og values
.
-
organizationId
skal bare inneholde én verdi, men den er likevel en matrise. -
productId
kan inneholde én eller flere verdier. Hvis den er en tom matrise, vil alle produkter bli returnert. - I matrisen
dimensions
ersiteId
oglocationId
obligatoriske hvis og bare hvis datapartisjonsregelen er satt til Etter lokasjon. I dette tilfellet kan de vises med andre elementer i hvilken som helst rekkefølge. -
values
kan inneholde én eller flere atskilte tupler med verdier som tilsvarerdimensions
.
dimensions
i filters
vil automatisk bli lagt til i groupByValues
.
Parameteren returnNegative
styrer om resultatene inneholder negative oppføringer.
Følgende eksempel viser eksempeltekstinnholdet.
{
"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
}
Eksemplet nedenfor viser hvordan du spør på alle produkter i flere områder og lokasjoner.
{
"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
}
Nøyaktig spørring på lager ved å postere API versjon 2.0
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 versjon 2.0 er forskjellig fra versjon 1.0 på følgende måter:
- Delen
filters
har nå et feltkeys
i stedet for etdimensions
felt. Feltetkeys
fungerer som feltet idimensions
versjon 1.0, men kan nå også inkludere.organizationId
Du kan angi nøklene i hvilken som helst rekkefølge. - Delen
filters
støtter ikke lengerorganizationId
feltet. I stedet kan du inkludereorganizationId
keys
blant dimensjonene i feltet (for eksempel),keys: ["organizationId", "siteId", "locationId"]
) og definere verdier for organisasjons-ID på samsvarende posisjon ivalues
feltet (for eksempel.values: ["SCM_IV", "iv_contoso_site_1", "iv_contoso_location_1"]
).
Andre felt er identiske med API-versjon 1.0.
Spørring med produktsøk
Følgende API-er for beholdningsspørring er forbedret for å støtte produktsøk:
Merknad
Når du posterer en Lagersynlighet-spørring som bruker produktsøk, bruker du forespørselsparameteren productSearch
(som inneholder et ProductAttributeQuery
-objekt) til å finne eller filtrere etter produkt-ID. De nyere API-ene støtter ikke lenger den eldre forespørselsparameteren productid
i forespørselsteksten.
Forutsetninger
Før du kan begynne å bruke API-ene for produktsøk, må systemet oppfylle følgende krav:
- Du må kjøre Dynamics 365 Supply Chain Management 10.0.36 eller nyere.
- Lagersynlighet versjon 1.2.2.54 eller nyere må være installert og definert som beskrevet i Installere og definere Lagersynlighet.
- Søketjenesten Lagersynlighet må være installert og definert som beskrevet i Definer produktsøk for Lagersynlighet.
Kontrakt for produktsøk
Kontrakten for produktsøk definerer reglene for kommunikasjon med API-ene for produktsøk. Den gir en standardisert måte å beskrive funksjonene og virkemåten til produktsøkefunksjonene på. Brukere kan derfor lettere forstå, samhandle med og bygge programmer som bruker API-ene for lagersynlighet.
Følgende eksempel viser en eksempelkontrakt.
{
"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"
}
]
}
]
},
}
Følgende tabell beskriver feltene som brukes i kontrakten.
Felt-ID | Beskrivelse |
---|---|
logicalOperator |
De mulige verdiene er And og Or . Bruk dette feltet til å koble sammen flere betingelser eller betingelser og delfiltre. Merk at subFilters faktisk er et productFilter - eller attributeFilter -objekt. Du kan derfor ha subFilters i subFilters . |
conditionOperator |
De mulige verdiene er IsExactly , IsNot , Contains , DoesNotContain , BeginsWith , IsOneOf , GreaterEqual , LessEqual og Between . |
ProductFilter |
Bruk dette feltet til å filtrere produkter etter produktrelatert informasjon. Du kan for eksempel endre productName i kontrakten til Company , itemNumber , productSearchName , productType , productName , productDescription , inventoryUnitSymbol , salesUnitSymbol eller purchaseUnitSymbol for å tilpasse dette etter forretningsbehovene. |
AttributeFilter |
Bruk dette feltet til å filtrere produkter etter attributtrelatert informasjon. |
attributeArea |
De mulige verdiene er ProductAttribute , DimensionAttribute og BatchAttribute . |
Spørring med produktsøk
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,
}
Følgende eksempel viser eksempeltekstinnholdet.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"returnNegative": true,
"filters":
{
"organizationId": ["usmf"],
"siteId": ["1"],
"locationId": ["13"],
},
"groupByValues": ["colorid"],
}
Følgende eksempel viser et vellykket svar.
[
{
"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
}
}
}
]
Nøyaktig spørring med produktsøk
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,
}
Følgende eksempel viser eksempeltekstinnholdet.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"filters": {
"organizationId": ["usmf"],
"dimensions": ["siteId", "locationId", "colorid"],
"values" : [
["1", "13", "Black"],
]
},
"groupByValues": [],
"returnNegative": true
}
Følgende eksempel viser et vellykket svar.
[
{
"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
}
}
}
]
Tilgjengelig for ordre
Du kan konfigurere Lagersynlighet slik at du kan planlegge fremtidige endringer i lagerbeholdningen og beregne ATP-antall. ATP er antallet av en vare som er tilgjengelig og kan loves til en kunde i løpet av den neste perioden. Bruk av ATP-beregningen kan øke kapasiteten for innfrielse av bestillinger betydelig. Hvis du vil ha informasjon om hvordan du aktiverer denne funksjonen, og hvordan du samhandler med Lagersynlighet via API-en etter at funksjonen er aktivert, kan du se Tidsplaner for lagerendringer i Lagersynlighet og leveringskapasitet.
Tilordning
Tildelingsrelaterte API-er finnes i lagersynlighetstilordning.