NOTESSIDAN

Allt om Lotus Notes & Domino




Vem löser detta för mig
Jag har ett nummerfält som jag visar i webläsare. Om jag har svenska inställningar i min webläsare så är det svenska nummer format som förväntas, på motsvarande sätt är det om jag har andra språkinställningar.

Om jag försöker skriva t.ex 1000.00 i ett nummerfält med svenska inställningar i webläsaren så kommer inte Domino acceptera det formatet eftersom det ska vara 1000,00 (med komma) enligt språkinställningen i webläsaren.

På ett nummerfält kan man tvinga tex att decmal separatorn alltid ska vara komma (,) oavsett vilket språk man har i webläsaren. men detta är ingen bra lösning heller eftersom användare i England vill skriva punkt som separator.

Så på nåt sätt måste man antingen informera användarna vilken separator det är som gäller på just den webläsaren användaren sitter på eller försöka validera eller konvertera det som användaren skrivit till ett nummer.

Denna validering måste ske innan användaren trycker save (dvs med javascript) eftersom Domino kommer att generera fel om man skrivit fel format och man förlorar då all övrig data man skrivit.

Jag är själv osäker på hur man löser detta på bästa sätt, eller hur man löser detta på tex e-handelsportaler eller liknande.

Här är några lösningar jag tänkt på, inga är bra tyvärr:

  • Sätt defaultvärde på fältet tex. 0.00 så vet användarna att det är punkt som gäller som decimalseparator.
  • Använd defaultvärde som ovan och kolla vilken separatorn är och med detta skriv ut i klartext vilken separatorn är.
  • Använd ett textfält istället för nummerfält och gör all konvertering när användaren tryckt save.
  • Läs vilket språk som gäller i webläsaren med CGI variabler och gör en lista med varenda språks separatorer.
  • Tvinga t.ex "komma" som separator och informera användaren att det är det som gäller


Har du någon annan idé på hur jag ska kunna validera ett inskrivet nummer innan användaren trycker save ? Lämna gärna en kommentar.



Relevanta Poster på Notessidan:



Publicerad 2007-03-01 | Kommentarer: 15 | Läsningar: 1880
Kommentarer

Andrei Kouvchinnikov ( 2007-03-01 18:16:52 ) Websida
Man kan konvertera alla kommatecken till punkter när man lämnar fältet. Och göra liknande kontroll även när man sparar dokumentet. Att skriva "0.00" som default värde är också en bra ide.
Har användaren skrivit både komma och punkt i samma fält, kommer validering att visa att numret inte är giltigt (har 2 punkter).

Här är ett exempel:
http://dominounlimited.blogspot.com/2006/06/validating-numeric-fields-in.html
Thomas Adrian ( 2007-03-01 22:35:52 ) Websida
Hej Andrei, tack för ditt svar.

Jag vet inte om du missuppfattat mitt problem, (eller också misuppfattade jag ditt svar;-))

Vad jag behöver är validera så att användaren skrivit punkt om webläsaren har engelska inställningar och även så att användaren skrivit komma om webläsaren har svenska inställningar.

(helst bör ju alla språk valideras eftersom man aldrig kan veta vilket språk användaren har och därfär inte kan vet vilken separator som gäller.)

Som jag föstår din funktion så funkar den bara om man har svenska inställningar i webläsaren eftersom den bara ersätter alla punkter med komma och inte tvärtom.

hm1... Bryr sig javascript om vilket språk man ställt in i webläsaren, dvs kan jag kolla med javascript om ett fält är numeriskt eller inte baserat på språk i webläsaren, kanske värt att testa.

hm2...Kanske ett gömt nummerfält som innehåller rätt separator kan funka.


Hälsningar
Thomas
Fredrik Stöckel ( 2007-03-01 23:00:38 )
Hej Adrain,

