DS_Link |
|
The DS_Link subordinate object is used to define relationships between data sources. One object is defined for each relationship. DS_Link corresponds to a record in the pvxview.lnk file.
For information on the pvxview.lnk file structure, see Views System File Structures. Properties are read only and are set using corresponding Setxxx( ) methods.
The following table lists the properties of the DS_Link subordinate object:
Property |
Description | ||||||
Description$ |
Link name - description used to identify link. | ||||||
InternalID$ |
Internal identifier for link. | ||||||
KeyDef$ |
Key expression to read the linked data source. | ||||||
Key$ |
Related key number/name. | ||||||
NoDataOption$ |
Options if no corresponding linked records found:
| ||||||
ParentSource |
Object identifier for parent DataSource object. | ||||||
Prefix$ |
Record prefix for the link file. | ||||||
Source |
Object identifier for the linked data source. | ||||||
SourceID$ |
Internal identifier of the linked data source. | ||||||
Type$ |
Type of relationship:
|
The following table lists the methods of the DS_Link subordinate object:
Method |
Description | ||||||
SetDescription(Desc$) |
(Internal Use Only) Set link description used to identify the link. Use ViewCtl equivalent. | ||||||
SetInternalID(InternalID$) |
(Internal Use Only) Set the internal identifier for the link. | ||||||
SetKeyDef(KeyDef$) |
Set key expression to read the linked data source. | ||||||
SetKey(kno$) |
Set related key number/name. | ||||||
SetNoDataOption(Option$) |
Set options if no corresponding linked records found:
| ||||||
SetPrefix(Prefix$) |
Set record prefix for the link file. | ||||||
SetSource(ObjID) |
(Internal Use Only) Set object identifier for the linked data source. | ||||||
SetSourceID(SourceID$) |
(Internal Use Only) Set internal identifier of the linked data source. | ||||||
SetType(Type$) |
Set type of relationship:
|
The following sample program DefView clears the view definition files, then reads through the PxPlus Data Dictionary files (providex.ddf/.dde), using them to create a data source and view definition for every file. Groups are also created based on the Dictionary groups. Note that file relationships are not defined in this program.
! DefView
! Reset the files
erase "pvxview.vue",err=*next
erase "pvxview.src",err=*next
erase "pvxview.lnk",err=*next
erase "pvxview.itm",err=*next
erase "pvxview.grp",err=*next
erase "pvxview.gpd",err=*next
!
open (hfn,iol=*)"providex.ddf";
ddf_fn=lfo
!
! Clean the view references out of the ddf file
select * from ddf_fn begin "" end $FE$
if mid(PhysicalPath$,1,3)="="+quo+"@" \
then remove (ddf_fn,key=kec(ddf_fn))
next record
!
! Create the Views Definition object
Vctl=new("*views/viewctl",err=*end)
!
! Cycle through the providex.ddf file, creating a datasource for each file
select * from ddf_fn begin "" end $FE$
if kec(ddf_fn)="000000" or mid(PhysicalPath$,1,3)="="+quo+"@" \
then continue ! skip global dictionary and views
print Name$
ds=Vctl'AddDataSource("L",Name$);
if ds=0 \
then msgbox "VError="+str(Vctl'VError),"Add DataBase";
exitto All_Done
Vctl'AddItem(ds,"*")
!
! Create a view for each data source
vu=Vctl'AddView(ds);
if vu=0 \
then msgbox "Verror="+str(Vctl'VError),"Add View";
goto All_Done
!
Count=ds'GetItemCount()
if Count>0 \
then for i=1 to Count;
vu'AddItem(str(ds'GetItem(i)));
next i
!
! Create the group (if necessary) and assign the datasource and view to it
if Group$<>"" \
then grp=Vctl'LoadDataGroup(Group$);
if grp=0 \
then grp=Vctl'AddDataGroup(Group$) \
end_if ;
Vctl'AssignToDataGroup(ds,grp);
Vctl'AssignToDataGroup(vu,grp)
!
! Write the datasource, view and group definitions to disk
Vctl'Save()
!
! Get ready for the next file
Vctl'Clear()
next record
!
All_Done:
drop object Vctl
close (ddf_fn)
end