Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Note
Community-interessegrupper er nu flyttet fra Yammer til Microsoft Viva Engage. Hvis du vil deltage i et Viva Engage community og deltage i de seneste diskussioner, skal du udfylde formularen Anmodning om adgang til Finance and Operations Viva Engage Community og vælge det community, du vil deltage i.
Vigtig
Fra og med februar 2026 kan nye kunder ikke oprette projekter i Microsoft Dynamics livscyklustjenester for Microsoft Dynamics 365 Finance, Microsoft Dynamics 365 Human Resources, Microsoft Dynamics 365 Supply Chain Management og Microsoft Dynamics 365 Project Operations. Nye kunder skal i stedet bruge Power Platform Administration . Du kan få flere oplysninger under Frys oprettelse af lifecycle Services-projekter.
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 | Beskrivende tekst |
|---|---|---|
/api/environment/{environmentId}/onhand |
Bogfør | Oprette en ændringshændelse for disponibelt antal |
/api/environment/{environmentId}/onhand/bulk |
Bogfør | Oprette flere ændringshændelser |
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk |
Bogfør | Angive/tilsidesætte disponibelt antal |
/api/environment/{environmentId}/onhand/reserve |
Bogfør | Oprette en forhåndsreservationshændelse |
/api/environment/{environmentId}/onhand/reserve/bulk |
Bogfør | Oprette flere forhåndsreservationshændelser |
/api/environment/{environmentId}/onhand/unreserve |
Bogfør | Tilbagefør én forhåndsreservationshændelse |
/api/environment/{environmentId}/onhand/unreserve/bulk |
Bogfør | Tilbagefør flere forhåndsreservationshændelser |
/api/environment/{environmentId}/onhand/reserve/resyncjob |
Bogfør | Oprydning i reservationsdata |
/api/environment/{environmentId}/getJobProgress |
Hent | Hent status for udførelse af job |
/api/environment/{environmentId}/onhand/changeschedule |
Bogfør | Oprette én planlagt ændring af disponibelt antal |
/api/environment/{environmentId}/onhand/changeschedule/bulk |
Bogfør | Oprette flere ændringer med dato af disponibelt antal |
/api/environment/{environmentId}/onhand/indexquery |
Bogfør | 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 |
Bogfør | Nøjagtig forespørgsel ved hjælp af POST-metoden |
/api/environment/{environmentId}/allocation/allocate |
Bogfør | Oprette én fordelingshændelse |
/api/environment/{environmentId}/allocation/unallocate |
Bogfør | Oprette én ikke-fordelingshændelse |
/api/environment/{environmentId}/allocation/reallocate |
Bogfør | Oprette én omfordelingshændelse |
/api/environment/{environmentId}/allocation/consume |
Bogfør | Oprette én forbrugshændelse |
/api/environment/{environmentId}/allocation/query |
Bogfør | Resultat af forespørgselsfordeling |
/api/environment/{environmentId}/onhand/productsearch/indexquery |
Bogfør | Indsend indeksforespørgsel med produktsøgning |
/api/environment/{environmentId}/onhand/productsearch/exactquery |
Bogfør | Indsend nøjagtig forespørgsel med produktsøgning |
/api/environment/{environmentId}/transaction/adjustment/bulk |
Bogfør | Synkroniser ændringer i eksternt lager via synlighed af lager |
Note
Segmentet {environmentId} i stien er miljø-id'et for Microsoft Dynamics 365 Supply Chain Management. Dette id er det, der er angivet for Supply Chain Management i Microsoft Dynamics Lifecycle Services, ikke id'et for det Power Platform-miljø, der er knyttet til Supply Chain Management-miljøet.
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 dit Microsoft Entra-program. Du skal derefter bruge Microsoft Entra-tokenet til at hente adgangstokenet fra sikkerhedstjenesten.
Følg disse trin for at hente et sikkerhedstjenestetoken:
Log på Azure Portal, og brug den til at finde
clientIdværdierne ogclientSecretfor din Dynamics 365 Supply Chain Management-app.Hent et Microsoft Entra-token (
aadToken) ved at sende en HTTP-anmodning, der har følgende egenskaber:URL:
https://login.microsoftonline.com/${aadTenantId}/oauth2/v2.0/tokenMetode:
GETBrødtekst (formulardata):
Nøgle Værdi client_id ${aadAppId} client_secret ${aadAppSecret} grant_type client_credentials omfang 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default
Du bør 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": "${fno_environment_id}", "context_type": "finops-env" }Vær opmærksom på følgende punkter:
- Værdien
client_assertionskal være det Microsoft Entra-token (aadToken), du modtog i det forrige trin. - Værdien
contextskal være miljø-id'et for Supply Chain Management, hvor du vil installere 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:
https://securityservice.operations365.dynamics.com/tokenMetode:
POSTHTTP-header:
Nøgle Værdi Api-Version 1.0 Indholdstype program/json 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 }Note
Hvis du modtager et svar med statuskoden 307, skal du bruge værdien af headeren
Locationtil at sende tokenanmodningen til den nye URL-adresse igen. De fleste HTTP-biblioteker håndterer automatisk omdirigeringer.
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. |
Note
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. Få mere at vide i afsnittet Unreserve one reservation event .
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
}
Note
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"
]
Hvis oprydningsjobbet oprettes, returneres der et job-id i svaret, som kan bruges til at få status for udførelse af job.
Hent status for udførelse af job
Brug get job execution progress API'en til at få kørselsfremskridt for et job. Der kræves et job-id for at identificere jobbet.
Path:
/api/environment/{environmentId}/getJobProgress
Method:
Get
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Query(Url Parameters):
jobId
Her er et eksempel på en URL-adresse.
/api/environment/{environmentId}/getJobProgress?jobId=SomeJob:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
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 via post API er tilgængelig i to versioner. I følgende tabel beskrives forskellene.
| API version 1.0 | API version 2.0 |
|---|---|
| Der kan kun forespørge om ét organisations-id. | Der kan forespørge flere organisations-id'er. |
| Kan forespørge på op til 10.000 kombinationer af lokationer og lagre. | Kan forespørge mere end 10.000 kombinationer af organisations-id'er, websteder og lagre. Kan returnere resultater på flere sider. |
Følgende underafsnit viser, hvordan du bruger hver API-version.
Forespørgsel via POST 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.
-
organizationIdskal være en matrix, der indeholder nøjagtigt én værdi. -
productIdkan 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ørsiteIdoglocationIdikke være tomme. -
siteIdoglocationIdbruges til partitionering. Du kan angive mere end énsiteIdoglocationId-værdi i en Forespørgselsanmodning. Hvis begge matricer er tomme, vil systemet returnere alle steder og lokationer for de angivne produkter. Her børproductIdikke være tom.
Vi anbefaler, at du bruger parameteren groupByValues på en måde, der stemmer overens med din indekskonfiguration. Få mere at vide i Konfiguration af on-hand-indeks.
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.
-
organizationIdskal være en matrix, der indeholder nøjagtigt én værdi. -
productIdskal 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.
Note
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 via POST 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 det i version 1.0, men understøtter også to valgfri parametre: pageNumber og pageSize, som gør det muligt for systemet at opdele et enkelt stort resultat i flere mindre dokumenter. Resultaterne sorteres efter lager (locationId), og parametrene bruges på følgende måde til at opdele resultaterne på sider:
-
pageSizeetablerer antallet af lagre (locationIdværdier), der returneres på hver side. -
pageNumberbestemmer det sidetal, der returneres.
En anmodning om dette format returnerer lagerdata fra lagernummer ({pageNumber} − 1) × {pageSize} og indeholder data for de næste {pageSize}- lagre.
API version 2.0 svarer med 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 det sidste lager (locationId), er værdien nextLink en tom streng.
MED API version 2.0 kan du også angive mere end ét organisations-id i din anmodning. Det gør du ved at medtage en kommasepareret liste over organisations-id'er i organizationId filteret for dit anmodningsdokument. For eksempel "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 om lager over 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.
Nøjagtig forespørgsel lige ved hånden ved hjælp af postmetoden
Den nøjagtige forespørgsel via post-API er tilgængelig i to versioner. I følgende tabel beskrives forskellene.
| API version 1.0 | API version 2.0 |
|---|---|
| Der kan kun forespørge om ét organisations-id. | Der kan forespørge flere organisations-id'er. |
Forespørgsel om disponibel lagerbeholdning med post-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.
-
organizationIdskal kun indeholde én værdi, men det er stadig en matrix. -
productIdkan indeholde en eller flere værdier. Hvis det er en tom matrix, returneres alle produkter. - I matricen
dimensionsersiteIdoglocationIdpå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. -
valueskan 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
}
Forespørgsel om disponibel lagerbeholdning med post-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 adskiller sig fra version 1.0 på følgende måder:
- Sektionen
filtersindeholder nu etkeysfelt i stedet for etdimensionsfelt. Feltetkeysfungerer på samme måde som feltetdimensionsi version 1.0, men kan nu også indeholdeorganizationId. Du kan angive nøglerne i en vilkårlig rækkefølge. - Sektionen
filtersunderstøtter ikke længere feltetorganizationId. Du kan i stedet medtageorganizationIdblandt dimensionerne i feltetkeys(f.eks.keys: ["organizationId", "siteId", "locationId"]) og definere organisations-id-værdier på den tilsvarende placering i feltetvalues(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 nyere.
- 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 | Beskrivende tekst |
|---|---|
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.