Hi Devs,
While building the offline app, we have a need to run multiple commands
because of the way Mifos separates out data into core entities and
datatables. Let's say I have a datatable for client called Client_Fields
with optional fields Email, Occupation, Country, City, StreetAddr, PIN. If
I create a client while offline with the usual fields: firstname, lastname,
dateOfBirth and so on and I also can enter the Email, Occupation, Country,
City, StreetAddr and PIN and these need to go into the Client_Fields
datatable, in online mode its as simple as:
*1. Create Client Request*
method: POST,
url: baseUrl + "/clients",
body: {
firstname: "John",
lastname: "Wayne",
dateOfBirth: "1978-05-12",
officeId: 4,
....
}
Response:
{
"officeId": 4,
"resourceId": 12,
"clientId": 12
}
2. Create Client_Fields record
method: POST
url: baseUrl + "/datatables/Client_Fields/12",
body: {
Country: "India",
City: "Kolkata",
...
}
Now, if I have to do the same set of operations offline, I don't have
connectivity to server for long periods and I need to save the additional
fields and take a client photo in the same offline session, storing the
state on the device and executing the cached commands when I come back
online. The challenge is that I don't have the client id till the client
was created and hence it's difficult to execute dependent operations like
uploading a photo or creating a datatable record which needs the client id.
While investigating this, I found the batch API and explored it, but am
stuck while trying to create datatables. Here's a sample request and
response for client create and datatable record create:
[
{
requestId: 1,
relativeUrl: "clients",
method: "POST",
body: "{ officeId: 4, firstname: 'John', lastname: 'Wayne' }"
},
{
requestId: 2,
relativeUrl: "datatables/Client_Fields/$.clientId/",
method: "POST",
reference: 1,
body: "{ Country: 'India', City: 'Kolkata' }"
}
]
The response to the first is a 200 but the second yields a 501 Resource
datatables/Client_Fields/216 does not exist. However if I POST the same
content manually to the same generated URL datatables/Client_Fields/216,
I'm able to successfully create the datatable record. Is datatables
supported in the Batch API and this the expected behaviour for this kind of
input or should I report a Jira issue if I want this feature?
As an extension of the same requirement, lets say I wanted to upload a
photo and I have the base64 photo in a string in my application. Can I
substitute the request above with this:
{
requestId: 2,
relativeUrl: "client/$.clientId/images",
method: "POST",
reference: 1,
body: "...."
}
Is this supported and would it work?
--
Best Regards,
Terence Monteiro
,
www.sanjosesolutions.in