Del via


Offentlige API'er til Lagersynlighed

Bemærkning

Community-interessegrupper er nu flyttet fra Yammer til Microsoft Viva Engage. Hvis du vil deltage i et Viva Engage community og deltage i de seneste diskussioner, skal du udfylde formularen Anmodning om adgang til Finance and Operations Viva Engage Community og vælge det community, du vil deltage i.

Vigtigt!

Fra og med februar 2026 kan nye kunder ikke oprette projekter i Microsoft Dynamics Livscyklustjenester til Microsoft Dynamics 365 Finance, Microsoft Dynamics 365 Supply Chain Management og Microsoft Dynamics 365 Project Operations. Nye kunder skal i stedet bruge Power Platform Administration . Du kan få flere oplysninger under Frys oprettelse af lifecycle Services-projekter.

I denne artikel beskrives de offentlige API'er, der leveres af Inventory Visibility.

Den offentlige REST API for tilføjelsesprogrammet Inventory Visibility præsenterer flere specifikke slutpunkter for integration. Den understøtter fire primære interaktionstyper:

  • Bogføring af ændringer af disponibel lagerbeholdning i tilføjelsesprogrammet fra et eksternt system
  • Angivelse eller tilsidesættelse af disponible lagerantal i tilføjelsesprogrammet fra et eksternt system
  • Bogføring af reservationshændelser i tilføjelsesprogrammet fra et eksternt system
  • Forespørger aktuelle disponible mængder fra et eksternt system

I følgende tabel vises de API'er, der er tilgængelige i øjeblikket:

Sti Metode Beskrivelse
/api/environment/{environmentId}/onhand Udgiv Oprette en ændringshændelse for disponibelt antal
/api/environment/{environmentId}/onhand/bulk Udgiv Opret flere ændringshændelser
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk Udgiv Angiv/tilsidesæt disponible antal
/api/environment/{environmentId}/onhand/reserve Udgiv Opret én blød reservationshændelse
/api/environment/{environmentId}/onhand/reserve/bulk Udgiv Opret flere begivenheder for midlertidig reservation
/api/environment/{environmentId}/onhand/unreserve Udgiv Tilbagefør én blød reservationshændelse
/api/environment/{environmentId}/onhand/unreserve/bulk Udgiv Tilbagefør flere hændelser for blød reservation
/api/environment/{environmentId}/onhand/reserve/resyncjob Udgiv Rengør reservationsdata
/api/environment/{environmentId}/getJobProgress Hent Hent status for udførelse af job
/api/environment/{environmentId}/onhand/changeschedule Udgiv Opret en planlagt lagerændring
/api/environment/{environmentId}/onhand/changeschedule/bulk Udgiv Opret flere ændringer af tilgængelig status med datoer
/api/environment/{environmentId}/onhand/indexquery Udgiv Forespørgsel ved hjælp af postmetoden (anbefales)
/api/environment/{environmentId}/onhand Hent Forespørgsel ved hjælp af hent-metoden
/api/environment/{environmentId}/onhand/exactquery Udgiv Nøjagtig forespørgsel ved hjælp af postmetoden
/api/environment/{environmentId}/allocation/allocate Udgiv Opret én fordelingshændelse
/api/environment/{environmentId}/allocation/unallocate Udgiv Opret én ikke-allokeret hændelse
/api/environment/{environmentId}/allocation/reallocate Udgiv Opret én genallokeringshændelse
/api/environment/{environmentId}/allocation/consume Udgiv Opret én forbrugshændelse
/api/environment/{environmentId}/allocation/query Udgiv Resultat af forespørgselsallokering
/api/environment/{environmentId}/onhand/productsearch/indexquery Udgiv Send indeksforespørgsel med produktsøgning
/api/environment/{environmentId}/onhand/productsearch/exactquery Udgiv Send nøjagtig forespørgsel med produktsøgning
/api/environment/{environmentId}/transaction/adjustment/bulk Udgiv Synkroniser ændringer i eksternt lager via synlighed af lager

