Del via


Offentlige API'er til Lagersynlighed

Bemærk

Azure Active Directory er nu Microsoft Entra ID. Få mere at vide

Denne artikel beskriver de offentlige API'er, der leveres via Lagersynlighed.

Den offentlige REST-API til tilføjelsesprogrammet Lagersynlighed viser flere specifikke slutpunkter for integration. Det understøtter fire overordnede interaktionstyper:

  • Bogføring af ændret lagerbeholdning i tilføjelsesprogrammet fra et eksternt system
  • Angive eller tilsidesætte antal for disponibel lagerbeholdningl i tilføjelsesprogrammet fra et eksternt system
  • Bogføring af reservationshændelser i tilføjelsesprogrammet fra et eksternt system
  • Forespørgsel om aktuelle disponible lagerantal fra et eksternt system

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

Sti Metode Betegnelse
/api/environment/{environmentId}/onhand Slå op Oprette en ændringshændelse for disponibelt antal
/api/environment/{environmentId}/onhand/bulk Slå op Oprette flere ændringshændelser
/api/environment/{environmentId}/setonhand/{inventorySystem}/bulk Slå op Angive/tilsidesætte disponibelt antal
/api/environment/{environmentId}/onhand/reserve Slå op Oprette en forhåndsreservationshændelse
/api/environment/{environmentId}/onhand/reserve/bulk Slå op Oprette flere forhåndsreservationshændelser
/api/environment/{environmentId}/onhand/unreserve Slå op Tilbagefør én forhåndsreservationshændelse
/api/environment/{environmentId}/onhand/unreserve/bulk Slå op Tilbagefør flere forhåndsreservationshændelser
/api/environment/{environmentId}/onhand/reserve/resyncjob Slå op Oprydning i reservationsdata
/api/environment/{environmentId}/onhand/changeschedule Slå op Oprette én planlagt ændring af disponibelt antal
/api/environment/{environmentId}/onhand/changeschedule/bulk Slå op Oprette flere ændringer med dato af disponibelt antal
/api/environment/{environmentId}/onhand/indexquery Slå op Forespørgsel ved hjælp af post-metoden (anbefalet)
/api/environment/{environmentId}/onhand Hent Forespørgsel ved hjælp af hentningsmetoden
/api/environment/{environmentId}/onhand/exactquery Slå op Nøjagtig forespørgsel ved hjælp af POST-metoden
/api/environment/{environmentId}/allocation/allocate Slå op Oprette én fordelingshændelse
/api/environment/{environmentId}/allocation/unallocate Slå op Oprette én ikke-fordelingshændelse
/api/environment/{environmentId}/allocation/reallocate Slå op Oprette én omfordelingshændelse
/api/environment/{environmentId}/allocation/consume Slå op Oprette én forbrugshændelse
/api/environment/{environmentId}/allocation/query Slå op Resultat af forespørgselsfordeling
/api/environment/{environmentId}/onhand/productsearch/indexquery Slå op Indsend indeksforespørgsel med produktsøgning
/api/environment/{environmentId}/onhand/productsearch/exactquery Slå op Indsend nøjagtig forespørgsel med produktsøgning

Bemærk

{environmentId}-delen af stien er miljø-id'et i Microsoft Dynamics Lifecycle Services.

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

Godkendelse

Sikkerhedstoken for platformen bruges til at kalde det offentlige API for Lagersynlighed. Du skal derfor generere et Microsoft Entra-token ved hjælp af programmet Microsoft Entra. Du skal derefter bruge Microsoft Entra-tokenet til at hente adgangstoken fra sikkerhedstjenesten.

Hvis du vil hente et token for sikkerhedstjenesten, skal du følge disse trin.

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

  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

    • MetodeGET

    • Brødtekst (formulardata):

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

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

    {
        "token_type": "Bearer",
        "expires_in": "3599",
        "ext_expires_in": "3599",
        "access_token": "eyJ0eX...8WQ"
    }
    
  3. Formuler 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": "{$LCS_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), som du har modtaget i det forrige trin.
    • Værdien context skal være det Lifecycle Services miljø-id, hvor du vil implementere 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
    • MetodePOST
    • HTTP-overskrift: Medtag API-versionen. (Nøglen er Api-Version, og værdien er 1.0).
    • Brødtekst: 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 ihændehavertoken for at kalde API'et for Lagersynlighed. Her er et eksempel.

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

Note

