Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Field Action

Como Funciona

field_action_title.png

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

NAMEDescriçãoTela
DETAILSSerá exibido no topo da tela de DetalhesTela de Detalhes
DETAILS_SECONDARYSerá exibido para cada Boletim do DetalhesTela de Detalhes

Config

CampoValorDefinição
idLivreId do Elemento HTML
textLivreTexto do Botão
icon_classLista de ÍconeVer o HTML do ícone na lista do métronic, ex.: fa fa-cloud-upload
button_classBotõesPode ser mais de uma classe.
typelink ou buttonlink envia para outra página, button executa uma ação por meio de um entry point
urllivreEndereç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}}"
entryPointNumberSomente usado quando o type igual a buttonNú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
reloadtrue ou falseSe 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 o NfsLogger::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.