Räcker det inte med att validera att det är ett nummer som skrivs in via javascript, sedan kan du ju konvertera det till punkt eller komma eller vad du vill använda dig av i back-end.

På så sätt slipper man engagera/informera användaren om detta.

Om du kör java i back-end så är java.text.DecimalFormat ngt du kan kolla närmare på.

String price = doc.getItemValueString("tmpPrice");
// atleast 2 decials and maximum four.
java.text.DecimalFormat df = new DecimalFormat("######.00##");
double newPrice = Double.parseDouble(tmpprice);
doc.replaceItemValue("price", df.format(newPrice));

Fredrik Stöckel ( 2007-03-01 23:15:15 )
Sorry, hade en del typos i mitt kodexempel...

skall ju vara double newPrice = Double.parseDouble(price); så klart.
Thomas Adrian ( 2007-03-01 23:21:42 ) Websida
Hej Fredrik,

Visst, det räcker att validera så att det är ett nummer som skrivits in. och det är väl det jag har problem med.

Domino förstår inte att 1000,00 är nummer om jag har engelska inställningar i webläsaren, men som jag skrev ovan så kanske javacript gör det, jag har inte testat.

Problemet med att validera efter man sparat är att användaren ka nha skrivit något man inte kan konvertera till nummer, tex 1 miljon.

Borde finnas färdiga funktioner i javascript som hanterar detta eller ?

/Thomas
Fredrik Stöckel ( 2007-03-01 23:49:36 )
Hej, absolut, en regexp kan verifera att det är ett nummer med antal decimaler. Sedan kan du ju alltid spara det som användaren matar in som text och göra om det till ett riktigt nummer i back-end.

något sånt här kanske som validering (ej tesat):

function doValidate() {
var price = document.getElementById("price").value.split(",").join(".");
var numPattern = ^\d*(\.\d{1,2})?$;
if(!price.test(numPattern)) {
alert("please use only numbers and format the price with a maximum of two decimals");
}
}

Fredrik Stöckel ( 2007-03-01 23:51:12 )
Sorry, skall vara if(!numPattern.test(price)) tror jag...har varit en lång dag :)
Fredrik Stöckel ( 2007-03-02 00:09:21 )
kan ju vara trevligt med en regexp som funkar också :)

var numPattern = /^\d*(\.\d{1,2})?$/;

(var tvungen att testa själv)
Thomas Adrian ( 2007-03-02 11:49:32 ) Websida
Tack så mycket

Jag tror iof att lösningen blir att tvinga användarna att skriva komma som decimalseparator och inte acceptera inskrivna punkter.
inte en perfekt lösning men det duger nog för kunden denna gång.

/Thomas


Johan Friberg ( 2007-03-02 15:54:37 )
kan du inte lägga en länk till //dinserver/$preferences.nsf?openpreferences, så kan användarna själva välja vilka inställningar de vill ha.

/Johan
Thomas Adrian ( 2007-03-05 08:46:48 ) Websida
Tack Johan, ännu en möjlighet.

/Thomas
Thomas Adrian ( 2007-03-05 12:21:38 ) Websida
En enklare lösning är förstås att tillåta separatorer baserat på språkinställningar i webläsaren, om nåt går fel , returnerar men $$ReturnGeneralError och visar vilken typ av fel det är och möjligheten att göra go back (history.go(-1))

/Thomas
Roger Johansson ( 2007-03-05 23:56:56 )
Har haft ett liknande problem tidigare. Då löste jag det genom att lägga all validering i en Domino agent som jag anropar från Javascript.
Innan submit kör jag alltså:

XMLvariables = getAllFieldsAsXML();
objHTTP = new ActiveXObject("Microsoft.XMLHTTP");
strUrl = sDBPath + waValidateOrder?OpenAgent";
objHTTP.open("POST", strUrl, false, "", "");
objHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
objHTTP.send(XMLvariables);