URL-adressen https://securityservice.operations365.dynamics.com/token er en generel URL-adresse til sikkerhedstjenesten. Når du ringer til URL-adressen, er det første svar et http-url-svar med statuskoden 307 i svarhovederne og en post med nøglen "Lokalitet", der indeholder URL-adressen til målet for sikkerhedstjenesten. URL-adressen er i dette format: https://gw.{$geo}-il101.gateway.prod.island.powerapps.com/securityservice/token. Hvis dit miljø f.eks. findes i USA-geo, kan URL-adressen være https://gw.us-il101.gateway.prod.island.powerapps.com/securityservice/token. Hvis koden for svarstatus 307 ikke er acceptabel for dig, kan du manuelt oprette den faktiske URL-adresse i overensstemmelse med FinOps-miljøplaceringen. Det bedste er at åbne https://gw.as-il101.gateway.prod.island.powerapps.com/securityservice/token med din browser og kopiere adressen i adresselinjen.

Oprette ændringshændelser for disponibelt antal

Der findes to API'er til oprettelse af ændringshændelser for disponibelt antal:

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

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

Felt-id Beskrivende tekst
id Et entydigt id for den specifikke ændringshændelse. Dette id bruges til at sikre, at hvis genafsendelse forekommer på grund af en servicefejl, vil hændelsen ikke blive talt med to gange i systemet.
organizationId Identifikatoren for den organisation, der er knyttet til hændelsen. Denne værdi er tilknyttet et organisations-id eller et dataområde-id i Supply Chain Management.
productId Id'et for produktet.
quantities Det antal, som det disponible antal skal ændres med. Hvis der f.eks. føjes 10 nye bøger til en hylde, vil denne værdi være quantities:{ shelf:{ received: 10 }}. Hvis der fjernes tre bøger fra hylden eller de sælges, er denne værdi quantities:{ shelf:{ sold: 3 }}.
dimensionDataSource Datakilden for de dimensioner, der bruges i bogføringens ændringshændelse 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 ingen værdi for dimensionDataSource er angivet, kan du kun bruge de generelle basisdimensioner i forespørgslerne.
dimensions Et dynamisk nøgle/værdi-par. Værdierne knyttes 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ærk

Hvis datapartitionsreglen er indstillet til Efter produkt-id, er siteId og locationId valgfrie dimensioner. Ellers er de påkrævede dimensioner. Denne regel gælder også for tildeling, forhåndsreservering og ændring af planlægnings-API'er.

Følgende undersektioner indeholder eksempler på, hvordan du kan bruge disse API'er.

Oprette en ændringshændelse for disponibelt antal

Denne API opretter en ændringshændelse for disponibelt antal.

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 er et eksempel på brødtekst. I dette eksempel har virksomheden et POS-system, der behandler transaktioner i butikken og derfor foretager lagerændringer. Kunden har returneret en rød T-shirt til din butik. Du kan gengive ændringen ved at bogføre en ændringshændelse for produktet T-shirt. Denne hændelse øger antallet for produktet T-shirt med 1.

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

Følgende er et eksempel på brødtekst uden dimensionDataSource. I dette tilfælde vil dimensions være basisdimensionerne. Hvis dimensionDataSource er angivet, kan dimensions enten være datakildedimensionerne eller basisdimensionerne.

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

Oprette flere ændringshændelser

Denne API kan oprette ændringshændelser på samme måde som enkelt-hændelses API kan. Den eneste forskel er, at denne API kan oprette flere poster samtidigt. Derfor er der forskel på Path- og Body-værdierne. For denne API leverer Body en række af poster. Det maksimale antal poster er 512. Derfor kan masse-API til ændringsplan understøtte op til 512 ændringshændelser ad gangen.

En detailbutiks POS-maskine har f.eks. behandlet følgende to transaktioner:

  • En returordre på én rød T-shirt
  • En salgstransaktion med tre sort T-shirts

I dette tilfælde kan du medtage 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,
                },
            },
        },
        ...
    ]

Følgende er et eksempel på brødtekst.

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

Angive/tilsidesætte disponible antal

API'en for Konfigurer disponibelt antal tilsidesætter de aktuelle data for det angivne produkt. Denne funktion bruges typisk til opdatering af lageroptællinger. Ved den daglige lageroptælling kan en butik f.eks. finde ud af, at den faktiske beholdning for en rød T-shirt er 100. Derfor skal det indgående POS-antal opdateres til 100, uanset hvad det foregående 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,
        },
        ...
    ]

Følgende er et eksempel på brødtekst. Funktionsmåden for denne API er forskellig fra funktionsmåden for de API'er, der er beskrevet i afsnittet Oprette ændringshændelser for disponibelt antal tidligere i denne artikel. I dette eksempel vil antallat for produktet T-shirt blive angivet til 1.

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

