Skip to main content

Response in AIF custom service class

At the previous post I already show how to customize Response Value list in AIF Document standard service, today we will talk about response in Custom AIF service class.

We already know for Custom AIF service we actually need 2 classes, one is contract for data input and one is service to process a logic. With Response class, it's literally same with contract class. They both hold parm value.

  • contract class gets parametters.

  • Response class sets return values.

1. Scenario

I want to get HcmPersonnelNumberId and HcmWorkerName of current userID on C#.NET application.

2. Solution

  • Write Custom AIF service to get Worker information, and then public this service.

  • Write C#.NET console to consume that service.

3. Walkthrough

3.1. Response class

[DataContractAttribute]
class MaxWorkerResponse
{
str gId;
str gName;
}

two value that I want to return is HcmPersonnelNumberId and HcmWorkerName, I will store it in 2 parms method

[DataMemberAttribute('HcmWorkerName')]
public HcmWorkerName parmName(HcmWorkerName _name = gName)
{
gName = _name;

return gName;
}

[DataMemberAttribute('HcmPersonnelNumberId')]
public HcmPersonnelNumberId parmId(HcmPersonnelNumberId _id = gId)
{
gId = _id;

return gId;
}

3.2. Service class

Create MaxPRService Class, This class consume through service that need to be extend SysOperationServiceBase class

class MaxPRService extends SysOperationServiceBase
{
}

Main logic

[SysEntryPointAttribute(true),
AifCollectionTypeAttribute('return', Types::String)]
public MaxWorkerResponse getEmployee()
{
HcmWorkerRecId workerRecId;
HcmPersonnelNumberId personnelNumber;
HcmWorkerName name;
MaxWorkerResponse response;

workerRecId = DirPersonUser::currentWorker();
personnelNumber = HcmWorker::find(workerRecId).PersonnelNumber;
name = HcmWorker::find(workerRecId).name();

response = new MaxWorkerResponse();

response.parmId(personnelNumber);
response.parmName(name);

return response;
}

3.3. Create service

In AOT create new service and add recent created class to that Service, in operations node add getEmployee method, you will get something likes

Respone-in-AIF-custom-service-class

Then right click service > Add-ins > Register Service.

go to AIF inbound form to create new service and add getEmployee operation to that service then Active.

3.4. Consume service

Add recent WSDL URI http://WINSERVER:8104/DynamicsAx/Services/MaxPurchReqGeneral into Service reference in C# Console project

static void Main(string[] args)
{
CallContext context = new CallContext()
{
Company = "USMF",
Language = "EN-US",
};

MaxPRServiceClient client = new MaxPRServiceClient();
MaxWorkerResponse response = client.getEmployee(context);

Console.WriteLine(response.HcmWorkerName + ", " + response.HcmPersonnelNumberId);
Console.ReadLine();
}

Thank you for reading.