Bemærkning

Segmentet {environmentId} i stien er miljø-id'et for Microsoft Dynamics 365 Supply Chain Management. Dette id er det, der er angivet for Supply Chain Management i Microsoft Dynamics Lifecycle Services, ikke id'et for det Power Platform-miljø, der er knyttet til Supply Chain Management-miljøet.

Masse-API'en kan maksimalt returnere 512 poster for hver anmodning.

Godkendelse

Platformsikkerhedstokenet bruges til at kalde den offentlige API til lagersynlighed. Du skal derfor generere et Microsoft Entra-token ved hjælp af dit Microsoft Entra-program. Du skal derefter bruge Microsoft Entra-tokenet til at hente adgangstokenet fra sikkerhedstjenesten.

Følg disse trin for at hente et sikkerhedstjenestetoken:

  1. Log på Azure Portal, og brug den til at finde clientId værdierne og clientSecret for din Dynamics 365 Supply Chain Management-app.

  2. Hent et Microsoft Entra-token (aadToken) ved at sende en HTTP-anmodning, der har følgende egenskaber:

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

    • Metode:GET

    • Brødtekstindhold (formulardata):

      Nøgle Værdi
      client_id ${aadAppId}
      client_secret ${aadAppSecret}
      grant_type client_credentials
      omfang 0cdb527f-a8d1-4bf8-9436-b352c68682b2/.default

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

    {
        "token_type": "Bearer",
        "expires_in": "3599",
        "ext_expires_in": "3599",
        "access_token": "eyJ0eX...8WQ"
    }
    
  3. Formulere en JSON-anmodning (JavaScript Object Notation), der ligner følgende eksempel.

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

    Vær opmærksom på følgende punkter:

    • Værdien client_assertion skal være det Microsoft Entra-token (aadToken), du modtog i det forrige trin.
    • Værdien context skal være miljø-id'et for Supply Chain Management, hvor du vil installere tilføjelsesprogrammet.
    • Angiv alle de andre værdier som vist i eksemplet.
  4. Hent et adgangstoken (access_token) ved at sende en HTTP-anmodning, der har følgende egenskaber:

    • URL-adresse:https://securityservice.operations365.dynamics.com/token

    • Metode:POST

    • HTTP-header:

      Nøgle Værdi
      Api-Version 1.0
      Indholdstype application/json
    • Brødtekstindhold: Medtag den JSON-anmodning, du oprettede i det forrige trin.

    Du skal modtage et adgangstoken (access_token) som svar. Du skal bruge dette token som et ihændehavertoken for at kalde API'en til lagersynlighed. Her er et eksempel.

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

    Bemærkning

    Hvis du modtager et svar med statuskoden 307, skal du bruge værdien af headeren Location til at sende tokenanmodningen til den nye URL-adresse igen. De fleste HTTP-biblioteker håndterer automatisk omdirigeringer.

Opret hændelser for lagervareændringer

Der er to API'er til at oprette ændringshændelser:

  • Opret én post: /api/environment/{environmentId}/onhand
  • Opret flere poster: /api/environment/{environmentId}/onhand/bulk

I følgende tabel opsummeres betydningen af hvert felt i JSON-brødteksten.

