Avatar billede jens_32 Nybegynder
08. april 2005 - 10:15 Der er 6 kommentarer og
3 løsninger

Kald Common

Der laves i flere FRM et kald EXTERN COMMON.
Så vidt jeg kan se er det ikke en table der findes i DBD.
Nogen der ved, hvordan det hænger sammen?
Avatar billede jasman Nybegynder
08. april 2005 - 11:06 #1
Common er en form for generisk indgang til en tabel.
Common kan betragtes som et "objekt", som giver adgang til nogle felter på en eller anden tabel (nogle felter går igen for alle tabeller (recid, fileid m.v.).

Hvis du f.eks. ønsker at laver en form, som kan kaldes fra 4 forskellige tabeller, så kan du forsimple koden ved at bruge common.
F.eks.:

EXTERN DebTable
If NOT DebTable.RecId THEN
  SET BOX(2,"Fejl !!!",0)
ELSE
    EXTERN CredTable
    If CredTable.Recid THEN
        SET BOX(2,"Fejl !!!",0)
    ELSE
        EXTERN SalesTable
        If SalesTable.Recid THEN
              SET BOX(2,"Fejl !!!",0)
        ELSE
        ENDIF
  ENDIF
ENDIF

Kunne måske skrives som:
EXTERN Common
IF NOT Common.recid THEN
    SET BOX(2,"Fejl !!!",0)
ENDIF

Prøv at kigge i formen ExchangeChoice Init-triggeren (har jeg fundet i en XAL 2.60).

Denne form kan kaldes fra f.eks. finanskladde eller projekttabel, for at slå valutakode op.
Istedet for at lave et check som ovenstående for hver evig eneste tabel, som der kan kaldes fra bruges man common til at referere til den tabel man kommer fra.

Herefter finder man fieldid på feltet ExchangeCode eller Exchange alt efter om der kaldes fra finanskladde eller projekttabel.

Så kan man anvende konventionen:
common.(&Fieldid) til at få fat i værdien af valutakoden feltet, så opslagsformen kan placere markøren på den valutakode man har med fra den kaldende form.

tabel.(<integer>) syntaksen giver værdien at felt nummer <integer> i en tabel.

Håber det er svar nok og at jeg har forklaret det godt nok.
Avatar billede jens_32 Nybegynder
08. april 2005 - 11:27 #2
Ups det var langhåret.
Jeg tror du forklarer det meget godt.
Men jeg er vist for dum til at forstå det.

I en C5 i FRM=DebUdlign Trigger=USRKEY1 er der et eksempel.
Kan vi tage udgangspunkt i det, da jeg ikke har XAL?
Hvad sker der i det eksempel?
Avatar billede jasman Nybegynder
08. april 2005 - 11:29 #3
Jeg har desværre ikke lige en c5, før jeg kommer hjem.
Så hvis ikke andre kan svare, så må du lige vente til i aften. ;)
Avatar billede jens_32 Nybegynder
08. april 2005 - 11:31 #4
Det er også fint nok :-).
Avatar billede jasman Nybegynder
08. april 2005 - 11:40 #5
Hohoooo, jeg fandt lige en alligevel:

Du mener altså dette stykke kode:

EXTERN Common

SEARCH Specifikation USING RefIdx
    WHERE  SpecFileId == Common.FileId
    AND    SpecRecId  == Common.RecId
    AND    SpecType  == #SpecModbilag

    #ADD(&UdlignVALIalt, Saldo01)
    #ADD(&UdlignDKKIalt, Saldo02)
    #ADD(&UdlignVal2Ialt, Saldo04)
END

Ikke sandt ?

Udligning til en post ligger åbenbart i tabellen Specifikation.
Ok linie for linie:

Extern Common  // Skaber virkefelt for den tabel hvorfra formen er kaldt
                // uanset hvilken tabel det er

// Udsøg de udligniner/modbilag der måtte ligger på den post vi har fået med over
// da denne form blev kaldt
// Modbilag ligger hægtet på fileid (kartoteksnummer), recid, og en specifikations type
SEARCH Specifikation USING RefIdx
    WHERE  SpecFileId == Common.FileId
    AND    SpecRecId  == Common.RecId
    AND    SpecType  == #SpecModbilag

    #ADD(&UdlignVALIalt, Saldo01)  // Optæl udlignet beløb i valuta
    #ADD(&UdlignDKKIalt, Saldo02)  // Optæl udlignet beløb i danske kroner
    #ADD(&UdlignVal2Ialt, Saldo04) // Optæl udlignet beløb i valuta 2

END // Giver sig selv ;)

Hvis det her skulle være RIGTIGT pænt, så skulle dette stykke kode, ligge som en funktion på specifikationstabellen, så kunne den kaldes derindefra UANSET om vi talte debitorposter eller kreditorposter, og så kunne koden vedligeholdes ET sted, nemlig på tabellen og ikke i to eller flere forms !!!

Håber det giver en LIDT bedre forståelse.
Avatar billede jens_32 Nybegynder
08. april 2005 - 11:55 #6
Det vil sige i den her situation, der er common i virkeligheden lig med DebPost?
Og blev common kaldt fra en anden blok et sted, hvor en anden tabel var valgt i blokken, så ville common være lig den?
Avatar billede jasman Nybegynder
08. april 2005 - 11:56 #7
Exactly.
Avatar billede jens_32 Nybegynder
08. april 2005 - 11:59 #8
Aah, det var det jeg ikke lige kunne greje, hvad Common egentlig hang sammen med i situationen, hvor den bliver kaldt. Dine forklaringer hjalp :-). Takker.
Avatar billede jasman Nybegynder
08. april 2005 - 12:01 #9
Velbekomme.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester