Del via


Offentlige API-er for Inventory Visibility

Obs!

Azure Active Directory er nå Microsoft Entra ID. Mer informasjon

Denne artikkelen beskriver de offentlige API-ene som leveres av Lagersynlighet.

Den offentlige REST-API-en i tillegget for lagersynlighet viser flere spesifikke endepunkter for integrering. Det støtter fire hovedtyper for samhandling:

  • Postering av beholdningsendringer i tillegget fra et eksternt system
  • Angi eller overstyre lagerbeholdningsantall i tillegget fra et eksternt system
  • Postering av reservasjonshendelser i tillegget fra et eksternt system
  • Spørring etter gjeldende antall i beholdningen fra et eksternt system

Følgende tabell viser API-ene som er tilgjengelige for øyeblikket:

Bane Metode Beskrivelse
/api/environment/{environmentId}/onhand Publiser Opprett én lagerendringshendelse
/api/environment/{environmentId}/onhand/bulk Publiser Opprett flere endringshendelser
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk Publiser Angi/overstyre lagerbeholdninger
/api/environment/{environmentId}/onhand/reserve Publiser Opprett én ikke-forpliktende reservasjonshendelse
/api/environment/{environmentId}/onhand/reserve/bulk Publiser Opprett flere ikke-forpliktende reservasjonshendelser
/api/environment/{environmentId}/onhand/unreserve Publiser Tilbakefør én ikke-forpliktende reservasjonshendelse
/api/environment/{environmentId}/onhand/unreserve/bulk Publiser Tilbakefør flere ikke-forpliktende reservasjonshendelser
/api/environment/{environmentId}/onhand/reserve/resyncjob Publiser Opprydding i reservasjonsdata
/api/environment/{environmentId}/onhand/changeschedule Publiser Opprett én planlagt lagerendring
/api/environment/{environmentId}/onhand/changeschedule/bulk Publiser Opprett flere lagerendringer med datoer
/api/environment/{environmentId}/onhand/indexquery Publiser Spørring ved å bruke posteringsmetoden (anbefalt)
/api/environment/{environmentId}/onhand Hent Spør ved å bruke hentemetoden
/api/environment/{environmentId}/onhand/exactquery Publiser Nøyaktig spørring ved å bruke posteringsmetoden
/api/environment/{environmentId}/allocation/allocate Publiser Opprett én tildelingshendelse
/api/environment/{environmentId}/allocation/unallocate Publiser Opprett én ikke-tilordnet-hendelse
/api/environment/{environmentId}/allocation/reallocate Publiser Opprett én hendelse for ny tildeling
/api/environment/{environmentId}/allocation/consume Publiser Opprett én konsumeringshendelse
/api/environment/{environmentId}/allocation/query Publiser Fordelingsresultat for spørring
/api/environment/{environmentId}/onhand/productsearch/indexquery Publiser Poster indeksspørring med produktsøk
/api/environment/{environmentId}/onhand/productsearch/exactquery Publiser Poster nøyaktig spørring med produktsøk

Obs!

Delen {environmentId} av banen er miljø-IDen i Microsoft Dynamics Lifecycle Services.

Bulk-API-en kan returnere maksimalt 512 poster for hver forespørsel.

Godkjenning

Platformsikkerhetstokenet brukes til å kalle inn den offentlige API-en for lagersynlighet. Derfor må du generere et Microsoft Entra-token ved hjelp av Microsoft Entra-programmet. Du må deretter bruke Microsoft Entra-tokenet til å få tilgangstokenet fra sikkerhetstjenesten.

Hvis du vil hente et token for sikkerhetstjeneste, gjør du følgende:

  1. Logg på Azure-portalen, og bruk den til å finne clientId- og clientSecret-verdiene for Dynamics 365 Supply Chain Management-appen.

  2. Hent et Microsoft Entra-token (aadToken) ved å sende en HTTP-forespørsel som har følgende egenskaper:

    • URL-adresse:https://login.microsoftonline.com/${aadTenantId}/oauth2/v2.0/token

    • Metode:GET

    • Meldingstekst (skjemadata):

      Nøkkel Verdi
      client_id ${aadAppId}
      client_secret ${aadAppSecret}
      grant_type client_credentials
      scope 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default

    Du skal motta et Microsoft Entra-token (aadToken) som svar. Den skal ligne følgende eksempel.

    {
        "token_type": "Bearer",
        "expires_in": "3599",
        "ext_expires_in": "3599",
        "access_token": "eyJ0eX...8WQ"
    }
    
  3. Former en JavaScript Object Notation-forespørsel (JSON) som ligner på følgende eksempel.

    {
        "grant_type": "client_credentials",
        "client_assertion_type": "aad_app",
        "client_assertion": "{Your_Microsoft EntraToken}",
        "scope": "https://inventoryservice.operations365.dynamics.com/.default",
        "context": "{$LCS_environment_id}",
        "context_type": "finops-env"
    }
    

    Merk følgende punkt:

    • Verdien for client_assertion må være Microsoft Entra-tokenet (aadToken) som du mottok i forrige trinn.
    • Verdien for context må være Lifecycle Services-miljø-ID-en der du vil implementere tillegget.
    • Angi de andre verdiene som vist i eksemplet.
  4. Hent et tilgangstoken (access_token) ved å sende en HTTP-forespørsel som har følgende egenskaper:

    • URL-adresse:https://securityservice.operations365.dynamics.com/token
    • Metode:POST
    • HTTP-hode: Inkluder API-versjonen. (Nøkkelen er Api-Version, og verdien er 1.0.)
    • Meldingstekst: Ta med JSON-forespørselen du opprettet i forrige trinn.

    Du skal motta et tilgangstoken (access_token) som svar. Du må bruke dette tokenet som bærertoken for å kalle opp lagersynlighets-API-en. Her er et eksempel.

    {
        "access_token": "{Returned_Token}",
        "token_type": "bearer",
        "expires_in": 3600
    }
    