Felt-id Beskrivelse
id Et entydigt id for den specifikke ændringshændelse. Hvis der opstår en genafsendelse på grund af en tjenestefejl, bruges dette id til at sikre, at den samme hændelse ikke tælles to gange i systemet.
organizationId Id'et for den organisation, der er knyttet til hændelsen. Denne værdi er knyttet til en organisation eller et dataområde-id i Supply Chain Management.
productId Identifikatoren for produktet.
quantities Det antal, hvormed det disponible antal skal ændres. Hvis der f.eks. føjes 10 nye bøger til en hylde, vil denne værdi være quantities:{ shelf:{ received: 10 }}. Hvis tre bøger fjernes fra hylden eller sælges, er quantities:{ shelf:{ sold: 3 }}denne værdi .
dimensionDataSource Datakilden til de dimensioner, der anvendes i bogføringsændringshændelsen og forespørgslen. Hvis du angiver datakilden, kan du bruge de brugerdefinerede dimensioner fra den angivne datakilde. Lagersynlighed kan bruge dimensionskonfigurationen til at knytte de brugerdefinerede dimensioner til de generelle standarddimensioner. Hvis der ikke er angivet en dimensionDataSource værdi, kan du kun bruge de generelle basisdimensioner i dine forespørgsler.
dimensions Et dynamisk nøgleværdipar. Værdierne er knyttet til nogle af dimensionerne i Supply Chain Management. Du kan dog også tilføje brugerdefinerede dimensioner (f.eks . Kilde) for at angive, om hændelsen kommer fra Supply Chain Management eller et eksternt system.

Bemærkning

Hvis din datapartitionsregel er angivet til Efter produkt-id og siteIdlocationId er valgfri dimensioner. Ellers er de påkrævede dimensioner. Denne regel gælder også for api'er til allokering, blød reserve og ændring af tidsplan.

Følgende underafsnit indeholder eksempler, der viser, hvordan du bruger disse API'er.

Oprette en ændringshændelse for disponibelt antal

Denne API opretter en enkelt ændringshændelse ved hånden.

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,
            },
        },
    }

I følgende eksempel vises brødtekstens eksempelindhold. I dette eksempel har virksomheden et POS-system (Point-of-Sale), der behandler transaktioner i butikken og derfor lagerændringer. Kunden har returneret en rød T-shirt til din butik. Hvis du vil afspejle ændringen, skal du sende en enkelt ændringshændelse for T-shirtproduktet . Denne hændelse øger mængden af T-shirt-produktet med 1.

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

I følgende eksempel vises brødtekstens eksempelindhold uden dimensionDataSource. I dette tilfælde dimensions vil være basisdimensionerne. Hvis dimensionDataSource er angivet, dimensions kan enten være datakildedimensionerne eller basisdimensionerne.

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

Opret flere ændringshændelser

Denne API kan oprette ændringshændelser på samme måde som API'en for en enkelt hændelse . Den eneste forskel er, at denne API kan oprette flere poster på samme tid. Derfor er Path og Body værdierne forskellige. Til dette API giver Body en række poster. Det maksimale antal poster er 512. Derfor kan den tilgængelige masse-API til ændring understøtte op til 512 ændringshændelser ad gangen.

En POS-maskine i en detailbutik behandlede f.eks. følgende to transaktioner:

  • En returordre på en rød T-shirt
  • Én salgstransaktion med tre sorte T-shirts

I dette tilfælde kan du inkludere begge lageropdateringer i ét API-kald.

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

I følgende eksempel vises brødtekstens eksempelindhold.

[
    {
        "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 }
        }
    }
]

Angiv/tilsidesæt disponible antal

Api'en Set on-hand tilsidesætter de aktuelle data for det angivne produkt. Denne funktionalitet bruges typisk til at foretage lageroptællingsopdateringer. Under den daglige lageroptælling kan en butik f.eks. finde ud af, at den faktiske disponible lagerbeholdning for en rød T-shirt er 100. Derfor skal det indgående POS-antal opdateres til 100, uanset hvad det forrige antal var. Du kan bruge denne API til at tilsidesætte den eksisterende værdi.

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

I følgende eksempel vises brødtekstens eksempelindhold. Funktionsmåden for denne API adskiller sig fra funktionsmåden for de API'er, der er beskrevet i afsnittet Opret on-hand change events tidligere i denne artikel. I dette eksempel angives mængden af T-shirt-produktet til 1.

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

Opret reservationshændelser