Oprette reservationshændelser

Hvis du vil bruge API'en for Reservér, skal du aktivere reservationsfunktionen og fuldføre reservationskonfigurationen. Yderligere oplysninger (herunder en dataflow og eksempelscenario) finder du i Reservationer i Lagersynlighed.

Oprette én reservationshændelse

Der kan foretages en reservation i forhold til de forskellige datakildeindstillinger. Hvis du vil konfigurere denne reservationstype, skal du først angive datakilden i dimensionDataSource-parameteren. Angiv derefter dimensionerne i forhold til dimensionsindstillingerne i måldatakilden i parameteren dimensions.

Når du kalder reservations-API'en, kan du styre valideringen af reservationen ved at angive parameteren Boolesk ifCheckAvailForReserv i brødteksten. Værdien True betyder, at valideringen er påkrævet, mens værdien False betyder, at valideringen ikke er nødvendig. 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 parameteren ifCheckAvailForReserv til False for at springe valideringen over. Der findes også en dedikeret API, der ikke reserverer, til at gøre det samme. Forskellen er kun, hvordan de to API'er kaldes. Det er lettere at tilbageføre en bestemt reservationshændelse ved at bruge reservationId med API'en unreserve, der annullerer reservation. Du kan finde flere oplysninger i afsnittet Annullere reservation af én reservationshændelse.

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

Følgende er et eksempel på brødtekst.

{
    "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 korrekt svar.

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

Oprette flere reservationshændelser

Denne API er en bulkversion af API'en for enkelthændelser.

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

Tilbageføre reservationshændelser

API'en Unreserve fungerer som tilbageførselshandling for Reservation-hændelser. Den giver dig mulighed for at tilbageføre en reservationshændelse, der er angivet af reservationId, for at mindske reservationsantallet.

Tilbagefør én reservationshændelse

Når der oprettes en reservation, medtages reservationId i svarteksten. Du skal angive det samme reservationId for at annullere reservationen og medtage det samme organizationId, productId og dimensions, der bruges til API-kaldet af reservation. Endelig skal du angive en OffsetQty-værdi, der angiver det antal varer, der skal frigøres fra den forrige reservation. En reservation kan enten tilbageføres helt eller delvist afhængigt af den angivne OffsetQty. Hvis der f.eks. . er reserveret 100 vareenheder, kan du angive OffsetQty: 10 for at afreservere 10 af det oprindeligt reserverede antal.

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å brødtekstens 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å et korrekt svarindhold.

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

Bemærk!

Når OffsetQty i svaret er mindre end eller lig med reservationsantallet, vil processingStatus være "success", og totalInvalidOffsetQtyByReservId vil være 0.

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

Hvis reservationen f.eks. har et antal på 10 og OffsetQty har en værdi på 12, vil værdien af totalInvalidOffsetQtyByReservId være 2.

Tilbagefør flere reservationshændelser

Denne API er en bulkversion af API'en for enkelthændelser.

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

Oprydning i reservationsdata

API'en rydde op i reservationsdata bruges til at rydde op i historiske reservationsdata. Kroppen skal være en liste over datakilder. Hvis listen er tom, vil alle datakilder blive ryddet 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"
    ]

Forespørg om disponibelt antal

Brug API'en Forespørg om disponibelt antal til at hente aktuelle data om disponibelt antal for dine produkter. Du kan bruge denne API, når du skal kende lageret, f.eks. hvornår du vil gennemse produktlagerniveauer på e-handelswebstedet, eller når du vil kontrollere, om produktet er tilgængeligt i flere områder eller i nærliggende butikker og lagersteder. API'en understøtter i øjeblikket forespørgsler på op til 5000 individuelle varer efter productID-værdi. Der kan også angives flere siteID- og locationID-værdier i hver forespørgsel. Når datapartitionsreglen angives til Efter lokalitet, defineres maksimumgrænsen af følgende ligning:

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

Forespørgsel ved hjælp af opslagsmetoden

Forespørgslen efter opslags-API er tilgængelig i to versioner. Forskellene skitseres i følgende tabel.

API version 1.0 API-version 2.0
Du kan kun forespørge på ét organisations-id. Du kan forespørge på flere organisations-noget.
Kan forespørge på op til 10.000 kombinationer af lokationer og lagersteder. Kan forespørge på mere end 10.000 kombinationer af organisations-,lokations- og lagersteder. Kan returnere resultater på flere sider.

