<flow name="createPurchaseOrderFlow">
<mcp:tool-listener config-ref="MCP_Server" name="create-concur-purchase-order"> <<1>>
<mcp:description>Create a new purchase order in SAP Concur with validation</mcp:description>
<mcp:parameters-schema><![CDATA[{ <<2>>
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name for the purchase order.",
"minLength": 1,
"maxLength": 100
},
"description": {
"type": "string",
"description": "Purchase order description.",
"minLength": 1,
"maxLength": 500
},
"vendorCode": {
"type": "string",
"description": "Code that identifies the vendor.",
"pattern": "^[A-Z0-9]{3,10}$"
},
"itemDescription": {
"type": "string",
"description": "Description of the item purchased in this order.",
"minLength": 1,
"maxLength": 200
},
"price": {
"type": "number",
"description": "Monetary amount of the purchase order.",
"minimum": 0.01,
"maximum": 999999.99
},
"currency": {
"type": "string",
"description": "Currency code for the purchase order monetary amount.",
"pattern": "^[A-Z]{3}$"
}
},
"required": ["name", "description", "vendorCode", "itemDescription", "price", "currency"]
}]]></mcp:parameters-schema>
<mcp:responses>
<mcp:text-tool-response-content text="#['Created Purchase Order: $(payload.PurchaseOrderNumber)']" />
</mcp:responses>
<mcp:on-error-responses>
<mcp:text-tool-response-content text="#['Error creating purchase order: $(error.description)']" />
</mcp:on-error-responses>
</mcp:tool-listener>
<!-- Validate vendor exists -->
<sap-concur:get-vendors config-ref="SAP_Concur_Config"> <<3>>
<sap-concur:query-params><![CDATA[#[output application/java
---
{
vendorCode: payload.vendorCode
}]]></sap-concur:query-params>
</sap-concur:get-vendors>
<ee:transform> <<4>>
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
if (isEmpty(payload.Vendor))
throw "Vendor not found: " ++ payload.vendorCode
else
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
<sap-concur:create-purchase-order config-ref="SAP_Concur_Config">
<sap-concur:create-purchase-order-request-data><![CDATA[#[output application/json
---
{
Name: payload.name,
CurrencyCode: payload.currency,
Description: payload.description,
VendorCode: payload.vendorCode,
LineItem: {
Description: payload.itemDescription,
ApprovedLineItemAmount: payload.price as String,
TotalPrice: payload.price as String
}
}]]></sap-concur:create-purchase-order-request-data>
</sap-concur:create-purchase-order>
<error-handler> <<5>>
<on-error-continue type="SAP-CONCUR:CONNECTIVITY">
<set-payload value="#['Error connecting to SAP Concur: $(error.description)']"/>
</on-error-continue>
<on-error-continue type="SAP-CONCUR:AUTHENTICATION">
<set-payload value="#['Authentication error with SAP Concur: $(error.description)']"/>
</on-error-continue>
<on-error-continue type="SAP-CONCUR:VALIDATION">
<set-payload value="#['Validation error: $(error.description)']"/>
</on-error-continue>
<on-error-continue type="ANY">
<set-payload value="#['Unexpected error: $(error.description)']"/>
</on-error-continue>
</error-handler>
</flow>