Ir para conteúdo
Fórum Script Brasil

airam1968

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Posts postados por airam1968

  1. Olá Jhonas, Obrigado pelo reply, já tinha passado por este link em pesquisa anterior, mais meu problema não é um objeto de 1 camada, tenho um objeto com 3 camadas, e não consigo preencher as sub camadas que são outros objetos.

    Eu consigo montar o GET perfeitamente quando a sua estrutura. eu não consigo é levar todos os dados que preciso, abaixo tem um inspect do meu objeto um instante antes de gerar o JSON para o GET, perceba que os 2 ultimos itens, objetos Fitens e Ftitulos estão vazios porque realmente não sei como preenche-los.

     

    image.png.8628e509424df172ee20003efb0c5cce.png

  2. Bom Dia,

     

    Tenho um Servidor REST MVC com SQL Server que necessita retornar uma leitura do banco de dados com a estrutura (Cabeçalho + n Itens + n Títulos) portanto criei um uma classe com os dados de cabeçalho e duas classes com os Itens e Títulos para compor o objeto total.

    Como Segue Abaixo:

    type
    //Classe Item
    TDespesaItemModel = class
    private
    //Itens NF
    FIditem : string;
    FIdrd : string;
    FVlritem : Currency;
    FCcusto : string;
    FHistitem : string;

    private
    { Private declarations }

    public
    { Public declarations }
    property Iditem : String read FIditem write FIditem;
    property Idrd : String read FIdrd write FIdrd;
    property Vlritem : Currency read FVlritem write FVlritem;
    property Ccusto : string read FCcusto write FCcusto;
    property Histitem : string read FHistitem write FHistitem;
    end;

    TArrayItens = array of TDespesaItemModel;

    //Classe Titulo
    TDespesaTituloModel = class
    private
    //Itens Titulos
    FIdtitulo : string;
    FVencimento : string;
    FValor : Currency;
    FCnpj : string;
    FNome : string;
    FFantasia : string;
    FParcela : string;
    FTipotit : string;
    FProvisorio : string;

    private
    { Private declarations }

    public
    { Public declarations }
    property Idtitulo : String read FIdtitulo write FIdtitulo;
    property Vencimento : String read FVencimento write FVencimento;
    property Valor : Currency read FValor write FValor;
    property Cnpj : string read FCnpj write FCnpj;
    property Nome : string read FNome write FNome;
    property Fantasia : string read FFantasia write FFantasia;
    property Parcela : string read FParcela write FParcela;
    property Tipotit : string read FTipotit write FTipotit;
    property Provisorio : string read FProvisorio write FProvisorio;
    end;

    TArrayTitulos = array of TDespesaTituloModel;

    //Classe Despesa (NF + Itens + Titulos)
    TDespesaModel = class
    private
    //Cabeçalho NF
    FId : String;
    FLoja : String;
    FTipo : String;
    FConta : String;
    FDoc : String;
    FSerie : String;
    FTiponf : string;
    FCnpjfor : string;
    FNomefor : string;
    FNomefan : string;
    FHistorico : string;
    FEmissao : String;
    FDtlan : String;
    FValor : Currency;
    FEstorno : string;
    FChvnfe : string;
    FLinkxml : string;
    //Itens NF
    FItens : TArrayItens;
    //Itens Titulos
    FTitulos : TArrayTitulos;

    private
    { Private declarations }
    public
    { Public declarations }
    function Incluir(AJSON: TJSONObject): TJSONValue; //put
    function Alterar(AJSON: TJSONObject): TJSONValue; //post
    function Excluir(AId: String): TJSONValue; // delete
    function Obter: TJSONArray; //get

    property Id : String read FId write FId;
    property Loja : String read FLoja write FLoja;
    property Tipo : String read FTipo write FTipo;
    property Conta : String read FConta write FConta;
    property Doc : String read FDoc write FDoc;
    property Serie : String read FSerie write FSerie;
    property Tiponf : string read FTiponf write FTiponf;
    property Cnpjfor : string read FCnpjfor write FCnpjfor;
    property Nomefor : string read FNomefor write FNomefor;
    property Nomefan : string read FNomefan write FNomefan;
    property Historico: string read FHistorico write FHistorico;
    property Emissao : String read FEmissao write FEmissao;
    property Dtlan : String read FDtlan write FDtlan;
    property Valor : Currency read FValor write FValor;
    property Estorno : string read FEstorno write FEstorno;
    property Chvnfe : string read FChvnfe write FChvnfe;
    property Linkxml : string read FLinkxml write FLinkxml;
    property Itens : TArrayItens read FItens write FItens;
    property Titulos : TArrayTitulos read FTitulos write FTitulos;
    end;
    TDespesaModels = TObjectList<TDespesaModel>;

     

    Com esta estrutura meu servidor funciona perfeitamente, para PUT, POST, DELETE.

    Mais preciso montar o GET, retornando o conteúdo abaixo:

    {
    "id": "010100075689000100025701N",
    "loja": "000000000001",
    "tipo": "01",
    "conta": "0987654321",
    "doc": "000756890",
    "serie": "001",
    "tiponf": "NFE",
    "cnpjfor": "07946894000156",
    "nomefor": "Phoenyx Consultoria, treinamento e Desenv. Soft",
    "nomefan": "Phoenyx Tecnologia",
    "historico": "Phoenyx Consultoria, treinamento e Desenv. Soft20200220000756890",
    "emissao": "20200220",
    "dtlan": "20200220",
    "valor": 17351.28,
    "estorno": "N",
    "chvnfe": "35080599999090910270550010000000015180051273",
    "linkxml": "35080599999090910270550010000000015180051273.xml",
    "itens": [
    {
    "iditem": "010100075689000100025701N01",
    "idrd": "012345678901",
    "vlritem": 5351,
    "ccusto": "000101347",
    "histitem": "001PCBALCAO ELETRONICO"
    },
    {
    "iditem": "010100075689000100025701N02",
    "idrd": "012345678949",
    "vlritem": 12000.28,
    "ccusto": "000101348",
    "histitem": "006PCBANCO ALMOFADADO"
    }
    ],
    "titulos": [
    {
    "idtitulo": "01010007568900010002570101NF",
    "vencimento": "20200320",
    "valor": 17351.28,
    "cnpj": "07946894000156",
    "nome": "Phoenyx Consultoria, treinamento e Desenv. Soft",
    "fantasia": "Phoenyx Tecnologia",
    "parcela": "01",
    "tipotit": "NF",
    "provisorio": "N"
    },
    {
    "idtitulo": "01010007568900010002570102IMP",
    "vencimento": "20200320",
    "valor": 1067.1,
    "cnpj": "07946894000156",
    "nome": "Phoenyx Consultoria, treinamento e Desenv. Soft",
    "fantasia": "Phoenyx Tecnologia",
    "parcela": "02",
    "tipotit": "IMP",
    "provisorio": "S"
    }
    ]
    }

    Para isso tenho 3 tabelas no SQL, Cabeçalho, Itens e Títulos.

    Agora abaixo vou apresentar o problema que tenho enfrentando para construir um Objeto para depois transforma-lo em um objeto JSON e remeter como Response:

     

    function TDespesaDao.Obter: TObjectList<TDespesaModel>;
    var
    VQry : TFDQuery;
    VQryi : TFDQuery;
    VQryt : TFDQuery;
    VLista : TObjectList<TDespesaModel>;
    VDespesa : TDespesaModel;
    VItens : TArrayItens;
    VTitulos : TArrayTitulos;
    i, j : integer;
    begin
    VQry := TSistemaControl.GetInstance().Conexao.CriarQuery();
    VQryi := TSistemaControl.GetInstance().Conexao.CriarQuery();
    VQryt := TSistemaControl.GetInstance().Conexao.CriarQuery();

    VQry.Open('select * from dbo.TOTVS001 with(nolock) ' +
    ' order by 1');
    //where TOTVS001.ID_NF = '010100075689000100025701N'
    VQry.First;
    //
    //Itens NF
    VQryi.Open('select * from dbo.TOTVS001Item with(nolock) ' +
    ' where id_nf = ' + QuotedStr(VQry.FieldByName('id_nf').AsString) +
    ' order by 1');
    VQryi.First;
    //
    //Titulos
    VQryt.Open('select * from dbo.TOTVS001Tit with(nolock) ' +
    ' where id_nf = ' + QuotedStr(VQry.FieldByName('id_nf').AsString) +
    ' order by 1');
    VQryt.First;
    //Cabeçalho
    VLista := TObjectList<TDespesaModel>.Create;
    while not VQry.Eof do
    begin
    VDespesa := TDespesaModel.Create;
    VDespesa.Id := VQry.FieldByName('id_nf').AsString;
    VDespesa.Loja := VQry.FieldByName('loja').AsString;
    VDespesa.Tipo := VQry.FieldByName('tipo').AsString;
    VDespesa.Conta := VQry.FieldByName('conta').AsString;
    VDespesa.Doc := VQry.FieldByName('doc').AsString;
    VDespesa.Serie := VQry.FieldByName('serie').AsString;
    VDespesa.Tiponf := VQry.FieldByName('tiponf').AsString;
    VDespesa.Cnpjfor := VQry.FieldByName('cnpjfor').AsString;
    VDespesa.Nomefor := VQry.FieldByName('nomefor').AsString;
    VDespesa.Nomefan := VQry.FieldByName('nomefan').AsString;
    VDespesa.Historico := VQry.FieldByName('historico').AsString;
    VDespesa.Emissao := VQry.FieldByName('emissao').AsString;
    VDespesa.Dtlan := VQry.FieldByName('dtlan').AsString;
    VDespesa.Valor := VQry.FieldByName('valor').AsCurrency;
    VDespesa.Estorno := VQry.FieldByName('estorno').AsString;
    VDespesa.Chvnfe := VQry.FieldByName('chvnfe').AsString;
    VDespesa.Linkxml := VQry.FieldByName('linkxml').AsString;

     

    //Como incluir os Itens dentro do objeto Principal?

    SetLength(VItens, 1);
    VItens := [[VQryi.FieldByName('Iditem').AsString,
    VQryi.FieldByName('idrd').AsString,
    VQryi.FieldByName('vlritem').AsCurrency,
    VQryi.FieldByName('ccusto').AsString,
    VQryi.FieldByName('histitem').AsString]];

    ///////////////////////////////////////////////////////////////////////////////

     


    VLista.Add(VDespesa);

    VQry.Next;
    end;
    //
    VQry.Close;
    VQryi.Close;
    VQryt.Close;

    Result := VLista;

    end;

     

    A partir deste momento a Vlista é remetida para ser colocada no RESPONSE.

     

    Agradeço antecipadamente qualquer ajuda, Atenciosamente,

×
×
  • Criar Novo...