Hvis du vil bruge Reserve-API'en, skal du aktivere reservationsfunktionen og fuldføre reservationskonfigurationen. Du kan få flere oplysninger (herunder et dataflow og et eksempelscenarie) under Lagersynlighedsreservationer.

Opret én reservationshændelse

Der kan foretages en reservation i forhold til forskellige datakildeindstillinger. Hvis du vil konfigurere denne type reservation, skal du først angive datakilden i dimensionDataSource parameteren. Angiv derefter dimensioner i dimensions parameteren i henhold til dimensionsindstillingerne i destinationsdatakilden.

Når du kalder reservations-API'en, kan du styre reservationsvalideringen ved at angive den booleske ifCheckAvailForReserv parameter i anmodningens brødtekst. En værdi af True betyder, at valideringen er påkrævet, mens en værdi af False betyder, at valideringen ikke er påkrævet. Standardværdien er True.

Hvis du vil tilbageføre en reservation eller ikke reservere angivne lagerantal, skal du angive antallet til en negativ værdi og angive ifCheckAvailForReserv parameteren til at False springe valideringen over. Der er også en dedikeret API uden forbehold til at gøre det samme. Forskellen er kun på den måde, de to API'er kaldes på. Det er nemmere at fortryde en bestemt reservationshændelse ved hjælp reservationId af API'en uden forbehold . Få mere at vide i afsnittet Unreserve one reservation event .

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

I følgende eksempel vises brødtekstens eksempelindhold.

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

I følgende eksempel vises et vellykket svar.

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

Opret flere reservationshændelser

Denne API er en masseversion af API'en til en enkelt 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,
        },
        ...
    ]

Hændelser for omvendt reservation

Api'en Unreserve fungerer som den omvendte handling for reservationshændelser. Det giver dig mulighed for at fortryde en reservationshændelse, der er angivet af reservationId eller for at reducere reservationsantallet.

Tilbagefør én reservationshændelse

Når der oprettes en reservation, medtages en reservationId i svarets brødtekst. Du skal angive det samme reservationId for at annullere reservationen og medtage den samme organizationId, productIdog dimensions som bruges til api-kaldet til reservation. Til sidst skal du angive en OffsetQty værdi, der repræsenterer antallet af elementer, der skal frigøres fra den forrige reservation. En reservation kan enten fortrydes helt eller delvist, afhængigt af den angivne OffsetQty. Hvis der f.eks. er reserveret 100 vareenheder, kan du angive OffsetQty: 10 , at 10 af det oprindelige reserverede beløb ikke skal reserveres.

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å indhold.

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

Følgende kode viser et eksempel på en vellykket brødtekst for svar.

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

Bemærkning

I svarteksten vil når OffsetQty er mindre end eller lig med reservationsantallet processingStatus være "succes" og totalInvalidOffsetQtyByReservId vil være 0.

Hvis OffsetQty er større end det reserverede beløb, processingStatus vil være "partialSuccess" og totalInvalidOffsetQtyByReservId vil være forskellen mellem OffsetQty og det reserverede beløb.

Hvis reservationen f.eks. har et antal på 10 og OffsetQty har en værdi på 12, totalInvalidOffsetQtyByReservId er det 2.

Tilbagefør flere reservationshændelser

Denne API er en masseversion af API'en til en enkelt 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
        }
        ...
    ]

Ryd op i reservationsdata

API'en til oprydning af reservationsdata bruges til at rydde op i historiske reservationsdata. Kroppen skal være en liste over datakilder. Hvis listen er tom, ryddes alle datakilder op.

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

Hvis oprydningsjobbet oprettes, returneres der et job-id i svaret, som kan bruges til at få status for udførelse af job.

Hent status for udførelse af job

Brug get job execution progress API'en til at få kørselsfremskridt for et job. Der kræves et job-id for at identificere jobbet.

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

Her er et eksempel på hent URL-adresse.

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

Forespørgsel på tilgængelig lagerbeholdning

