-
Fototrend
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
martonx
veterán
A serverless dolog tök jól, egyszerűen, működik. És csak egy hülye buzzword, a háttérben nyilván ott van a szerver. A serverless inkább csak arra utal, hogy abszolút nem kell foglalkoznod a szerverrel, de még csak a terheléssel, skálázással se. Egyedül annyi a rákfenéje, hogy előre abszolút megbecsülhetetlen a költség igénye. Havi X másodperc futás ingyenes, utána másodpercenként ennyi-annyi. De őszintén ki fogja tudni másodpercben előre felbecsülni, hogy napi X db request kiszolgálása mégis hány másodpercbe fog telni?
Ettől függetlenül kis terhelésű api-k esetében valóban kb. ingyenes alternatíva tud lenni.Én kérek elnézést!
-
Zedz
addikt
válasz martonx #6651 üzenetére
Jaaa én azt hittem a serverless megoldás az az, hogy full 3rd party alkalmazások szolgálják ki a szervered nagy részét. Mondjuk Auth0, Firebase, ha van push noti mondjuk mobilra akkor megint valami, szóval amolyan BaaS-ok együttese.
Amiket leírtál azokkal tisztában vagyok. ( mielőtt még inkompetensnek néztek )
A fentebb említett dolgokkal pedig eddig én csak megszívtam. Mondjuk sok framework alapból ad már egy logint, mögé csapni egy DB-t sem olyan nagy meló, csak valamiért kezdünk ezekről leszokni. -
maestro87
őstag
Sziasztok!
Van egy
data
tömböm, amibe dátumokat olvasok be. Hogy lehetne megmondani a függvénynek, hogy UTC+8-ban vannak ezek a dátumok?A függvény a következő (google apps script):
function convertTime()
{
var range = SpreadsheetApp.getActiveRange();
var data = [];
var output = [];
data = range.getValues(); // kijelölt cellák értékeinek beolvasása a data tömbbe
for(var i = 0, iLen = data.length; i < iLen; i++) {
var timeUTC2 = Utilities.formatDate(data[i][0], 'GMT+2', 'yy/M/d HH:mm');
output.push([timeUTC2]);
}
range.offset(0,1).setValues(output); // a mellette lévő oszlopba rakja az eredményeket
}A függvény működik, a probléma csak az, hogy a google táblázat UTC+2-be van beállítva és alapértelmezetten (nem akarom átállítani) ezt az időzónát veszi alapul mindenhol, így a kimenet ugyanaz lesz mint a bemenet.
Sajnos a google táblázatos topik halott, így inkább ide írtam a nyelv javascript alapja miatt. -
maestro87
őstag
válasz DNReNTi #6654 üzenetére
Végül ezzel a leírással sikerült.
-
maestro87
őstag
válasz maestro87 #6656 üzenetére
A függvényemben meg nem működik rendesen.
20 órát 22-re konvertálja, mikor 14-re kellene. Mit rontottam el?function convertTime()
{
var range = SpreadsheetApp.getActiveRange();
var data = [];
var output = [];
data = range.getValues();
for(var i = 0, iLen = data.length; i < iLen; i++) {
var HongKong = m.moment.tz(data[i][0].toString(), 'Asia/Hong_Kong');
var Budapest = HongKong.tz('Europe/Budapest').format('YY/MM/DD HH:mm');
output.push([Budapest]);
}
range.offset(0,1).setValues(output);
} -
PumpkinSeed
addikt
válasz martonx #6648 üzenetére
Annyit azert hozzatennek az AWS serverless-hez, hogy hiaba mondja azt, hogy nincs szerverrel valo szarakodas, de helyette bejon AWS-el valo szarakodas. Ugyanis ha lambda fuggvenyeket hasznalsz akkor kell API Gateway, de ha az authentikacio nem AWS Cognito akkor az API Gateway egy remalom, amit lecserelhetsz Kong API Gateway-re, de akkor meg az AWS Lambda lesz nehezkes. Szoval maga az elgondolas jo, mi hasznaljuk is prod-ban, de kin szenvedes foleg ha mar egy meglevo kodbazisnal akarod hasznalni.
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
martonx
veterán
válasz PumpkinSeed #6658 üzenetére
Tökéletesen egyetértek, ezért is írtam, hogy ez inkább csak hype, mintsem tényleges előny. Bár autentikáció mögött még sose használtuk. Pár micro servicünk fut Lambdában, igaz productionben.
[ Szerkesztve ]
Én kérek elnézést!
-
maestro87
őstag
Ezt Google Script-re hogy lehetne lefordítani?
var img = document.querySelector('meta[property="og:image"]').content;
Egy URL-ből szeretném kinyerni az og:image meta tagot és a kép linkjét betenni egy cellába, de sehogy sem jön össze, nem találtam rá megoldást.
[ Szerkesztve ]
-
maestro87
őstag
Tudom, hogy ez nem működik. Ezt a kódot múltkor kaptam, mikor a böngésző eszköztárra kellett egy ilyen "könyvjelző script", ott működik, de a google script már nem ismeri. Azt akarom megcsinálni, hogy ha a táblázat egy cellájába beírok egy url címet, akkor a mellette lévő cellákba automatikusan írja be az og:title és az og:image tagokat.
Már minden létező kifejezésre rákerestem, de nem találtam egyszerű megoldást, csak ezt a szolgáltatást ami azt hiszem ezt csinálná meg helyettem, pontosabban ezen videó alapján már könnyen megtudnám csinálni.
De tényleg ilyen bonyolult lenne megírni, hogy jobban megéri beregisztrálni egy ilyen oldalra?
Megköszönném ha valaki megadná a helyes kódot ezen meta tagok kinyerésére, mert én csak a sötétben tapogatózok. C-nyelvet ismerem csak, azt se 100%-osan. -
nagyúr
Sziasztok! IndexedDb a téma, hogyan adhatom vissza a getData() metódussal a táblában található elemeket?
Az async működést nem igazán vágom
this.getData = function(){
var open = indexedDB.open(database, 1);
var data;
open.onsuccess = function() {
// Start a new transaction
var db = open.result;
var tx = db.transaction(table, "readwrite");
var store = tx.objectStore(table);
// Query the data
var getAllData = store.getAll();
getAllData.onsuccess = function() {
data = getAllData.result;
};
// Close the db when the transaction is done
tx.oncomplete = function() {
db.close();
};
};
return data;
}; -
Karma
félisten
Az aszinkron működést nem tudod megkerülni, úgyhogy olyan getData függvényt, amit egyszerűen szinkron módon meghívsz és eredményeket ad vissza, lehetetlen írni. (Nem is feltétlen baj.)
Van egy pár lehetőséged, az egyik legegyszerűbb, ha adsz egy callback paramétert a getData függvényednek. Ez például egy olyan kétparaméteres függvény, aminek az első paramétere a futáskor történt hiba (lehet `null` is ha minden szép), a második pedig a tényleges adat.
A lényeg, hogy az indexedDB-s kódod az utolsó onsuccess handler végén meghívja ezt a függvényt, így tudod feldolgozni az eredményt.
Például:
this.getData = function(callback){
var open = indexedDB.open(database, 1);
open.onsuccess = function() {
// Start a new transaction
var db = open.result;
var tx = db.transaction(table, "readonly");
var request = tx.objectStore(table).getAll();
request.onsuccess = function() {
callback(null, request.result);
};
request.onerror = function() {
callback(request.errorCode);
};
// Close the db when the transaction is done
tx.oncomplete = function() {
db.close();
};
};
open.onerror = function() {
callback(open.errorCode);
}
};Máshol meg így hívod:
valami.getData(function(err, data) {
if (err) {
console.log("Error while reading data", err);
return;
}
console.log("Found data", data);
});Ha meg tisztább kódot akarsz, keress egy promise wrappert az IndexedDB-hez szerintem. Persze azt is meg kell tanulni használni először.
Amúgy sose használtam az IndexedDB-t, de a megérzésem azt mondja, hogy nem kéne minden lekérdezésnél nyitni-zárni.
[ Szerkesztve ]
“All nothings are not equal.”
-
Doink
aktív tag
A egyik megoldás az hogy ígéretet (Promise) adj vissza és belül az onsuccess-nél resolve-old, onerror-nál meg reject-eled.
this.getData = function(){
return new Promise(resolve,reject) => {
let query = db.valami_async_művelet()
query.onsuccess = function(result){
resolve(result)
}
query.onerror = function(err){
reject(err)
}
}
}Így fogod tudni meghívni:
ValamiService.getData().then((result) => {
// beteljesült az ígéret és a result-ban lesz az eredmény
}).catch(error) => {
// hiba
});Másik elegáns megoldás ha cold observable-t használsz (rxjs).
[ Szerkesztve ]
-
Jim-Y
veterán
válasz maestro87 #6671 üzenetére
Szerintem csak
1: az eredeti kerdesed csak annak vilagos aki epp azzal foglalkozik amivel te
2: kevesen vannak akik ezzel a temaval foglalkoznakPl nekem sem vilagos hogy mire is van szukseged. Olyan mintha egy mezei URL-bol kene valamit kinyerned, de abban nem szokott "og:image" lenni szoval megiscsak valami mas url-rol van szo. A google script nem tudom pontosan, hogy micsoda. Szoval szerintem csak nem vilagos a kerdes es ezert sem valaszol ra senki. Az is lehet hogy a kerdesed nem javascript specifikus inkabb valami XY (google script vagy fene se tudja mi) specifikus.
-
maestro87
őstag
Akkor itt egy ilyen oldal ami ezeket a tagokat tartalmazza:
<meta property="og:site_name" content="www.banggood.com"/>
<meta property="og:description" content="Only US$14.44, buy best ANENG AN8002 Digital True RMS 6000 Counts Multimeter AC/DC Current Voltage Frequency Resistance Temperature Tester ℃/℉ sale online store at wholesale price.US/EU warehouse."/>
<meta property="og:type" content="product">
<meta property="og:title" content="ANENG AN8002 Digital True RMS 6000 Counts Multimeter AC/DC Current Voltage Frequency Resistance Temperature Tester ℃/℉">
<meta property="og:url" content="https://www.banggood.com/ANENG-AN8002-Digital-Ture-RMS-Multimeter-ACDC-Current-Voltage-Frequency-Resistance-Temp-Tester-p-1145700.html">
<meta property="og:image" content="https://img.banggood.com/thumb/view/oaupload/banggood/images/F4/8C/36c71d9d-edb6-402a-abf7-419251b4a5c6.jpg">Ezekből szeretném kinyerni a "content"-et.
De most meg csináltam string-es műveletekkel, ami működik ugyan, csak ha van erre valami beépített függvény, azért mégis jobb lenne azt használni.
function openGraph(url, type)
{
var response = UrlFetchApp.fetch(url);
var content = response.getContentText();
var preString = '<meta property="og:'+type+'" content="';
var searchString = '"';
var preIndex = content.indexOf(preString)+preString.length;
var searchIndex = preIndex + content.substring(preIndex).indexOf(searchString);
return content.substring(preIndex, searchIndex);
}
//eredmények kiíratása:
function onEdit()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var url = "https://www.banggood.com/ANENG-AN8002-Digital-Ture-RMS-Multimeter-ACDC-Current-Voltage-Frequency-Resistance-Temp-Tester-p-1145700.html";
Logger.log(openGraph(url, 'site_name'));
Logger.log(openGraph(url, 'description'));
Logger.log(openGraph(url, 'type'));
Logger.log(openGraph(url, 'title'));
Logger.log(openGraph(url, 'url'));
Logger.log(openGraph(url, 'image'));
}Illetve az a baj még ezzel, hogy ha a webfejlesztő egy szóközzel többet tesz valahová (mint itt a
site_name"
és a"content
között), akkor már nem működik jól.
Szóval ezen adatok kinyerésére nincs valami atom biztosan működő beépített függvény?A Google Script amúgy Javascript alapú (pl. google táblázatot lehet vele okosítani), de úgy néz ki, hogy vannak olyan JS utasítások amit vagy nem ismer, vagy csak én használom rosszul őket.
[ Szerkesztve ]
-
Doink
aktív tag
válasz maestro87 #6674 üzenetére
Azért nem működik mert szerver oldalon lehúzol egy stringet valahonnan és azt még fel kéne parse-olni hogy ne szövegként kelljen kezelni hanem fába legyen rendezve mint a DOM.
Erre én kb csak a cheerio nevű lib-et ismerem de szerintem bármilyen xml parser megteszi ha az oldal valid. -
nagyúr
Sziasztok! Adott az alábbi metódus. Mire kéne fűznöm az
onerror
-t, hogy meg tudjam hívni benne a deferred object-en areject()
-et? Próbáltam már mindenre, de ha direkt rossz adatbázis nevet vagy tábla nevet adok meg, akkor nem fut bele azonerror
-ombadataSourceIndexedDb = function(databaseProp, tableProp){
this.getData = function(){
var open = indexedDB.open(database, 1);
var data;
var defer = $.Deferred();
open.onsuccess = function() {
// Start a new transaction
var db = open.result;
var tx = db.transaction(table, "readwrite");
var store = tx.objectStore(table);
// Query the data
var getAllData = store.getAll();
getAllData.onsuccess = function() {
data = getAllData.result;
defer.resolve(data);
};
tx.onerror = function(error){
defer.reject(error);
};
// Close the db when the transaction is done
tx.oncomplete = function() {
db.close();
};
};
return defer;
};
var database = databaseProp;
var table = tableProp;
dataSource.call(this);
};[ Szerkesztve ]
-
martonx
veterán
Hehe, ezt láttátok már? https://stackoverflow.com/questions/245062/whats-the-difference-between-javascript-and-java/245073#245073
A második legnépszerűbb választ figyeljétek
Én kérek elnézést!
-
Jim-Y
veterán
En ezt valahogy igy oldanam meg. Kicsit objektumorientaltabb.
class DataSourceIndexedDB extends EventEmitter {
get MESSAGES() {
return {
CONNECTION_ERROR: 'error',
DATABASE_OPENED: 'db-opened'
}
}
constructor(databaseName) {
this._dbName = databaseName;
this._database = null;
}
openDatabase() {
const request = indexedDB.open(this._dbName, 1);
request.onerror = this.onConnectionError.bind(this);
request.onsuccess = this.onConnectionSuccess.bind(this);
}
onConnectionError(event) {
this.emit(this.MESSAGES.CONNECTION_ERROR, {
code: event.target.errorCode
});
}
onConnectionSuccess(event) {
this._database = event.target.result;
this.emit(this.MESSAGES.DATABASE_OPENED);
}
getObjectStore(storeName, mode) {
const tx = this._database.transaction(storeName, mode);
return tx.objectStore(storeName);
}
}
const database = 'xyz';
const table = 'xyz';
const indexedDB = new DataSourceIndexedDB(database);
// might be automated in constructor
indexedDB.openDatabase();
indexedDB.on(indexedDB.MESSAGES.DATABASE_OPENED, () => {
const store = indexedDB.getObjectStore(table, 'readwrite');
const request = store.getAll();
request.onsuccess = (event) => {
const data = event.target.result;
// do smtg with data
};
request.onerror = (event) => {
// error handling
}
});[ Szerkesztve ]
-
PumpkinSeed
addikt
válasz fordfairlane #6682 üzenetére
En mint eddig csak React-et ES6-al hasznalo ember nem ertem miert irod ezt? Szamomra sokkal atlathatobb az egesz. Legtobbszor mikor ES5-t kellett hasznalni inkabb hagytam az egeszet. Nyilvan jobban tudod miert mint en, mint mondottam nem vagyok topon ezen a teren. De szeretnem megtudni miert mondod ezt.
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
martonx
veterán
-
maestro87
őstag
Ezt a cheerio lib-et hozzáadtam a projektemhez.
A példa program működik is, de honnan tudom, hogy miket lehet lekérdezni?
Például, hogy tudom lekérdezni ennek a terméknek a nevét (nem a title-t, mert az másabb), árát, megjelenített kép linkjét stb...?function cheerio()
{
var cheerio = cheeriogasify.require('cheerio');
var response = UrlFetchApp.fetch("https://www.gearbest.com/smart-watches/pp_362705.html");
var $ = cheerio.load(response.getContentText());
Logger.log($('title').text());
} -
fordfairlane
veterán
válasz PumpkinSeed #6683 üzenetére
Csak az osztályba rakásról eszembe jutott Douglas Crockford véleménye a ES6 osztályokról. Én messze nem vagyok olyan képzett a formális nyelvekben, de tényleg valahogy ritka "ugly" konstrukciók.
x gon' give it to ya
-
Doink
aktív tag
válasz maestro87 #6685 üzenetére
Szia, sima css selectorokkal:
var request = require('request');
var cheerio = require('cheerio');
request('https://www.gearbest.com/smart-watches/pp_362705.html', function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
var url = $("meta[property='og:url']").attr('content');
var price = $("meta[property='og:price:amount']").attr('content');
console.log(url, price);
}
});[ Szerkesztve ]
-
maestro87
őstag
Köszi, de hibát dob ki:
"TypeError: (class)@10da0984 nem egy függvény, hanem egy undefined. (9. sor a(z) „cheerio_gasify” projekt „gasify” fájljában)"
Egyébként az egyes sorok mit csinálnak a te kódban, mert eléggé megvariáltad? Vagy miben másabb?Más: Ott sajnos nem mindig a helyes ár jelenik meg. Például ha email only címkével van ellátva, akkor az oldal forrásában itt található a helyes ár:
<span class="my_shop_price" data-orgp="49.99" style="color:#CC0000; font-size:28px; font-weight:bold">47.99</span>
[link]
Tehát innen hogy tudom kiszedni a 47.99-et?
A termék nevét meg innen kellene:<h1 style="display:inline;">Original Xiaomi Mi Band 2 Smart Watch for Android iOS</h1>
<span class="allProperty"> -<strong> BLACK</strong></span>Amúgy ennek a függvénynek nem kellene gyorsabban működnie a string-es megoldásomnál? Mert kétszer lassabban fut le...
-
Doink
aktív tag
válasz maestro87 #6688 üzenetére
A fenti kódot nodejs-ben futtattam mert a lényegi rész ugyan az google scriptben is:
var cheerio = cheeriogasify.require('cheerio');
function run() {
var response = UrlFetchApp.fetch("https://www.gearbest.com/smart-watches/pp_362705.html");
var $ = cheerio.load(response.getContentText());
var result = {
url: $("meta[property='og:url']").attr('content'),
price: $(".price_area > .goods_price > .my_shop_price").data('orgp'),
name: $(".goods-info-top > h1").text()
}
Logger.log(result);
}A cheerionak lassabbnak kell lennie amíg csak pár adatra van szükséged, ettől függetlenül így is elég gyors és ugyan úgy lehet rajta gyorsítani ahogy jquery-ben is tudsz (nem az egész fában keresel hanem csak részfában). Az hogy a google script-re milyen korlátozások vannak és ott miért ilyen lassú már maga az url lekérdezés is annak neked kell utánanézni, nodejs-ben 180ms alatt végez a felparseolással és az eredmény kiírással, google scripben pedig ugyan ez a művelet több mint 10 másodperc.
-
Doink
aktív tag
válasz maestro87 #6690 üzenetére
Ezt a fát nem akarod kiiratni mert azt látod a böngészőben F12->source. <html> a fa csúcsa, annak van 2 gyereke <head> <body> és így tovább. A belső adatszerkezet lesz egy fa ahogy a gép tárolni fogja a memóriában hogy gyorsan tudj benne keresni és módosítani.
Ennek a libnek meg pont az a lényege hogy css selectorokkal tudj keresni/módosítani ebben a html-ben és ne kelljen stringkezelési műveletekkel bajlódni.
Ha mégis be szeretnéd járni a fát akkor a a dokumentációban találsz olyan metódust hogy .children() ami visszadaja egy node közvetlen gyerekeit és így már adja magát hogy rekurzívan elég egyszerű bejárni.A részfát úgy értettem hogy ha van az oldalon egy ilyened és neked kell a price és a name
<!-- többmillió html kód felette -->
<div id="product">
<p class="price">1</p>
<p class="name">name</p>
</div>
<!-- többmillió html kód alatta -->és amúgy az oldalon még van ezer más html tag mindenfelé akkor azt így csinálod:
var $ = cheerio.load(html);
var product = $("#product");
var result = {
price: product.children(".price").text(),
name: product.find(".name").text()
}és nem ezt:
var $ = cheerio.load(html);
var result = {
price: $("#product > .price").text(),
name: $("#product > .name").text()
}mert így kétszer végig fog menni az egész fán megkeresni a #product-ot.
Ettől függetlenül a cheerio oldalán van elég sok példa amit érdemes lenne átfutnod.[ Szerkesztve ]
-
Zedz
addikt
válasz PumpkinSeed #6692 üzenetére
Szerintem sincs különösebben hozzáadott értéke. Meg úgy alapjában véve az OOP is túl van kapva. De ez nagyon saját vélemény.
-
martonx
veterán
Nem értek egyet. Illetve bizonyos esetekben. Attól rosszul vagyok mikor valaki egy kis egyszerű honlaphoz is typescriptben, meg anyámkínja írja meg a classait, amiket összességében 1-200 sornyi js-el össze lehet hozni, még ha spagetti is a kód (már persze milyen az a spagetti kód, amikor maximum 200 sornyi kódról beszélünk). Aztán mikor valakinek odaadják, hogy tessék javítsad, vagy vegyél fel plusz egy eventhandlert, akkor órákig tart a környezet belövése.
Komolyabb SPA-knál, NodeJS-ről nem is beszélve maximálisan van létjogosultsága az egész nagy infrastruktúrás cuccnak, más kérdés, hogy pont azt az előnyét veszíti el a Javascript, ami a scriptnyelvek előnye, hogy gyorsan, könnyen összedob bennük valamit az ember. Ha már kódot akarok fordítani, meg típust ellenőrizni, és komolyan OOP-zni, akkor személy szerint inkább megírom C#-ban (NodeJs helyett, SPA-nál nyilván marad a JS mint egyetlen alternatíva).Én kérek elnézést!
-
fordfairlane
veterán
Az OO remek találmány, de a Javascript (ES6, typescriptről nem tudok nyilatkozni) classokkal sok probléma van.
1. Maga az osztály teljesen felesleges, ha csak egyetlen példányt kell belőle gyártani. Csak egy újabb felesleges absztrakció.
2. Ha több példányt kell csinálni, akkor sincs rá szükség, ha nem használod a típusellenőrzést (Ha típuskonvertálást használsz, az meg valószínűleg tervezési hiba), Javascript alatt simán factory functionnel tudsz objektumokat sorozatgyártani.
3. Javascript alatt a new operátor (illetve az elhagyása) problémás a dinamikus this binding miatt.
4. Javascript alatt a class csupán syntactic sugar, ugyanaz a behavior-delegation van a háttérben, mint class nélkül, construktor functionnel a protottype-ra ráhúzott metódusoknál. Persze a class összeszedettebb szintaxis, de ugyanúgy működik (pl. menet közben átdefiniálhatsz metódusokat).
5. Az öröklés, mint OO kódújrafelhasználás súlyosan problémás módszer, különösen akkor, ha felülbírálsz metódusokat, és nem a SOLID elveknek megfelelően.Hirtelen ennyi jut eszembe.
[ Szerkesztve ]
x gon' give it to ya
-
PumpkinSeed
addikt
válasz martonx #6694 üzenetére
Nem programoztam OO szemleletben mar eleg regota, de ha esetleg JS-t kell heggeszteni inkabb teszem ES6-ban, mint ES5-ben. A jelenkori technologia meg tart mar ott, hogy vagy nem kell JS, vagy kell, de akkor sok. Ezalatt azt ertem, hogy pl. kisebb honlap eseten AMP, ami sokkal ajanlottabb, mint magunk irni valami JS-t, vagy nagyobb projekt eseten valami framework, React, Vue vagy nem tudom.
[ Szerkesztve ]
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
Zedz
addikt
válasz fordfairlane #6695 üzenetére
Ezzel teljesen egyetértek. Valahol nagyon hasznos az OO, de túl van használva.
-
Nefri
csendes tag
Sziasztok!
Sharepoint listához írtam egy javascriptet. Elvileg az lenne a rendeltetése, hogy ha betöltődik az oldal ellenőrzi az évszámot és ha esetleg megváltozott az utolsó betöltés óta, akkor egy másik listának 2 mezőjét módosítsa. A kód gyönyörűen fut azzal a kis problémával, hogy teljesen random, hogy a 2 mezőből éppen melyiknek a módosításához van kedve. Hol az egyiket írja csak át, hol a másikat. Sajnos nem értek javascripthez, de úgy érzem, párhuzamosan ugrik rá a két feladatra és végül csak a gyorsabb hajtódik végre. Tudtok esetleg vmi gyógyírt, hogy szép sorban menjen végig a feladatokon vagy ha más a probléma, akkor mi az? A módosítandó lista összesen 2 oszlopból áll melyekben mindössze 1-1 elem van. Íme a kód:
$(document).ready(function() {
$SP().list("TargetList", "http://.../sites/Registry/").get({
fields: "actualyear", //Listából beolvassa az ott jegyzett évszámot
}, function getData(data) {
for (var i = 0; i < data.length; i++) {
//itt hasonlítja össze, hogy változott-e az évszám
if ((Number(data[i].getAttribute("actualyear")) < (Number(new Date().getFullYear())))) {
$SP().list("TargetList", "http://.../sites/Registry/").update({
actualyear: Number((new Date()).getFullYear()) //frissül az évszám (vagy ez hajtódik végre)
}, {
where: "actualyear < " + Number((new Date()).getFullYear()),
});
$SP().list("AdriaPostaSzamLista", "http://.../sites/Registry/").update({
lastnumber: Number("1") //újévkor 1-re változik a sorszám mező (vagy ez)
}, {
where: "lastnumber > " + Number("1")
});
}
}
});
});A megvalósításhoz Jquery és Sharepointplus-t használok.
Hálásan köszönök minden ötletet a javításra!