This isn't specific to the MAF, but Maximo will only process updates to the record if it's part of the object structure. You can retrieve any data you want through relationships, but if you need to submit that data back to Maximo, it must be part of the object structure, and you must be using the same relationship as defined on this object structure. Since this is a custom object, I can't mock it up easily, so I'll show you what I mean using an out of the box object structure.
Out of box we have MXWO which only contains WORKORDER data.

I have duplicated this object structure and configured security so I can use the object structure. I can then make a GET request to the API like this:
/maximo/api/os/nvmwo?lean=1&oslc.select=wonum,rel.assignment{laborcode,craft,laborhrs,assignmentid}&oslc.where=wonum="1001"
That returns me a response like this:
"member": [
{
"_rowstamp": "[0 0 0 0 1 45 -74 -75]",
"assignment": [
{
"craft": "MECH",
"assignmentid": 4,
"laborhrs": 2.0,
"laborcode": "CALDONE"
},
{
"craft": "MECH",
"assignmentid": 5,
"laborhrs": 2.0,
"laborcode": "CALDONE"
},
{
"craft": "ELECT",
"assignmentid": 6,
"laborhrs": 2.0,
"laborcode": "CALDONE"
},
{
"craft": "ELECT",
"assignmentid": 562,
"laborhrs": 1.0,
"laborcode": "MAXADMIN"
}
],
"href": "https://URL/maximo/api/os/nvmwo/_QkVERk9SRC8xMDAx",
"wonum": "1001"
}
]
We get the wonum and all the assignments. If I wanted to update an assignment, the assumption most people would make is to create a POST request (with the x-method-override header of PATCH and patchtype header of MERGE) to that HREF with a body like:
{
"assignment": [{
"laborcode": "WILSON",
"assignmentid":6
}]
}
The request will succeed, but if you retrieve the data, you will see the assignment hasn't changed. That's because ASSIGNMENT is not part of the object structure. Since security is at the object structure layer, it makes sense that you cannot manipulate data that is not part of the object structure. Otherwise, anyone could update any record in the system.
If I add the assignment object to the NVMWO object structure

And submit the same request, it now processes successfully and updates the assignment. Instead of using
rel.assignment{laborcode,craft,laborhrs,assignmentid} in the select I can also use assignment{laborcode,craft,laborhrs,assignmentid}. This is the object name (not relationship name) which ensures that if the relationship is later changed you'll continue to use the proper relationship. It's important to be aware that even if this was part of the object structure, if you retrieve it using the rel. notation it will never be updateable. You would need to use the objectname{} notation to get the necessary data.
You then declare the child datasource as an attribute without using the getChildDatasource function. This is required to setup the datasource properly.