[JS] Waarde uit tabel als variabele gebruiken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sefyu
  • Registratie: November 2006
  • Niet online
Allereerst, ik ben een volledige beginner op het gebied van Javascript (en op code kloppen in het algemeen, for that matter). Ik heb de afgelopen anderhalve dag zitten proberen en lezen om dit werkend te krijgen maar ik kan wel wat hulp gebruiken. Ik heb al behoorlijk was beginnersartikelen e.d. gelezen maar ik denk dat ik nog wel een maandje aan het lezen ben voor ik weet wat ik moet weten.

De helpfile bevat codereferenties en aanwijzingen, maar ik kom er nog niet uit.

Ik ben bezig met het maken van een rapport in (Oracle) Hyperion Intelligence Explorer. Deze maakt gebruik van een SQL-database. Met Javascript kunnen de uitgelezen gegeven uit die database vervolgens aangeroepen en bewerkt worden:

Afbeeldingslocatie: http://img442.imageshack.us/img442/4737/66491707.png

Voor zover het van belang is, de procedure is als volgt:

Allereerst wordt in de "Query"-sectie op een redelijk simpele manier een query gebouwd met joins etc. De resultaten van die query zijn vervolgens te zien in de "Results"-sectie. Dit ziet er als volgt uit:

Afbeeldingslocatie: http://img14.imageshack.us/img14/1614/48583642.png

Door middel van "Add Computed Item" kan ik een kolom bijmaken en vullen m.b.v. Javascript.

Ik wil nu voor de zaken waar een regeling getroffen is (als er gegevens staan in de kolom "Id_Ribbedr" dan is dit het geval) een lopende zin maken met het bedrag en de periode. De periode staat in de kolom "Periode".

Als er dus een regeling getroffen is van €100,50 per maand moet er in mijn "Computed"-kolom komen te staan: "Er is een regeling getroffen van €100,50 per maand.

Na enig zwoegen is dit ongeveer gelukt, en wel met de volgende code:


JavaScript:
1
if (Id_Ribbedr > "0") {"Er is een regeling getroffen van €" + Id_Ribbedr + " per " + Periode + "."}


Resultaat: "Er is een regeling getroffen van €100,5 per maand."

Er mist dus een nul. Twee opties kwamen in mij op:

1. Zoek een manier om een gedeelte van de gegenereerde zin (het bedrag) "opmaak" mee te geven zodat het bedrag ook gezien wordt als bedrag en de rest van de zin als tekst.

Geprobeerd:

JavaScript:
1
if (Id_Ribbedr > "0") {"Er is een regeling getroffen van €" + toPrecision(2) Id_Ribbedr + " per " + Periode + "."}


JavaScript:
1
if (Id_Ribbedr > "0") {"Er is een regeling getroffen van €" + Id_Ribbedr.toFixed(2) + " per " + Periode + "."}


En vele vele varianten hierop (de meeste met incorrecte syntax, maar ook met "juiste" syntax (voor zover ik dat kan zien) die als resultaat "#NAME" of "#ERROR" gaven).


2. Neem de waarde uit "Id_Ribbedr" en zet die in een variabele om die vervolgens op te roepen midden in de zin.

Dit heb ik als volgt geprobeerd:

JavaScript:
1
2
var bedrag=ActiveDocument.Sections["Results"].Columns["Id Ribbedr"].GetCell();
if (Id_Ribbedr > "0") {"Er is een regeling getroffen van €" + bedrag.toFixed(2) + " per " + Periode + "."}


Hier heb ik ook een aantal varianten op geprobeerd echter steeds met als resultaat "#NAME". Voor zover ik JS nu begrijp, zou de laatstgenoemde code moeten werken, maar dat doet 'ie dus niet en een mogelijkheid om te tracen of debuggen is mij niet bekend.

Dit is voor jullie vast ubersimpel maar ik kom er echt niet uit.

Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 10:24
Ik denk dat het een string if, kan je er geen parseFloat overgooien voor je dat doet?

Acties:
  • 0 Henk 'm!

  • Sefyu
  • Registratie: November 2006
  • Niet online
Als ik dit probeer:

JavaScript:
1
if (Id_Ribbedr > "0") {"Er is een regeling getroffen van €" + parseFloat(Id_Ribbedr) + " per " + Periode + "."}


Dan krijg ik nog steeds "100,5" terug als waarde i.p.v. "100,50". Ik ga even kijken of ik erachter kan komen hoe de waarde uit de DB gehaald wordt.

Edit: Het datatype (bij de query) staat ingesteld op "Real". Ik heb verder nog keuze uit:

Auto
Blob
Byte
Date
Integer (16 bit)
Integer (32 bit)
Long Text
Packed Real
Real
String
Time
Timestamp

Geen van die opties geven echter het goede resultaat.

[ Voor 30% gewijzigd door Sefyu op 14-12-2011 14:53 ]


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 10:24
http://jsbin.com/utimah
JavaScript:
1
2
3
4
Id_Ribbedr = "100.5";
Id_Ribbedr= parseFloat(Id_Ribbedr);
Id_Ribbedr = Id_Ribbedr.toFixed(2);
alert(Id_Ribbedr);

Acties:
  • 0 Henk 'm!

  • Sefyu
  • Registratie: November 2006
  • Niet online
(Ik heb inmiddels een debugoptie gevonden)

Ik probeer nu dit:

JavaScript:
1
2
3
Id_Ribbedr = parseFloat(Id_Ribbedr); 
Id_Ribbedr = Id_Ribbedr.toFixed(2); 
if (Id_Ribbedr > "0") {"Er is een regeling getroffen van €" + Id_Ribbedr + " per " + Periode + "."}


De debugger geeft aan: Line(2):Id_Ribbedr.toFixed is not a function

Google geeft aan dat Hyperion die functie blijkbaar niet ondersteunt (zal wel door de ouderdom komen). Een alternatief blijkt de Round-functie te zijn. Die echter ook geen functie bljikt te zijn in Hyperion. Ik ga even verder speuren.

[ Voor 16% gewijzigd door Sefyu op 14-12-2011 15:08 ]


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 10:24
[google=Hyperion format currency javascript]

ik zou even googlen in dat geval... Lekker, van die halve JS implementaties

Acties:
  • 0 Henk 'm!

  • Sefyu
  • Registratie: November 2006
  • Niet online
Ik heb een workaround gevonden. Ook heb ik nog codereferenties gevonden.

Ik heb een nieuwe Computed-kolom aangemaakt met daarin:

Replace ( Id_Ribbedr, ".", "," )

Die code vervangt de punten door komma's. Vervolgens verwijs ik in mijn kolom waar de volledige tekst moet gaan naar de nieuwe Computed-kolom.

Ik vermoed dat, omdat de mannetjes bij Oracle Amerikaans zijn, de ".50" als decimaal gedeelte gezien wordt omdat er een punt voor staat. Omdat ik die punten vervangen heb door komma's, snapt Hyperion niet dat die ",50" een decimaal gedeelte van een getal is en wordt die waarde met rust gelaten.

Zolang het maar werkt he...
Pagina: 1