Brug API'en Forespørgsel til rådighed til at hente aktuelle lagerdata for dine produkter. Du kan bruge denne API, når du skal kende lagerbeholdningen, f.eks. når du vil gennemse produktlagerniveauer på dit e-handels-websted, eller når du vil kontrollere produktets tilgængelighed på tværs af områder eller i butikker og lagre i nærheden. API'en understøtter i øjeblikket forespørgsler på op til 5.000 individuelle elementer efter productID værdi. Der kan også angives flere siteID værdier og locationID i hver forespørgsel. Når din datapartitionsregel er angivet til Efter placering, er den maksimale grænse defineret af følgende ligning:

NumOf(SiteID) × NumOf(LocationID) <= 10.000.

Forespørgsel ved hjælp af postmetoden

Forespørgslen via post API er tilgængelig i to versioner. I følgende tabel beskrives forskellene.

API version 1.0 API version 2.0
Der kan kun forespørge om ét organisations-id. Der kan forespørge flere organisations-id'er.
Kan forespørge på op til 10.000 kombinationer af lokationer og lagre. Kan forespørge mere end 10.000 kombinationer af organisations-id'er, websteder og lagre. Kan returnere resultater på flere sider.

Følgende underafsnit viser, hvordan du bruger hver API-version.

Forespørgsel via POST API version 1.0

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

I brødteksten i denne anmodning dimensionDataSource er en valgfri parameter. Hvis den ikke er angivet, filters behandles den som basisdimensioner.

Parameteren returnNegative styrer, om resultaterne indeholder negative poster.

Forespørgselsdata, der er gemt efter placering

Dette afsnit gælder, når din datapartitionsregel er angivet til Efter placering.

  • organizationId skal være en matrix, der indeholder præcis én værdi.
  • productId kan indeholde en eller flere værdier. Hvis det er en tom matrix, returnerer systemet alle produkter for de angivne websteder og placeringer. I dette tilfælde siteId og locationId bør ikke være tom.
  • siteId og locationId bruges til partitionering. Du kan angive mere end én siteId og locationId værdi i en forespørgsels on-hand-anmodning . Hvis begge matrixer er tomme, returnerer systemet alle websteder og placeringer for de angivne produkter. I dette tilfælde productId må ikke være tom.

Vi anbefaler, at du bruger groupByValues parameteren på en måde, der er i overensstemmelse med din indekskonfiguration. Få mere at vide i Konfiguration af on-hand-indeks.

Forespørgselsdata, der er gemt efter produkt-id

Dette afsnit gælder, når din datapartitionsregel er angivet til Efter produkt-id. I dette tilfælde kræves der to filters felter: organizationId, productId.

  • organizationId skal være en matrix, der indeholder præcis én værdi.
  • productId skal være en matrix med mindst én værdi.

I modsætning til når du gemmer data efter placering, samles lageroplysninger for hvert produkt-id på tværs af alle websteder og/eller placeringer, hvis du ikke angiver værdier for siteId og locationId.

Bemærkning

Hvis du har aktiveret tidsplanen for den disponible ændring og ATP-funktionerne (available-to-promise), kan din forespørgsel også indeholde den QueryATP booleske parameter, der styrer, om forespørgselsresultaterne indeholder ATP-oplysninger. Du kan få flere oplysninger og eksempler under lagerbeholdningssynlighed og ændringsplaner for lagerbeholdning og tilgængelighed til at kunne garantere.

I følgende eksempel vises brødtekstens eksempelindhold. Det viser, at du kan forespørge den disponible lagerbeholdning fra flere lokationer (lagre).

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

I følgende eksempel kan du se, hvordan du forespørger alle produkter på et bestemt websted og en bestemt placering.

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

Forespørgsel via POST API version 2.0

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

