Enviar arquivo via TInputDialog Boa noite. Tenho um TInputDialog como abaixo que pega as informações do registro e existe um campo TFile para enviar um arquivo XML. ...
CM
Enviar arquivo via TInputDialog  
Boa noite.

Tenho um TInputDialog como abaixo que pega as informações do registro e existe um campo TFile para enviar um arquivo XML.

 
  1. <?php
  2. public static function OnDialogoImportaXML( $param )
  3. {
  4. TTransaction::open('ourorio');
  5. $compra = new Compras($param['id_compra']);
  6. $form = new BootstrapFormBuilder('input_form');
  7. $form->setFieldSizes('100%');
  8. $id_compra = new THidden('id_compra');
  9. $nota_fiscal_emitida = $compra->nota_fiscal_emitida;
  10. $cliente_txt = $compra->cliente_txt;
  11. $xml_import = new TFile('xml_import');
  12. // allow just these extensions
  13. $xml_import->setAllowedExtensions( ['xml'] );
  14. $id_compra->setValue($param['id_compra']);
  15. $form->addFields( [new THidden('ID NF')], [$id_compra]);
  16. $form->addFields( [new TLabel('N.F. Nº:')], [$nota_fiscal_emitida]);
  17. $form->addFields( [new TLabel('Cliente:')], [$cliente_txt]);
  18. $row = $form->addFields( [new TLabel('Arquivo XML:'), $xml_import]);
  19. $row->layout = ['col-sm-12'];
  20. $btn1 = $form->addAction('CONFIRMAR O ENVIO DO ARQUIVO XML', new TAction([__CLASS__, 'OnImportarNfe']), 'far:check-square white');
  21. $btn1->class = 'btn btn-sm btn-success';
  22. // show the input dialog
  23. new TInputDialog('IMPORTAR ARQUIVO XML', $form);
  24. }
  25. ?>


Até ai tudo bem, neste TInputDialog chamo a função abaixo:

 
  1. <?php
  2. public static function OnImportarNfe( $param )
  3. {
  4. try
  5. {
  6. TTransaction::open('ourorio');
  7. $unit_id = "1";
  8. $unit = new SystemUnit($unit_id);
  9. $id_unidade = $unit;// new SystemUnit(TSession::getValue('userunitid'));
  10. $ambiente = $id_unidade->tipo_ambiente;
  11. $token = $id_unidade->token;
  12. $compra = new Compras($param['id_compra']);
  13. $xml_import = new TFile('xml_import');
  14. $paylod = array(
  15. //"xml" => base64_encode(file_get_contents('caminho do arquivo xml'))
  16. "xml" => base64_encode(file_get_contents('tmp/xml_import'))
  17. );
  18. $resp = self::enviaAPI($ambiente, "nfe/importa", "POST", $token, $paylod);
  19. if ($resp->sucesso) {
  20. MensagemSweetAlert::Info("{$resp->codigo} - {$resp->mensagem}");
  21. } else {
  22. // rejeição
  23. MensagemSweetAlert::Erro("{$resp->codigo} - {$resp->mensagem}");
  24. }
  25. TTransaction::close();
  26. }
  27. catch (Exception $e)
  28. {
  29. new TMessage('error', 'Error ' . $e->getMessage());
  30. TTransaction::rollback();
  31. }
  32. }
  33. ?>


Acontece que não estou conseguindo pegar o caminho do arquivo XML para enviar nesta linha:
"xml" => base64_encode(file_get_contents('tmp/xml_import'))


Informa que não existe arquivo para enviar.
Se alguém puder dá uma idéia agradeço.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


NR

Use $param para pegar o nome do arquivo, do mesmo modo que faz com os outros campos do formulário:
 
  1. <?php
  2. $arquivo = $param['xml_import'];
  3. ?>
CM

Olá Nataniel, obrigado pela ajuda, acho que ainda estou errando.

Fiz um var_dump e ele retorna o nome do arquivo conforme imagem.

https://zeromeia.com/sistemas/clientes/web/ourorio/app/images/erro_xml.png

Mas não envia.

O código ficou assim:
 
  1. <?php
  2. public static function OnImportarNfe( $param )
  3. {
  4. try
  5. {
  6. TTransaction::open('ourorio');
  7. $unit_id = "1";
  8. $unit = new SystemUnit($unit_id);
  9. $id_unidade = $unit;// new SystemUnit(TSession::getValue('userunitid'));
  10. $ambiente = $id_unidade->tipo_ambiente;
  11. $token = $id_unidade->token;
  12. $compra = new Compras($param['id_compra']);
  13. $arquivo = $param['xml_import'];
  14. var_dump($arquivo);
  15. $paylod = array(
  16. "xml" => base64_encode(file_get_contents('tmp/arquivo'))
  17. );
  18. $resp = self::enviaAPI($ambiente, "nfe/importa", "POST", $token, $paylod);
  19. if ($resp->sucesso) {
  20. MensagemSweetAlert::Info("{$resp->codigo} - {$resp->mensagem}");
  21. } else {
  22. // rejeição
  23. MensagemSweetAlert::Erro("{$resp->codigo} - {$resp->mensagem}");
  24. }
  25. TTransaction::close();
  26. }
  27. catch (Exception $e)
  28. {
  29. new TMessage('error', 'Error ' . $e->getMessage());
  30. TTransaction::rollback();
  31. }
  32. }
  33. ?>


CM

Acho que resolvi, modifiquei o código desta forma e enviou sem erro:

 
  1. <?php
  2. $arquivo = $param['xml_import'];
  3. //var_dump($arquivo);
  4. $paylod = array(
  5. //"xml" => base64_encode(file_get_contents('caminho do arquivo xml'))
  6. "xml" => base64_encode(file_get_contents('tmp/'. $arquivo))
  7. );
  8. ?>