Inkoopaanvraag via eigen OCI-koppeling inrichten (Profit-definitie)

Profit kent een standaard OCI-definitie (de Profit-definitie) die bedoeld is voor koppelingen die niet door AFAS onderhouden worden. AFAS levert standaard OCI-koppelingen uit met verschillende leveranciers. Het activeren van zo'n koppeling is een kwestie van je gebruikersnaam en wachtwoord invullen en je kunt gaan bestellen.Staat jouw leverancier niet in de lijst met standaardkoppelingen? Dan kun je je leverancier vragen om een koppeling met InSite te maken.

In dit artikel is gave nieuwe functionaliteit verwerkt die wordt uitgeleverd met een patch op Profit 4.

Vanaf Profit 4 kun je de contactgegevens van een aanvrager/besteller van een OCI-inkoopaanvraag meesturen met de cXML van de uiteindelijke inkooporder. Handig voor de leverancier om deze contactgegevens te hebben voor het afleveren van de goederen of voor op het afleveretiket.

OCI-koppeling ontwikkelen

Een OCI-koppeling ontwikkelen op basis van de standaard Profit OCI-definitie bestaat uit drie stappen:

  1. De gebruiker vanuit InSite automatisch aanmelden in de webshop van de leverancier
  2. De gebruiker terugsturen naar InSite met daarbij de details van het winkelmandje
  3. De definitieve inkooporder exporteren naar de leverancier via een XML-bestand

Hieronder leggen we per stap uit hoe je dit kunt ontwikkelen.

Voorbeeld cXML-bestand:

Raadpleeg een voorbeeld van het cXML-bestand hier.

Voorbeeld cXML-bestand btw, artikelcode en artikelgroep via andere (extra) velden aanbieden:

Raadpleeg een voorbeeld van het cXML-bestand hier.

Inhoud

1. De gebruiker vanuit InSite automatisch aanmelden in de webshop van de leverancier

Vanuit InSite kan een gebruiker automatisch aangemeld worden in de webshop van de leverancier. Hiervoor leg je in het OCI-profiel vast wat de aanmeld-URL van de leverancier is en welke gebruikersnaam en wachtwoord daarbij gebruikt moeten worden.

In dit artikel is gave nieuwe functionaliteit verwerkt die beschikbaar is vanaf Profit 5.

De aanmeld-URL leg je vast in de velden Productie-URL (verplicht) en Test-URL (eventueel) in de eigenschappen van het OCI-profiel.

Per inkooprelatie met wiens webshop je gaat koppelen via OCI leg je minstens één OCI-profiel vast. Dat mogen er ook meerdere per inkooprelatie zijn, bijvoorbeeld één voor iedere vestiging die je hebt, of per groep producten.

Inkooprelatie toevoegen

Neem contact op met de inkooprelatie

Neem contact om met je inkooprelatie.

Van hen zul je de Gebruikersnaam en Wachtwoord ontvangen voor toegang tot de webshop. Het kan zijn dat de leverancier in zijn systeem nog aanpassingen moet doen om de OCI-koppeling met jouw organisatie goed te laten werken.

Als je de inkooporder via XML-order naar de inkooprelatie verstuurt, kan het zijn dat je van hen ook een Gebruikersnaam export en het Wachtwoord ontvangt. Bij een zelfgemaakte OCI-koppeling lees je hier meer over hoe je de gegevens samenstelt.

OCI-profiel toevoegen

