Kako koristiti asinhrone API pozive u ONLYOFFICE prilagođenim funkcijama

Prilagođene funkcije predstavljaju moćan i fleksibilan način za proširenje funkcionalnosti ONLYOFFICE Uređivača tabela. Kao deo naših stalnih napora na unapređenju platforme, najnovije izdanje ONLYOFFICE Docs 9.0 donosi podršku za asinhrone API pozive unutar prilagođenih funkcija. U ovom blog postu, pokazaćemo vam kako da ih uključite u sopstvena rešenja.

How to handle async API calls inside ONLYOFFICE custom functions

O ONLYOFFICE prilagođenim funkcijama

Prilagođenje funkcije su svestran i moćan dodatak ONLYOFFICE makroima u Uređivaču tabela. Omogućavaju vam da kreirate sopstvene funkcije koje se mogu izvesti i koristiti direktno unutar tabele.

(function () {
    /**
      * This is a custom function that can be used in the editor.
      * @customfunction

      * @param {number} value - description of the parameter.
      * @returns {number} Description of the returned data.
      */
    function customFunctionName(value) {
        // Add your custom calculation logic here
        return // your calculation result;
    }
    // Register the custom function with the editor
    Api.AddCustomFunction(customFunctionName);
})();

Gde se nalazi: Prikaz > Makroi > Prilagođene funkcije

Šta se promenilo

Sa izdanjem ONLYOFFICE Docs 9.0, uveli smo mogućnost pozivanja asinhronih funkcija unutar vaših prilagođenih skripti.

Sada možete:

  • Izvršavati asinhrone veb zahteve ka bilo kojim servisima.
  • Slati asinhrone zahteve AI provajderima.
  • Koristiti asinhroni JS kod u async funkcijama.
  • Obraditi asinhrone odgovore.
  • Izvoziti rezultate direktno u vašu tabelu.
  (function () {
    // Make an asynchronous request
    let asyncFunc = async function (value) {
      let request = await fetch("https://yourURL");
      const jsonData = await request.json();
      if (value === undefined) {
        value = 2;
      }
      return jsonData;
    };
    /**
     * This is a custom function that can be used in the editor.
     * @customfunction

     * @param {number} value - description of the parameter.
     * @returns {number} Description of the returned data.
     */
    async function customFunctionName(value) {
      // Call the asynchronous function and return its result
      return await asyncFunc(value);
    }
    // Register the custom function with the editor
    Api.AddCustomFunction(customFunctionName);
  })();

Korišćenje asinhronih API poziva u prilagođenim funkcijama

Za ovaj primer, koristićemo Sales Tax API sa sajta API Ninjas, koji vraća stopu poreza na promet države za bilo koji dati ZIP kod u SAD.

Napomena! Da biste koristili ovu ONLYOFFICE prilagođenu funkciju, moraćete da obezbedite svoj API ključ koji možete dobiti na API Ninjas vebsajtu.

Izrada makroa

Prvo definišemo asinhronu funkciju getSalesTax:

let getSalesTax = async function (value) {
}

Ona prima parametar value, koji bi trebalo da bude ZIP kod iz SAD.

Ako ZIP kod nije naveden, funkcija podrazumevano koristi 90210:

let getSalesTax = async function (value) {
}
 if (undefined === value) {
      value = 90210;
    }

Pošto neki ZIP kodovi u SAD počinju sa 0, osiguravamo da je ZIP kod petocifreni string:

 // Convert to string and add missing zeros if needed
    let zipStr = value.toString();
    while (zipStr.length < 5) {
      zipStr = '0' + zipStr;
    }

Na primer, 31 postaje 00031.

Zatim kreiramo URL zahteva za API tako što dodajemo ZIP kod kao query parametar:

I šaljemo GET zahtev ka API-ju:

 let request = await fetch(url, {
      method: 'GET',
      headers: {
        'X-Api-Key': 'yourAPIkey',
        'Content-Type': 'application/json'
      }
    });

Nakon toga parsiramo JSON odgovor u upotrebljiv JavaScript objekat:

  let jsonData = await request.json();

Ekstrahujemo polje state_rate iz prvog elementa u vraćenom nizu. To je poreska stopa države za navedeni ZIP kod. I vraćamo taj broj:

 const taxRate = jsonData[0].state_rate;
    return taxRate;

Zatim definišemo parametre prilagođene funkcije:

 /**
   * Function that returns state sales tax.
   * @customfunction

   * @param {number} value - zip code.
   * @returns {number} Returns state sales tax data.
   */

Dobijamo odgovor iz asinhrone funkcije:

 async function salestax(value) {
    return await getSalesTax(value);
  }

I registrujemo prilagođenu funkciju:

  // Add the custom function 
  Api.AddCustomFunction(salestax);
})();

Sada možemo pozvati funkciju SALESTAX() direktno unutar tabele.

Ceo kod je sledeći:

(function () {
  // Function that returns sales tax data from api-ninjas.com
  let getSalesTax = async function (value) {


    if (undefined === value) {
      value = 90210;
    }


    // Convert to string and add missing zeros if needed
    let zipStr = value.toString();
    while (zipStr.length < 5) {
      zipStr = '0' + zipStr;
    }


    const url = 'https://api.api-ninjas.com/v1/salestax?zip_code=' + zipStr;


    let request = await fetch(url, {
      method: 'GET',
      headers: {
        'X-Api-Key': 'yourAPIkey',
        'Content-Type': 'application/json'
      }
    });


    let jsonData = await request.json();
    const taxRate = jsonData[0].state_rate;
    return taxRate;
  };


  /**
   * Function that returns state sales tax.
   * @customfunction

   * @param {number} value - zip code.
   * @returns {number} Returns state sales tax data.
   */
  async function salestax(value) {
    return await getSalesTax(value);
  }


  // Add the custom function 
  Api.AddCustomFunction(salestax);
})();

Sada možemo sačuvati ovu prilagođenu funkciju i videti kako funkcioniše!

Nadamo se da će vam ova nova funkcionalnost omogućiti da kreirate još robusnija i svestranija rešenja za vaše zadatke. U ONLYOFFICE-u, posvećeni smo dizajnu i isporuci tehnologija koje mogu biti prilagođene vašim specifičnim potrebama.

Pozivamo vas da eksperimentišete sa asinhronim prilagođenim funkcijama i u potpunosti iskoristite ovu proširenu funkcionalnost. Ako imate zanimljive ideje ili predloge, voleli bismo da čujemo od Vas! Uvek smo otvoreni za povratne informacije i saradnju. Srećno u vašim istraživačkim poduhvatima!

Create your free ONLYOFFICE account

View, edit and collaborate on docs, sheets, slides, forms, and PDF files online.