Notat

Nettadressen https://securityservice.operations365.dynamics.com/token er en generell nettadresse for sikkerhetstjenesten. Når du kaller opp nettadressen, er det første svaret et HTTP-omdirigert svar med statuskoden 307 i svartopptekstene, og en oppføring med nøkkelen Posisjon som inneholder målnettadressen for sikkerhetstjenesten. Nettadressen er i dette formatet: https://gw.{$geo}-il101.gateway.prod.island.powerapps.com/securityservice/token. Hvis for eksempel miljøet ditt befinner seg i USA, kan nettadressen være https://gw.us-il101.gateway.prod.island.powerapps.com/securityservice/token. Hvis 307-svarstatuskoden ikke er akseptabelt for deg, kan du konstruere den faktiske nettadressen manuelt i henhold til FinOps-miljølokasjonen. Den enkleste måten er å åpne https://gw.as-il101.gateway.prod.island.powerapps.com/securityservice/token med nettleseren og deretter kopiere adressen i adresselinjen.

Opprett lagerendringshendelser

Det finnes to API-er for oppretting av lagerendringshendelser:

  • Opprett én oppføring: /api/environment/{environmentId}/onhand
  • Opprett flere oppføringer: /api/environment/{environmentId}/onhand/bulk

Tabellen nedenfor summerer betydningen av hvert felt i JSON-teksten.

Felt-ID Beskrivelse
id En unik ID for den bestemte endringshendelsen. Hvis det forekommer en ny sending på grunn av en tjenestefeil, brukes denne ID-en til å sikre at samme hendelse ikke telles to ganger i systemet.
organizationId Identifikatoren til organisasjonen som er koblet til hendelsen. Denne verdien tilordnes til en ID for organisasjon eller dataområde i Supply Chain Management.
productId Identifikatoren for produktet.
quantities Antallet som antall på lager må endres etter. Hvis for eksempel 10 nye bøker legges til på en hylle, vil denne verdien være quantities:{ shelf:{ received: 10 }}. Hvis tre bøker fjernes fra hyllen eller selges, vil denne verdien være quantities:{ shelf:{ sold: 3 }}.
dimensionDataSource Datakilden for dimensjonene som brukes i posteringsendringshendelsen og -spørringen. Hvis du angir datakilden, kan du bruke de egendefinerte dimensjonene fra den angitte datakilden. Lagersynlighet kan bruke dimensjonskonfigurasjonen til å tilordne de egendefinerte dimensjonene til de generelle standarddimensjonene. Hvis ingen dimensionDataSource-verdi er angitt, kan du bare bruke de generelle basisdimensjonene i spørringene.
dimensions Et dynamisk nøkkel/verdi-par. Verdiene er tilordnet til noen av dimensjonene i Supply Chain Management. Du kan imidlertid også legge til egendefinerte dimensjoner (for eksempel Kilde) for å angi om hendelsen kommer fra Supply Chain Management eller et eksternt system.

Obs!

Hvis datapartisjonsregelen er angitt til Etter produkt-ID, siteId og locationId er valgfrie dimensjoner. Ellers er de nødvendige dimensjoner. Denne regelen gjelder også for APIer for tildeling, ikke-forpliktende og endringsplan.

Følgende del er eksempler som viser hvordan du bruker disse APIene.

Opprett én lagerendringshendelse

Denne API-en oppretter én enkelt lagerendringshendelse.

Path:
    /api/environment/{environmentId}/onhand
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        id: string,
        organizationId: string,
        productId: string,
        dimensionDataSource: string, # Optional
        dimensions: {
            [key:string]: string,
        },
        quantities: {
            [dataSourceName:string]: {
                [key:string]: number,
            },
        },
    }

Følgende eksempel viser eksempeltekstinnholdet. I dette eksemplet har firmaet et POS-system (salgssted) som behandler transaksjoner i butikk og dermed lagerendringer. Kunden har returnert en rød T-skjorte til butikken. For å reflektere endringer kan du postere en endringshendelse for produktet T-skjorte. Denne hendelsen vil øke antallet for produktet T-skjorte med 1.

{
    "id": "Test201",
    "organizationId": "usmf",
    "productId": "T-shirt",
    "dimensionDataSource": "pos",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "posMachineId": "0001",
        "colorId": "red"
    },
    "quantities": {
        "pos": {
            "inbound": 1
        }
    }
}