Anmodningsformatet for API-version 2.0 ligner det i version 1.0, men understøtter også to valgfri parametre: pageNumber og pageSize, som gør det muligt for systemet at opdele et enkelt stort resultat i flere mindre dokumenter. Resultaterne sorteres efter lager (locationId), og parametrene bruges på følgende måde til at opdele resultaterne på sider:

  • pageSize etablerer antallet af lagre (locationId værdier), der returneres på hver side.
  • pageNumber etablerer det sidetal, der returneres.

En anmodning om dette format returnerer lagerdata fra lagernummer ({pageNumber} − 1) × {pageSize} og indeholder data for de næste {pageSize}- lagre.

API version 2.0 svarer med et dokument, der bruger følgende struktur:

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

Når anmodningen når det sidste lager (locationId), er værdien nextLink en tom streng.

MED API version 2.0 kan du også angive mere end ét organisations-id i din anmodning. Det gør du ved at medtage en kommasepareret liste over organisations-id'er i organizationId filteret for dit anmodningsdokument. Eksempel "organizationId": ["org1", "org2", "org3"].

Forespørgsel ved hjælp af hent-metoden

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å hent URL-adresse. Denne GET-anmodning er nøjagtigt det samme som POST-eksemplet, der blev angivet tidligere.

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

Systemet understøtter ikke forespørgsler om lager over flere organisations-id'er med GET-metoden.

Præcis forespørgsel tilgængelig

Præcise forespørgsler på hånden ligner almindelige forespørgsler på hånden, men de giver dig mulighed for at angive et tilknytningshierarki mellem et websted og en placering. Du har f.eks. følgende to websteder:

  • Websted 1, der er knyttet til placering A
  • Websted 2, der er knyttet til placering B

Hvis du angiver "siteId": ["1","2"] og "locationId": ["A","B"]for en almindelig on-hand-forespørgsel, forespørger Lagersynlighed automatisk resultatet for følgende websteder og placeringer:

  • Websted 1, placering A
  • Websted 1, placering B
  • Websted 2, placering A
  • Sted 2, lokation B

Som du kan se, genkender den almindelige forespørgsel ikke, at placering A kun findes på websted 1, og placering B findes kun på websted 2. Derfor opretter den redundante forespørgsler. For at imødekomme denne hierarkiske tilknytning kan du bruge en nøjagtig forespørgsel på hånden og angive placeringstilknytningerne i forespørgslens brødtekst. I dette tilfælde forespørger og modtager du kun resultater for websted 1, placering A og websted 2, placering B.

Nøjagtig forespørgsel lige ved hånden ved hjælp af postmetoden

Den nøjagtige forespørgsel via post-API er tilgængelig i to versioner. I følgende tabel beskrives forskellene.

API version 1.0 API version 2.0
Der kan kun forespørge om ét organisations-id. Der kan forespørge flere organisations-id'er.

Nøjagtig forespørgsel tilgængelig med post-API version 1.0

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

I brødteksten i denne anmodning dimensionDataSource er en valgfri parameter. Hvis den ikke er angivet, dimensions behandles i filters som basisdimensioner. Der er fire obligatoriske felter for filters: organizationId, productId, dimensionsog values.

  • organizationId skal kun indeholde én værdi, men det er stadig en matrix.
  • productId kan indeholde en eller flere værdier. Hvis det er en tom matrix, returneres alle produkter.
  • I matrixen dimensions er og siteId påkrævet, locationId hvis og kun hvis din datapartitionsregel er angivet til Efter placering. I dette tilfælde kan de vises sammen med andre elementer i en vilkårlig rækkefølge.
  • values kan indeholde en eller flere entydige tuples af værdier, der svarer til dimensions.

dimensions i filters føjes automatisk til groupByValues.

Parameteren returnNegative styrer, om resultaterne indeholder negative poster.

I følgende eksempel vises brødtekstens eksempelindhold.

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

I følgende eksempel kan du se, hvordan du forespørger alle produkter på flere websteder og på flere placeringer.

{
    "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
}

Tilgængelig nøjagtig forespørgsel via API version 2.0

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

