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.
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 !!!
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?
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.
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.