Følgende eksempel viser eksempeltekstinnholdet uten dimensionDataSource. I dette tilfellet vil dimensions være basisdimensjoner. Hvis dimensionDataSource er angitt, kan dimensions være enten datakildedimensjonene eller basisdimensjonene.

{
    "id": "Test202",
    "organizationId": "usmf",
    "productId": "T-shirt",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    },
    "quantities": {
        "pos": {
            "inbound": 1
        }
    }
}

Opprett flere endringshendelser

Denne API-en kan opprette endringshendelser, på samme måten som API-en med enkelthendelser kan. Den eneste forskjellen er at denne API-en kan opprette flere poster samtidig. Derfor er verdiene Path og Body forskjellige. For denne API-en inneholder Body en matrise med poster. Maksimalt antall oppføringer er 512. Derfor kan bulk-API-en for lagerbeholdningendring støtte opptil 512 endringshendelser om gangen.

En detaljhandelsbutikk POS-maskin behandlet for eksempel følgende to transaksjoner:

  • En returordre med en rød T-skjorte
  • En salgstransaksjon av tre sorte T-skjorter

I dette tilfellet kan du ta med begge lageroppdateringene i én API-samtale.

Path:
    /api/environment/{environmentId}/onhand/bulk
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    [
        {
            id: string,
            organizationId: string,
            productId: string,
            dimensionDataSource: string, # Optional
            dimensions: {
                [key:string]: string,
            },
            quantities: {
                [dataSourceName:string]: {
                    [key:string]: number,
                },
            },
        },
        ...
    ]

Følgende eksempel viser eksempeltekstinnholdet.

[
    {
        "id": "Test203",
        "organizationId": "usmf",
        "productId": "T-shirt",
        "dimensionDataSource": "pos",
        "dimensions": {
            "SiteId": "Site1",
            "LocationId": "11",
            "posMachineId": "0001"
            "colorId": "red"
        },
        "quantities": {
            "pos": { "inbound": 1 }
        }
    },
    {
        "id": "Test204",
        "organizationId": "usmf",
        "productId": "T-shirt",
        "dimensions": {
            "siteId": "1",
            "locationId": "11",
            "colorId": "black"
        },
        "quantities": {
            "pos": { "outbound": 3 }
        }
    }
]

Angi/overstyre lagerbeholdninger

API-en Angi lagerbeholdning overstyrer de gjeldende dataene for det angitte produktet. Denne funksjonaliteten brukes vanligvis til å oppdatere lageropptelling. I løpet av den daglige lageropptellingen kan for eksempel en butikk finne ut at den faktiske lagerbeholdningen for en rød T-skjorte er 100. Derfor må det innkommende antallet i POS oppdateres til 100, uansett hva det forrige antallet var. Du kan bruke denne API-en til å overstyre den eksisterende verdien.

Path:
    /api/environment/{environmentId}/setonhand/{inventorySystem}/bulk
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    [
        {
            id: string,
            organizationId: string,
            productId: string,
            dimensionDataSource: string, # Optional
            dimensions: {
                [key:string]: string,
            },
            quantities: {
                [dataSourceName:string]: {
                    [key:string]: number,
                },
            },
            modifiedDateTimeUTC: datetime,
        },
        ...
    ]

Følgende eksempel viser eksempeltekstinnholdet. Virkemåten til denne API-en er forskjellig fra virkemåten til API-ene som er beskrevet i delen Opprett lagerendringshendelser tidligere i denne artikkelen. I dette eksemplet blir antallet for produktet T-skjorte angitt til 1.

[
    {
        "id": "Test204",
        "organizationId": "usmf",
        "productId": "T-shirt",
        "dimensionDataSource": "pos",
        "dimensions": {
            "SiteId": "1",
            "LocationId": "11",
            "posMachineId": "0001"
            "colorId": "red"
        },
        "quantities": {
            "pos": {
                "inbound": 100
            }
        }
    }
]

Opprett reservasjonshendelser

Hvis du vil bruke API-en Reserver, må du aktivere reservasjonsfunksjonen og fullføre reservasjonskonfigurasjonen. Hvis du vil ha mer informasjon (inkludert en dataflyt og et eksempelscenario), kan du se Lagersynlighet-reservasjoner.

Opprett én reservasjonshendelse

En reservering kan gjøres mot ulike datakildeinnstillinger. Hvis du vil konfigurere denne reserveringstypen, må du først angi datakilden i dimensionDataSource parameteren. I parameteren dimensions kan du deretter angi dimensjoner i henhold til dimensjonsinnstillingene i måldatakilden.

Når du kaller reservasjons-API, kan du styre reservasjonsvalideringen ved å angi den boolske ifCheckAvailForReserv parameteren i forespørselsteksten. Verdien True betyr at valideringen kreves, mens en verdi å False betyr at valideringen ikke er nødvendig. Standardverdien er True.

