AmpersandTarski / RAP

RAP is a tool that lets you analyse Ampersand models, generate functional specifications and make prototypes of information systems. It is the primary tool for students of the Open University of the Netherlands in the course Rule Based Design.
5 stars 3 forks source link

Prototype geeft 404 page not found error bij invoegen bepaalde interface #109

Closed attaxia closed 3 years ago

attaxia commented 3 years ago

De situatie

Prototype geeft 404 page not found error bij invoegen bepaalde interface

Wat er gebeurde er en wat had je verwacht?

Er zijn geen compile errors, en prototype lijkt gegenereed te worden. Alles zou dus moeten werken

Stappen om dit te reproduceren

Compile het volgende script, en run prototype:

CONTEXT Loonbewerking IN ENGLISH
PURPOSE CONTEXT Loonbewerking
{+ TODO
+}

-- Buildup of order
CONCEPT Order "Een order"
PURPOSE CONCEPT Order 
{+TODO+}
CONCEPT Ordernummer "Uniek identificatienummer voor order"
PURPOSE CONCEPT Ordernummer 
{+TODO+}
CONCEPT Ordertype "PM-ordertype"
PURPOSE CONCEPT Ordertype 
{+TODO+}
CONCEPT Orderstatus "Orderstatus"
PURPOSE CONCEPT Orderstatus
{+TODO+}

RELATION orderType [Order*Ordertype] [UNI, TOT]
MEANING "Geeft aan van welk type een order is"

RELATION orderNummer [Order*Ordernummer] [UNI, TOT]
MEANING "Een unieke identifier voor een order"

RELATION heeftStatus [Order*Orderstatus] [UNI, TOT]

-- Concepts around items
CONCEPT Artikel "Een artikel"
PURPOSE CONCEPT Artikel
{+TODO+}
CONCEPT Artikelnaam "Naam van artikel"
PURPOSE CONCEPT Artikelnaam
{+TODO+}
CONCEPT Artikelnummer ""
PURPOSE CONCEPT Artikelnummer
{+TODO+}
CONCEPT Serienummer "Een artikel"
PURPOSE CONCEPT Serienummer
{+TODO+}

-- Concepts around uitbesteding
CONCEPT Leverancier "Een uitvoerder van reparatieopdrachten"
PURPOSE CONCEPT Leverancier
{+TODO+}

RELATION artikelNummer [Artikel*Artikelnummer] [UNI, TOT]
MEANING "Elk artikel heeft een artikelnummer"

RELATION serieNummer [Artikel*Serienummer] [UNI]
MEANING "Een artikel heeft maximaal één serienummer"

RELATION artikelNaam [Artikelnummer*Artikelnaam] [UNI,TOT]
MEANING "Bij een artikelnummer hoort een naam voor het artikel"

-- Making relations between related concepts
RELATION bevatArtikel [Order*Artikel] [TOT]
MEANING "Beschrijft welke artikelen onderdeel uitmaken van een order"

RELATION isUitbesteedAan [Order*Leverancier] [UNI]
MEANING "Een order kan uitbesteed worden aan een externe leverancier"

-- Initial populations for concepts where applicable
POPULATION Ordertype CONTAINS
[ "PM01"
, "PM02"
, "PM03"
, "PM04"    
]

POPULATION Orderstatus CONTAINS
[ "Nieuw"
, "UGR"
, "Afgesloten"
]

POPULATION Leverancier CONTAINS
[ "Fokker"
, "Saab"
]

POPULATION artikelNaam CONTAINS
[ ("1", "Vleugel")
, ("2", "Schietstoel")
]

-- The relations and the initial population

INTERFACE Orders : "_SESSION"                  cRud
BOX <TABS>
     [ Order : V[SESSION*Order]             CRud
       BOX <TABLE>
                [ "Ordernummer" : orderNummer         CRUd
                , "Ordertype" : orderType cRUd
                ]
     ]

INTERFACE Artikels : "_SESSION"                  cRud
ROWS [ Artikelen : V[SESSION*Artikel]             CRud
      COLS  [ "Artikelnummer" : artikelNummer         cRUd
            , "Serienummer" : serieNummer CRUd
            , "Artikelnaam" : artikelNummer;artikelNaam cRud
            ]
     ]

ENDCONTEXT

Context / Source van ampersand script