Bij OCI-profiel koppel je de inkooprelatie. Profit wijzigt automatisch de verstrekkingswijze bij de inkooprelatie.

  1. Ga naar: Ordermanagement / Beheer / Inrichting / OCI-profiel.
  2. Klik op: Nieuw.
  3. Selecteer bij Inkooprelatie de inkooprelatie met wie je de OCI-koppeling wilt vastleggen.
  4. Wijzig de Omschrijving. Deze omschrijving zie je terug in InSite als je moet selecteren welke definitie geldt.

    Profit zal standaard de naam van de inkooprelatie overnemen naar de omschrijving. Je kunt echter meerdere OCI-profielen per inkooprelatie hebben. Het is daarom verstandig een onderscheidende omschrijving te hebben.

    Je voegt bijvoorbeeld één profiel per vestiging in. Vul dan als omschrijving Manutan Amsterdam en bij een volgende Manutan Utrecht in zodat de gebruiker eenvoudig een keuze kan maken.

  5. Selecteer bij OCI-definitie de definitie die bij de inkooprelatie hoort.

    Een OCI-definitie is een per inkooprelatie gecertificeerde koppeling met AFAS die een beschrijving van de velden bevat.

    Let op:

    Als je een meegeleverde OCI-definitie selecteert van een inkooprelatie, worden de gegevens automatisch gevuld. Deze gegevens kun je niet wijzigen.

    Bij het selecteren van de standaard OCI-definitie Profit moet je zelf alle gegevens van het profiel invullen. Deze definitie is bedoeld voor kleinere inkooprelaties die geen eigen gecertificeerde koppeling hebben, maar zich aan de Profit-standaard willen conformeren.

    Een OCI-definitie bevat een importdefinitie en een exportdefinitie. In de importdefinitie staat hoe Profit het OCI-bericht van de inkooprelatie verwerkt tot artikelen, eenheden en inkoopaanvraagregels. In de exportdefinitie staat de opbouw van de ‘XML-order’ (de digitale inkooporder) die Profit verstrekt aan de inkooprelatie.

  6. Klik opVolgende.
  7. Vul, als je de Profit-OCI-definitie aan het inrichten bent, de Productie-URL (verplicht) en de Test-URL (optioneel) in. Voor deze definitie moet je de gegevens van de inkooprelatie ontvangen.

    Voor de OCI-definities per inkooprelatie hoef je niets in te vullen, Profit levert deze gegevens standaard mee.

  8. Vul de Gebruikersnaam en het Wachtwoord in die je ontvangen hebt.
  9. Vink Test-URL toepassen aan als je nog in de testfase bent. Deze moet je na het testen, op het moment van live gaan weer uit zetten.
  10. Vul de velden bij Export instellingen als je nu een OCI-profiel met XML-order aan het inrichten bent en je wilt de inkooporders via XML-order aanleveren bij de inkooprelatie.

    1. Vul bij Export-URL een adres in als dit niet verschijnt zodra je de OCI-definitie selecteert. Je bent dan waarschijnlijk de Profit OCI-definitie aan het inrichten. Het adres zul je dan van de inkooprelatie ontvangen. Bij de OCI-definities per inkooprelatie is dit veld al gevuld als aanleveren via XML-order mogelijk is.
    2. Vul bij Export-Test-URL het adres in waarmee je kunt testen. Als dit niet verschijnt, vraag dan je inkooprelatie.
    3. Vul eventueel deGebruikersnaam export en het bijbehorende Wachtwoord in als je die hebt ontvangen van de inkooprelatie voor het aanleveren van de XML-order. Als de inkooprelatie deze bepaalt, worden deze met het OCI-profiel opgehaald.
    4. Vul de Shared Secret in als je die bent overeengekomen met de inkooprelatie.

      Zie ook: Shared secret in OCI-koppeling

    5. Vink, als je wilt testen, Export-Test-URL aan. Als je deze niet aanvinkt, gebruikt Profit als adres de gegevens bij Export-URL.
  11. Klik opVolgende.

    Vervolgens vul je de voorkeurswaarden in die Profit in de inkoopaanvraag in InSite invult.

  12. Selecteer bij Voorkeur artikelgroep de artikelgroep waar Profit de artikelen die je via de webshop bestelt, moet opslaan.

    Dit zijn bestaande artikelgroepen. Je kunt ook van tevoren een specifieke artikelgroep toevoegen, of na opslaan van dit profiel, in dit OCI-profiel wijzigen.

  13. Vul de voorkeurswaarden bij de verbijzonderingsas-velden in. In dit voorbeeld zijn dat de vestiging en de afdeling namens welke de inkoopaanvraag ingediend wordt. Dit zal ook vaak Kostenplaats zijn.
  14. Selecteer eventueel een contract bij Contract.
  15. Selecteer eventueel bij Boekingslay-out een speciale boekingslay-out die je hebt toegevoegd voor dit OCI-profiel (gebaseerd op Aanpassen mijn inkoopaanvraag InSite). Deze toont Profit aan de instuurder zodra deze de inkoopaanvraag in InSite ziet na het bestellen op de website van de leverancier.
  16. Selecteer eventueel voorkeurswaarden bij de velden voor de levering van de artikelen.
  17. Vul eventueel bij Nr. debiteur (leverancier) de code in die je van de leverancier hebt ontvangen. Als het gegeven verplicht is wordt het in de koppeling gebruikt.

    Het kan bij een aantal koppelingen zijn dat je hier het GLN-nummer moet invullen. Dit is alleen nodig bij OCI met XML-orders zoals voor de Technische Unie.

  18. Klik opVolgende.
  19. Selecteer een afbeelding. Standaard levert Profit per OCI-definitie een logo van de inkooprelatie mee. Deze wordt in InSite getoond als knop zodat de gebruiker direct herkent waar hij moet klikken voor het doen van zijn bestelling.
  20. Klik op: Voltooien.

