top of page

PunchOut - External Catalogs via cXML protocol

By using an external catalog, you can ensure that product and price information from external websites are accurately retrieved and up to date. In that process, D365FO will redirect you to the external website where a user can add items to a shopping basket and lastly transfer such back to D365FO when checking out. After such information have been fetched to D365FO PRs, the requisition can be submitted to workflow and lastly converted to an PO after being approved. The whole process is as based on cXML protocol. The cXML script contains information such as such as Identity, domain of the buyers company, credentials, and the URL to reach the vendors catalog for example.

The below shows required configurations as well as an end to end demo on how an employee can punch out to an external website and collect the product descriptions and prices to include into the requisition that is being prepared by the employee.


- Vendor that is approved in a set of procurement categories (This is used later in the setup to create the external catalog)

- Procurement policies that allows the employee (user/worker/employee records required) to procure within the categories that will be mapped to the external catalog in the setup

- An external catalog (Since we do not have an entity for external catalogs this cannot be imported in a demo data package; for setting up the catalog you will need credentials and URL to log into a vendors website). Steps will be provided to setup the external catalog:

- Select vendor

- Map to procurement categories

- Configure the request message (cXML)


Create a new worker:

Assign the worker to the userID:

Navigate to the "All vendors" form and select a specific vendor for which you want to set up PunchOut. (here: US-104) On the Actionpane under General > Categories select the procurement categories that you would like to use throughout the PunchOut process. The vendor you use for external catalog must be approved in a set of categories.

Create an external catalog (here: External Catalog - Demo) and select a vendor (here: Fabrikam Supplier)

The external catalog is now created. As a next step, you need to map the procurement categories. Short, specify all procurement categories that are being used throughout the PunchOut process. In general, all the categories that the vendor is approved in are available to be added to the catalog. For this demo, however we simply want to map 2 categories. You can do such on the procurement category mapping tab. (here: "Highlighters" and "Pen or pencil sets" only)

The cXML message is defaulted in a form of a template. Such needs to be configured and populated with information based on the information provided by the vendor. (e.g. credentials, identity, domain, URL, etc.) In the below example, we connect to CDW as external vendor website. See a sample cXML below.

<?xml version="1.0"?>
<cXML payloadID="20170118.@dax01" timestamp="01182017 03:21:24" version="1.2.008" xml:lang="en-US">
<Credential domain="NetworkID">
<Credential domain="Duns">
<Credential domain="NetworkID">
<Request deploymentMode="test">
<PunchOutSetupRequest operation="create"><BuyerCookie>Buyercookie</BuyerCookie>
<Extrinsic name="UserEmail"></Extrinsic>
<Extrinsic name="UniqueName">admin</Extrinsic>
<Extrinsic name="CostCenter">610</Extrinsic>
<Address addressID="4601-01">
<Name xml:lang="en"/>
<PostalAddress name="4601-01">
<DeliverTo>John Doe</DeliverTo>
<Street>ShipTo: Br 0001</Street>
<Country isoCountryCode="US">United States</Country>
<ItemOut lineNumber="" quantity="0">
<Money currency=""/>
<Description xml:lang=""/>
<Classification domain=""/>
<SupplierID domain=""/>
<Money currency=""/>
<Description xml:lang=""/>
<Money currency=""/>
<Description xml:lang=""/>
<Accounting name="DistributionCharge">
<Segment description="" id="" type=""/>
<Money currency=""/>
<Name xml:lang="en"/>
<PostalAddress name="">
<Country isoCountryCode=""/>
<Email name=""/>
<Phone name="">
<CountryCode isoCountryCode=""/>
<Fax name="">
<CountryCode isoCountryCode=""/>
<URL name=""/>

As a next step, click validate settings. It will check if the configurations above are on point.

As a cherry on the cake, you can add an image to the external catalog if needed. You can do such by clicking "external catalog image" on the Actionpane and by uploading an image here. For this demo, I uploaded the below picture.

Lastly, we activate the catalog.

To make things easier for an end user in D365FO, we can additionally configure the employee self- service workspace and add the requisitions form as a tile to such. You can do that by navigating to the “Purchase requisitions prepared by me” form and adding the form to a workspace under Options/Add to workspace. See below.

The results looks as follows.


Open the Employee self-service workspace which you have configured by adding a tile with “requisitions prepared by me” earlier. Create a new requisition.

Now, click on the external catalog button on the PR lines. You can now select the correct external catalog (here: "External Catalog - Demo" as we only have one set up) Note that only catalogs that have categories that the requester has access to will appear in the dialog page.

When clicking on the catalog it self now, you will be redirected to the external website.

Select products on the CDW external website and add such to the shopping cart. (here: "Pencil" only)

As a next step, click checkout.

This allows us now to transfer the shopping cart to D365FO.

The product is transferred to a D365 “basket” where you can prepare it for being added to the requisition itself. In fact, you need to specify the correct procurement category for the fetched product at this point. As you can see you can select from the categories that were mapped to the external catalog prior. After you are done with that step, you can add the product to the requisition.

The results looks as follows:

As a next step, a user would submit the requisition to workflow. At this point, it will be processed as any other requisition in D365FO. (See more details on requisition on my previous blog

After the PR is approved, it can be firmed to a PO and processed via standard PO process.

Recent Posts

See All

1 Comment

Helena Marini
Helena Marini
Jun 10, 2022

Interesting to see the buyer side of the punchout process from a Dynamics perspective. We are a supplier and one of our customers wanted to integrate with our Magento store with the above method. I actually understood most of the article, nicely written.

If any supplier needs to do the same, we became punchout capable through

bottom of page