You can replace the implementation of how we take products and discounts from Dynamics and pass them to Oneflow.
Note:
This article is an advanced tutorial for experienced Dynamics CRM Developers.
Register plugin
- So, for us to replace the implementation, we’ll need to register a plugin step for an of_GetProductsPayload message:

Note:
It should be synchronous and should execute on PostOperation.
- When the Executemethod of your plugin is called, you’ll get the following input and output parameters:
Param name | Direction | Data type | Description |
|---|---|---|---|
requestData | Input | string | JSON string contains the agreementId in Oneflow and opportunityId of the opportunity in Dynamics to take the products from. |
isError | Output | bool | Indicates whether an error occurred during the out-of-the-box operation |
errorMessage | Output | string | Error details if an exception occurred. |
result | Output | string | Resulting JSON string of products to add to the Oneflow contract. |
Examples
RequestData format
{
requestData: "{"opportunityId":"E01D4725-8E1D-EA11-A811-000D3AB409EA","contractId":1107536}"
}Result format
[
{
"products": [
{
"description": "description of the greatest product",
"name": "Greatest Product ever",
"price_1": {
"base_amount": "15,00"
},
"quantity": {
"amount": 2,
"type": "multiple"
}
},
{
"description": "Discount for Greatest Product ever",
"name": "Discount",
"price_1": {
"base_amount": "0.00",
"discount_amount": "5,00"
},
"quantity": {
"amount": 1,
"type": "multiple"
}
},
{
"description": "Glasses",
"name": "Glasses",
"price_1": {
"base_amount": "15,00"
},
"quantity": {
"amount": 1,
"type": "multiple"
}
},
{
"description": "",
"name": "Tax",
"price_1": {
"base_amount": "10,00"
},
"quantity": {
"amount": 1,
"type": "multiple"
}
},
{
"description": "",
"name": "Discount for the whole order",
"price_1": {
"base_amount": "0.00",
"discount_amount": "3,95"
},
"quantity": {
"amount": 1,
"type": "multiple"
}
}
]
}
]The payload field contains a JSON that’s passed to Oneflow API directly.
You can read more about the object structure in Oneflow API docs at https://developer.oneflow.com/docs/product-group.
Replace JSON result
Now, if you want to have your implementation of products, you’ll need to replace the original result JSON with your own as follows:
stringrequestData=(string)context.ExecutionContext.InputParameters[ "requestData" ];stringresult=(string)context.ExecutionContext.OutputParameters[ "result" ];boolisError=(bool)context.ExecutionContext.OutputParameters[ "isError" ];stringerrorMessage=(string)context.ExecutionContext.OutputParameters[ "errorMessage" ];objectoldResultParsed=JSON.Deserialize(result);//parseoldresultandprocessifneeded//...//...//...//createyourownjsonobjectmyResult=.....;stringmyResultJson=JSON.Serialize(myResult);context.ExecutionContext.OutputParameters[ "result" ]=myResultJson;
That’s it!