Zodra je het OCI-profiel hebt toegevoegd, voegt Profit bij de inkooprelatie als de verstrekkingswijze de verstrekking XML-order toe. Deze wordt gebruikt om de inkooporder te verstrekken.

Als in het OCI-profiel de Export-URL ontbreekt, zet Profit de verstrekkingswijze automatisch op E-mail PDF.

Als je het OCI-profiel verwijdert, wordt ook de verstrekkingswijze automatisch verwijderd. Overigens kun je het niet meer verwijderen als er al mutaties op het profiel zijn.

OCI-profielen kun je ook kopiëren.

Een voorbeeld van een aanmeld-URL is als volgt:

https://www.leverancier.demo/webshop/login?USERNAME={gebruikersnaam}&PASSWORD={wachtwoord}

De aanmeld-URL kent de volgende parameters die automatisch door Profit gevuld worden:

  • {gebruikersnaam}: De gebruikersnaam die in het OCI-profiel ingericht is.
  • {wachtwoord}: Het wachtwoord dat in het OCI-profiel ingericht is.
  • {debiteurnummer}: Het is mogelijk om in het Profit OCI-profiel het debiteurnummer als variabele in de URL mee te geven als hier door de leverancier om wordt gevraagd. Deze waarde wordt uit het profiel opgehaald op het tabblad 'Voorkeurwaarden' bij het veld 'Nr. debiteur (leverancier)'. Deze parameter geef je zo mee: {debiteurnummer} Dit ziet er dan bijvoorbeeld zo uit: https://www.leverancier.demo/webshop/login?USERNAME={gebruikersnaam}&PASSWORD={wachtwoord}&CUSTOMER={debiteurnummer}
  • De vierde parameter die mogelijk is (vanaf Profit 5) is de tag {uniqueid}: Dit is een extra parameter om het winkelmandje uniek te maken. Hiermee wordt bij elke aanroep een unieke GUID gegenereerd en voorkomt dat gebruikers in elkaars winkelmandje terechtkomen.

Zodra de gebruiker naar de webshop van de leverancier gestuurd wordt, wordt automatisch de parameter HOOK_URL toegevoegd aan de URL. Dit is de URL van InSite waarnaar de gebruiker teruggestuurd moet worden in stap 2. De definitieve URL waarmee de gebruiker aankomt bij de webshop van de leverancier kan er dus als volgt uitzien:

https://www.klant.demo/shop/login?USERNAME=gebruiker&PASSWORD=wachtwoord&HOOK_URL=https://insite.afas.online/postdatacallback/demo2c0b

De webshop van de leverancier kan vervolgens de gebruikersnaam en het wachtwoord valideren en daarmee de gebruiker automatisch aanmelden.

2. De gebruiker terugsturen naar InSite met daarbij de details van het winkelmandje

Nadat de gebruiker het winkelmandje gevuld heeft, moeten de details van het winkelmandje teruggestuurd worden naar InSite. Daar kan dan de inkoopaanvraag gemaakt worden ter goedkeuring door een budgethouder of leidinggevende. Dit gebeurt door de gebruiker via een HTTPS POST naar de hook_url uit stap 1 terug te sturen.

