GOTO in javascript

Status
Niet open voor verdere reacties.

spw

Gebruiker
Lid geworden
18 nov 2016
Berichten
83
Hallo,

Ik heb een vraag ivm goto en javascript.
Ik heb gelezen dat goto niet gekend is in javascript.
Maar op welke manier kan ik mijn probleem dan oplossen.

Momenteel heb ik een script dat wanneer een waarde, komende van een andere tabel, nul is dat ik dan naar het einde van het script moet gaan.
Omdat 'in het midden' er een aantal bewerkingen, save, print en mail wordt gestuurd. Maw wanneer de waarde niet nul is.
Mijn probleem nu is dat wanneer een waarde nul is dat ik dan een leeg document wordt geprint, het bestand wil opslaan en foutmeldingen krijg ed.

Dus de vraag is :

if (X == "") ga naar einde van het bestand

Hier staan bewerkingen, opslaan ed commando's die niet van nut zijn als de waarde nul is.

Alvast bedankt
 
Je eerste vraag: goto is niet van deze tijd.
Als je het eenvoudig wilt houden maak je function's.

Een manier om het script te stoppen is rommelen met throw new Error(); of met throw '';
maar dit is een andere manier
Code:
<script>
function hoofdProgramma() {
   //hier staat wat code...
   if (X == "") return;
   //hier staat nog meer code...
}
hoofdProgramma();
</script>
Suc6. Have fun.
 
voor simpele scripts en geen ervaring in programmatie was de GOTO ******* gemakkelijk.

In mijn voorbeeld (om het simpel te houden) :

