Atribuir um ID exclusivo para OFORMS

24 janeiro 2023By Klaibson

Os produtos ONLYOFFICE nos permitem criar e operar facilmente com formulários preenchíveis. Em nosso post anterior, mostramos a você uma macro que converte dados CSV/TXT em uma caixa de combinação preenchível.

Desta vez, tornaremos a documentação eletrônica mais organizada criando uma macro que atribui um id único a um formulário preenchível.

Atribuir um ID exclusivo para OFORMS

Pré-requisitos

Em nosso novo projeto, implementaremos um conceito semelhante ao que usamos com a macro mencionada acima.

O código da macro é o seguinte:

   function LoadFile() {
        $.ajax({
            url: 'file:///C:/Users/LEOPARD/Desktop/Book1.csv',
            dataType: 'text',
        }).done(successFunction);
    } 
    function successFunction(data) {
    
        var arrAllRows = data.split("\n");
    
        var oComboBoxForm = Api.CreateComboBoxForm({ "key": "Personal information", "tip": "Choose your country", "required": true, "placeholder": "Country", "editable": false, "autoFit": false, "items": arrAllRows });
        var oParagraph = Api.CreateParagraph();
        oParagraph.AddElement(oComboBoxForm);
        oDocument.InsertContent([oParagraph]);
    }
    LoadFile();

Com uma nova macro, também vamos incorporar o método InsertContent. Ele insere um elemento exatamente onde o cursor está posicionado. Porém, desta vez, o conteúdo inserido é diferente.

Construindo a macro

Para criar esse conteúdo, adicionamos a função generate. Lá, criamos a variável key e a definimos como em branco. Posteriormente, armazenará o valor gerado. Além disso, adicionamos a variável data. Contém letras maiúsculas e minúsculas e números. Esses são os blocos de construção de nossa identidade única:

function generate () {
    let key = '';
    const data = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
            'abcdefghijklmnopqrstuvwxyz0123456789';
};

Em seguida, adicionamos um for loop que realiza 12 iterações. Cada iteração retorna um valor único. Portanto, 12 iterações produzem 12 caracteres exclusivos para o id. Então usamos o método Math.random para obter um índice exclusivo a cada iteração. Depois disso, usamos esse índice com o método charAt para recuperar um caractere exclusivo da variável data. Atribuímos o resultado à variável key e a retornamos para uso posterior. Em seguida, invocamos a função generate e atribua-o à variável id:

   for (let i = 1; i <= 12; i++) {
        let index = Math.floor(Math.random()
                    * data.length + 1);
          
        key += data.charAt(index)
    }
      
    return key;
};
 const id = generate();

Agora precisamos inserir o conteúdo gerado em nosso documento. Primeiro, direcionamos o formulário ativo:

var oDocument = Api.GetDocument();

Depois disso, criamos um parágrafo e adicionamos um elemento de texto a ele. Envolvemos nosso conteúdo gerado neste elemento passando a variável id nos parâmetros:

var oParagraph = Api.CreateParagraph();
oParagraph.AddText(id);

Então nós o inserimos. O métodoInsertContent incorpora um elemento bem na posição do cursor. Também especificamos o proprietário KeepTextOnly. Ao definí-lo como verdadeiro, podemos evitar possíveis problemas de posicionamento:

oDocument.InsertContent([oParagraph], { "KeepTextOnly": true });

Todo o código da macro é o seguinte:

function generate () {
    let key = '';
    const data = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
            'abcdefghijklmnopqrstuvwxyz0123456789';
      
    for (let i = 1; i <= 12; i++) {
        let index = Math.floor(Math.random()
                    * data.length + 1);
          
        key += data.charAt(index)
    }
      
    return key;
};
const id = generate();
var oDocument = Api.GetDocument();
var oParagraph = Api.CreateParagraph();
oParagraph.AddText(id);
oDocument.InsertContent([oParagraph], { "KeepTextOnly": true })

Agora, vamos rodar nossa macro e ver como ela funciona!

Esperamos que você ache esta macro útil e a incorpore ao seu fluxo de trabalho. As macros do ONLYOFFICE são extremamente versáteis e permitem que os usuários manipulem documentos de várias maneiras. Essa macro é apenas um dos muitos exemplos do que pode ser alcançado implementando nossos métodos de API.

Nós gentilmente encorajamos você a experimentar e embarcar em seus próprios projetos. Não hesite em fazer perguntas ou compartilhar suas ideias conosco. Estamos abertos à discussão e cooperação. Boa sorte em seus esforços exploratórios!