com.supermap.web.iServerJava6R.queryServices
public class LinkItem
继承 LinkItem Inheritance Object

关联信息类.

用于矢量数据集与外部表的关联。外部表是另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的 DBMS 表。需要注意的是,矢量数据集与外部表可以属于不同的数据源,但必须是 Oracle 或 SQL 数据库型数据源,不支持文件型 SDB、UDB 等文件型数据源。
表之间的联系的建立有两种方式,一种是连接(join),一种是关联(link)。连接的相关设置是通过JoinItem类实现的,关联的相关设置是通过 LinkItem 类实现的,另外,用于建立连接(JoinItem)的两个表必须在同一个数据源下,而用于建立关联关系(LinkItem)的两个表可以不在同一个数据源下。
注意:使用外关联表制作专题图时,所关联的字段必须设置表名,例如,如果所关联的字段为BaseMap_R数据集的SmID,就要写成BaseMap_R.SMID。

下面通过查询的例子来说明连接和关联的区别,假设用来进行查询的表(即主空间数据集中的表),为TableA,被关联或者连接的表为TableB,现通过建立TableA 与TableB的连接或关联关系来查询TableA中满足查询条件的记录:

1.连接(join)

设置将TableB连接到TableA的连接信息,即建立 JoinItem 类并设置其属性,当执行TableA的查询操作时,系统将根据连接条件及查询条件,将满足条件的TableA中的内容与满足条件的TableB中的内容构成一个查询结果表,并将这个查询表保存在内存中,需要获取结果时,再从内存中取出相应的内容。

2.关联(link)

设置将TableB关联到TableA的关联信息,即建立 LinkItem 类并设置其属性,TableA 与 TableB 是通过主表(TableA)的外键(LinkItem类的 ForeignKey 属性) 和副表(TableB)的主键(LinkItem 类的 PrimaryKey 属性)实现关联的,当执行TableA的查询操作时,系统将根据关联信息中的过滤条件及查询条件, 分别查询TableA 与TableB中满足条件的内容,TableA的查询结果与TableB的查询结果分别作为独立的两个结果表保存在内存中,当需要获取结果时,SuperMap将对两个结果进行拼接并返回,因此,进行关联查询时,查询参数中的返回字段一定要有主表的外键,否则无法根据外键的值获取副表中的关联字段值,副表中的字段值将返回 null。在应用层看来,连接和关联操作很相似。

3.LinkItem 只支持左连接,不支持 SDB、UDB 等文件型数据源,只支持 Oracle 和 SQL 数据库型数据源。
4.JoinItem目前支持左连接和内连接,不支持全连接和右连接;

5.使用 LinkItem 的约束条件:空间数据和属性数据必须有关联条件,即主空间数据集与外部属性表之间存在关联字段。主空间数据集:用来与外部表进行关联的数据集。外部属性表:用户通过 Oracle 或者 SQL Server 创建的数据表,或者是另一个矢量数据集所对应的 DBMS 表。

查看示例



公共属性
  属性 定义方
    datasourceConnectionInfo : DatasourceConnectionInfo
获取或设置关联的外部数据源信息 DatasourceConnectionInfo 。
LinkItem
    foreignKeys : Array
获取或设置主空间数据集的外键。
LinkItem
    foreignTable : String
获取或设置关联的外部属性表的名称。
LinkItem
    linkFields : Array
获取或设置欲保留的外部属性表的字段。
LinkItem
    linkFilter : String
获取或设置与外部属性表的连接条件。
LinkItem
    name : String
获取或设置此关联信息对象的名称。
LinkItem
    primaryKeys : Array
获取或设置需要关联的外部属性表的主键。
LinkItem
公共方法
  方法 定义方
   
初始化 LinkItem 类的新实例。
LinkItem
属性详细信息
datasourceConnectionInfo 属性
datasourceConnectionInfo:DatasourceConnectionInfo

获取或设置关联的外部数据源信息 DatasourceConnectionInfo 。


Implementation
    public function get datasourceConnectionInfo():DatasourceConnectionInfo
    public function set datasourceConnectionInfo(value:DatasourceConnectionInfo):void
foreignKeys 属性  
foreignKeys:Array

获取或设置主空间数据集的外键。


Implementation
    public function get foreignKeys():Array
    public function set foreignKeys(value:Array):void
foreignTable 属性  
foreignTable:String

获取或设置关联的外部属性表的名称。


Implementation
    public function get foreignTable():String
    public function set foreignTable(value:String):void
linkFields 属性  
linkFields:Array

获取或设置欲保留的外部属性表的字段。


Implementation
    public function get linkFields():Array
    public function set linkFields(value:Array):void
linkFilter 属性  
linkFilter:String

获取或设置与外部属性表的连接条件。


Implementation
    public function get linkFilter():String
    public function set linkFilter(value:String):void
name 属性  
name:String

获取或设置此关联信息对象的名称。


Implementation
    public function get name():String
    public function set name(value:String):void
primaryKeys 属性  
primaryKeys:Array

获取或设置需要关联的外部属性表的主键。


Implementation
    public function get primaryKeys():Array
    public function set primaryKeys(value:Array):void
构造函数详细信息
LinkItem () 构造函数
public function LinkItem()

初始化 LinkItem 类的新实例。

示例
下面示例将主表 streetL 与外表 customerA 通过主表的外键 ZIPL 与外表的主键 ZIP 进行关联:
 
         //定义数据库信息
         var dataSrcConnecInfo:DatasourceConnectionInfo = new DatasourceConnectionInfo();
             dataSrcConnecInfo.server = "192.168.177.11";
             dataSrcConnecInfo.dataBase =  "RelQuery";
             dataSrcConnecInfo.connect = true;
             dataSrcConnecInfo.engineType = EngineType.SQL_PLUS;
             dataSrcConnecInfo.user = "supermap";
             dataSrcConnecInfo.password = "map";
             dataSrcConnecInfo.alias = "RelQuery";//数据库别名
         dataSrcConnecInfo.driver = "SQL Server";
         dataSrcConnecInfo.readOnly = false;
         dataSrcConnecInfo.exclusive = false;
         //定义关联信息
         var linkItem:LinkItem = new LinkItem();
         linkItem.datasourceConnectionInfo = dataSrcConnecInfo;
         linkItem.foreignKeys = new Array("ZIPL");//主表的外键
         linkItem.foreignTable = "customerA";//外表
         linkItem.linkFields = new Array( "SMID as customerAID","ZIP");//外表要保留的字段
         linkItem.name = "关联";
         linkItem.primaryKeys = new Array("ZIP");//外表的主键
     
         var filterParam:FilterParameter = new FilterParameter();
         filterParam.name =  "streetL@RelQuery";    //主表
         filterParam.fields = new Array("SmID","ZIPL");//主表要保留的字段    
         filterParam.linkItems =  new Array(linkItem);