Die HTTPS POST wordt vergezeld van een gegevensverzameling van productspecificaties. Bij terugkomst in InSite vindt aan de hand van de token in de hook_url een validatie plaats ten behoeve van veiligheid en integriteit.

De volgende velden worden per product ondersteund bij de gegevensverzameling van productspecificaties:

  • NEW_ITEM-VENDORMAT: artikelcode van de leverancier (maximaal 30 tekens)
  • NEW_ITEM-DESCRIPTION: omschrijving
  • NEW_ITEM-MATGROUP: productgroep van de leverancier
  • NEW_ITEM-QUANTITY: aantal eenheden
  • NEW_ITEM-UNIT: eenheidscode
  • NEW_ITEM-PRICE: prijs per eenheid
  • NEW_ITEM-PRICEUNIT: prijsfactor
  • NEW_ITEM-CUST_FIELD1: btw-percentage
  • NEW_ITEM-CUST_FIELD2: Verwachte leverdatum, formaat DD-MM-YYYY (in de boekingslay-out heet dit veld Gewenste leverdatum)
  • NEW_ITEM-CUST_FIELD3: Referentie inkooprelatie (we kappen dit veld automatisch af op 50 tekens)
  • Opmerking

    Het veld Opmerking in de inkoopaanvraagregel wordt als volgt opgebouwd:

    • Als NEW_ITEM-LEADTIME (Dit veld wordt vanuit het bericht van de webshop vertaald naar het Profit-veld “AFASFbLeadtime” in de tabel ‘OCI record’) groter is dan 0, dan wordt de tekst: "Dagen levertijd: [waarde uit het veld]" getoond.
    • Als NEW_ITEM-LONGTEXT_n:132 (Dit veld wordt vanuit het bericht van de webshop vertaald naar het Profit-veld “AfasFblongtext_132" in de tabel ‘OCI record’) een waarde bevat dan wordt de tekst als volgt: "TOELICHTING: [waarde uit het veld].
  • Als beide velden gevuld zijn, worden beide waarden toegevoegd in het veld. Ze staan dan onder elkaar met het aantal dagen levertijd als eerste.

    Het is nu mogelijk om btw, artikelcode en artikelgroep via andere (extra) velden aan te bieden.

    Btw kan voorkomen in deze vier velden: NEW_ITEM-CUST_FIELD1, NEW_ITEM-VATPERCENTAGE, NEW_ITEM-VAT_PCT en NEW_ITEM-VAT.

    Als het eerste veld leeg is (niet gevonden) wordt mogelijk het 2e veld gebruikt. enz.

    ItemCode kan voorkomen in deze twee velden: NEW_ITEM-VendorMat en NEW_ITEM-Ext_Product_ID

    ArticleGroup kan voorkomen in deze twee velden: NEW_ITEM-MatGroup en NEW_ITEM-Ext_Category

HTTPS POST-verzoek initiëren

Een eenvoudige manier om via HTML het HTTPS POST-verzoek te initiëren is via onderstaande code:

<form method="post" action="https://insite.afas.online/postdatacallback/demo2c0b7045b14412e43b2a70f1c1a69Fst">

<input type="hidden" name="NEW_ITEM-VENDORMAT[1]" value="oci603524" />

<input type="hidden" name="NEW_ITEM-DESCRIPTION[1]" value="OCI punch out import item oci603524" />

<input type="hidden" name="NEW_ITEM-MATGROUP[1]" value="MATGROUP187" />

<input type="hidden" name="NEW_ITEM-QUANTITY[1]" value="614" />

<input type="hidden" name="NEW_ITEM-UNIT[1]" value="PCS" />

<input type="hidden" name="NEW_ITEM-PRICE[1]" value="178.59" />

<input type="hidden" name="NEW_ITEM-CUST_FIELD1[1]" value="21.0" />

<input type="submit" value="Bestellen in ERP-systeem" />

</form>

3. De definitieve inkooporder exporteren naar de leverancier via een XML-bestand

Nadat de inkoopaanvraag via de workflow in InSite goedgekeurd is, kunnen we de gegenereerde inkooporder via een XML-bestand in een HTTPS POST exporteren naar de leverancier. Op die manier kan de bevestigde order automatisch in de backoffice van de leverancier ingelezen worden.

Om de inkooporders via een XML-bestand te exporteren naar de leverancier is het communicatieprofiel Digitale inkooporders nodig. Deblokkeer hiertoe het communicatieprofiel via deze stappen als je dit nog niet hebt gedaan.

De XML-order wordt opgebouwd op basis van exportdefinitie van de OCI-definitie van het OCI-profiel van de inkooporder. Profit verzendt de XML naar de Export-url uit het OCI-profiel. Dit is dus per inkooprelatie anders en daarom vul je geen verbindingsgegevens in.

Communicatieprofiel inrichten:

  1. Ga naar: Algemeen / Communicatieservice / Communicatieprofiel.
  2. Open het communcatieprofiel: Digitale inkooporders.
  3. Ga naar het tabblad: Algemeen.
  4. Verwijder de vink bij Geblokkeerd.
  5. Ga eventueel naar het tabblad: .
  6. Klik op: Opslaan en sluiten.

Naast HTTP en HTTPS is het ook mogelijk FTPs (ftps://) en sFTP orders te verstrekken. Profit kijkt naar het protocol van de Export-URL en test Export-URL en bepaalt aan de hand daarvan het juiste pad.

De export-URL leg je vast in het veld Export-URL op de eigenschappen van het OCI-profiel.

Let op:

Alle communicatie naar onbekende URL's standaard wordt geblokkeerd. Stuur daarom een supportincident in om je export-URL op onze allowlist te laten plaatsen. We willen wel graag het Poortnummer weten. Vaak gewoon 443, maar check dit even voor de zekerheid.

Het XML-bestand dat verstuurd wordt, is opgemaakt conform de cXML-standaard.

Contactgegevens aanvrager/besteller in cXML order (via Patch in Profit 4)

Bij het aanmaken van een cXML order is een tag beschikbaar met de gegevens van de "aanvrager".

Wel gelden er bepaalde voorwaarden:

Er wordt gecontroleerd of er maar 1 "aanvrager" is. (Een Inkooporder kan een verzameling zijn van meerdere inkoopaanvragen).

De <Contact> tag ziet er als volgt uit:

<Contact afas-show="{{Applicant.AfasKnName}} != ''">

<Name xml:lang="en_US">{{Applicant.AfasKnName}}</Name>

<Email>{{Applicant.AfasKnEmail}}</Email>

<Phone name="Work" afas-show="{{Applicant.AfasKnTelNr}} != ''">

<TelephoneNumber>

<CountryCode isoCountryCode="{{DeliveryAddress.AfasKnCountryId}}">{{DeliveryAddress.AfasKnCountryId}}</CountryCode>

<AreaOrCityCode>N/A</AreaOrCityCode>

<Number>{{Applicant.AfasKnTelNr}}</Number>

</TelephoneNumber>

</Phone>

<Phone name="Mobile" afas-show="{{Applicant.AfasKnMobileNr}} != ''">

<TelephoneNumber>

<CountryCode isoCountryCode="{{DeliveryAddress.AfasKnCountryId}}">{{DeliveryAddress.AfasKnCountryId}}</CountryCode>

<AreaOrCityCode>N/A</AreaOrCityCode>

<Number>{{Applicant.AfasKnMobileNr}}</Number>

</TelephoneNumber>

</Phone>

</Contact>

Kort samengevat:

  • Tag is beschikbaar als er 1 aanvrager is.
  • Naam van de aanvrager.
  • E-mailadres van de aanvrager.
  • Telefoonnummer werk.
  • Telefoonnummer mobiel werk.

Direct naar

  1. Inkooporders via OCI-koppeling inrichten
  2. Inkooporder via website inkooprelatie (OCI) via mail/pdf inrichten
  3. Inkooporder via website inkooprelatie (OCI) met XML inrichten
  4. Inkooporder via website per specifieke OCI-koppeling van inkooprelatie inrichten
  5. Inkooporder via website via Profit-OCI-koppeling inrichten