Offentlige API-er for lagersynlighet

Bemerkning

Interessegrupper i fellesskapet har nå flyttet fra Yammer til Microsoft Viva Engage. Hvis du vil bli med i et Viva Engage-fellesskap og delta i de siste diskusjonene, fyller du ut skjemaet Be om tilgang til Finance and Operations Viva Engage Community og velger fellesskapet du vil bli med i.

Viktig!

Fra og med februar 2026 kan ikke nye kunder opprette prosjekter i Microsoft Dynamics Lifecycle Services for Microsoft Dynamics 365 Finance, Microsoft Dynamics 365 Human Resources, Microsoft Dynamics 365 Supply Chain Management og Microsoft Dynamics 365 Project Operations. Nye kunder bør bruke administrasjonssenteret for Power Platform i stedet. Hvis du vil ha mer informasjon, kan du se Prosjektopprettelsesfrys for livssyklustjenester.

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 Description
/api/environment/{environmentId}/onhand Poster Opprett én lagerendringshendelse
/api/environment/{environmentId}/onhand/bulk Poster Opprett flere endringshendelser
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk Poster Angi/overstyre lagerbeholdninger
/api/environment/{environmentId}/onhand/reserve Poster Opprett én ikke-forpliktende reservasjonshendelse
/api/environment/{environmentId}/onhand/reserve/bulk Poster Opprett flere ikke-forpliktende reservasjonshendelser
/api/environment/{environmentId}/onhand/unreserve Poster Tilbakefør én ikke-forpliktende reservasjonshendelse
/api/environment/{environmentId}/onhand/unreserve/bulk Poster Tilbakefør flere ikke-forpliktende reservasjonshendelser
/api/environment/{environmentId}/onhand/reserve/resyncjob Poster Opprydding i reservasjonsdata
/api/environment/{environmentId}/getJobProgress Hent Få fremdrift for jobbutførelse
/api/environment/{environmentId}/onhand/changeschedule Poster Opprett én planlagt lagerendring
/api/environment/{environmentId}/onhand/changeschedule/bulk Poster Opprett flere lagerendringer med datoer
/api/environment/{environmentId}/onhand/indexquery Poster Spørring ved å bruke posteringsmetoden (anbefalt)
/api/environment/{environmentId}/onhand Hent Spør ved å bruke hentemetoden
/api/environment/{environmentId}/onhand/exactquery Poster Nøyaktig spørring ved å bruke posteringsmetoden
/api/environment/{environmentId}/allocation/allocate Poster Opprett én tildelingshendelse
/api/environment/{environmentId}/allocation/unallocate Poster Opprett én ikke-tilordnet-hendelse
/api/environment/{environmentId}/allocation/reallocate Poster Opprett én hendelse for ny tildeling
/api/environment/{environmentId}/allocation/consume Poster Opprett én konsumeringshendelse
/api/environment/{environmentId}/allocation/query Poster Fordelingsresultat for spørring
/api/environment/{environmentId}/onhand/productsearch/indexquery Poster Poster indeksspørring med produktsøk
/api/environment/{environmentId}/onhand/productsearch/exactquery Poster Poster nøyaktig spørring med produktsøk
/api/environment/{environmentId}/transaction/adjustment/bulk Poster Synkronisere eksterne lagerendringer gjennom synlighet for lager

Bemerkning

{environmentId}-delen av banen er miljø-ID-en til Microsoft Dynamics 365 Supply Chain Management. Denne ID-en er den som er angitt for Administrasjon av forsyningskjede i Microsoft Dynamics Lifecycle Services, ikke ID-en til Power Platform-miljøet som er knyttet til administrasjonsmiljøet for forsyningskjeden.

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. Deretter må du bruke Microsoft Entra-tokenet for å få tilgangstokenet fra sikkerhetstjenesten.

Følg disse trinnene for å få et sikkerhetstjenestetoken:

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

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

    • Nettadresse: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
      område 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default

    Du bør 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": "${fno_environment_id}",
        "context_type": "finops-env"
    }
    

    Merk følgende punkt:

    • Verdien client_assertion må være Microsoft Entra-tokenet (aadToken) som du mottok i forrige trinn.
    • Verdien context må være miljø-ID-en for administrasjon av forsyningskjede der du vil distribuere 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:

    • Nettadresse:https://securityservice.operations365.dynamics.com/token

    • Metode:POST

    • HTTP-topptekst:

      Nøkkel Verdi
      Api-Version 1,0
      Innholdstype program/json
    • 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
    }
    

    Bemerkning

    Hvis du mottar et svar med statuskode 307, bruker du verdien i toppteksten Location til å sende tokenforespørselen på nytt til den nye URL-adressen. De fleste HTTP-biblioteker håndterer omadresseringer automatisk.

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 Description
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.

Bemerkning

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. Finn ut mer i delen Fortjen é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
}

Bemerkning

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"
    ]

Hvis oppryddingsjobben er opprettet, returneres en jobb-ID i svaret, som kan brukes til å få fremdrift for jobbkjøring.

Hent fremdrift for jobbutførelse

Bruk get job execution progress-API-et for å få fremdriften til en jobb. Det kreves en jobb-ID for å identifisere jobben.

Path:
    /api/environment/{environmentId}/getJobProgress
Method:
    Get
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Query(Url Parameters):
    jobId

Her er et eksempel på henting av en nettadresse.

/api/environment/{environmentId}/getJobProgress?jobId=SomeJob:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

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:

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

Spør ved å bruke posteringsmetoden

Spørring etter 'query by post'-API er tilgjengelig i to versjoner. Tabellen nedenfor beskriver forskjellene.

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

Følgende underseksjoner viser hvordan du bruker hver API-versjon.

Forespørsel etter post-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. Finn ut mer i konfigurasjon av indekser på lager.

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.

Bemerkning

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
}

Forespørsel via post-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: pageNumber og pageSize, som gjør det mulig for systemet å dele et enkelt stort resultat i flere mindre dokumenter. Resultatene sorteres etter lager (locationId), og parameterne brukes som følger for å dele resultatene inn i sider:

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

En forespørsel om dette formatet returnerer lagerbeholdningsdata som starter 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), nextLink er verdien en tom streng.

Med API versjon 2.0 kan du også angi mer enn én organisasjons-ID i forespørselen. Hvis du vil gjøre dette, kan du inkludere en kommadelt liste over organisasjons-ID-er i filteret organizationId for forespørselsdokumentet. 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ørringsbeholdning over flere organisasjons-ID-er 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 om beholdning spør ved å bruke posteringsmetoden

API-en for nøyaktig spørring om beholdning etter postering er tilgjengelig i to versjoner. Tabellen nedenfor beskriver forskjellene.

API versjon 1.0 API versjon 2.0
Kan bare spørre én organisasjons-ID. Kan spørre flere organisasjons-ID-er.

API versjon 1.0 for nøyaktig spørring om beholdning etter postering

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
}

Umiddelbar nøyaktig spørring for post-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:

  • Inndelingen filters har nå et keys felt i stedet for et dimensions felt. Feltet keys fungerer som feltet dimensions i versjon 1.0, men kan nå også inkludere organizationId. Du kan angi nøklene i hvilken som helst rekkefølge.
  • Inndelingen filters støtter ikke lenger feltet organizationId . I stedet kan du inkludere organizationId blant dimensjonene i keys feltet (for eksempel keys: ["organizationId", "siteId", "locationId"]) og definere organisasjons-ID-verdier 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:

Bemerkning

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 Description
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.