Field Action
Como Funciona
A funcionalidade Field Action (Botão de Ação) foi desenvolvido como um plugin que pode ser adicionado facilmente em diversas telas, porém ainda é necessário um desenvolvimento da parte core algo que não deve levar muito tempo, hoje é possível configurar para:
- Qualquer CRUD
- Página de Detalhes do Boletim -- Topo do Detalhes -- Para cada Boletim
Para configurar um field action é necessário da tabela nfs_core_ds_field_action
CREATE TABLE `nfs_core_ds_field_action` (
`SEQ_DB` bigint(20) NOT NULL AUTO_INCREMENT,
`TABELA` varchar(250) DEFAULT NULL COMMENT 'Nome da Tabela',
`DESCRICAO` varchar(300) DEFAULT NULL COMMENT 'Descrição da Ação',
`CONFIG` text COMMENT 'Configuração do elemento',
`INS_DH` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`ATIVO` int(11) DEFAULT '1',
`DELETED` int(11) DEFAULT '0',
`NAME` varchar(250) DEFAULT NULL COMMENT 'Um nome único para uma ação',
PRIMARY KEY (`SEQ_DB`),
KEY `FK_DS_TABELA` (`TABELA`),
CONSTRAINT `FK_DS_TABELA` FOREIGN KEY (`TABELA`) REFERENCES `nfs_core_ds_tabela` (`NOME`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Campos
Serão listados só os campos mais importantes.
- TABELA: Quando for uma configuração para o CRUD esse campo terá que ser preenchido com a tabela desejada.
- DESCRIÇÃO: É uma descrição do seu botão de ação aconselho sempre a preencher para qualquer dev que for usar ou verificar para que sever o botão.
- CONFIG: É um JSON de configuração, será explicado mais abaixo.
- NAME: Usado para ações que não estão no CRUD, logo não tem uma tabela para ser configurada, é definida pelo core e será descrito logo abaixo.
Name
NAME | Descrição | Tela |
---|---|---|
DETAILS | Será exibido no topo da tela de Detalhes | Tela de Detalhes |
DETAILS_SECONDARY | Será exibido para cada Boletim do Detalhes | Tela de Detalhes |
Config
Campo | Valor | Definição |
---|---|---|
id | Livre | Id do Elemento HTML |
text | Livre | Texto do Botão |
icon_class | Lista de Ícone | Ver o HTML do ícone na lista do métronic, ex.: fa fa-cloud-upload |
button_class | Botões | Pode ser mais de uma classe. |
type | link ou button | link envia para outra página, button executa uma ação por meio de um entry point |
url | livre | Endereço interno usar o pathname, ex:. https://smartos.simova.cloud/t/os/edit/{{seqDb}}, no caso pathname é /t/os/edit/ caso na tela tenha o seqDb para passar como parâmetro use {{}} chaves duplas, como resultado "url":"t/os/edit/{{seqDb}}" |
entryPointNumber | Somente usado quando o type igual a button | Número do entry point que foi criado como parâmetro é passado todas as variáveis do pageVars e a tabela deve ser FIELD_ACTION_SERVICE |
reload | true ou false | Se não for passada a chave, por padrão reinicia a página após a ação do button. |
[!NOTE] Explicação de alguns parametros da URL para rotas de Tabela/CRUD(/t/):
- p1 (parametro 1) : Especifica o tipo de consulta que será aplicada utilizando o comparador(c1).
- nomeDaColuna: Define a coluna na qual a condição será aplicada;
- sql_condition:
- v1 (valor 1): Define qual a ser comparado na consulta;
- c1 (condicao 1): condição a ser utilizada na consulta do SQL, seu valor deve ser um destes:
- neq (not equal, operador ''<>'');
- lt (less than, operador ''<'');
- lte (less than or equals, operador ''<='');
- gt (greater than, operador ''>'');
- gte (greater than or equals, operador ">=");
- eq (equals, operador "=").
- vlr(valor de referencia);
- integration: indica que a ação executada é integração e com isso traz os checkboxes na lista do CRUD onde foi executada a ação.
Exemplos
Botão de Integração na tela de OS
INSERT INTO nfs_core_ds_field_action (`TABELA`, `DESCRICAO`, `CONFIG`, `INS_DH`, `ATIVO`, `DELETED`, `NAME`) VALUES('OS', 'Ação de Integração de OS', '{
"url": "/t/os?p1=proc_st&v1=4&c1=eq&v1r=Selecione a(s) OS(s) que já foram integradas e serão liberadas para novo processo de integração&integration=1&desc=''Tese''",
"text": "Integração",
"icon_class": "fa fa-eject",
"button_class": "btn-lg btn-default ajaxify tooltips",
"tooltip":"Liberar os para integração"
}', '2019-07-30 18:42:56.000', 1, 0, NULL);
Botão para Criar no Boletim na tela de Detalhes
INSERT INTO nfs_core_ds_field_action (`TABELA`, `DESCRICAO`, `CONFIG`, `INS_DH`, `ATIVO`, `DELETED`, `NAME`) VALUES(NULL, 'Criar Novo Details', '{
"id": "novo-details",
"text": "Novo Details",
"icon_class": "fa fa-plus",
"url" : "/details/new/{{seqDb}}/{{seqQii}}/{{seqPanel}}?popup=1",
"button_class": "btn-primary"
}', '2019-07-30 18:42:56.000', 1, 0, 'DETAILS');
Botão na tela de Detalhes para Ir para Relatório de Assistência Técnica
INSERT INTO nfs_core_ds_field_action (`TABELA`, `DESCRICAO`, `CONFIG`, `INS_DH`, `ATIVO`, `DELETED`, `NAME`) VALUES(NULL, 'Details Relatórios', '{
"text": "Assis. Técnica",
"icon_class": "fa fa-plus",
"url" : "/reports/assistencia_tecnica/filters",
"button_class": "btn-success"
}', '2019-07-30 18:42:56.000', 1, 0, 'DETAILS');
Botão na tela de Detalhes dentro de cada Boletim que executa um Entry Point
[!WARNING] Na tela de Detalhes tem a variável
$data
e a chave value sempre é o seq_db do boletim$data['value']
. Para saber todas as variável possíveis use oNfsLogger::error("{$data}", 'METHOD_DATE');
Com o SEQ_DB do boletim é possível fazer o que quiser e obter a maioria das informações necessárias para manipular os dados.
INSERT INTO nfs_core_ds_field_action (`TABELA`, `DESCRICAO`, `CONFIG`,`INS_DH`, `ATIVO`, `DELETED`, `NAME`) VALUES(NULL, 'Exibe botão na secondary table', '{
"id": "integration_btn_sec",
"text" : "Integrar",
"icon_class" : "fa fa-cloud-upload",
"button_class" : "btn-primary",
"type": "button",
"url" : "",
"entryPointNumber" : "550"
}', '2019-07-30 18:42:56.000', 1, 0, 'DETAILS_SECONDARY');
Entry Point 550:
INSERT INTO nfs_entry_point (`FILE_OR_DOMAIN`, `ACTION`, `XMOVA_INSTALLCODE`, `XMOVA_INSTALLCODE_VERSION`, `EMPRESA`, `FILIAL`, `LOCAL`, `TABELA`, `ENTRY_NUM`, `CODE`, `VERSION`, `BUILD`, `ATIVO`, `CODETYPE`, `FIELD`, `DESCRIPTION`, `INS_DH`, `UPD_DH`) VALUES('SYSTEM', NULL, NULL, NULL, 9999, 9999, 9999, 'FIELD_ACTION_SERVICE', 550, '$this->code[''msg''] = "TEste Entry Point - Qii: {$data[''seqQii'']}
seq db boletim: {$data[''value'']}
";
$this->code[''type''] = "success";', 1, 12, 1, 'PHP', NULL, NULL, '2018-10-02 09:28:59.000', '2019-08-19 16:28:38.000');
Sempre retorna para a tela as variáveis msg é uma mensagem que será exibida e type pode ser encontrado aqui.
Adicionar Botão de Ação no Relatório de Indicadores
Nesse caso de ação a tela do Relatório é recarregada após a ação.
Detalhes importante do JSON abaixo é a chave fieldAction dentro da chave report, nela é passado o nome da coluna que vai exibir e o NAME do field action.
{
"osIntegracao": {
"label": "OS's com Faturamento liberado",
"color": "",
"icon": "fa fa-signal",
"display": "[result]",
"interval": "120000",
"decimalPlace": "2",
"queryBuilder": {
"osIntegracao": {
"select": [
"count(os.seq_db) result"
],
"from": "os os",
"inner_join": [
[
"os",
"status_os",
"st",
"st.SEQ_DB = os.STATUS_OS_SEQ_DB"
],
[
"os",
"cliente",
"c",
"c.SEQ_DB = os.CLIENTE_SEQ_DB"
]
],
"where": [
"st.DESCRICAO in ('Liberada Faturamento')"
]
}
},
"queryBuilderData": {
"osIntegracao": {
"select": [
"os.seq_db Integrar",
"os.codigo Codigo",
"c.DESCRICAO Cliente",
"st.DESCRICAO Status"
],
"from": "os os",
"inner_join": [
[
"os",
"status_os",
"st",
"st.SEQ_DB = os.STATUS_OS_SEQ_DB"
],
[
"os",
"cliente",
"c",
"c.SEQ_DB = os.CLIENTE_SEQ_DB"
]
],
"where": [
"st.DESCRICAO in ('Liberada Faturamento')"
]
}
},
"report": {
"displayColumns": [
"Codigo",
"Cliente",
"Status",
"Integrar"
],
"links": {
"Codigo": "/t/os/%Integrar%"
},
"fieldAction":{
"Integrar" : "INDICATOR_FAT"
}
}
}
}
- Field Action com NAME igual a INDICATOR_FAT
INSERT INTO nfs_core_ds_field_action (`TABELA`, `DESCRICAO`, `CONFIG`, `INS_DH`, `ATIVO`, `DELETED`, `NAME`) VALUES(NULL, 'Exibe botão no indicator report', '{
"id": "integration_btn_sec",
"text" : "",
"icon_class" : "fa fa-cloud-upload",
"button_class" : "btn-primary",
"type": "button",
"url" : "",
"entryPointNumber" : "550"
}', '2019-07-30 18:42:56.000', 1, 0, 'INDICATOR_FAT');
Entry Point 550:
INSERT INTO nfs_entry_point (`FILE_OR_DOMAIN`, `ACTION`, `XMOVA_INSTALLCODE`, `XMOVA_INSTALLCODE_VERSION`, `EMPRESA`, `FILIAL`, `LOCAL`, `TABELA`, `ENTRY_NUM`, `CODE`, `VERSION`, `BUILD`, `ATIVO`, `CODETYPE`, `FIELD`, `DESCRIPTION`, `INS_DH`, `UPD_DH`) VALUES('SYSTEM', NULL, NULL, NULL, 9999, 9999, 9999, 'FIELD_ACTION_SERVICE', 550, 'ConexaoDB::execute("update app_os set status_os_seq_db = 3 where seq_db = {$data[''value'']} ");
$this->code[''msg''] = "TEste Entry Point - Qii: {$data[''seqQii'']}
painel: {$data[''value'']}
";
$this->code[''type''] = "success";', 1, 12, 1, 'PHP', NULL, NULL, '2018-10-02 09:28:59.000', '2019-08-21 23:23:18.000');
Sempre retorna para a tela as variáveis msg é uma mensagem que será exibida e type pode ser encontrado aqui.
Controle de Acesso Field Action
Acesse aqui para entender como funciona a configuração do controle de acesso para o Field Action.