npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@seniorsistemas/workflow-cockpit

v1.8.0

Published

Senior BPM Workflow Cockpit

Downloads

8

Readme

Workflow Cockpit

O cockpit do Workflow é capaz de apresentar dentro de um iframe formulários ECM e interfaces customizadas hospedadas em outros domínios. A comunicação entre as duas partes é realizada por Window.postMessage() e abstraída por este componente, que deve ser incluído na página e configurado pelo desenvolvedor.

Para o correto funcionamento da interface customizada dentro do cockpit, o desenvolvedor deve definir como a página salva os dados do processo e como reage a erros ocorridos na criação do processo e tratamento da pendência.

Passos para integração

Adicionar na página um componente que auxilia o cockpit a exibir o iframe no tamanho correto:

<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/3.5.14/iframeResizer.contentWindow.min.js"></script>

Caso você não tiver babel-polyfill instalado como dependência de seu projeto é necessário adicionar o seguinte arquivo:

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.js"></script>

Referenciar também o componente Javascript do Workflow:

<script type="text/javascript" src="https://cdn.senior.com.br/platform/1.7.1/js/workflow-cockpit.min.js"></script>

Invocar a função workflowCockpit na inicialização da página. Caso seja utilizado o modo Abrir Formulário na Plataforma G7, poderá ser difinido o handler 'init', que será acionado quando a função é executada e irá prover informações como a instância do processo.:

this.workflowCockpit = workflowCockpit({
  init: _loadData
});

Caso seja utilizado o modo de exibição Abrir Formulário no Cockpit do Workflow, é preciso definir as funções que tratarão cada evento originado pelo cockpit. Exemplo:

this.workflowCockpit = workflowCockpit({
  init: _loadData,
  onSubmit: _saveData,
  onError: _rollback
});

Funções da instância retornada

O objeto retornado pela função workflowCockpit é capaz de obter o identificador da instância do processo que está sendo executada, verificar se o usuário está criando ou respondendo a uma solicitação e obter informações sobre o usuário logado e sobre a plataforma.

isRequestNew: Indica se a tela foi aberta porque o usuário está criando uma solicitação. Se for false, indica que o usuário está respondendo a uma solicitação.

getUserData: Obtém um objeto contendo informações sobre o usuário logado no Workflow. É retornada uma promise.

this.workflowCockpit.getUserData().then(function(data) {
  /*{
    description: ...,
    email: ...,
    fullname: ...,
    id: ...,
    locale: ...,
    subject: ...,
    tenantName: ...,
    username: ...
  }*/
});

getPlatformData: Obtém um objeto contendo dados para acessar recursos da plataforma G7. É retornada uma promise.

this.workflowCockpit.getPlatformData().then(function(data) {
  /*{
    serviceUrl: ...,
    odataUrl: ...,
    token: {
      token_type: ...,
      access_token: ...
    }
  }*/
});

Handlers de eventos

O Desenvolvedor pode configurar determinadas funções que responderão mensagens do Workflow. As funções retornadas por WorkflowCockpit estão disponíveis em um segundo parâmetro 'info':

/*info: ({
       isRequestNew: function
       getUserData: function
       getPlatformData: function
   })*/
  • init(data, info)
 /*data: ({
       processInstanceId: int? (ocasional)
   })*/

Esta função é executada quando ocorre a criação do WorkflowCockpit, ou seja, não é executada por mensagem. Quando for uma nova requisição não existe um processInstanceId pelo simples fato do fluxo ainda não ter sido criado. Exemplo:

function _load(data, info) {
   info.getPlatformData().then(function(platformData) {
       this.tokenG7 = platformData.token;
       this.serviceUrl = platformData.serviceUrl;
       this.odataUrl = platformData.odataUrl;

       if (info.isRequestNew()) {
           this.fields = this.loadData(data.processInstanceId);
       }
   });
}
  • onSubmit(data, info)
/*data: ({
       processInstanceId: int
   })*/

Esta função é executada no momento que o usuário finaliza sua interação com a tela e tenta prosseguir ou iniciar um processo pelo Cockpit. Neste momento, a tela pode realizar a persistência dos dados do formulário e retornar os valores que deseja adicionar às variáveis do fluxo. Pode ser retornada uma Promise ou o próprio objeto contendo os dados. Toda exceção lançada por essa função não permitirá a continuação do processo por parte do Workflow. Exemplo:

function _saveData(data, info) {
  if (!isValid()) {
      throw Error('Os dados informados são inválidos.');
  }
  return persistData(data.processInstanceId, info.isRequestNew()).then(function(result) {
    return {
        formData: this.data // objeto contendo os dados dos campos
    };
  });
}

Importante lembrar que, como a execução dessa função não está associada a um contexto de renderização do Angular, é preciso invocar $scope.$apply() caso a função isValid() modifique alguma variável que afeta a apresentação.

  • onError(data, info)
/*data: ({
       error: obj
       processInstanceId: int
   })*/

Esta função é chamada quando o ocorre algum erro ao iniciar ou responder o fluxo. Após a execução do save, se ocorrer algum erro quando o Workflow tentar prosseguir com o processo, este é o momento onde pode ser realizado algum tipo de consistência com o erro ocorrido, por exemplo:

function _rollback(data, info) {
  console.log(data.error);
  if (info.isRequestNew()) {
     return removeData(data.processInstanceId);
  }
  return rollbackData(data.processInstanceId);
}