Hvis du vil tilbakeføre en reservering eller ikke reservere angitte lagerantall, setter du antallet til en negativ verdi og setter parameteren ifCheckAvailForReserv til False for å hoppe over valideringen. Det finnes også en dedikert API for opphevelse av reservasjon som gjør det samme. Forskjellen er bare i måten de to API-ene kalles opp på. Det er enklere å tilbakeføre en bestemt reservasjonshendelse ved å bruke reservationId med API-en for opphevelse av reservasjon. Hvis du vil ha mer informasjon, kan du se delen Oppheve reservasjon av én reservasjonshendelse.

Path:
    /api/environment/{environmentId}/onhand/reserve
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        id: string,
        organizationId: string,
        productId: string,
        dimensionDataSource: string,
        dimensions: {
            [key:string]: string,
        },
        quantityDataSource: string, # optional
        quantities: {
            [dataSourceName:string]: {
                [key:string]: number,
            },
        },
        modifier: string,
        quantity: number,
        ifCheckAvailForReserv: boolean,
    }

Følgende eksempel viser eksempeltekstinnholdet.

{
    "id": "reserve-0",
    "organizationId": "SCM_IV",
    "productId": "iv_contoso_product",
    "quantity": 1,
    "quantityDataSource": "iv",
    "modifier": "softReservOrdered",
    "ifCheckAvailForReserv": true,
    "dimensions": {
        "siteId": "iv_contoso_site",
        "locationId": "iv_contoso_location",
        "colorId": "red",
        "sizeId": "small"
    }
}

Følgende eksempel viser et vellykket svar.

{
    "reservationId": "RESERVATION_ID",
    "id": "ohre~id-822-232959-524",
    "processingStatus": "success",
    "message": "",
    "statusCode": 200
}

Opprett flere reservasjonshendelser

Denne API-en er en masseversjon av API-en for enkelthendelser.

Path:
    /api/environment/{environmentId}/onhand/reserve/bulk
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    [
        {
            id: string,
            organizationId: string,
            productId: string,
            dimensionDataSource: string,
            dimensions: {
                [key:string]: string,
            },
            quantityDataSource: string, # optional
            quantities: {
                [dataSourceName:string]: {
                    [key:string]: number,
                },
            },
            modifier: string,
            quantity: number,
            ifCheckAvailForReserv: boolean,
        },
        ...
    ]

Tilbakefør reservasjonshendelser

API-en Opphev reservasjon fungerer som tilbakeføringsoperasjonen for Reservasjon-hendelser. Det brukes til å tilbakeføre en reservasjonshendelse som er angitt av reservationId, eller til å redusere reserveringsantallet.

Tilbakefør én reservasjonshendelse

Når en reservasjon opprettes, blir en reservationId tatt med i svarteksten. Du må angi samme reservationId for å avbryte reservasjonen og ta med samme organizationId, productId og dimensions som brukes for reservasjons-API-oppkallet. Til slutt angir du en OffsetQty-verdi som representerer antall varer som skal frigjøres fra forrige reservasjon. En reservasjon kan enten tilbakeføres fullstendig eller delvis, avhengig av angitt OffsetQty. Hvis for eksempel 100 enheter med varer er reservert, kan du angi OffsetQty: 10 for å oppheve reservasjonen av 10 av den opprinnelige reserverte mengden.

Path:
    /api/environment/{environmentId}/onhand/unreserve
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        id: string,
        organizationId: string,
        productId: string,
        reservationId: string,
        dimensions: {
            [key:string]: string,
        },
        OffsetQty: number
    }

Følgende kode viser et eksempel på tekstinnhold.

{
    "id": "unreserve-0",
    "organizationId": "SCM_IV",
    "productId": "iv_contoso_product",
    "reservationId": "RESERVATION_ID",
    "dimensions": {
        "siteid":"iv_contoso_site",
        "locationid":"iv_contoso_location",
        "ColorId": "red",
        "SizeId": "small"
    },
    "OffsetQty": 1
}

Følgende kode viser et eksempel på en vellykket svartekst.

{
    "reservationId": "RESERVATION_ID",
    "totalInvalidOffsetQtyByReservId": 0,
    "id": "ohoe~id-823-11744-883",
    "processingStatus": "success",
    "message": "",
    "statusCode": 200
}

Notat

Når OffsetQty er mindre enn eller lik reservasjonsmengden i svarteksten, blir processingStatus "success" og totalInvalidOffsetQtyByReservId0.

Hvis OffsetQty er større enn den reserverte mengden, blir processingStatus"partialSuccess" og totalInvalidOffsetQtyByReservId differansen mellom OffsetQty og den reserverte mengden.

Hvis reservasjonen for eksempel har et antall på 10 og OffsetQty har verdien 12, blir totalInvalidOffsetQtyByReservId2.

Tilbakefør flere reservasjonshendelser

Denne API-en er en masseversjon av API-en for enkelthendelser.

Path:
    /api/environment/{environmentId}/onhand/unreserve/bulk
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    [      
        {
            id: string,
            organizationId: string,
            productId: string,
            reservationId: string,
            dimensions: {
                [key:string]: string,
            },
            OffsetQty: number
        }
        ...
    ]

Opprydding i reservasjonsdata