Følgende undersektioner viser, hvordan du kan bruge hver enkelt API-version.

Forespørgsel efter opslag af 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 er dimensionDataSource en valgfri parameter. Hvis den ikke er angivet, behandles filters som basisdimensioner.

Parameteren returnNegative bestemmer, om resultaterne indeholder negative poster.

Forespørge på data, der opbevares efter lokalitet

Dette afsnit gælder, når datapartitionsreglen er angivet til Efter lokalitet.

  • organizationId skal være en matrix, der indeholder nøjagtigt én værdi.
  • productId kan indeholde en eller flere værdier. Hvis det er en tom matrix, vil systemet returnere alle produkter for de angivne steder og lokationer. Her bør siteId og locationId ikke være tomme.
  • siteId og locationId bruges til partitionering. Du kan angive mere end én siteId og locationId-værdi i en Forespørgselsanmodning. Hvis begge matricer er tomme, vil systemet returnere alle steder og lokationer for de angivne produkter. Her bør productId ikke være tom.

Vi anbefaler, at du bruger parameteren groupByValues på en måde, der stemmer overens med din indekskonfiguration. Du kan få flere oplysninger i Tilgængelig indekskonfiguration.

Forespørge på data, der er gemt efter produkt-id

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

  • organizationId skal være en matrix, der indeholder nøjagtigt én værdi.
  • productId skal være en matrix, der indeholder mindst én værdi.

I modsætning til når du gemmer data efter lokation, aggregeres lageroplysningerne for hvert produkt-id ikke på tværs af alle steder og/eller lokationer, hvis du ikke angiver værdier for siteId og locationId.

Bemærk

Hvis du har aktiveret funktionerne til ændringsplan for disponibelt antal og disponibel til tilsagn (DTT), kan forespørgslen også indeholde den booleske QueryATP-parameter, der bestemmer, om forespørgselsresultaterne omfatter DTT-oplysninger. Du kan finde flere oplysninger og eksempler i Ændringsplaner for disponibelt antal og disponibel til tilsagn i lagersynlighed.

Følgende er et eksempel på brødtekst. Den viser, at du kan forespørge på den lagerbeholdning, der er på lager fra flere lokationer (lagersteder).

