Serializar MasterDetail em uma MemTable Runtime
ds-sampaio opened this issue · 1 comments
Criei uma relação MasterDetail com Memtable visual e funcionou corretamente a saída do JSON Aninhado utilizando o MemTableMaster.ToJSONObject.
Porém ao criar uma MemTable em tempo de execução:
participante := TFDMemTable.Create(nil); //MemTable Master
dtsMaster.DataSet := participante;
participante.LoadStructure(LMinhaEstrutura); //Carrego a estrutura
part_funcionario := TFDMemTable.Create(nil); //MemTable Detail
dtsFilho.DataSet := part_funcionario;
part_funcionario.LoadStructure(LMinhaEstruturaDetail); //Carrego a estrutura do filho
{Faço o relacionamento MasterDetail}
participante.Open;
part_funcionario.Open;
part_funcionario.MasterSource := dtsMaster;
part_funcionario.MasterField := 'MeuIDPai';
part_funcionario.DetailField := 'MeuIDFK';
part_funcionario.IndexFieldName := 'MeuIDFK';
{Carrego minha MemTable Principal com todo o json aninhado}
participante.LoadFromJSON(LMeuDadoJSON) //Todo meu Array Participante,conforme meu json abaixo
{Problema}
participante.ToJSONObect -> A saida do JSon so ta retornando o Json Pai, falta aninhar ao filho.
So por questão de conhecimento, tentei também alterar o nome da memtable para mtparticipante e mtpart_funcionario e não resolveu.
Meu JSON:
{
"data": {
"participante": [
{
"id_participante": 1,
"id_empresa": 1,
"nome": "Daiane",
"cod_ref": -1,
"consumidor_final": false,
"part_funcionario": {
"id_participante": 1,
"id_empresa": 1,
"status": 1,
"entrada_servico": null,
"saida_servico": null,
"cod_ref": 0,
"id_funcionario": 2
}
}
]
},
"structure": {
"participante": [
{
"fieldName": "id_participante",
"dataType": "ftInteger",
"size": 0
},
{
"fieldName": "id_empresa",
"dataType": "ftInteger",
"size": 0
},
{
"fieldName": "nome",
"dataType": "ftString",
"size": 100
},
{
"fieldName": "cod_ref",
"dataType": "ftInteger",
"size": 0
},
{
"fieldName": "consumidor_final",
"dataType": "ftBoolean",
"size": 0
}
],
"part_funcionario": [
{
"fieldName": "id_participante",
"dataType": "ftInteger",
"size": 0
},
{
"fieldName": "id_empresa",
"dataType": "ftInteger",
"size": 0
},
{
"fieldName": "status",
"dataType": "ftInteger",
"size": 0
},
{
"fieldName": "entrada_servico",
"dataType": "ftDateTime",
"size": 0
},
{
"fieldName": "saida_servico",
"dataType": "ftDateTime",
"size": 0
},
{
"fieldName": "cod_ref",
"dataType": "ftInteger",
"size": 0
},
{
"fieldName": "id_funcionario",
"dataType": "ftInteger",
"size": 0
}
]
}
}
Depois de um bom tempo pesquisando e testando, descobri o problema, deixarei a solução, caso outras pessoas passem pela mesma situação.
O meu objeto json tem o nome de participante e part_funcionario, então como havia dito na postagem anterior, meu memtable estava sendo criado com o mesmo nome. [participante := TFDMemTable.Create(nil); e part_funcionario := TFDMemTable.Create(nil);]
So que faltou um detalhe, é necessário definir a propriedade name do componente para o mesmo nome kkk.
Então minhas memtable's ficaram assim: participante.name := 'participante' e part_funcionario.Name := 'part_funcionario'