API-en for opprydding i reservasjonsdata brukes til å rydde opp i historiske reservasjonsdata. Brødteksten skal være en liste over datakilder. Hvis listen er tom, vil alle datakilder bli ryddet opp.

Path:
    /api/environment/{environmentId}/onhand/reserve/resyncjob
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    [      
        "iv",
        "pos"
    ]

Spør om beholdning

Bruk API-en Spør om beholdning til å hente gjeldende lagerbeholdningsdata for produktene dine. Du kan bruke denne API-en hver gang du må vite beholdningen, for eksempel når du vil gå gjennom produktbeholdningsnivåene på webområdet for e-handel, eller når du vil kontrollere produkttilgjengeligheten i alle regioner eller i butikker og lagre i nærheten. API støtter for øyeblikket spørringer på opptil 5000 individuelle varer etter productID-verdi. Flere siteID- og locationID-verdier kan også angis i hver spørring. Når datapartisjonsregelen er angitt til Etter lokasjon, defineres maksimumsgrensen ved følgende ligning:

NumOf(SiteID) × NumOf (LocationID) <= 10 000.

Spør ved å bruke posteringsmetoden

Spørringen etter posterings-API er tilgjengelig i to versjoner. Tabellen nedenfor viser forskjellene.

API versjon 1.0 API versjon 2.0
Kan bare spørre på én organisasjons-ID. Kan utføre spørringer for flere organisasjons-IDer.
Kan utføre spørringer på opptil 10 000 kombinasjoner av områder og lagre. Kan utføre spørringer for flere enn 10 000 kombinasjoner av organisasjons-IDer, områder og lagre. Kan returnere resultater på flere sider.

De følgende sekundære punktene viser hvordan du bruker hver API-versjon.

Spørring etter posterings-API versjon 1.0

Path:
    /api/environment/{environmentId}/onhand/indexquery
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        dimensionDataSource: string, # Optional
        filters: {
            organizationId: string[],
            productId: string[],
            siteId: string[],
            locationId: string[],
            [dimensionKey:string]: string[],
        },
        groupByValues: string[],
        returnNegative: boolean,
    }

I hoveddelen av denne forespørselen er dimensionDataSource en valgfri parameter. Hvis den ikke er definert, behandles filters som basisdimensjoner.

Parameteren returnNegative styrer om resultatene inneholder negative oppføringer.

Spør på data som er lagret etter lokasjon

Denne delen gjelder når datapartisjonsregelen er angitt til Etter lokasjon.

  • organizationId bør være en matrise som inneholder nøyaktig én verdi.
  • productId kan inneholde én eller flere verdier. Hvis det er en tom matrise, vil systemet returnere alle produktene for de spesifikke nettstedene og plasseringene. I dette tilfellet må siteId og locationId ikke være tomme.
  • siteId og locationId brukes for partisjonering. Du kan angi mer enn én siteId og locationId verdi i en forespørsel om lagerbeholdning. Hvis begge matriser er tomme, vil systemet returnere alle nettstedene og plasseringene for de angitte produktene. I dette tilfellet må productId ikke være tom.

Vi anbefaler at du bruker groupByValues-parameteren på en måte som samsvarer med indekskonfigurasjonen. Hvis du vil ha mer informasjon, kan du se Beholdningsindekskonfigurasjon.

Spørre lagrede data etter produkt-ID

Denne delen gjelder når datapartisjonsregelen er angitt til Etter produkt-ID. I dette tilfellet kreves to filters-felt: organizationId, productId.

  • organizationId bør være en matrise som inneholder nøyaktig én verdi.
  • productId bør være en matrise med minst én verdi.

I motsetning til ved lagring av data etter lokasjon vil lagerinformasjon for hver produkt-ID samles opp på tvers av alle områder og/eller lokasjoner hvis du ikke angir verdier for siteId og locationId.

Obs!

Hvis du har aktivert endringsplanen for lagerbeholdning og ATP-funksjoner (available-to-promise), kan spørringen også omfatte den boolske QueryATP-parameteren, som styrer om resultatet av spørringen omfatter ATP-informasjon. Hvis du vil ha mer informasjon og flere eksempler, kan du se Tidsplaner for lagerendringer i Lagersynlighet og leveringskapasitet.

Følgende eksempel viser eksempeltekstinnholdet. Det viser at du kan spørre i lagerbeholdningen fra flere lokasjoner (lagre).

{
    "dimensionDataSource": "pos",
    "filters": {
        "organizationId": ["usmf"],
        "productId": ["T-shirt"],
        "siteId": ["1"],
        "locationId": ["11","12","13"],
        "colorId": ["red"]
    },
    "groupByValues": ["colorId", "sizeId"],
    "returnNegative": true
}

Eksemplet nedenfor viser hvordan du spør på alle produkter på et bestemt område og sted.

{
    "filters": {
        "organizationId": ["usmf"],
        "productId": [],
        "siteId": ["1"],
        "locationId": ["11"],
    },
    "groupByValues": ["colorId", "sizeId"],
    "returnNegative": true
}

Spørring etter posterings-API versjon 2.0

Path:
    /api/environment/{environmentId}/onhand/indexquery?pageNumber={pageNumber}&pageSize={pageSize}
Method:
    Post
