28 Jan 2016

How to extend repository item for multisite use

So in my case I'm extending media repository item
1) all new property into your repo item xml:
        <table name="cos_adv_search_banner_sites" id-column-names="media_id" type="multi" shared-table-sequence="1">
<property name="siteIds" expert="true" category-resource="categoryGeneral" display-name-resource="sites" data-type="set"  column-names="site_id" component-item-type="siteConfiguration" repository="/atg/multisite/SiteRepository" cascade="update" writable="true" hidden="false" required="false" queryable="true">
       <attribute name="propertySortPriority" value="15"/>
</property>
   </table>

2) then create new tables to hold this property values:
for SWITCHING schemes:

  CREATE TABLE cos_adv_search_banner_sites
   ( MEDIA_ID VARCHAR2(40 BYTE) NOT NULL,
   SITE_ID VARCHAR2(40 BYTE) NOT NULL
   );

  CREATE UNIQUE INDEX adv_search_banner_sites_pk ON cos_adv_search_banner_sites (MEDIA_ID, SITE_ID);
  CREATE INDEX adv_search_banner_sites_idx ON cos_adv_search_banner_sites (SITE_ID) ;

  ALTER TABLE cos_adv_search_banner_sites ADD CONSTRAINT adv_search_banner_sites_pk PRIMARY KEY (MEDIA_ID, SITE_ID)  ENABLE;
  ALTER TABLE cos_adv_search_banner_sites ADD CONSTRAINT adv_search_banner_sites_f1 FOREIGN KEY (MEDIA_ID)
 REFERENCES dcs_media (MEDIA_ID) ENABLE;


and for PUBLISHING scheme we put additional field - asset_version:

CREATE TABLE cos_adv_search_banner_sites
   (  ASSET_VERSION   NUMBER(19,0) NOT NULL,
      MEDIA_ID        VARCHAR2(40 BYTE) NOT NULL,
 SITE_ID         VARCHAR2(40 BYTE) NOT NULL
   );

  CREATE UNIQUE INDEX adv_search_banner_sites_pk ON cos_adv_search_banner_sites (MEDIA_ID, SITE_ID, ASSET_VERSION);
  CREATE INDEX adv_search_banner_sites_idx ON cos_adv_search_banner_sites (SITE_ID) ;

  ALTER TABLE cos_adv_search_banner_sites ADD CONSTRAINT adv_search_banner_sites_pk PRIMARY KEY (MEDIA_ID, SITE_ID, ASSET_VERSION)  ENABLE;

Thanks for reading