Ir para conteúdo
  • Cadastre-se

dev botao

Como instanciar um Array (para atender às definições em JSon) ?


  • Este tópico foi criado há 876 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

minha dúvida para os mestres de plantão: no código abaixo

// como INSTANCIAR esse Array ?
  vEmpresaProcesso.operacao.cedente.duplicatas.

  
  

// definicoes criadas pelo Importador WSDL:

  ArrayOfDuplicataProcesso = class(TRemotable)
  private
    Fduplicata: duplicata;
  public
    constructor Create; override;
    destructor Destroy; override;
    function   GetDuplicataProcessoArray(Index: Integer): DuplicataProcesso;
    function   GetDuplicataProcessoArrayLength: Integer;
    property   DuplicataProcessoArray[Index: Integer]: DuplicataProcesso read GetDuplicataProcessoArray; default;
    property   Len: Integer read GetDuplicataProcessoArrayLength;
  published
    property duplicata: duplicata read Fduplicata write Fduplicata;
  end;


constructor ArrayOfDuplicataProcesso.Create;
begin
  inherited Create;
  FSerializationOptions := [xoInlineArrays];
end;



  CedenteProcesso = class(Empresa)
  private
    Fduplicatas: ArrayOfDuplicataProcesso;
    Fparticipantes: ArrayOfParticipante;
    FsacadorAvalista: SacadorAvalista;
  public
    destructor Destroy; override;
  published
    property duplicatas: ArrayOfDuplicataProcesso read Fduplicatas write Fduplicatas;
    property participantes: ArrayOfParticipante read Fparticipantes write Fparticipantes;
    property sacadorAvalista: SacadorAvalista read FsacadorAvalista write FsacadorAvalista;
  end;

...

// trecho do codigo:
  ObjetoSoap:=HTTPRIO1 as ProcessoAssinaturaSoap;

  vMensagemRetornoProcesso := MensagemRetornoProcesso.create;
  vEmpresaProcesso         := EmpresaProcesso.Create;

  vEmpresaProcesso.cnpj := 'bla';
  vEmpresaProcesso.token := 'b l';
  vEmpresaProcesso.versao := '';
  vEmpresaProcesso.operador := 'bla ';

  vEmpresaProcesso.operacao := OperacaoProcesso.create;
  vEmpresaProcesso.operacao.numero := 1;
  vEmpresaProcesso.operacao.titulo := 'OPERAÇÃO DE CESSÃO DE CRÉDITO';

  vEmpresaProcesso.operacao.cedente := CedenteProcesso.Create;
  vEmpresaProcesso.operacao.cedente.endereco := 'RUA DO CEDENTE';

// como INSTANCIAR esse Array ?
  vEmpresaProcesso.operacao.cedente.duplicatas.  ???

   
  
  
//  trecho da definicao em json:
        "operacao": {
            "numero": 0,
            "titulo": "string",
            "descricao": "string",
            "observacoes": "string",
            "data": "string",
...
            "cedente": {
                "cnpj": "string",
                "razaoSocial": "string",
                "nomeFantasia": "string",
                "email": "string",
                "telefone": "string",
                "endereco": "string",
...
                "duplicatas": [
                    {
                        "idDocumento": 0,
                        "numero": "string",
                        "tipodoc": 0,
                        "dataEmissao": "string",
                        "dataVencimento": "string",
                        "valorBruto": "string",
                        "valorLiquido": "string",
                        "numeroNfe": "string",
                        "serieNfe": "string",
                        "chaveNfe": "string",
                        "sacado": {
                            "cnpjCpf": "string",
                            "nome": "string",
                            "email": "string",
                            "telefone": "string",
                            "endereco": "string",
                            "bairro": "string",
                            "cidade": "string",
                            "uf": "string",
                            "cep": "string",
                            "inscricaoEstadual": "string",
                            "inscricaoMunicipal": "string"
                        },
                        "arquivo": {
                            "nome": "string",
                            "conteudo": "string"
                        }
                    }
                ]
            },
 

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

Opa, tudo bom?

Cara isso é  em Lazarus?

Pois passei por algo semelhante, e consegui resolver com um evento que tem no TJSONStreamer, caso for esse que tu use, pode tentar tbm.

  AStreamer := TJSONStreamer.Create(nil);

  try
    try
      AStreamer.BeforeStreamObject := BeforeStreamObject;

      AJSON  := AStreamer.ObjectToJSON(aObject); 

No BeforeStreamObject coloco a função que  inclui oque eu precisar no JSON;

procedure TFormGroup.BeforeStreamObject(Sender: TObject; AObject: TObject; JSON: TJSONObject);
var Result: TJSONArray;
    O: TJSONObject;
    I: Integer;
begin
  Result := TJSONArray.Create;

  try
    for I:=0 to High(Fitems) do
      begin
        O := Fitems[i].ToJsonObject;

        if Result.IndexOf(O)=-1 then
          Result.Add(O);
      end;
  except
    FreeAndNil(Result);
    Raise;
  end;

  if (Result.Count>0) then
    JSON.Add('items', Result)
  else
    Result.Free;
end;

O Lazarus não aceita property de array published, dai só consegui assim, caso tenha conseguido de outra forma, favor compartilhar ;)

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 876 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...