Headers:
    Api-Version="2.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    # Same as version 1.0

Forespørselsformatet for API versjon 2.0 ligner på versjon 1.0, men støtter også to valgfrie parametere: pageNumberpageSize og gjør det mulig for systemet å dele et enkelt stort resultat i flere mindre dokumenter. Resultatene sorteres etter lager (locationId), og parameterne brukes på følgende måte for å dele resultatene inn i sider:

  • pageSize etablerer antallet lagre (locationId verdier) som returneres på hver side.
  • pageNumber etablerer sidetallet som returneres.

Forespørsel om dette formatet returnerer lagerbeholdningsdata fra lagernummer({pageNumber} − 1) × {pageSize} og inneholder data for de neste {pageSize} lagrene.

API versjon 2.0 svarer med et dokument som bruker følgende struktur:

{
    Value: { # Response same as Api-Version=1.0 }
    nextLink: onhand/indexquery?pageNumber={pageNumber+1}&pageSize={pageSize}
}

Når forespørselen når det siste lageret (locationId), er nextLink verdien en tom streng.

MED API versjon 2.0 kan du også angi mer enn én organisasjons-ID i forespørselen. Dette gjør du ved å ta med en kommaseparert liste over organisasjons-IDer i filteret for forespørselsdokumentet organizationId . Dette kan for eksempel være et eksempel "organizationId": ["org1", "org2", "org3"].

Spør ved å bruke hentemetoden

Path:
    /api/environment/{environmentId}/onhand
Method:
    Get
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Query(Url Parameters):
    groupBy
    returnNegative
    [Filters]

Her er et eksempel på henting av en nettadresse. Denne hentforespørselen er nøyaktig den samme som posteringseksemplet som ble angitt tidligere.

/api/environment/{environmentId}/onhand?organizationId=SCM_IV&productId=iv_contoso_product&siteId=iv_contoso_site&locationId=iv_contoso_location&colorId=red&groupBy=colorId,sizeId&returnNegative=true

Systemet støtter ikke spørringer av lagerbeholdning over flere organisasjons-IDer med GET-metoden.

Nøyaktig spørringsforespørsel om beholdning

Nøyaktig spørringsforespørsel om beholdning ligner vanlige lagerbeholdningsspørringer, men de lar deg angi et tilordningshierarki mellom et område og en lokasjon. Du har for eksempel følgende to områder:

  • Område 1, som er tilordnet til lokasjon A
  • Område 2, som er tilordnet til lokasjon B

For en vanlig beholdningsspørring, hvis du angir "siteId": ["1","2"] og "locationId": ["A","B"], vil lagersynlighet automatisk spørre etter resultatet for følgende områder og lokasjoner:

  • Område 1, plassering A
  • Område 1, plassering B
  • Område 2, plassering A
  • Område 2, plassering B

Som du ser, gjenkjenner ikke den vanlige lagerbeholdning at lokasjon A bare finnes i område 1, og lokasjon B finnes bare i område 2. Derfor gjør det overflødige spørringer. For å legge til rette for denne hierarkiske tilordningen, kan du bruke en nøyaktig spørring på lager og angi lokasjonstilordningene i spørringsteksten. I dette tilfellet vil du utføre spørringer og motta resultater for område 1, sted A og område 2, lokasjon B.

Nøyaktig spørring på lager ved hjelp av posteringsmetoden

Den nøyaktige spørringen etter posterings-API er tilgjengelig i to versjoner. Tabellen nedenfor viser forskjellene.

API versjon 1.0 API versjon 2.0
Kan bare spørre på én organisasjons-ID. Kan utføre spørringer for flere organisasjons-IDer.

Nøyaktig spørring på lager ved hjelp av postering av API versjon 1.0

Path:
    /api/environment/{environmentId}/onhand/exactquery
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        dimensionDataSource: string, # Optional
        filters: {
            organizationId: string[],
            productId: string[],
            dimensions: string[],
            values: string[][],
        },
        groupByValues: string[],
        returnNegative: boolean,
    }

I hoveddelen av denne forespørselen er dimensionDataSource en valgfri parameter. Hvis den ikke er definert, behandles dimensions i filters som basisdimensjoner. Det finnes fire obligatoriske felt for filters: organizationId, productId, dimensions og values.

  • organizationId skal bare inneholde én verdi, men den er likevel en matrise.
  • productId kan inneholde én eller flere verdier. Hvis den er en tom matrise, vil alle produkter bli returnert.
  • I matrisen dimensions er siteId og locationId obligatoriske hvis og bare hvis datapartisjonsregelen er satt til Etter lokasjon. I dette tilfellet kan de vises med andre elementer i hvilken som helst rekkefølge.
  • values kan inneholde én eller flere atskilte tupler med verdier som tilsvarer dimensions.

dimensions i filters vil automatisk bli lagt til i groupByValues.

Parameteren returnNegative styrer om resultatene inneholder negative oppføringer.

Følgende eksempel viser eksempeltekstinnholdet.