Funktionen "getAllFieldsAsXML();" returnerar en xml sträng med: fältnamn, värde och datatyp för alla fält. Har ett eget attribut på fälten för att ange datatyp.

Ett av fälten är "DecimalSeparator". Hiddden computed-for-display
Det innehåller decimal tecknet som gäller för användaren:
"@Middle(@Text( 3/2 );1;1);" som Domino uppfattar det.

I agentens lotusscript tolkar jag sedan, bla, dom numeriska fälten mha av "DecimalSeparator" ovan.

Försöker undvika för mycket logik i Javascript, men visst några regexp uttryck har man väl slängt in av och till :-)
Thomas Adrian ( 2007-03-06 12:16:59 ) Websida
Hej Roger,

Tack för det, jag funderar iof. på hur man vet om Dominoagenten du har kommer acceptera decimalseparatorn.

Du vet browserns decimalseparator, men agenten som körs går ju på servern och servern kan ha helt andra språkinställningar än användarens webläsare , eller missuppfattade jag ?

För övrigt så testade jag javascriptfunktionerna IsNaN() och Number() men dom verkar inte gå på språkinställningarna i webläsaren. Dessa funktioner förstår endast punkt som decimalseparator och tusenseparerare förstår den inte heller, mycket märkligt.


/Thomas





Roger Johansson ( 2007-03-07 10:43:44 )
Lite förtydliganden:
Domino servern måste vara inställd med:
"Default regional locale: Browser's accept-language"
Då kommer servern att använda browserns inställningar för att formatera datum och nummerfält när man gör ?OpenForm tex.
Så när domino skall initiera fältet "DecimalSeparator", som är ett computed-for-display fält mha av formeln: "@Middle(@Text( 3/2 );1;1);" blir det "." för engelska användare och "," för svenska.
Domino agenten känner dock inte av browsern inställningar. Lite synd. Den får använda fältet "DecimalSeparator" jag skickar med i requesten



Sök på Notessidan
Thomas Adrian
ThomasCertifierad utvecklare och administratör inom Notes & Domino

Kontakta mig







Senaste Sökningarna på Notessidan
Sön - sharepoint (R:1)
Sön - räkna and antal and besökare (R:0)
Sön - browser (R:17)
Sön - stoppar and mail (R:1)
Sön - korrupt (R:3)
Sön - böcker (R:0)
Sön - kalendern (R:12)
Sön - feature (R:15)
Sön - print and mime (R:2)
Sön - länka (R:0)
Sön - databasen (R:94)
Sön - access (R:47)
Sön - outlook (R:15)
Sön - webanvändare (R:0)
Sön - google and maps (R:6)
Sön - juffe (R:2)
Sön - uidoc.print (R:1)
Sön - java and lotusscript (R:26)
Sön - besök (R:0)




Databasstatistik Blogg
Uppdateras var 15:e Minut

Antal Poster:562
Antal Kommentarer: 1381
Alla sidvisningar idag:
Unika Besökare idag:
Databasstorlek: 180,75Mb
Fixup: 2019-07-17 00:31:15
FT:2019-07-18 00:11:29
DB Procent använd: 98,9
Antal Agenter: 42
Antal Formulär: 65
Antal Vyer: 60
Antal Dokument: 7933
Antal Image Resources: 108
Antal Subformulär: 18
Antal Scriptbibliotek: 11
Totalt Antal Designelement: 576
Antal Attachments: 159
Antal Konflikter: 0
Server version 1: 405
Server version 2: Release 9.0.1FP9|August 14, 2017
Server Plattform: Windows/64
Ändrad: 2019-07-18 00:45:26
Server Tidszon: Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=131$ZN=W. Europe
Region:
Kommentarsspam Idag: 1
Kommentarsspam Totalt: 17914


BlogRankers.com

Top Sites at iWEBTOOL.com

Fight Spam! Click Here!

Bloggtoppen.se

Listed on BlogShares

Increase website traffic

Top Internet Blogs

Site Checker