Offentlige API'er til Lagersynlighed
Bemærk
Azure Active Directory er nu Microsoft Entra ID. Få mere at vide
Denne artikel beskriver de offentlige API'er, der leveres via Lagersynlighed.
Den offentlige REST-API til tilføjelsesprogrammet Lagersynlighed viser flere specifikke slutpunkter for integration. Det understøtter fire overordnede interaktionstyper:
- Bogføring af ændret lagerbeholdning i tilføjelsesprogrammet fra et eksternt system
- Angive eller tilsidesætte antal for disponibel lagerbeholdningl i tilføjelsesprogrammet fra et eksternt system
- Bogføring af reservationshændelser i tilføjelsesprogrammet fra et eksternt system
- Forespørgsel om aktuelle disponible lagerantal fra et eksternt system
I følgende tabel vises de API'er, der er tilgængelige i øjeblikket:
Sti | Metode | Betegnelse |
---|---|---|
/api/environment/{environmentId}/onhand |
Slå op | Oprette en ændringshændelse for disponibelt antal |
/api/environment/{environmentId}/onhand/bulk |
Slå op | Oprette flere ændringshændelser |
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk |
Slå op | Angive/tilsidesætte disponibelt antal |
/api/environment/{environmentId}/onhand/reserve |
Slå op | Oprette en forhåndsreservationshændelse |
/api/environment/{environmentId}/onhand/reserve/bulk |
Slå op | Oprette flere forhåndsreservationshændelser |
/api/environment/{environmentId}/onhand/unreserve |
Slå op | Tilbagefør én forhåndsreservationshændelse |
/api/environment/{environmentId}/onhand/unreserve/bulk |
Slå op | Tilbagefør flere forhåndsreservationshændelser |
/api/environment/{environmentId}/onhand/reserve/resyncjob |
Slå op | Oprydning i reservationsdata |
/api/environment/{environmentId}/onhand/changeschedule |
Slå op | Oprette én planlagt ændring af disponibelt antal |
/api/environment/{environmentId}/onhand/changeschedule/bulk |
Slå op | Oprette flere ændringer med dato af disponibelt antal |
/api/environment/{environmentId}/onhand/indexquery |
Slå op | Forespørgsel ved hjælp af post-metoden (anbefalet) |
/api/environment/{environmentId}/onhand |
Hent | Forespørgsel ved hjælp af hentningsmetoden |
/api/environment/{environmentId}/onhand/exactquery |
Slå op | Nøjagtig forespørgsel ved hjælp af POST-metoden |
/api/environment/{environmentId}/allocation/allocate |
Slå op | Oprette én fordelingshændelse |
/api/environment/{environmentId}/allocation/unallocate |
Slå op | Oprette én ikke-fordelingshændelse |
/api/environment/{environmentId}/allocation/reallocate |
Slå op | Oprette én omfordelingshændelse |
/api/environment/{environmentId}/allocation/consume |
Slå op | Oprette én forbrugshændelse |
/api/environment/{environmentId}/allocation/query |
Slå op | Resultat af forespørgselsfordeling |
/api/environment/{environmentId}/onhand/productsearch/indexquery |
Slå op | Indsend indeksforespørgsel med produktsøgning |
/api/environment/{environmentId}/onhand/productsearch/exactquery |
Slå op | Indsend nøjagtig forespørgsel med produktsøgning |
Bemærk
{environmentId}-delen af stien er miljø-id'et i Microsoft Dynamics Lifecycle Services.
Masse-API'en kan maksimalt returnere 512 poster for hver anmodning.
Godkendelse
Sikkerhedstoken for platformen bruges til at kalde det offentlige API for Lagersynlighed. Du skal derfor generere et Microsoft Entra-token ved hjælp af programmet Microsoft Entra. Du skal derefter bruge Microsoft Entra-tokenet til at hente adgangstoken fra sikkerhedstjenesten.
Hvis du vil hente et token for sikkerhedstjenesten, skal du følge disse trin.
Log på Azure-portalen, og brug den til at finde værdierne
clientId
ogclientSecret
for Dynamics 365 Supply Chain Management-appen.Hent et Microsoft Entra-token (
aadToken
) ved at sende en HTTP-anmodning, der har følgende egenskaber:URL-adresse:
https://login.microsoftonline.com/${aadTenantId}/oauth2/v2.0/token
Metode
GET
Brødtekst (formulardata):
Nøgle Værdi client_id ${aadAppId} client_secret ${aadAppSecret} grant_type client_credentials område 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default
Du skal modtage et Microsoft Entra-token (
aadToken
) som svar. Den skulle ligne følgende eksempel:{ "token_type": "Bearer", "expires_in": "3599", "ext_expires_in": "3599", "access_token": "eyJ0eX...8WQ" }
Formuler en JSON-anmodning (JavaScript Object Notation), der ligner 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" }
Vær opmærksom på følgende punkter:
- Værdien
client_assertion
skal være det Microsoft Entra-token (aadToken
), som du har modtaget i det forrige trin. - Værdien
context
skal være det Lifecycle Services miljø-id, hvor du vil implementere tilføjelsesprogrammet. - Angiv alle de andre værdier som vist i eksemplet.
- Værdien
Hent et adgangstoken (
access_token
) ved at sende en HTTP-anmodning, der har følgende egenskaber:-
URL-adresse:
https://securityservice.operations365.dynamics.com/token
-
Metode
POST
-
HTTP-overskrift: Medtag API-versionen. (Nøglen er
Api-Version
, og værdien er1.0
). - Brødtekst: Medtag den JSON-anmodning, du oprettede i det forrige trin.
Du skal modtage et adgangstoken (
access_token
) som svar. Du skal bruge dette token som ihændehavertoken for at kalde API'et for Lagersynlighed. Her er et eksempel.{ "access_token": "{Returned_Token}", "token_type": "bearer", "expires_in": 3600 }
-
URL-adresse:
Note
URL-adressen https://securityservice.operations365.dynamics.com/token
er en generel URL-adresse til sikkerhedstjenesten. Når du ringer til URL-adressen, er det første svar et http-url-svar med statuskoden 307
i svarhovederne og en post med nøglen "Lokalitet", der indeholder URL-adressen til målet for sikkerhedstjenesten. URL-adressen er i dette format: https://gw.{$geo}-il101.gateway.prod.island.powerapps.com/securityservice/token
. Hvis dit miljø f.eks. findes i USA-geo, kan URL-adressen være https://gw.us-il101.gateway.prod.island.powerapps.com/securityservice/token
. Hvis koden for svarstatus 307 ikke er acceptabel for dig, kan du manuelt oprette den faktiske URL-adresse i overensstemmelse med FinOps-miljøplaceringen. Det bedste er at åbne https://gw.as-il101.gateway.prod.island.powerapps.com/securityservice/token
med din browser og kopiere adressen i adresselinjen.
Oprette ændringshændelser for disponibelt antal
Der findes to API'er til oprettelse af ændringshændelser for disponibelt antal:
- Oprette én post:
/api/environment/{environmentId}/onhand
- Oprette flere poster:
/api/environment/{environmentId}/onhand/bulk
I følgende tabel opsummeres betydningen af hvert felt i JSON-brødteksten.
Felt-id | Beskrivende tekst |
---|---|
id |
Et entydigt id for den specifikke ændringshændelse. Dette id bruges til at sikre, at hvis genafsendelse forekommer på grund af en servicefejl, vil hændelsen ikke blive talt med to gange i systemet. |
organizationId |
Identifikatoren for den organisation, der er knyttet til hændelsen. Denne værdi er tilknyttet et organisations-id eller et dataområde-id i Supply Chain Management. |
productId |
Id'et for produktet. |
quantities |
Det antal, som det disponible antal skal ændres med. Hvis der f.eks. føjes 10 nye bøger til en hylde, vil denne værdi være quantities:{ shelf:{ received: 10 }} . Hvis der fjernes tre bøger fra hylden eller de sælges, er denne værdi quantities:{ shelf:{ sold: 3 }} . |
dimensionDataSource |
Datakilden for de dimensioner, der bruges i bogføringens ændringshændelse og forespørgslen. Hvis du angiver datakilden, kan du bruge de brugerdefinerede dimensioner fra den angivne datakilde. Lagersynlighed kan bruge dimensionskonfigurationen til at knytte de brugerdefinerede dimensioner til de generelle standarddimensioner. Hvis der ingen værdi for dimensionDataSource er angivet, kan du kun bruge de generelle basisdimensioner i forespørgslerne. |
dimensions |
Et dynamisk nøgle/værdi-par. Værdierne knyttes til nogle af dimensionerne i Supply Chain Management. Du kan dog også tilføje brugerdefinerede dimensioner (f.eks. Kilde) for at angive, om hændelsen kommer fra Supply Chain Management eller et eksternt system. |
Bemærk
Hvis datapartitionsreglen er indstillet til Efter produkt-id, er siteId
og locationId
valgfrie dimensioner. Ellers er de påkrævede dimensioner. Denne regel gælder også for tildeling, forhåndsreservering og ændring af planlægnings-API'er.
Følgende undersektioner indeholder eksempler på, hvordan du kan bruge disse API'er.
Oprette en ændringshændelse for disponibelt antal
Denne API opretter en ændringshændelse for disponibelt antal.
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 er et eksempel på brødtekst. I dette eksempel har virksomheden et POS-system, der behandler transaktioner i butikken og derfor foretager lagerændringer. Kunden har returneret en rød T-shirt til din butik. Du kan gengive ændringen ved at bogføre en ændringshændelse for produktet T-shirt. Denne hændelse øger antallet for produktet T-shirt 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 er et eksempel på brødtekst uden dimensionDataSource
. I dette tilfælde vil dimensions
være basisdimensionerne. Hvis dimensionDataSource
er angivet, kan dimensions
enten være datakildedimensionerne eller basisdimensionerne.
{
"id": "Test202",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensions": {
"siteId": "1",
"locationId": "11",
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 1
}
}
}
Oprette flere ændringshændelser
Denne API kan oprette ændringshændelser på samme måde som enkelt-hændelses API kan. Den eneste forskel er, at denne API kan oprette flere poster samtidigt. Derfor er der forskel på Path
- og Body
-værdierne. For denne API leverer Body
en række af poster. Det maksimale antal poster er 512. Derfor kan masse-API til ændringsplan understøtte op til 512 ændringshændelser ad gangen.
En detailbutiks POS-maskine har f.eks. behandlet følgende to transaktioner:
- En returordre på én rød T-shirt
- En salgstransaktion med tre sort T-shirts
I dette tilfælde kan du medtage begge lageropdateringer i ét API-kald.
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 er et eksempel på brødtekst.
[
{
"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 }
}
}
]
Angive/tilsidesætte disponible antal
API'en for Konfigurer disponibelt antal tilsidesætter de aktuelle data for det angivne produkt. Denne funktion bruges typisk til opdatering af lageroptællinger. Ved den daglige lageroptælling kan en butik f.eks. finde ud af, at den faktiske beholdning for en rød T-shirt er 100. Derfor skal det indgående POS-antal opdateres til 100, uanset hvad det foregående antal var. Du kan bruge denne API til at tilsidesætte den eksisterende værdi.
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 er et eksempel på brødtekst. Funktionsmåden for denne API er forskellig fra funktionsmåden for de API'er, der er beskrevet i afsnittet Oprette ændringshændelser for disponibelt antal tidligere i denne artikel. I dette eksempel vil antallat for produktet T-shirt blive angivet til 1.
[
{
"id": "Test204",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensionDataSource": "pos",
"dimensions": {
"SiteId": "1",
"LocationId": "11",
"posMachineId": "0001"
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 100
}
}
}
]
Oprette reservationshændelser
Hvis du vil bruge API'en for Reservér, skal du aktivere reservationsfunktionen og fuldføre reservationskonfigurationen. Yderligere oplysninger (herunder en dataflow og eksempelscenario) finder du i Reservationer i Lagersynlighed.
Oprette én reservationshændelse
Der kan foretages en reservation i forhold til de forskellige datakildeindstillinger. Hvis du vil konfigurere denne reservationstype, skal du først angive datakilden i dimensionDataSource
-parameteren. Angiv derefter dimensionerne i forhold til dimensionsindstillingerne i måldatakilden i parameteren dimensions
.
Når du kalder reservations-API'en, kan du styre valideringen af reservationen ved at angive parameteren Boolesk ifCheckAvailForReserv
i brødteksten. Værdien True
betyder, at valideringen er påkrævet, mens værdien False
betyder, at valideringen ikke er nødvendig. Standardværdien er True
.
Hvis du vil tilbageføre en reservation eller ikke-reservere angivne lagerantal, skal du angive antallet til en negativ værdi og angive parameteren ifCheckAvailForReserv
til False
for at springe valideringen over. Der findes også en dedikeret API, der ikke reserverer, til at gøre det samme. Forskellen er kun, hvordan de to API'er kaldes. Det er lettere at tilbageføre en bestemt reservationshændelse ved at bruge reservationId
med API'en unreserve, der annullerer reservation. Du kan finde flere oplysninger i afsnittet Annullere reservation af én reservationshændelse.
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 er et eksempel på brødtekst.
{
"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"
}
}
I følgende eksempel vises et korrekt svar.
{
"reservationId": "RESERVATION_ID",
"id": "ohre~id-822-232959-524",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Oprette flere reservationshændelser
Denne API er en bulkversion af API'en for enkelthændelser.
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,
},
...
]
Tilbageføre reservationshændelser
API'en Unreserve fungerer som tilbageførselshandling for Reservation-hændelser. Den giver dig mulighed for at tilbageføre en reservationshændelse, der er angivet af reservationId
, for at mindske reservationsantallet.
Tilbagefør én reservationshændelse
Når der oprettes en reservation, medtages reservationId
i svarteksten. Du skal angive det samme reservationId
for at annullere reservationen og medtage det samme organizationId
, productId
og dimensions
, der bruges til API-kaldet af reservation. Endelig skal du angive en OffsetQty
-værdi, der angiver det antal varer, der skal frigøres fra den forrige reservation. En reservation kan enten tilbageføres helt eller delvist afhængigt af den angivne OffsetQty
. Hvis der f.eks. . er reserveret 100 vareenheder, kan du angive OffsetQty: 10
for at afreservere 10 af det oprindeligt reserverede antal.
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å brødtekstens indhold.
{
"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å et korrekt svarindhold.
{
"reservationId": "RESERVATION_ID",
"totalInvalidOffsetQtyByReservId": 0,
"id": "ohoe~id-823-11744-883",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Bemærk!
Når OffsetQty
i svaret er mindre end eller lig med reservationsantallet, vil processingStatus
være "success", og totalInvalidOffsetQtyByReservId
vil være 0.
Hvis OffsetQty
er større end det reserverede antal, vil processingStatus
være "partialSuccess", og totalInvalidOffsetQtyByReservId
vil være forskellen mellem OffsetQty
og det reserverede antal.
Hvis reservationen f.eks. har et antal på 10 og OffsetQty
har en værdi på 12, vil værdien af totalInvalidOffsetQtyByReservId
være 2.
Tilbagefør flere reservationshændelser
Denne API er en bulkversion af API'en for enkelthændelser.
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
}
...
]
Oprydning i reservationsdata
API'en rydde op i reservationsdata bruges til at rydde op i historiske reservationsdata. Kroppen skal være en liste over datakilder. Hvis listen er tom, vil alle datakilder blive ryddet op.
Path:
/api/environment/{environmentId}/onhand/reserve/resyncjob
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
"iv",
"pos"
]
Forespørg om disponibelt antal
Brug API'en Forespørg om disponibelt antal til at hente aktuelle data om disponibelt antal for dine produkter. Du kan bruge denne API, når du skal kende lageret, f.eks. hvornår du vil gennemse produktlagerniveauer på e-handelswebstedet, eller når du vil kontrollere, om produktet er tilgængeligt i flere områder eller i nærliggende butikker og lagersteder. API'en understøtter i øjeblikket forespørgsler på op til 5000 individuelle varer efter productID
-værdi. Der kan også angives flere siteID
- og locationID
-værdier i hver forespørgsel. Når datapartitionsreglen angives til Efter lokalitet, defineres maksimumgrænsen af følgende ligning:
NumOf (SiteID) × NumOf (LocationID) <= 10.000.
Forespørgsel ved hjælp af opslagsmetoden
Forespørgslen efter opslags-API er tilgængelig i to versioner. Forskellene skitseres i følgende tabel.
API version 1.0 | API-version 2.0 |
---|---|
Du kan kun forespørge på ét organisations-id. | Du kan forespørge på flere organisations-noget. |
Kan forespørge på op til 10.000 kombinationer af lokationer og lagersteder. | Kan forespørge på mere end 10.000 kombinationer af organisations-,lokations- og lagersteder. Kan returnere resultater på flere sider. |
Følgende undersektioner viser, hvordan du kan bruge hver enkelt API-version.
Forespørgsel efter opslag af API version 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 brødteksten i denne anmodning er dimensionDataSource
en valgfri parameter. Hvis den ikke er angivet, behandles filters
som basisdimensioner.
Parameteren returnNegative
bestemmer, om resultaterne indeholder negative poster.
Forespørge på data, der opbevares efter lokalitet
Dette afsnit gælder, når datapartitionsreglen er angivet til Efter lokalitet.
-
organizationId
skal være en matrix, der indeholder nøjagtigt én værdi. -
productId
kan indeholde en eller flere værdier. Hvis det er en tom matrix, vil systemet returnere alle produkter for de angivne steder og lokationer. Her børsiteId
oglocationId
ikke være tomme. -
siteId
oglocationId
bruges til partitionering. Du kan angive mere end énsiteId
oglocationId
-værdi i en Forespørgselsanmodning. Hvis begge matricer er tomme, vil systemet returnere alle steder og lokationer for de angivne produkter. Her børproductId
ikke være tom.
Vi anbefaler, at du bruger parameteren groupByValues
på en måde, der stemmer overens med din indekskonfiguration. Du kan få flere oplysninger i Tilgængelig indekskonfiguration.
Forespørge på data, der er gemt efter produkt-id
Dette afsnit gælder, når datapartitionsreglen er angivet til Efter produkt-id. I dette tilfælde skal der udfyldes to filters
-felter: organizationId
, productId
.
-
organizationId
skal være en matrix, der indeholder nøjagtigt én værdi. -
productId
skal være en matrix, der indeholder mindst én værdi.
I modsætning til når du gemmer data efter lokation, aggregeres lageroplysningerne for hvert produkt-id ikke på tværs af alle steder og/eller lokationer, hvis du ikke angiver værdier for siteId
og locationId
.
Bemærk
Hvis du har aktiveret funktionerne til ændringsplan for disponibelt antal og disponibel til tilsagn (DTT), kan forespørgslen også indeholde den booleske QueryATP
-parameter, der bestemmer, om forespørgselsresultaterne omfatter DTT-oplysninger. Du kan finde flere oplysninger og eksempler i Ændringsplaner for disponibelt antal og disponibel til tilsagn i lagersynlighed.
Følgende er et eksempel på brødtekst. Den viser, at du kan forespørge på den lagerbeholdning, der er på lager fra flere lokationer (lagersteder).
{
"dimensionDataSource": "pos",
"filters": {
"organizationId": ["usmf"],
"productId": ["T-shirt"],
"siteId": ["1"],
"locationId": ["11","12","13"],
"colorId": ["red"]
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
I følgende eksempel vises, hvordan du forespørger på alle produkter på en bestemt lokation og lokation.
{
"filters": {
"organizationId": ["usmf"],
"productId": [],
"siteId": ["1"],
"locationId": ["11"],
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Forespørgsel efter opslag af API version 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
Anmodningsformatet for API-version 2.0 ligner formatet for version 1.0, men understøtter også to valgfri parametre: pageNumber
pageSize
og giver systemet mulighed for at opdele et enkelt stort resultat i flere mindre dokumenter. Resultaterne sorteres efter lagersted (locationId
), og parametrene bruges på følgende måde til at opdele resultater i sider:
-
pageSize
opretter antallet af lagersteder (værdierlocationId
), der returneres på hver side. -
pageNumber
opretter det sidenummer, der returneres.
En anmodning om dette format returnerer data for den tilgængelige lagerbeholdning fra og med lagerstedsnummer({pageNumber} − 1× og {pageSize} medtager data for de næste {pageSize} lagersteder.
API version 2.0 svarer på et dokument, der bruger følgende struktur:
{
Value: { # Response same as Api-Version=1.0 }
nextLink: onhand/indexquery?pageNumber={pageNumber+1}&pageSize={pageSize}
}
Når anmodningen når til det sidste lagersted (locationId
), nextLink
er værdien en tom streng.
API version 2.0 giver dig også mulighed for at angive mere end ét organisations-id i anmodningen. Dette kan du gøre ved at medtage en kommasepareret liste over organisations-i filteret organizationId
for anmodningsdokumentet. f.eks. "organizationId": ["org1", "org2", "org3"]
.
Forespørgsel ved hjælp af hentningsmetoden
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å en URL-adresse. Denne anmodning er nøjagtigt den samme som det opslagseksempel, som blev angivet 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 understøtter ikke forespørgsler på lager via flere organisations-id'er med GET-metoden.
Forespørgsel om disponibel lagerbeholdning
Forespørgsler, der er nøjagtige for den findes, ligner almindelige forespørgsler på findes, men de giver dig mulighed for at angive et tilknytningshierarki mellem en lokation og en lokation. Du kan f.eks. have følgende to websteder:
- Websted 1, som er tilknyttet lokation A
- Websted 2, som er tilknyttet lokation B
Til en almindelig beholdningsforespørgsel skal du angive "siteId": ["1","2"]
og "locationId": ["A","B"]
, vil lagersynlighed automatisk forespørge på resultatet for følgende websteder og lokationer:
- Websted 1, lokation A
- Websted 1, lokation B
- Websted 2, lokation A
- Websted 2, lokation B
Som du kan se, anerkendes det i den almindelige forespørgsel ikke, at lokation A kun findes i websted 1, og lokation B findes kun i websted 2. Den foretager derfor overflødige forespørgsler. For at tilpasse denne hierarkiske tilknytning kan du bruge en præcis hierarkisk forespørgsel og angive lokalitetstilknytninger i forespørgselsteksten. I dette tilfælde forespørger og modtager du kun resultater for websted 1, lokation A og websted 2, lokation B.
Forespørgselsforespørgsel for den nøjagtige findes ved hjælp af opslagsmetoden
Den nøjagtige disponible forespørgsel efter opslags-API er tilgængelig i to versioner. Forskellene skitseres i følgende tabel.
API version 1.0 | API-version 2.0 |
---|---|
Du kan kun forespørge på ét organisations-id. | Du kan forespørge på flere organisations-noget. |
Den nøjagtige espspørgsel efter API version 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 brødteksten i denne anmodning er dimensionDataSource
en valgfri parameter. Hvis den ikke er angivet, behandles dimensions
i filters
som basisdimensioner. Der er fire obligatoriske felter til filters
: organizationId
, productId
, dimensions
og values
.
-
organizationId
skal kun indeholde én værdi, men det er stadig en matrix. -
productId
kan indeholde en eller flere værdier. Hvis det er en tom matrix, returneres alle produkter. - I matricen
dimensions
ersiteId
oglocationId
påkrævet, hvis og kun hvis datapartitionsreglen er angivet til Efter placering. I dette tilfælde vises de muligvis med andre elementer i vilkårlig rækkefølge. -
values
kan indeholde en eller flere specifikke tupler af værdier, der svarer tildimensions
.
dimensions
i filters
bliver automatisk føjet til groupByValues
.
Parameteren returnNegative
bestemmer, om resultaterne indeholder negative poster.
Følgende er et eksempel på brødtekst.
{
"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
}
I følgende eksempel vises, hvordan du forespørger på alle produkter på flere steder og lokationer.
{
"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
}
Den nøjagtige espspørgsel efter API-version 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 version 2.0 er forskellig fra version 1.0 på følgende måder:
- Området
filters
indeholder nu et feltkeys
i stedet for etdimensions
felt. Feltetkeys
fungerer på samme måde somdimensions
feltet i version 1.0, men det kan nu også medtagesorganizationId
. Du kan angive nøglerne i vilkårlig rækkefølge. - Området
filters
understøtter ikke længereorganizationId
feltet. I stedet kan du medtageorganizationId
keys
blandt dimensionerne i feltet (f.eks.keys: ["organizationId", "siteId", "locationId"]
.) og definere værdier for organisations-id på matchningspositionenvalues
i feltet (f.eks.values: ["SCM_IV", "iv_contoso_site_1", "iv_contoso_location_1"]
.).
Andre felter er identiske med API version 1.0.
Forespørgsel med produktsøgning
Følgende tilgængelige forespørgsels-API'er er forbedret for at understøtte produktsøgning:
Note
Når du sender en forespørgsel om lagersynlighed, der bruger produktsøgning, skal du bruge productSearch
-anmodningsparameteren (med et ProductAttributeQuery
-objekt indeni) til at finde eller filtrere efter produkt-id. De nyere API'er understøtter ikke længere den ældre productid
-anmodningsparameter i anmodningsteksten.
Forudsætninger
Før du kan begynde at bruge produktsøgnings-API'erne, skal dit system opfylde følgende krav:
- Du skal køre Dynamics 365 Supply Chain Management 10.0.36 eller senere.
- Lagersynlighed version 1.2.2.54 eller senere skal være installeret og konfigureret som beskrevet i Installere og konfigurere lagersynlighed.
- Søgetjenesten til lagersynlighed skal være installeret og konfigureret som beskrevet i Konfigurere produktsøgning til lagersynlighed.
Produktsøgekontrakt
Produktsøgekontrakt definerer reglerne for kommunikation med produktsøgnings-API'erne. Den giver en standardiseret måde at beskrive egenskaberne og funktionaliteten for produktsøgningsmulighederne. Derfor kan brugere lettere forstå, interagere med og bygge applikationer, der forbruger API'erne til lagersynlighed.
Følgende er et eksempel på en prøvekontrakt.
{
"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"
}
]
}
]
},
}
De felter, der bruges i kontrakten, er beskrevet i følgende tabel.
Felt-id | Betegnelse |
---|---|
logicalOperator |
De mulige værdier er And og Or . Brug dette felt til at forbinde flere betingelser eller betingelser og underfiltre. Bemærk, at subFilters faktisk er et productFilter - eller attributeFilter -objekt. Derfor kan du have subFilters inde i subFilters . |
conditionOperator |
De mulige værdier er IsExactly , IsNot , Contains , DoesNotContain , BeginsWith , IsOneOf , GreaterEqual , LessEqual og Between . |
ProductFilter |
Brug dette felt til at filtrere produkter efter produktrelaterede oplysninger. For eksempel kan du ændre productName i kontrakten til Company , itemNumber , productSearchName , productType , productName , productDescription , inventoryUnitSymbol , salesUnitSymbol eller purchaseUnitSymbol for at indpasse din virksomheds behov. |
AttributeFilter |
Brug dette felt til at filtrere produkter efter attributrelaterede oplysninger. |
attributeArea |
De mulige værdier er ProductAttribute , DimensionAttribute og BatchAttribute . |
Forespørgsel med produktsøgning
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 er et eksempel på brødtekst.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"returnNegative": true,
"filters":
{
"organizationId": ["usmf"],
"siteId": ["1"],
"locationId": ["13"],
},
"groupByValues": ["colorid"],
}
I følgende eksempel vises et korrekt 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øjagtig forespørgsel med produktsøgning
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 er et eksempel på brødtekst.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"filters": {
"organizationId": ["usmf"],
"dimensions": ["siteId", "locationId", "colorid"],
"values" : [
["1", "13", "Black"],
]
},
"groupByValues": [],
"returnNegative": true
}
I følgende eksempel vises et korrekt 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
}
}
}
]
Disponibel til tilsagn
Du kan konfigurere lagersynlighed, så du kan planlægge fremtidige ændringer af disponibelt antal og beregne DTT-mængder. DTT er antallet af en vare, der er tilgængelig og kan være lovet til en kunde i den næste periode. Brug af DTT-beregningen kan øge ordreopfyldningsfunktionaliteten væsentligt. Du kan få oplysninger om, hvordan du aktiverer denne funktion, og hvordan du bruger lagersynlighed via API'en, når funktionen er aktiveret, i Ændringsplaner for disponibelt antal og disponibel til tilsagn i lagersynlighed.
Tildeling
Fordelingsrelaterede API'er findes i Fordeling af lagersynlighed.