{
    "dimensionDataSource": "pos",
    "filters": {
        "organizationId": ["SCM_IV"],
        "productId": ["iv_contoso_product"],
        "dimensions": ["siteId", "locationId", "colorId"],
        "values" : [
            ["iv_contoso_site", "iv_contoso_location", "red"],
            ["iv_contoso_site", "iv_contoso_location", "blue"],
        ]
    },
    "groupByValues": ["colorId", "sizeId"],
    "returnNegative": true
}

Eksemplet nedenfor viser hvordan du spør på alle produkter i flere områder og lokasjoner.

{
    "filters": {
        "organizationId": ["SCM_IV"],
        "productId": [],
        "dimensions": ["siteId", "locationId"],
        "values" : [
            ["iv_contoso_site_1", "iv_contoso_location_1"],
            ["iv_contoso_site_2", "iv_contoso_location_2"],
        ]
    },
    "groupByValues": ["colorId", "sizeId"],
    "returnNegative": true
}

Nøyaktig spørring på lager ved å postere API versjon 2.0

Path:
    /api/environment/{environmentId}/onhand/exactquery
Method:
    Post
Headers:
    Api-Version="2.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        dimensionDataSource: string, # Optional
        filters: {
            productId: string[],
            keys: string[],
            values: string[][],
        },
        groupByValues: string[],
        returnNegative: boolean,
    }

API versjon 2.0 er forskjellig fra versjon 1.0 på følgende måter:

  • Delen filters har nå et felt keys i stedet for et dimensions felt. Feltet keys fungerer som feltet i dimensions versjon 1.0, men kan nå også inkludere. organizationId Du kan angi nøklene i hvilken som helst rekkefølge.
  • Delen filters støtter ikke lenger organizationId feltet. I stedet kan du inkludere organizationIdkeys blant dimensjonene i feltet (for eksempel), keys: ["organizationId", "siteId", "locationId"]) og definere verdier for organisasjons-ID på samsvarende posisjon i values feltet (for eksempel. values: ["SCM_IV", "iv_contoso_site_1", "iv_contoso_location_1"]).

Andre felt er identiske med API-versjon 1.0.

Spørring med produktsøk

Følgende API-er for beholdningsspørring er forbedret for å støtte produktsøk:

Merknad

Når du posterer en Lagersynlighet-spørring som bruker produktsøk, bruker du forespørselsparameteren productSearch (som inneholder et ProductAttributeQuery-objekt) til å finne eller filtrere etter produkt-ID. De nyere API-ene støtter ikke lenger den eldre forespørselsparameteren productid i forespørselsteksten.

Forutsetninger

Før du kan begynne å bruke API-ene for produktsøk, må systemet oppfylle følgende krav:

Kontrakt for produktsøk

Kontrakten for produktsøk definerer reglene for kommunikasjon med API-ene for produktsøk. Den gir en standardisert måte å beskrive funksjonene og virkemåten til produktsøkefunksjonene på. Brukere kan derfor lettere forstå, samhandle med og bygge programmer som bruker API-ene for lagersynlighet.

Følgende eksempel viser en eksempelkontrakt.

{
    "productFilter": {
        "logicalOperator": "And",
        "conditions": [
            {
                "conditionOperator": "Contains",
                "productName": [
                    "Deluxe"
                ],
            },
        ],
        "subFilters": [
            {
                "conditions": [
                    {
                        "conditionOperator": "IsExactly",
                        "productType": [
                            "Item"
                        ]
                    }
                ]
            }
        ]
    },
    "attributeFilter": {
        "logicalOperator": "Or",
        "conditions": [
            {
                "attributeName": "Weight Limit",
                "attributeTypeName":"PoundDomain",
                "attributeArea": " ProductAttribute",
                "attributeValues": [
                    "370"
                ],
                "conditionOperator": "GreaterEqual"
            }
        ],
        "subFilters": [
            {
                "conditions": [
                    {
                        "attributeName": "Weight Limit",
                        "attributeTypeName":"PoundDomain",
                        "attributeArea": " ProductAttribute",
                        "attributeValues": [
                            "330"
                        ],
                        "conditionOperator": "LessEqual"
                    }
                ]
            }
        ]
    },
}

Følgende tabell beskriver feltene som brukes i kontrakten.

Felt-ID Beskrivelse
logicalOperator De mulige verdiene er And og Or. Bruk dette feltet til å koble sammen flere betingelser eller betingelser og delfiltre. Merk at subFilters faktisk er et productFilter- eller attributeFilter-objekt. Du kan derfor ha subFilters i subFilters.
conditionOperator De mulige verdiene er IsExactly, IsNot, Contains, DoesNotContain, BeginsWith, IsOneOf, GreaterEqual, LessEqual og Between.
ProductFilter Bruk dette feltet til å filtrere produkter etter produktrelatert informasjon. Du kan for eksempel endre productName i kontrakten til Company, itemNumber, productSearchName, productType, productName, productDescription, inventoryUnitSymbol, salesUnitSymbol eller purchaseUnitSymbol for å tilpasse dette etter forretningsbehovene.
AttributeFilter Bruk dette feltet til å filtrere produkter etter attributtrelatert informasjon.
attributeArea De mulige verdiene er ProductAttribute, DimensionAttribute og BatchAttribute.
Path:
    /api/environment/{environmentId}/onhand/productsearch/indexquery
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        productSearch: {ProductAttributeQuery contract object inherited from Product Search}
            dimensionDataSource: string, # Optional
            filters: {
                organizationId: string[],
                siteId: string[],
                locationId: string[],
                [dimensionKey:string]: string[],
            },
            groupByValues: string[],
            returnNegative: boolean,
    }

