Custom services - API request and response using X++
Creating custom services:
Requirement: D365 FO Received request from external application, read the request within D365 FO and response back to external application from D365 FO.
Request body:
{
"_request": {
"SalesId": ["TestSO001", "TestSO002"]
}
}
Response body:
{
"OrderDetails": [
{
"order_number": "TestSO001",
"ShipmentTrack": ["Track-01"]
},
{
"order_number": "TestSO001",
"ShipmentTrack": ["Track-02", "Track-03"]
}
]
}
To achieve above request and response JSON, we need to create few contract classes and to communicate external application, we need to create service and service group objects. AppId and secrets key needs to setup under D365 FO AAD.
Request Contract class:
[datacontractattribute]
public class XYZ_ShipmentRequest
{
DataAreaId dataAreaId;
List salesOrderList;
[DataMemberAttribute('DataAreaId')]
public SalesId
ParmDataAreaId(str _dataAreaId = dataAreaId)
{
dataAreaId =
_dataAreaId;
return
dataAreaId;
}
[DataMemberAttribute('SalesId')]
public List
parmSalesOrder(List _salesOrderList = salesOrderList)
{
salesOrderList
= _salesOrderList;
return
salesOrderList;
}
}
Response Contract:
[DataContractAttribute]
public class XYZ_ShipmentResponse
{
List line;
[DataMemberAttribute("OrderDetails"),AifCollectionTypeAttribute("OrderDetails",types::class,
classstr(XYZ_ShipmentOrderResponse)),
AifCollectionTypeAttribute("Return",types::class, classstr(XYZ_ShipmentOrderResponse))]
public List
parmLine(List _line = line)
{
line = _line;
return line;
}
}
public class XYZ_ShipmentOrderResponse
{
SalesId salesId;
List trackingNumber;
[DataMemberAttribute("order_number")]
public SalesId
parmOrderNumber(SalesId _salesId = salesId)
{
salesId =
_salesId;
return
salesId;
}
[DataMemberAttribute("ShipmentTrack")]
public List
parmTrackingNumber(List _trackingNumber = trackingNumber)
{
trackingNumber
= _trackingNumber;
return
trackingNumber;
}
}
Service class:
using Newtonsoft.Json;
public class XYZ_ShipmentService
{
public Object
create(XYZ_ShipmentRequest _request)
{
Object jsonString;
XYZ_ShipmentResponse salesOrderResponse;
XYZ_ShipmentOrderResponse
salesOrderLineResonse;
SalesId salesId;
List orderList = new
List(Types::Class);
List SalesOrderList = new
List(Types::Class);
Map map = new Map (Types::IXYZger,
Types::String);
salesOrderList
=
_request.ParmSalesOrder();
ListEnumerator
ListLineEnumerator =
salesOrderList.getEnumerator();
while(ListLineEnumerator.moveNext())
{
changecompany(_request.ParmDataAreaId())
{
salesId = ListLineEnumerator.current();
List trackingNumberList = new
List(Types::String);
trackingNumberList.addEnd(this.getTrackingNumber(salesLine.RecId));
salesOrderLineResonse
= new XYZ_ShipmentOrderResponse();
salesOrderLineResonse.parmOrderNumber(salesId);
salesOrderLineResonse. parmTrackingNumber(trackingNumberList);
orderList.addEnd(salesOrderLineResonse);
}
}
}
salesOrderResponse = new XYZ_ShipmentResponse();
salesOrderResponse.parmLine(orderList);
jsonString = salesOrderResponse;
return
jsonString;
}
Create Service and Service Group and pass service class and service class method on service object.
Construct service URL/API URL:
D365 base url/api/services/ServiceGroup_Name/Service_Name/Method_Name
Comments
Post a Comment