{
    "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 vises, hvordan du forespørger på alle produkter på en bestemt lokation og lokation.

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

Forespørgsel efter opslag af 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 formatet for version 1.0, men understøtter også to valgfri parametre: pageNumberpageSize og giver systemet mulighed for at opdele et enkelt stort resultat i flere mindre dokumenter. Resultaterne sorteres efter lagersted (locationId), og parametrene bruges på følgende måde til at opdele resultater i sider:

  • pageSize opretter antallet af lagersteder (værdierlocationId ), der returneres på hver side.
  • pageNumber opretter det sidenummer, der returneres.

En anmodning om dette format returnerer data for den tilgængelige lagerbeholdning fra og med lagerstedsnummer({pageNumber} − 1× og {pageSize} medtager data for de næste {pageSize} lagersteder.

API version 2.0 svarer på 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 til det sidste lagersted (locationId), nextLink er værdien en tom streng.

API version 2.0 giver dig også mulighed for at angive mere end ét organisations-id i anmodningen. Dette kan du gøre ved at medtage en kommasepareret liste over organisations-i filteret organizationId for anmodningsdokumentet. f.eks. "organizationId": ["org1", "org2", "org3"].

Forespørgsel ved hjælp af hentningsmetoden

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å en URL-adresse. Denne anmodning er nøjagtigt den samme som det opslagseksempel, som 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 på lager via flere organisations-id'er med GET-metoden.

Forespørgsel om disponibel lagerbeholdning

Forespørgsler, der er nøjagtige for den findes, ligner almindelige forespørgsler på findes, men de giver dig mulighed for at angive et tilknytningshierarki mellem en lokation og en lokation. Du kan f.eks. have følgende to websteder:

  • Websted 1, som er tilknyttet lokation A
  • Websted 2, som er tilknyttet lokation B

Til en almindelig beholdningsforespørgsel skal du angive "siteId": ["1","2"] og "locationId": ["A","B"], vil lagersynlighed automatisk forespørge på resultatet for følgende websteder og lokationer:

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

Som du kan se, anerkendes det i den almindelige forespørgsel ikke, at lokation A kun findes i websted 1, og lokation B findes kun i websted 2. Den foretager derfor overflødige forespørgsler. For at tilpasse denne hierarkiske tilknytning kan du bruge en præcis hierarkisk forespørgsel og angive lokalitetstilknytninger i forespørgselsteksten. I dette tilfælde forespørger og modtager du kun resultater for websted 1, lokation A og websted 2, lokation B.

Forespørgselsforespørgsel for den nøjagtige findes ved hjælp af opslagsmetoden

Den nøjagtige disponible forespørgsel efter opslags-API er tilgængelig i to versioner. Forskellene skitseres i følgende tabel.

API version 1.0 API-version 2.0
Du kan kun forespørge på ét organisations-id. Du kan forespørge på flere organisations-noget.

Den nøjagtige espspørgsel efter 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 er dimensionDataSource en valgfri parameter. Hvis den ikke er angivet, behandles dimensions i filters som basisdimensioner. Der er fire obligatoriske felter til filters: organizationId, productId, dimensions og 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 matricen dimensions er siteId og locationId påkrævet, hvis og kun hvis datapartitionsreglen er angivet til Efter placering. I dette tilfælde vises de muligvis med andre elementer i vilkårlig rækkefølge.
  • values kan indeholde en eller flere specifikke tupler af værdier, der svarer til dimensions.

dimensions i filters bliver automatisk føjet til groupByValues.

Parameteren returnNegative bestemmer, om resultaterne indeholder negative poster.

Følgende er et eksempel på brødtekst.

{
    "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 vises, hvordan du forespørger på alle produkter på flere steder og lokationer.

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

Den nøjagtige espspørgsel efter 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 er forskellig fra version 1.0 på følgende måder:

  • Området filters indeholder nu et felt keys i stedet for et dimensions felt. Feltet keys fungerer på samme måde som dimensions feltet i version 1.0, men det kan nu også medtages organizationId. Du kan angive nøglerne i vilkårlig rækkefølge.
  • Området filters understøtter ikke længere organizationId feltet. I stedet kan du medtage organizationIdkeys blandt dimensionerne i feltet (f.eks. keys: ["organizationId", "siteId", "locationId"].) og definere værdier for organisations-id på matchningspositionen values i feltet (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 tilgængelige forespørgsels-API'er er forbedret for at understøtte produktsøgning:

Note

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

Forudsætninger

Før du kan begynde at bruge produktsøgnings-API'erne, skal dit system opfylde følgende krav:

Produktsøgekontrakt

Produktsøgekontrakt definerer reglerne for kommunikation med produktsøgnings-API'erne. Den giver en standardiseret måde at beskrive egenskaberne og funktionaliteten for produktsøgningsmulighederne. Derfor kan brugere lettere forstå, interagere med og bygge applikationer, der forbruger API'erne til lagersynlighed.

Følgende er et eksempel på en prøvekontrakt.

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

De felter, der bruges i kontrakten, er beskrevet i følgende tabel.

Felt-id Betegnelse
logicalOperator De mulige værdier er And og Or. Brug dette felt til at forbinde flere betingelser eller betingelser og underfiltre. Bemærk, at subFilters faktisk er et productFilter- eller attributeFilter-objekt. Derfor kan du have subFilters inde i subFilters.
conditionOperator De mulige værdier er IsExactly, IsNot, Contains, DoesNotContain, BeginsWith, IsOneOf, GreaterEqual, LessEqual og Between.
ProductFilter Brug dette felt til at filtrere produkter efter produktrelaterede oplysninger. For eksempel kan du ændre productName i kontrakten til Company, itemNumber, productSearchName, productType, productName, productDescription, inventoryUnitSymbol, salesUnitSymbol eller purchaseUnitSymbol for at indpasse din virksomheds behov.
AttributeFilter Brug dette felt til at filtrere produkter efter attributrelaterede oplysninger.
attributeArea De mulige værdier 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 er et eksempel på brødtekst.

{
    "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 korrekt 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 er et eksempel på brødtekst.

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

Disponibel til tilsagn

Du kan konfigurere lagersynlighed, så du kan planlægge fremtidige ændringer af disponibelt antal og beregne DTT-mængder. DTT er antallet af en vare, der er tilgængelig og kan være lovet til en kunde i den næste periode. Brug af DTT-beregningen kan øge ordreopfyldningsfunktionaliteten væsentligt. Du kan få oplysninger om, hvordan du aktiverer denne funktion, og hvordan du bruger lagersynlighed via API'en, når funktionen er aktiveret, i Ændringsplaner for disponibelt antal og disponibel til tilsagn i lagersynlighed.

Tildeling

Fordelingsrelaterede API'er findes i Fordeling af lagersynlighed.