Het probleem wordt veroorzaakt door de "Artikels" interface. Waarom is mij onduidelijk. Als ik deze weglaat dan werkt alles wel. -->

hanjoosten commented 3 years ago

Dit komt door een wijziging in ampersand in release 4.1.0. In de releasenotes kan je daar meer over lezen. Het komt er op neer dat je het woordje ROWS moet vervangen door FORM. (aanvulling van @stefjoosten : Dit is onjuist. Je dient het woordje ROWS te vervangen door BOX <FORM>)

Blijkbaar is de documentatie ergens niet meer actueel. Kan jij aangeven waar je je voorbeeld vandaan hebt? Dan kunnen we wellicht die documentatie bijwerken.

attaxia commented 3 years ago

Jazeker, dat komt hier vandaan: https://ampersandtarski.gitbook.io/documentation/the-language-ampersand/services/layout-of-user-interfaces (post-edit van @stefjoosten: Dit is inmiddels aangepast.)

Maar ook gebruik van de zoekfunctie geeft nog vele andere pagina's aan met het keyword ROWS. Een fatsoenlijke error tijdens compilen zou wel fijn zijn.

attaxia commented 3 years ago

Het vervangen van ROWS door FROM zorgt trouwens wél voor een compile error:

/var/www/data/scripts/aaa/Script_1609238713_00028563/ScriptVersion_1609250333_00993252/script.adl:104:1 error:
  unexpected upper case identifier FORM
  expecting symbol '<', keyword "BOX", keyword "ROWS", keyword "COLS", keyword "TABS", keyword "LINKTO", keyword "INTERFACE" or keyword "API"
ExitFailure 10
hanjoosten commented 3 years ago

Hmm. Da's niet zo mooi. Op een of andere manier is blijkbaar de Ampersand compiler niet in sync met de prototype generator in RAP. Daar moet @stefjoosten even naar kijken, vrees ik.

In de tussentijd zou je het woordje ROWS kunnen vervangen door BOX. Dat zou als workaround wel moeten werken, denk ik.

stefjoosten commented 3 years ago

Thank you @attaxia for submitting this issue. Han's diagnosis above is quite right. Version 4 of Ampersand (the current one) has a new syntax for interface directives. This is what we have to do:

  1. Fix all examples in the documentation to prevent situations like this. At the moment only the tutorial has been adapted. I have just done that.
  2. Fix the Ampersand parser to obtain correct error messages. If you accidentally use obsolete syntax, you want better messages. (@stefjoosten or @hanjoosten)
  3. Check the documentation pages on the syntactical changes. (@stefjoosten, in progress)
  4. Update the Ampersand-models repository accordingly.

In the meantime, here is how you can edit your code right now to make the INTERFACE Artikels work:

  1. Substitute COLS with BOX <TABLE>
  2. Substitute ROWS with BOX <FORM>
  3. Substitute TABS with BOX <TABS>
stefjoosten commented 3 years ago

@attaxia schreef hierboven:

Maar ook gebruik van de zoekfunctie geeft nog vele andere pagina's aan met het keyword ROWS. Een fatsoenlijke error tijdens compilen zou wel fijn zijn.

De juiste foutmelding zou moeten zijn:

/var/www/data/scripts/aaa/Script_1609238713_00028563/ScriptVersion_1609250333_00993252/script.adl:104:1 error:
  unexpected upper case identifier ROWS
  expecting symbol '<', keyword "BOX", keyword "LINKTO", keyword "INTERFACE" or keyword "API"
ExitFailure 10

Dat ga ik regelen.

De correcte versie van de interface zou moeten zijn:

INTERFACE Artikels : "_SESSION"                         cRud
BOX <FORM>
     [ Artikelen : V[SESSION*Artikel]                   CRud
       BOX <TABLE>
            [ "Artikelnummer" : artikelNummer           cRUd
            , "Serienummer" : serieNummer               CRUd
            , "Artikelnaam" : artikelNummer;artikelNaam cRud
            ]
     ]

Dat mag je zelf regelen :-) @attaxia

stefjoosten commented 3 years ago

@attaxia Je krijgt nu een betere foutmelding te zien, en daarmee sluit ik dit issue en het oude jaar af. Beste wensen voor het nieuwe jaar!

Schermafbeelding 2020-12-31 om 16 13 56