If you want to, you can replace the implementation of how we take products/discounts from Dynamics and pass them to Oneflow with your own.
Note: This is an advanced tutorial addressed to people who are experienced Dynamics CRM Developers.
So, in order to replace the implementation we’ll need to register a plugin step for a ‘of_GetProductsPayload' message:
It should be synchronous and should execute on PostOperation.
When the Execute method of your plug-in is called, you’ll get the following input and output parameters:
Param Name | Direction | Data type | Description |
errorMessage | Output | string | Error details if an exception occurred |
isError | Output | bool | indicates whether an error occurred during the oob’s operation |
requestData | Input | string | JSON string, contains the agreementId in oneflow and opportunityId of the opportunity in Dynamics to take the products from. |
result | Output | string | resulting JSON string of products to add to the oneflow contract. |
Examples:
requestData format:
{requestData: "{"opportunityId":"E01D4725-8E1D-EA11-A811-000D3AB409EA","agreementId":1107536}"}
result format:
{"agreementId":1107552,"payload":{"items":[{"name":"Greatest Product ever","price":15.0000,"quantity":2},{"description":"Discount for Greatest Product ever","discount":"5.0000","name":"Discount","price":0,"quantity":1},{"description":"Glasses","name":"Glasses","price":15.0000,"quantity":1},{"description":"","name":"Tax","price":10.0000,"quantity":1},{"description":"","discount":"3.9500","name":"Discount for the whole order","price":0,"quantity":1}]}}
The payload field contains a JSON that’s passed to Oneflow API directly.
You can read more about the object in Oneflow API docs at https://app.oneflow.com/api/docs/api/agreements.html#post--api-agreements-(int-agreement_id)-products-
Alright, so now, if you want to have your own implementation of products, you just need to replace the original result json with your own, like so:
- string requestData = (string)context.ExecutionContext.InputParameters["requestData"];
- string result = (string)context.ExecutionContext.OutputParameters["result"];
- bool isError = (bool)context.ExecutionContext.OutputParameters["isError"];
- string errorMessage = (string)context.ExecutionContext.OutputParameters["errorMessage"];
- object oldResultParsed = JSON.Deserialize(result);
- // parse old result and process if needed
- // ...
- // ...
- // ...
- // create your own json
- object myResult = .....;
- string myResultJson = JSON.Serialize(myResult);
- context.ExecutionContext.OutputParameters["result"] = myResultJson;
That's it!