Offentliga API:er för Inventory Visibility
Obs
Azure Active Directory är nu Microsoft Entra ID. Läs mer
Denna artikel beskriver de allmänna API:er som anges i Lagersynlighet.
Det offentliga REST-API för ett av tilläggen för Lagersynlighet visar flera specifika slutpunkter för integreringen. Den stöder fyra huvudinteraktionstyper:
- Bokföring av ändringar för lagerbehållning i tillägget från ett externt system
- Ställa in eller åsidosätta lagerbehållningskvantiteter i tillägget från ett externt system
- Bokföra reservationsändringar i tillägget från ett externt system
- Fråga om aktuell behållning från ett externt system
I följande tabell finns de API:er som är tillgängliga i nuläget:
Sökväg | Metod | Beskrivning |
---|---|---|
/api/environment/{environmentId}/onhand |
Publicera | Skapa en engångs-ändringshändelse |
/api/environment/{environmentId}/onhand/bulk |
Publicera | Skapa flera ändringshändelser |
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk |
Publicera | Ställ in/åsidosätta lagerbehållning |
/api/environment/{environmentId}/onhand/reserve |
Publicera | Skapa en preliminär reservationshändelse |
/api/environment/{environmentId}/onhand/reserve/bulk |
Publicera | Skapa flera mjuka reservationshändelser |
/api/environment/{environmentId}/onhand/unreserve |
Publicera | Återför en preliminär reservationshändelse |
/api/environment/{environmentId}/onhand/unreserve/bulk |
Publicera | Återför flera mjuka reservationshändelser |
/api/environment/{environmentId}/onhand/reserve/resyncjob |
Publicera | Rensa reservationsdata |
/api/environment/{environmentId}/onhand/changeschedule |
Publicera | Skapa en schemalagd engångs-ändring |
/api/environment/{environmentId}/onhand/changeschedule/bulk |
Publicera | Skapa flera engångs-ändringar med datum |
/api/environment/{environmentId}/onhand/indexquery |
Publicera | Fråga genom att använda inläggsmetoden (rekommenderad) |
/api/environment/{environmentId}/onhand |
Hämta | Fråga genom att använda hämtningsmetoden |
/api/environment/{environmentId}/onhand/exactquery |
Publicera | Exakt fråga genom att använda inläggsmetoden |
/api/environment/{environmentId}/allocation/allocate |
Publicera | Skapa en allokerad händelse |
/api/environment/{environmentId}/allocation/unallocate |
Publicera | Skapa en ej allokerad händelse |
/api/environment/{environmentId}/allocation/reallocate |
Publicera | Skapa en ej omallokerad händelse |
/api/environment/{environmentId}/allocation/consume |
Publicera | Skapa en förbrukningshändelse |
/api/environment/{environmentId}/allocation/query |
Publicera | Resultat för frågeallokering |
/api/environment/{environmentId}/onhand/productsearch/indexquery |
Publicera | Lägg upp indexfråga med produktsökning |
/api/environment/{environmentId}/onhand/productsearch/exactquery |
Publicera | Lägg upp exakt fråga med produktsökning |
Obs
{environmentId} delen för vägen är miljö-ID är Microsoft Dynamics Lifecycle Services.
Bulk-API:t kan returnera maximalt 512 poster för varje begäran.
Autentisering
Säkerhetstoken för plattform används för att anropa det offentliga API:t Lagersynlighet. Därför måste du generera en Microsoft Entra token med hjälp av ditt Microsoft Entra program. Du måste sedan använda Microsoft Entra token för att få åtkomsttoken från säkerhetstjänsten.
Gör så här om du vill hämta en säkerhetstjänsttoken:
Logga in på Azure-portalen och använd den för att hitta värdena
clientId
ochclientSecret
för din Dynamics 365 Supply Chain Management-app.Hämta en Microsoft Entra-token (
aadToken
) genom att skicka en HTTP-begäran med följande egenskaper:URL:
https://login.microsoftonline.com/${aadTenantId}/oauth2/v2.0/token
Metod:
GET
Brödtext (formulärdata):
Nyckel Värde klient-ID ${aadAppId} client_secret ${aadAppSecret} grant_type client_credentials omfattning 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default
Du bör få en Microsoft Entra-token (
aadToken
) som svar. Det bör likna följande exempel:{ "token_type": "Bearer", "expires_in": "3599", "ext_expires_in": "3599", "access_token": "eyJ0eX...8WQ" }
Formulera en JSON-begäran (JavaScript Object Notation) som liknar följande exempel.
{ "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" }
Observera följande:
- Värdet för
client_assertion
måste vara den Microsoft Entra-token (aadToken
) som du fick i föregående steg. - Värdet
context
måste vara det Lifecycle Services miljö-ID där du vill distribuera tillägget. - Ställ in de andra värdena enligt exemplet.
- Värdet för
Hämta en åtkomsttoken (
access_token
) genom att skicka en HTTP-begäran med följande egenskaper:-
URL:
https://securityservice.operations365.dynamics.com/token
-
Metod:
POST
-
HTTP-sidhuvud: Inkludera API-versionen. (Nyckeln är
Api-Version
, och värdet är1.0
.) - Brödtext: - Inkludera den JSON-begäran som du skapade i det föregående steget.
Du bör få en åtkomsttoken (
access_token
) som svar. Du måste använda denna token som en ägartoken för att anropa API för lagersynlighet. Här följer ett exempel.{ "access_token": "{Returned_Token}", "token_type": "bearer", "expires_in": 3600 }
-
URL:
Sedel
URL-adressen https://securityservice.operations365.dynamics.com/token
är en allmän URL för säkerhetstjänsten. När du ringer URL är det första svaret ett http-omdirigerande svar med statuskoden 307
i svarsrubrikerna och en post med nyckeln "Plats" som innehåller mål-URL:en för säkerhetstjänsten. URL är i detta format: https://gw.{$geo}-il101.gateway.prod.island.powerapps.com/securityservice/token
. Om till exempel din miljö finns i USA geografiskt kan webbadressen vara https://gw.us-il101.gateway.prod.island.powerapps.com/securityservice/token
. Om svarsstatuskoden 307 inte är acceptabel för dig kan du manuellt konstruera den faktiska webbadressen enligt din FinOps-miljöplats. Det enklaste sättet är att öppna https://gw.as-il101.gateway.prod.island.powerapps.com/securityservice/token
med webbläsaren och sedan kopiera adressen i adressfältet.
Skapa ändringshändelser för behållning
Det finns två API:er för att skapa ändringshändelser för behållning:
- Skapa en (1) post:
/api/environment/{environmentId}/onhand
- Skapa flera poster:
/api/environment/{environmentId}/onhand/bulk
I tabellen nedan sammanfattas vilket betydelse de olika fälten har i JSON-brödtexten.
Fält-ID | Beskrivning |
---|---|
id |
Ett unikt ID för den specifika ändringshändelsen. Om en ny inlämning inträffar på grund av ett tjänstefel, används detta ID för att säkerställa att samma händelse inte räknas två gånger i systemet. |
organizationId |
Identifierare för den organisation som är kopplad till händelsen. Detta värde mappas till en organisation eller dataområdes-ID i Supply Chain Management. |
productId |
Identifieraren för produkten. |
quantities |
Kvantiteten som lagerbehållningen måste ändras med. Om till exempel 10 nya böcker läggs till på en hylla blir detta värde quantities:{ shelf:{ received: 10 }} . Om tre böcker tas bort från hyllan eller säljs kommer detta värde att bli quantities:{ shelf:{ sold: 3 }} . |
dimensionDataSource |
Datakällan för de dimensioner som används vid ändring av bokföringshändelse och fråga. Om du anger datakällan kan du använda de anpassade dimensionerna från den angivna datakällan. Lagersynligheten kan använda dimensionskonfigurationen för att mappa de anpassade dimensionerna till de allmänna standarddimensionerna. Om inget värde för dimensionDataSource anges kan du endast använda alla basdimensioner i dina frågor. |
dimensions |
Ett dynamiskt nyckel/värde-par. Värdena mappas till några av dimensionerna i Supply Chain Management. Du kan emellertid även lägga till anpassade dimensioner (till exempel Källa) för att ange om händelsen kommer från Supply Chain Management eller ett externt system. |
Obs
Om datapartitionsregeln anges till Efter produkt-ID är siteId
och locationId
valfria dimensioner. Annars är de obligatoriska dimensioner. Den här regeln gäller även för allokering, preliminär reservation och API:er för förändringsschema.
Följande delgrupper ger exempel som visar hur dessa API:er används.
Skapa en engångs-ändringshändelse
Detta API skapar en enskild ändringshändelse för behållning.
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öljande exempel visar brödtext. I det här exemplet har företaget ett kassasystem (POS) som bearbetar in butikstransaktioner och därmed lagerändringar. Kunden har returnerat en röd T-shirt till din butik. För att återspegla ändringen lägger du upp en enda ändringshändelse för produkten T-shirt. Denna händelse ökar kvantiteten av produkt 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öljande exempel visar brödtext utan dimensionDataSource
. I detta fall är dimensions
basdimensionerna. Om dimensionDataSource
har ställts in kan dimensions
vara antingen datakällsdimensionerna eller basdimensionerna.
{
"id": "Test202",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensions": {
"siteId": "1",
"locationId": "11",
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 1
}
}
}
Skapa flera ändringshändelser
Detta API kan skapa ändringshändelser på samma sätt som API:t för enstaka händelser. Den enda skillnaden är att denna API kan skapa flera poster samtidigt. Därför skiljer sig värdena Path
och Body
åt. För detta API tillhandahåller Body
en matris av poster. Det maximala antalet poster är 512. Därför kan det tillgängliga bulk-API:et för ändring stödja upp till 512 ändringshändelser åt gången.
Till exempel bearbetade en kassaapparat i butik följande två transaktioner:
- En returorder av en röd T-shirt
- En försäljningstransaktion med tre svart T-shirts
I det här fallet kan du inkludera båda lageruppdateringarna i ett API-anrop.
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öljande exempel visar brödtext.
[
{
"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 }
}
}
]
Ställ in/åsidosätta lagerbehållning
API:t Ställ in behållning åsidosätter aktuella data för den angivna produkten. Den här funktionen används normalt för lagerinventeringsuppdateringar. Till exempel, under sin dagliga lagerräkning, kan en butik upptäcka att det faktiska lagret för en röd T-shirt är 100. Därför måste den inkommande kvantiteten i kassan uppdateras till 100, oavsett vad den tidigare kvantiteten var. Du kan använda denna API för att åsidosätta det befintliga värdet.
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öljande exempel visar brödtext. Beteendet för detta API skiljer sig från beteendet för API:erna som beskrivs i avsnittet Skapa ändringshändelser för behållning tidigare i denna artikel. I detta exempel anges kvantiteten för produkten T-shirt som 1.
[
{
"id": "Test204",
"organizationId": "usmf",
"productId": "T-shirt",
"dimensionDataSource": "pos",
"dimensions": {
"SiteId": "1",
"LocationId": "11",
"posMachineId": "0001"
"colorId": "red"
},
"quantities": {
"pos": {
"inbound": 100
}
}
}
]
Skapa reservationshändelser
Om du vill använda reserv-API:t måste du öppna reservationsfunktionen och slutföra reservationskonfigurationen. Mer information (inklusive ett dataflöde och exempelscenario) finns i Reservationer för Lagersynlighet.
Skapa en reservationshändelse
Det går att göra en reservation mot olika datakällsinställningar. Om du vill konfigurera den här typen av reservation måste du först ange datakällan i dimensionDataSource
-parametern. Sedan anger du i dimensions
-parametern dimensioner enligt dimensionsinställningarna i måldatakällan.
När du anropar reservations-API:t kan du kontrollera reservationsvalideringen genom att ange den booleska parametern ifCheckAvailForReserv
i begärandetexten. Ett värde True
betyder att valideringen krävs, medan ett värde av False
betyder att valideringen inte krävs. Standardvärdet är True
.
Om du vill annullerar en reservation eller ta bort reservationen av angivna lagerkvantiteter ställer du in kvantiteten på ett negativt värde och konfigurerar parametern ifCheckAvailForReserv
på False
för att hoppa över valideringen. Det finns också en dedikerad API för att göra samma sak. Skillnaden skiljer sig bara mellan de två API:erna. Det är enklare att återföra en viss reservationshändelse genom att använda reservationId
med utan reservation API. Mer information finns i avsnittet Avboka en 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öljande exempel visar brödtext.
{
"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öljande exempel visar ett lyckat svar.
{
"reservationId": "RESERVATION_ID",
"id": "ohre~id-822-232959-524",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Skapa flera reservationshändelser
Detta API är en bulkversion av API:t för en enskild händelse.
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,
},
...
]
Återför en reservationshändelser
Avboka API fungerar som den omvända åtgärden för händelser Reservation. Det är ett sätt att återföra en reservationshändelse som anges av reservationId
eller minska reservationskvantiteten.
Återför en reservationshändelse
När en reservation skapas inkluderas reservationId
kommer att ingå i svarsinstansen. Du måste ange samma reservationId
för att annullera reservationen, och inkludera samma organizationId
, productId
och dimensions
som används för reservations-API-anropet. Slutligen anger du ett OffsetQty
värde som representerar antalet artiklar som ska frigöras från den tidigare reservationen. En reservation kan antingen återföras helt eller delvis beroende på vilken information som angetts OffsetQty
. Om till exempel 100 enheter av artiklar reserverats kan du ange OffsetQty: 10
avreservera 10 av det ursprungliga reserverade beloppet.
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öljande kod visar ett exempel på brödtext.
{
"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öljande kod visar ett exempel på en framgångsrik svarsinstans.
{
"reservationId": "RESERVATION_ID",
"totalInvalidOffsetQtyByReservId": 0,
"id": "ohoe~id-823-11744-883",
"processingStatus": "success",
"message": "",
"statusCode": 200
}
Notering
Svarstexten, när den OffsetQty
är mindre än eller lika med reservationskvantiteten, processingStatus
blir "lyckad" och totalInvalidOffsetQtyByReservId
blir 0.
Om OffsetQty
är större än reserverat belopp processingStatus
blir "partialSuccess" och totalInvalidOffsetQtyByReservId
kommer skillnaden mellan OffsetQty
och det reserverade beloppet.
Om reservationen till exempel har kvantiteten 10 och OffsetQty
värdet 12 är den totalInvalidOffsetQtyByReservId
bli 2.
Återför flera reservationshändelser
Detta API är en bulkversion av API:t för en enskild händelse.
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
}
...
]
Rensa reservationsdata
API rensa reservationsdata används för att rensa upp historiska reservationsdata. Texten bör vara en lista över datakällor. Om listan är tom kommer alla datakällor att rensas upp.
Path:
/api/environment/{environmentId}/onhand/reserve/resyncjob
Method:
Post
Headers:
Api-Version="1.0"
Authorization="Bearer $access_token"
ContentType:
application/json
Body:
[
"iv",
"pos"
]
Behållningsfråga
Använd Behållningsfråga för att hämta aktuella lagerbehållningsdata för dina produkter. Du kan använda detta API när du måste känna till lagret, till exempel när du vill granska produktlagernivåer på din e-handelswebbplats, eller när du vill kontrollera produkttillgänglighet mellan regioner eller i närliggande butiker och lagerställen. API stöder för närvarande frågor upp till 5000 enskilda artiklar efter productID
värde. Flera siteID
och locationID
värden kan också anges i varje fråga. När datapartitionsregeln är inställd på Efter plats definieras maxgränsen av följande formel:
NumOf(SiteID) × NumOf(LocationID) <= 10 000.
Fråga genom att använda inläggsmetoden
Frågan via post-API är tillgänglig i två versioner. I följande tabell beskrivs skillnaderna.
API-version 1.0 | API-version 2.0 |
---|---|
Kan endast fråga efter ett organisations-ID. | Kan fråga efter flera organisations-/organisations-/ORGANISATIONS |
Kan fråga på upp till 10 000 kombinationer av siter och lagerställen. | Kan söka i fler än 10 000 kombinationer av organisations-/ORGANISATIONS-/ARTIKEL-/siter samt lagerställen. Kan returnera resultat på flera sidor. |
Följande delgrupper visar hur du använder varje API-version.
Fråga genom att bokföra 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ödtexten i denna begäran är dimensionDataSource
en valfri parameter. Om den inte är inställd behandlas filters
som basdimensioner.
Parametern returnNegative
styr om resultatet innehåller negativa poster.
Frågedata som lagras per plats
Det här avsnittet gäller när datapartitionsregeln har ställts in på Efter plats.
-
organizationId
bör vara en matris som innehåller exakt ett värde. -
productId
kan innehålla ett eller flera värden. Om det är en tom matris kommer systemet att returnera alla produkter från de angivna webbplatserna. I detta fall fårsiteId
ochlocationId
inte vara tomma. -
siteId
ochlocationId
används för partitionering. Du kan ange mer än ettsiteId
ochlocationId
värde i en förfrågan Behållningsfråga. Om båda matriser är tomma kommer systemet att returnera alla webbplatser och platser för de angivna produkterna. I detta fall fårproductId
inte vara tomt.
Vi rekommenderar att du använder parametern groupByValues
på ett sätt som överensstämmer med din indexkonfiguration. Mer information finns i Behållningsindexkonfiguration.
Frågedata som lagras efter produkt-ID
Det här avsnittet gäller när datapartitionsregeln har ställts in på Efter produkt-ID. I detta fall krävs två filters
-fält: organizationId
, productId
.
-
organizationId
bör vara en matris som innehåller exakt ett värde. -
productId
bör vara en matris som innehåller minst ett värde.
Om du inte anger några värden för siteId
och locationId
kommer, till skillnad från när du lagrar data, lagerinformationen för varje produkt-ID att aggregeras för alla anläggningar och/eller platser.
Obs
Om du har aktiverat funktionerna för förändring av behållningslistan och tillgängligt att lova-funktionerna, kan frågan också inkludera den QueryATP
booleska parametern som styr om frågeresultaten omfattar information om tillgängligt att lova. Mer information och exempel finns i Lagersynlighet- och ändringsplan för lagerbehållning som är disponibel att lova.
Följande exempel visar brödtext. Det visar att du kan söka efter lagerbehållningen från flera platser (lagerställen).
{
"dimensionDataSource": "pos",
"filters": {
"organizationId": ["usmf"],
"productId": ["T-shirt"],
"siteId": ["1"],
"locationId": ["11","12","13"],
"colorId": ["red"]
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Följande exempel visar hur du frågar efter alla produkter på en viss webbplats och plats.
{
"filters": {
"organizationId": ["usmf"],
"productId": [],
"siteId": ["1"],
"locationId": ["11"],
},
"groupByValues": ["colorId", "sizeId"],
"returnNegative": true
}
Fråga genom att bokföra 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
Begärandeformatet för API-version 2.0 liknar det i version 1.0, men har även stöd för två valfria parametrar: pageNumber
pageSize
och som gör att systemet kan dela upp ett enda stort resultat i flera mindre dokument. Resultaten sorteras efter lagerställe ochlocationId
parametrarna används på följande sätt för att dela upp resultaten på sidor:
-
pageSize
det antal lagerställen (värdenlocationId
) som returneras på varje sida. -
pageNumber
det sidnummer som returneras.
En begäran av det här formatet returnerar lagerbehållningsdata som börjar från lagerställenummer({pageNumber} − 1) × {pageSize} och inkluderar data för nästa lagerställen {pageSize} .
API-version 2.0 svarar med ett dokument som använder följande struktur:
{
Value: { # Response same as Api-Version=1.0 }
nextLink: onhand/indexquery?pageNumber={pageNumber+1}&pageSize={pageSize}
}
När begäran når det sista lagerstället (locationId
) är nextLink
värdet en tom sträng.
Med API-version 2.0 kan du även ange mer än ett organisations-ID i din begäran. Om du vill göra det tar du med en kommaavgränsad lista med organisations-/ORGANISATIONS-/DOKUMENT-uppgifter i organizationId
filtret för förfrågningsdokumentet. Till exempel. "organizationId": ["org1", "org2", "org3"]
Fråga genom att använda hämtningsmetoden
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]
Här är ett exempel på URL-adressen. Denna hämtbegäran är exakt densamma som bokföringsexemplet som angavs tidigare.
/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öder inte frågor om lager över flera organisations-/ORGANISATIONS-/REGISTER med GET-metoden.
Behållning för exakt fråga
Behållnings exakta frågor liknar vanliga behållningsfrågor, men du kan ange en mappningshierarki mellan en webbplats och en plats. Du har exempelvis följande två webbplatser:
- Webbplats 1, som mappas till plats A
- Webbplats 2, som mappas till plats B
För en vanlig behållningsfråga gäller "siteId": ["1","2"]
och "locationId": ["A","B"]
, lagersynlighet kommer automatiskt att fråga efter resultatet för följande webbplatser och platser:
- Webbplats 1, plats A
- Webbplats 1, plats B
- Webbplats 2, plats A
- Webbplats 2, plats B
Som du ser känner den vanliga behållningsfrågan inte igen att plats A endast finns på webbplats 1 och plats B finns bara på webbplats 2. Därför skapar den redundanta frågor. För att passa denna hierarkiska mappning kan du använda en exakt fråga vid behållning och ange platsmappningarna i frågetexten. I så fall söker du efter och tar emot resultat endast för webbplats 1, plats A och webbplats 2, plats B.
Behållning- exakt frågefråga med inläggsmetoden
Den behållnings exakta frågan via post-API finns tillgänglig i två versioner. I följande tabell beskrivs skillnaderna.
API-version 1.0 | API-version 2.0 |
---|---|
Kan endast fråga efter ett organisations-ID. | Kan fråga efter flera organisations-/organisations-/ORGANISATIONS |
Behållning, exakt fråga genom att bokföra 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ödtexten i denna begäran är dimensionDataSource
en valfri parameter. Om den inte är inställd dimensions
i filters
behandlas basdimensioner. Det finns fyra obligatoriska fält för filters
: organizationId
, productId
dimensions
och values
.
-
organizationId
bör bara innehålla ett värde, men det är fortfarande en matris. -
productId
kan innehålla ett eller flera värden. Om det är en tom matris kommer alla produkter att returneras. - I matrisen
dimensions
ärsiteId
ochlocationId
bara obligatoriska om datapartitionsregeln anges till Efter plats. I det här fallet kan de visas med andra element i valfri ordning. -
values
kan innehålla en eller flera olika tupplar av värden som motsvarardimensions
.
dimensions
i filters
kommer automatiskt att läggas till groupByValues
.
Parametern returnNegative
styr om resultatet innehåller negativa poster.
Följande exempel visar brödtext.
{
"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
}
Följande exempel visar hur du frågar efter alla produkter på flera webbplatser och platser.
{
"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
}
Behållning, exakt fråga genom att bokföra 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 skiljer sig från version 1.0 på följande sätt:
- Avsnittet
filters
har nu ett fältkeys
istället för ettdimensions
fält. Fältetkeys
fungerar som fältet idimensions
version 1.0, men kan nu även inkluderaorganizationId
. Du kan ange nycklarna i valfri ordning. - Avsnittet
filters
stöder inte längreorganizationId
fältet. Du kan istället inkludera blandorganizationId
keys
dimensionerna i fältet (till exempel) och definiera organisations-ID-värdenkeys: ["organizationId", "siteId", "locationId"]
vid matchningspositionenvalues
i fältet (till exempel).values: ["SCM_IV", "iv_contoso_site_1", "iv_contoso_location_1"]
Andra fält är identiska med API-version 1.0.
Fråga med produktsökning
Följande API:er för tillgängliga frågor är förbättrade för att stödja produktsökning:
Kommentar
När du lägger upp en fråga om lagersynlighet som använder produktsökning, använd productSearch
begärandeparametern (med en ProductAttributeQuery
objekt inuti) för att hitta eller filtrera efter produkt-ID. De nyare API:erna stöder inte längre de äldre productid
begärandeparameter i begärandetexten.
Förutsättningar
Innan du kan börja använda API:erna för produktsökning måste ditt system uppfylla följande krav:
- Du måste köra Dynamics 365 Supply Chain Management 10.0.36 eller senare.
- Lagersynlighet version 1.2.2.54 eller senare måste installeras och konfigureras enligt beskrivningen i Installera och konfigurera Lagersynlighet.
- Söktjänsten lagersynlighet måste installeras och konfigureras enligt beskrivningen i Ställ in produktsökning för lagersynlighet.
Produktsökningskontrakt
Produktsökningskontraktet definierar reglerna för kommunikation med produktsöknings-API:erna. Det tillhandahåller ett standardiserat sätt att beskriva kapaciteten och beteendet hos produktsökningsfunktionerna. Därför kan användare lättare förstå, interagera med och bygga applikationer som använder API:erna för lagersynlighet.
Följande exempel visar ett exempel på kontrakt.
{
"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öljande register beskriver de fält som används i kontraktet.
Fält-ID | Beskrivning |
---|---|
logicalOperator |
De möjliga värden är And och Or . Använd det här fältet för att ansluta flera villkor eller villkor och underfilter. Anteckna det subFilters är faktiskt en productFilter eller attributeFilter objekt. Därför kan du ha subFilters inuti subFilters . |
conditionOperator |
De möjliga värdena är IsExactly , IsNot , Contains , DoesNotContain , BeginsWith , IsOneOf , GreaterEqual , LessEqual och Between . |
ProductFilter |
Använd det här fältet för att filtrera produkter efter produktrelaterad information. Du kan till exempel ändra productName i kontraktet till Company , itemNumber , productSearchName , productType , productName , productDescription , inventoryUnitSymbol , salesUnitSymbol eller purchaseUnitSymbol för att passa ditt företags behov. |
AttributeFilter |
Använd det här fältet för att filtrera produkter efter attributrelaterad information. |
attributeArea |
De möjliga värden är ProductAttribute , DimensionAttribute och BatchAttribute . |
Fråga med produktsökning
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öljande exempel visar brödtext.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"returnNegative": true,
"filters":
{
"organizationId": ["usmf"],
"siteId": ["1"],
"locationId": ["13"],
},
"groupByValues": ["colorid"],
}
Följande exempel visar ett lyckat 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
}
}
}
]
Exakt fråga med produktsökning
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öljande exempel visar brödtext.
{
"productSearch": {
"productFilter": {
"conditions": [
{
"conditionOperator": "contains",
"productName": [
"speaker cable"
],
},
],
},
},
"filters": {
"organizationId": ["usmf"],
"dimensions": ["siteId", "locationId", "colorid"],
"values" : [
["1", "13", "Black"],
]
},
"groupByValues": [],
"returnNegative": true
}
Följande exempel visar ett lyckat 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
}
}
}
]
Disponibelt att lova
Du kan konfigurera lagersynlighet så att du kan tidsplanera framtida ändringar av lagerbehållningen och beräkna ATP-kvantiteter. ATP är den kvantitet av en artikel som finns tillgänglig och därför kan utlovas en kund i nästa period. Om du använder ATP beräkningen kan du öka möjligheten att uppfylla ordern mycket. Information om hur du aktiverar funktionen, och hur du kan interagera med lagersynlighet genom dess API när funktionen har aktiverats, finns i Lagersynlighet- och ändringsplan för lagerbehållning som är disponibel att lova.
Allokering
Allokeringsrelaterade API:er finns i Allokering för lagersynlighet.