Informační tok Funkční structura Datová struktura ER model Modulová struktura Typová struktura Relační model Dokumentace


[Celkový datový model] [Funkce] [Externí rohraní] [Stavové diagramy] [Datové elementy] [Entity] [Relace]
[Databáze] [Události] [Materiály] [Generovací funkce] [Vyhodnocovací funkce] [Konfigurace] [Uživatelé] [Projekt] [Home]



Vyhodnocovací funkce
Erarea
(Web Publishing)


Vytvořeno: 03-05-1997 11:27:25
Poslední změna: 12-19-2002 12:39:15

Outputs detailed information about the given ER model.

Modul

Module: Web Publishing

Zdrojový kód:

PROCEDURE Erarea(name$, x%, y%)
BEGIN

  foundsomething! = FALSE;
  FOR Erarea WHERE Name = name$ DO
    foundsomething! = TRUE;
    CALL Header("ER model - " + Conv$(Boxname));
    CALL Title ("ER model", Conv$(Boxname));
  END

  //display a dummy title if the ER model does not exist
  IF NOT foundsomething! THEN
    CALL Header("ER model - " + name$);
    CALL Title ("ER model", name$);
  END

  IF foundsomething! THEN
    FOR Erarea WHERE Name = name$ DO
      //this element has only one page
      CALL ErareaMap(Name, x%, y%);
      PRINT {HTML} "<P ALIGN=CENTER><IMG SRC=" + Str$(Object) + ".png BORDER=0 ISMAP USEMAP=""#map""></P>", NL;
      
      //general object data
      CALL GenObjectData(Object, TRUE, TRUE);
      PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC"">", NL;

      //description of the object, if avialable
      IF hasText THEN
        CALL GetSystemProperty("WebPubDescriptionPage", sepPage$);
        IF sepPage$ = "TRUE" THEN
          PRINT {HTML} Anchor$("<B>Popis</B>", "", "desc" + Str$(Erarea.Object) + ".htm");
          PRINT {HTML} "<BR>",NL;
          PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC"">", NL;
        ELSE
          IF Text <> "" THEN
            dummy$ = Text;
            PRINT dummy$;
            PRINT {HTML} "<BR>",NL;
            PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC"">", NL;
          END
        END
      END


      //two column table with userdefined properties of the element - one line per property
      CALL GenUserdefinedProperties(Object);
    
      //List of all Entity Types with their Key definition: name, Attributes and
      //Relationship Types
      CALL H2_TopSpaceless("Entity");
      PRINT {HTML} "<TABLE NOWRAP VALIGN=BASELINE>",NL;
      PRINT {HTML} " <TR>",NL;
      PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP COLSPAN=2><FONT SIZE=2 FACE=""Verdana, Arial""><B>Name</B></FONT></TH>",NL;
      PRINT {HTML} " <TH VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial""><B></B></FONT></TH>",NL;
      PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial""><B>Klíč</B></FONT></TH>",NL;
      PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial""><B>Atributy</B></FONT></TH>",NL;
      PRINT {HTML} " <TH VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial""><B>Závisí na</B></FONT></TH>",NL;
      PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial""><B>Odpovídající relace</B></FONT></TH>",NL;
      PRINT {HTML} " </TR>",NL;
      FOREACH Enode WHERE Area = Erarea.Name ORDER BY Entity DO
        FOR Entity WHERE Name = Enode.Entity DO
          PRINT {HTML} " <TR>",NL;
          
          //Column "Name"
          PRINT {HTML} " <TD ALIGN=CENTER VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          PRINT {HTML} "<IMG SRC=""bullet.gif"">";
          PRINT {HTML} "</FONT></TD>",NL;
          PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          PRINT {HTML} Anchor$("<b>" + Conv$(Boxname) + "</b>", "", Str$(Object) + ".htm");
          PRINT {HTML} "</FONT></TD>",NL;
          
          //Column "P" und "Keys"
          PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
          z%=0;
          FOREACH Identifier WHERE Entity = Entity.Name ORDER BY Name DO
            z%=z% +1;
            //if more than one Key exist for the Entity Type, the left columns have to be filled with empty entries
            IF z% > 1 THEN
              PRINT {HTML} " <TR>",NL;
              PRINT {HTML} " <TD></TD>",NL;
              PRINT {HTML} " <TD></TD>",NL;
              PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            END
            IF Entity.Primaryidentifier = Identifier.Name THEN
              PRINT {HTML} "<B>P</B></FONT></TD>",NL;
              PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
              IF Identifier.Name <> "" THEN
                PRINT Identifier.Name;
              ELSE
                PRINT {HTML} "<CENTER>-</CENTER>";
              END
            ELSE
              PRINT {HTML} "</FONT></TD>",NL;
              PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
              IF Identifier.Name <> "" THEN
                PRINT Identifier.Name;
              ELSE
                PRINT {HTML} "<CENTER>-</CENTER>";
              END
            END
            PRINT {HTML} "</FONT></TD>",NL;
            
            //Column "Attribute"
            PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            foundattrib! = FALSE;
            FOREACH Identifierattribute WHERE Identifierattribute.Identifier = Identifier.Name
                                          AND Entity = Identifier.Entity DO
              FOR Attribute WHERE Name = Identifierattribute.Attribute
                              AND Entity = Entity.Name DO
                PRINT {HTML} Anchor$(Attribute.Name, "", Str$(Object) + ".htm");
                PRINT {HTML} "<BR>", NL;
                foundattrib! = TRUE;
              END
            END
            IF NOT foundattrib! THEN
              PRINT {HTML} "<CENTER>-</CENTER>";
            END
            PRINT {HTML} "</FONT></TD>",NL;
            
            //Column "depends on"
            PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            first% = 0;
            founddep! = FALSE;
            FOREACH IdentifierERconnection WHERE Entity = Identifier.Entity
                                             AND Identifier = Identifier.Name
                                        ORDER BY Entity DO
              FOR ERconnection WHERE Entity = IdentifierERconnection.Refentity
                                 AND Rship = IdentifierERconnection.Rship
                                 AND ERconnectionno = IdentifierERconnection.ERconnectionno DO
                FOR Entity WHERE ERconnection.Entity = Name DO
                  PRINT {HTML} Anchor$("<B>" + Conv$(Boxname) + "</B>", "", Str$(Object) + ".htm");
                  IF ERconnection.Name <> "" THEN
                      PRINT " (", Conv$(ERconnection.Name), ", ", ERconnection.Cardinality, ")";
                  ELSE
                      PRINT " (", ERconnection.Cardinality, ")";
                  END
                  PRINT {HTML} "<BR>", NL;
                  founddep! = TRUE;
                END
              END
            END
            IF NOT founddep! THEN
              PRINT {HTML} "<CENTER>-</CENTER>";
            END
            PRINT {HTML} "</FONT></TD>",NL;

            //Column "Relation"
            PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            i%=0;
            IF z% <= 1 THEN /* output corresponding relation only once! */
              FOREACH Relation WHERE Entity = Entity.Name ORDER BY Entity DO
                IF i% > 0 THEN
                  PRINT {HTML} "<BR>";
                END
                PRINT {HTML} Anchor$( Conv$(Boxname) , "", Str$(Object) + ".htm");
                i% = i% + 1;
              END
              IF i% = 0 THEN
                PRINT {HTML} "<CENTER>-</CENTER>";
              END
            END
            PRINT {HTML} "</FONT></TD>",NL;
            PRINT {HTML} " </TR>",NL;
          END
        END
      END
      PRINT {HTML} "</TABLE>",NL;
      PRINT {HTML} "<BR>",NL;


      // list relationships
      CALL H2_TopSpaceless("Relační vztah");
      first%=0;
      FOREACH Enode WHERE Enode.Area = Erarea.Name ORDER BY Entity DO
          FOR Entity WHERE Entity.Name = Enode.Entity DO
            FOREACH Erconnection WHERE Erconnection.Entity = Entity.Name
                               AND NOT Erconnection.Cardinality = "ge" DO
              FOR Rship WHERE Rship.Id=Erconnection.Rship DO
                FOREACH Rnode WHERE Rnode.Area = Erarea.Name
                                AND Rnode.Rship = Rship.Id DO
                  IF first% <> 0 THEN
                    PRINT NL;
                  END
                  first% = 1;
                  PRINT {HTML} "<IMG SRC=""bullet.gif"" ALIGN=TOP> ";
                  PRINT {"ARIAL",10} Conv$(Entity.Boxname);
                  IF Erconnection.Name <> "" THEN
                    PRINT {"ARIAL",10,BOLD} " ", Conv$(Erconnection.Name), " ";
                  ELSIF Erconnection.Cardinality="as" THEN
                    PRINT {"ARIAL",10,BOLD} " popisuje relační vztah mezi ";
                  ELSIF Erconnection.Cardinality="sz" THEN
                    PRINT {"ARIAL",10,BOLD} " specializuje ";
                  ELSE
                    PRINT {"ARIAL",10,BOLD} " má relační vtah k ";
                  END
                  c% = 0;
                  FOREACH Erconnection AS EC WHERE EC.Rship=Rship.Id
                                           AND NOT EC.Entity=Erconnection.Entity
                                           AND NOT EC.cardinality="as"
                                           AND NOT EC.cardinality="sz" DO
                    FOR Entity WHERE Entity.Name=EC.Entity DO
                      IF c%>0 THEN
                        PRINT {"ARIAL",10} " a ";
                      END
                      PRINT {"ARIAL",10} Conv$(Entity.Boxname);
                    END
                    c% = c% + 1;
                  END
                  PRINT NL;
                  IF Erconnection.Cardinality <> "as" AND Erconnection.Cardinality <> "sz" THEN
                    PRINT {"ARIAL",8} TAB(4),"Kardinalita:",TAB(25),"1:",Erconnection.Cardinality,NL;
                  END
                  IF Erconnection.hasText THEN
                    dummy$ = Text;
                    PRINT dummy$;
                    PRINT {HTML} "<BR>",NL;
                  END
                END
              END
            END
          END
      END
      IF first% = 0 THEN
        PRINT {"ARIAL",10} "ER model neobsahuje žádné relační vztahy.", NL;
      ELSE
        PRINT {HTML} "<BR>",NL;
      END

      
      //list data elements
      PRINT {HTML} "<BR>",NL;
      CALL H2_TopSpaceless("Datové elementy");
      datenelement$ = "";
      FOREACH Enode WHERE Area = Erarea.Name ORDER BY Entity DO
        FOR Entity WHERE Name = Enode.Entity DO
          firstAttribute! = TRUE;
          FOREACH Attribute WHERE Entity = Entity.Name ORDER BY Data DO
            FOR Data WHERE Name = Attribute.Data DO
              IF firstAttribute! THEN
                  CALL H3(Conv$(Entity.Boxname));
                  firstAttribute! = FALSE;
              END
              IF datenelement$ <> Conv$(Boxname) THEN
                PRINT {HTML} "<IMG SRC=""bullet.gif"" ALIGN=TOP> ";
                PRINT {HTML} Anchor$("<B>" + Boxname + "</B>", "", Str$(Object) + ".htm");
                PRINT {HTML} "<BR>",NL;
                datenelement$ = Conv$(Boxname);
              END
            END
          END
        END
      END
      IF datenelement$ = "" THEN
        PRINT {HTML} "ER model neobsahuje žádné reference na datové elementy.<BR><BR>",NL;
      END

    END
  ELSE
    CALL H2_Spaceless("V projektu není ER model daného jména.");
    PRINT {HTML} "<BR>",NL;
  END
  CALL Footer("");
END


Generováno: 16.10.2003 7:41 Systém: C:\Documents and Settings\hajsman\Dokumenty\Vyuka\Irs2\Projekt case40\Projekt03.csf Generováno systémem case/4/0
Vygeneroval: Administrator Soubor: C:\Documents and Settings\hajsman\Dokumenty\Vyuka\Irs2\Projekt case40\html\26891.htm (C) microTOOL GmbH 2002