API version 2.0 adskiller sig fra version 1.0 på følgende måder:

  • Sektionen filters indeholder nu et keys felt i stedet for et dimensions felt. Feltet keys fungerer på samme måde som feltet dimensions i version 1.0, men kan nu også indeholde organizationId. Du kan angive nøglerne i en vilkårlig rækkefølge.
  • Sektionen filters understøtter ikke længere feltet organizationId . Du kan i stedet medtage organizationId blandt dimensionerne i feltet keys (f.eks. keys: ["organizationId", "siteId", "locationId"]) og definere organisations-id-værdier på den tilsvarende placering i feltet values (f.eks. values: ["SCM_IV", "iv_contoso_site_1", "iv_contoso_location_1"]).

Andre felter er identiske med API-version 1.0.

Forespørgsel med produktsøgning

Følgende forespørgsels-API'er til rådighed er forbedret for at understøtte produktsøgning:

Bemærkning

Når du bogfører en lagersynlighedsforespørgsel, der bruger produktsøgning, skal du bruge anmodningsparameteren productSearch (med et ProductAttributeQuery objekt i) til at finde eller filtrere efter produkt-id. De nyere API'er understøtter ikke længere den ældre productid anmodningsparameter i anmodningens brødtekst.

Forudsætninger

Før du kan begynde at bruge API'erne til produktsøgning, skal systemet opfylde følgende krav:

Kontrakt for produktsøgning

Kontrakten for produktsøgning definerer reglerne for kommunikation med API'er til produktsøgning. Det gør det muligt at beskrive egenskaberne og funktionsmåden for produktsøgningsfunktionerne på en standardiseret måde. Derfor kan brugerne nemmere forstå, interagere med og bygge programmer, der bruger API'erne til lagersynlighed.

I følgende eksempel vises 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"
                    }
                ]
            }
        ]
    },
}

I følgende tabel beskrives de felter, der bruges i kontrakten.

Felt-id Beskrivelse
logicalOperator De mulige værdier er And og Or. Brug dette felt til at forbinde flere betingelser eller betingelser og underfiltre. Bemærk, at det subFilters faktisk er et productFilter eller attributeFilter -objekt. Du kan derfor have subFilters inde i subFilters.
conditionOperator De mulige værdier er IsExactly, IsNot, Contains, DoesNotContain, BeginsWithIsOneOf, GreaterEqual, LessEqualog Between.
ProductFilter Brug dette felt til at filtrere produkter efter produktrelaterede oplysninger. Du kan f.eks. ændre productName kontrakten til Company, itemNumber, productSearchName, productType, productName, , productDescription, inventoryUnitSymbol, salesUnitSymboleller purchaseUnitSymbol for at opfylde dine forretningsbehov.
AttributeFilter Brug dette felt til at filtrere produkter efter attributrelaterede oplysninger.
attributeArea De mulige værdier er ProductAttribute, DimensionAttributeog 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,
    }

I følgende eksempel vises brødtekstens eksempelindhold.

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

I følgende eksempel vises et 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,
    }

I følgende eksempel vises brødtekstens eksempelindhold.

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

I følgende eksempel vises et 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
            }
        }
    }
]

Tilgængelig til at love

Du kan konfigurere Lagersynlighed, så du kan planlægge fremtidige ændringer af disponibel lagerbeholdning og beregne ATP-antal. ATP er antallet af en vare, der er tilgængelig og kan loves til en kunde i den næste periode. Brug af ATP-beregningen kan i høj grad øge din ordreopfyldelsesfunktion. Du kan få oplysninger om, hvordan du aktiverer denne funktion, og hvordan du interagerer med Lagersynlighed via dets API, når funktionen er aktiveret, i Ændringsplaner for Lagersynlighed og Tilgængelighed til Løfter.

Tildeling

Allokeringsrelaterede API'er er placeret i allokering af lagersynlighed.