Følgende eksempel viser eksempeltekstinnholdet.

{
    "productSearch": {
        "productFilter": {
            "conditions": [
                {
                    "conditionOperator": "contains",
                    "productName": [
                        "speaker cable"
                    ],
                },
            ],
        },
    },
    "returnNegative": true, 
    "filters": 
    {
        "organizationId": ["usmf"], 
        "siteId": ["1"], 
        "locationId": ["13"],
    },
    "groupByValues": ["colorid"],
}

Følgende eksempel viser et vellykket svar.

[
    {
        "productId": "M0030",
        "dimensions": {
            "ColorId": "White",
            "siteid": "1",
            "locationid": "13"
        },
        "quantities": {
            "fno": {
                "arrived": 0,
                "availordered": 20,
                "onorder": 5,
                "ordered": 20,
                "physicalinvent": 0,
                "reservordered": 0,
                "reservphysical": 0,
                "orderedsum": 20,
                "softreserved": 0
            },
            "iv": {
                "ordered": 0,
                "softreserved": 0,
                "softreservphysical": 0,
                "softreservordered": 0,
                "total ordered": 20,
                "total on order": 5,
                "availabletoreserve": 20,
                "totalavailable": 20,
                "totalordered": 20,
                "totalonorder": 5
            },
            "pos": {
                "inbound": 0,
                "outbound": 0
            },
            "@iv": {
                "@allocated": 0
            }
        }
    },
    {
        "productId": "M0030",
        "dimensions": {
            "ColorId": "Black",
            "siteid": "1",
            "locationid": "13"
        },
        "quantities": {
            "fno": {
                "arrived": 0,
                "availordered": 3,
                "ordered": 3,
                "physicalinvent": 0,
                "reservordered": 0,
                "reservphysical": 0,
                "orderedsum": 3,
                "softreserved": 0
            },
            "iv": {
                "ordered": 0,
                "softreserved": 0,
                "softreservphysical": 0,
                "softreservordered": 0,
                "total ordered": 3,
                "availabletoreserve": 3,
                "totalavailable": 3,
                "totalordered": 3
            },
            "pos": {
                "inbound": 0,
                "outbound": 0
            },
            "@iv": {
                "@allocated": 0
            }
        }
    }
]
Path:
    /api/environment/{environmentId}/onhand/productsearch/exactquery
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        productSearch: {ProductAttributeQuery contract object inherited from Product Search}
            dimensionDataSource: string, # Optional
            filters: {
                organizationId: string[],
                dimensions: string[],
                values: string[][],
            },
            groupByValues: string[],
            returnNegative: boolean,
    }

Følgende eksempel viser eksempeltekstinnholdet.

{
    "productSearch": {
        "productFilter": {
            "conditions": [
                {
                    "conditionOperator": "contains",
                    "productName": [
                        "speaker cable"
                    ],
                },
            ],
        },
    },
    "filters": {
        "organizationId": ["usmf"],
        "dimensions": ["siteId", "locationId", "colorid"],
        "values" : [
            ["1", "13", "Black"],
        ]
    },
    "groupByValues": [],
    "returnNegative": true
}

Følgende eksempel viser et vellykket svar.

[
    {
        "productId": "M0030",
        "dimensions": {
            "ColorId": "Black",
            "siteid": "1",
            "locationid": "13"
        },
        "quantities": {
            "fno": {
                "arrived": 0,
                "availordered": 3,
                "ordered": 3,
                "physicalinvent": 0,
                "reservordered": 0,
                "reservphysical": 0,
                "orderedsum": 3,
                "softreserved": 0
            },
            "iv": {
                "ordered": 0,
                "softreserved": 0,
                "softreservphysical": 0,
                "softreservordered": 0,
                "total ordered": 3,
                "availabletoreserve": 3,
                "totalavailable": 3,
                "totalordered": 3
            },
            "pos": {
                "inbound": 0,
                "outbound": 0
            },
            "@iv": {
                "@allocated": 0
            }
        }
    }
]

Tilgjengelig for ordre

Du kan konfigurere Lagersynlighet slik at du kan planlegge fremtidige endringer i lagerbeholdningen og beregne ATP-antall. ATP er antallet av en vare som er tilgjengelig og kan loves til en kunde i løpet av den neste perioden. Bruk av ATP-beregningen kan øke kapasiteten for innfrielse av bestillinger betydelig. Hvis du vil ha informasjon om hvordan du aktiverer denne funksjonen, og hvordan du samhandler med Lagersynlighet via API-en etter at funksjonen er aktivert, kan du se Tidsplaner for lagerendringer i Lagersynlighet og leveringskapasitet.

Tilordning

Tildelingsrelaterte API-er finnes i lagersynlighetstilordning.