var mySaveProc= app.trustedFunction(function()
{
if (A == 0) {app.alert("Waarde is nul "); GOTO EINDE;};
if (B == java) {app.alert("Waarde is fout "); GOTO EINDE;};

hier de code die uitgevoerd moet worden als A niet gelijk aan 0 en B niet gelijk aan java

EINDE:

Dus eigenlijk een stukje code overslaan.
Heb al liggen sukkelen met function maar krijg het niet in orde.
Iemand een idee ?
 
Ik zelf een oplossing gevonden :

var mySaveProc= app.trustedFunction(function()
{

function hoofdprogramma() {
if (A == 0) {app.alert("Waarde is nul "); return;};
if (B == java) {app.alert("Waarde is fout "); return;};

hier de code die uitgevoerd moet worden als A niet gelijk aan 0 en B niet gelijk aan java
} // einde hoofdprogramma
hoofdprogramma();
});

Dit werkt. Alhoewel ik persoonlijk het vreemd vind dat ik naar het hoofdprogramma(); maar eigenlijk het einde van script is.
Maw ik zou verwachten dat ik in het begin de test kan doen om te zien of de rest van de code moet uitgevoerd worden.
Indien niet dan naar het einde gaan. Anders de rest van de code uitvoeren.
Ik wil altijd bijleren van specialisten. Dus als iemand een professionele code ....
Dan graag. Maar de manier waarop ik het doe werkt ook.
Dus de druk is van de ketel :D
 
Wat je zelf hebt bedacht is in essentie wat Bron ook al schreef, en dat is ook meteen de professionele oplossing.

GOTO kun je alleen nog gebruiken bij programma's die sequentieel worden uitgevoerd. Maar dat is iets wat in ieder geval bij de huidige desktops niet meer gebruikt kan worden. Dat heeft alles te maken met hoe een modern OS is opgebouwd en vooral de hoeveelheid verschillende "events" die er optreden tijdens het uitvoeren van je programma. Ondoenlijk om die op de ouderwetse manier te gaan afhandelen.
 
GOTO stamt uit de tijd van Basic op "home computers" (jaren 80-90). Al snel bleek dat een programma met een aantal GOTO's een rijstebrij werd. Ook in die tijd werd daarom al aangeraden om in Basic met GOSUB (een function zonder parameters) te werken. In vrijwel alle talen werd GOTO eruit gehaald om zodoende gestructureerd te programmeren.

Tja... er zijn nog steeds een paar scripting talen zoals AutoHotKey die er stug aan vasthouden .... ppffffff
(voor backwards compatibility denk ik)

Hetzelfde geldt eigenlijk ook voor het declareren van variabelen. Het is netjes om deze altijd te declareren en in veel talen is dit verplicht.
 
Laatst bewerkt:
Wanneer ik dit script uitvoer op een terminal server met Adobe Reader 11 ipv een local computer met Adobe DC Pro dan krijg ik een 'an internal error occured'.
Wanneer ik de procedure verwijder werkt het wel.
Dus er is nog iets niet goed of er is een verschil met de procedure en verschil tussen computer en terminal server.
Wat is probleem met dit script op terminal server ?
 
Wanneer ik dit script uitvoer op een terminal server met Adobe Reader
Wat je wilt doen ben ik even kwijt. Je startte het topic met een gewone Javascript vraag. Stukje bij beetje geef je informatie. Nu begrijp ik dat een gebruiker op een MS (of VMWare) Terminal Server het script gaat uitvoeren in Adobe Reader? Dat is iets anders dan Javascript op een webpagina in een Browser.
 
if (A == 0) ---> is A numeriek?
if (B == java) ---> zijn B en variabele java van hetzelfde datatype?
return;}; ---> probeer eens zonder die laatste ;
heb je overal een // bij commentaar regels.
 
Laatst bewerkt:
het gaat om een dynamisch stempel te plaatsen op een document.
de gebruiker plaatst de stempel.
Zal antwoorden op een paar vragen die de stempel vraagt.
Dan via File zal een script worden uitgevoerd.
Dit script controleert of de waarden in de stempel goed zijn ingevoerd.
Indien niet dan een melding en document sluiten.
Indien wel verder afhandelen zoals opslaan, print en mail.

in 0 en java is een typo.

Daarom, vroeger, had je de goto.
Als een waarde fout is ga naar het einde van het script.

Ondertussen heb ik het probleem opgelost (of het werkt maar snap het niet.
Indien waarde in stempel fout wordt document gesloten. Commando in begin.
Indien waarde in stempel goed dan wordt de rest van document uitgevoerd en op document gesloten.
Maw snap de volgorde niet.

var mySaveProc= app.trustedFunction(function()
{

this.closeDoc(true);

app.beginPriv();

var myDoc = event.target;

if (global.Document == "") {app.alert("You chose a WRONG TNUMBER. Place the stamp again !!"); return;};

myDoc.saveAs(/"c/test.pdf");
this.print();

function hoofdprogramma() {

app.alert("hoofdprogramma");

} // einde hoofdprogrammaapp.endPriv();

app.alert("return myDoc");
return myDoc;


hoofdprogramma();
app.alert("einde");

});
 
Je hebt in ieder geval het doel bereikt :thumb:
 
Thx.

Maar kan de logica van het script niet volgen.
Script controleert eerst de waarde.
Indien fout stop en close document.
Maar tot function Hoofdprogramma() kom ik niet.

Dus als je wil mag je kort uitleggen hoe zo'n script werkt.
 
Ik kan het niet testen omdat ik de rest niet heb maar het lijkt erop dat dit voldoende is
Code:
var mySaveProc = app.trustedFunction(function(){
    this.closeDoc(true);
    app.beginPriv();
    var myDoc = event.target;
    if (global.Document == "") {
        app.alert("You chose a WRONG TNUMBER. Place the stamp again!");
        return "You chose a WRONG TNUMBER. Place the stamp again!";
    }
    myDoc.saveAs(/"c/test.pdf");
    this.print();
    app.alert("return myDoc");
    return myDoc;
});
var resultaat = mySaveProc();
app.alert("resultaat: " + resultaat);
De functie hoofdprogramma doet in het script niets en kan daarom weg. Je maakt namelijk al van de variabele mySaveProc een functie. Met elke return die in deze functie staat spring je uit de functie en geef je de variabele mySaveProc een waarde (lijkt op je vraag: goto einde functie). Het script begint pas bij resultaat = mySaveProc(); Deze regel roept de functie aan.
 
Laatst bewerkt:
Wanneer ik dit script uitvoer op een terminal server ipv een local computer dan krijg ik een 'an internal error occured'.
Dit kan te maken hebben met de regel myDoc.saveAs(/"c/test.pdf");
Heeft de gewone gebruiker voldoende permissies om hier iets op te slaan?

Suc6 met het script :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan