Olá, não sei se ainda precisa, mas gostaria de compartilhar minha situação e como resolvi.
Preciso guardar arquivos em pastas que são criadas de acordo com uma Categoria de Arquivos dentro de um Tipo de Material, ou seja, diretórioRaizDeArquivos/TipoDeMaterial/Categoria (As pastas TipoDeMaterial são criadas pelo sistema no momento em que se cadastra um novo tipo de material e as pastas de Categoria são criadas pelo sistema no momento em que se cadastra a categoria).
No formulário de cadastro/upload do arquivo:
-
Criei um campo escondido de nome diretorio;
-
No campo de upload do arquivo ({arq_nomedoc}) informei este campo escondido em Subdiretório para armazenamento local
-
No evento onChange do campo Categoria eu carrego este campo diretorio com a pasta correta do arquivo buscando o Tipo de Material e a Categoria informados (campos obrigatórios);
sc_lookup(dbDirMat, “select am.amt_diretorio from arquivos.arquivos_material am where am.amt_codigo = {amt_codigo}”); // busca o Tipo de Material
sc_lookup(dbDirCat, "select ac.cat_diretorio from arquivos.arquivos_categorias ac where ac.cat_codigo = {cat_codigo} "); // Busca a categoria
{diretorio} = {dbDirMat[0][0]} . “/”. {dbDirCat[0][0]}; // concatena o Tipo de Material com a Categoria.
-
No evento onAfterInsert (preferi renomear o arquivo após a inclusão do registro, pois são apenas 3 usuários que fazem esta atividade e não é ao mesmo tempo) coloco o seguinte código (no meu caso o nome do arquivo é uma combinação de campos do formulário e cadastro de cliente além de usar uma função própria para formatar os números):
$arquivo_atual = $_SESSION[‘scriptcase’][‘arquivos_frm’][‘glo_nm_path_doc’] . ‘/’ . {diretorio} . ‘/’ . {arq_nomedoc}; // pego o nome do arquivo que foi inserido pelo usuário
sc_lookup(dbCli, “select cli_cpfcnpj from clientes where cli_codigo = {cli_codigo}”);
$arqtmp_cli = formatanumero({cli_codigo}, 5);
$arqtmp_data = substr({arq_datadoc},0,4) . substr({arq_datadoc},5,2) . substr({arq_datadoc},8,2);
$arqtmp_rela = formatanumero({arq_ano}, 4) . formatanumero({arq_identificacao}, 5) . formatanumero({arq_relatorio}, 2);
$arqtmp = $arqtmp_cli . ‘’ . {dbCli[0][0]} . '’ . $arqtmp_data . ‘_’ . $arqtmp_rela . ‘.pdf’;
$arquivo_novo = $_SESSION[‘scriptcase’][‘arquivos_frm’][‘glo_nm_path_doc’] . ‘/’ . {diretorio} . ‘/’ . $arqtmp; // seta o novo nome do arquivo com o caminho
rename($arquivo_atual, $arquivo_novo); // renomeia o arquivo
sc_exec_sql (" update arquivos.arquivos set arq_nomedoc = ‘".$arqtmp."’ where arq_ano = {arq_ano} and arq_identificacao = {arq_identificacao} and arq_relatorio = {arq_relatorio}"); // atualiza o nome do arquivo no banco de dados.
sc_commit_trans ();