Dela via


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:

  1. Logga in på Azure-portalen och använd den för att hitta värdena clientId och clientSecret för din Dynamics 365 Supply Chain Management-app.

  2. 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"
    }
    
  3. 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.
  4. 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 är 1.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
    }
    

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 dimensionsbasdimensionerna. 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 ifCheckAvailForReservFalse 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år siteId och locationId inte vara tomma.
  • siteId och locationId används för partitionering. Du kan ange mer än ett siteId och locationId 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år productId 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: pageNumberpageSize 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, productIddimensions 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 är siteId och locationId 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 motsvarar dimensions.

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ält keys istället för ett dimensions fält. Fältet keys fungerar som fältet i dimensions version 1.0, men kan nu även inkludera organizationId. Du kan ange nycklarna i valfri ordning.
  • Avsnittet filters stöder inte längre organizationId fältet. Du kan istället inkludera bland organizationIdkeys dimensionerna i fältet (till exempel) och definiera organisations-ID-värden keys: ["organizationId", "siteId", "locationId"] vid matchningspositionen values 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:

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