IBM FileNet P8, Version 5.2.1            

Working with Content-Based Retrieval

Creating and Configuring a Server Instance

The CmTextSearchServer interface contains the connection and configuration properties for a specific IBM® Content Search Services server in a domain. Each server is associated with a particular site and can be used by any object store within that site. You can specify the site for the server by setting the value of the Site property. If you do not specify a value, then the default is to use the value of the Domain object's DefaultSite property.

When you create a new CmTextSearchServer object, you must specify the host name and port number of the server.

You must also specify the connection (authentication) token that is required to connect to this server. For more information about this token and how to obtain it, see Getting the IBM Content Search Services authentication token.

It is recommended that you set the DisplayName and DescriptiveText properties of the server to help identify it to users.

In addition, it is recommended that you specify the usage mode (indicates whether the server performs indexing tasks or search tasks) by setting the value of the TextSearchServerMode property. If you do not set this property's value, the value defaults to 0 (zero), which specifies that the server performs both indexing and search tasks. This default is not recommended if your application is used for a general production system. Having multiple, task-dedicated servers balances the work load in a production system.

You can choose to use an SSL connection between the Content Engine server and the IBM Content Search Services server to encrypt all communication, including search requests, between the two servers. This function is controlled through the CmTextSearchServer properties IsSSLEnabled, ValidateCertificateHost, and ValidateServerCertificate. By default, an SSL connection is not enabled.

Other properties that you can set include the TextSearchServerStatus property (to enable or disable the server) and the TextSearchServerShutdownOnDisable property (to specify whether a shutdown request is sent to this server when the TextSearchServerStatus property is set to DISABLED). For more information, see CmTextSearchServer properties.

The following code examples show how to create an IBM Content Search Services server in the default site that performs indexing and searching:

Java™ Example

    // Create a CmTextSearchServer instance.
    // Assumes you have the ObjectStore object
    Domain myDomain = os.get_Domain();
    CmTextSearchServer tss =  Factory.CmTextSearchServer.createInstance(myDomain);
    
    // Provide a name for this server
    tss.set_DisplayName("tsServer1");
    
    // Assign the server host and port.
    tss.set_TextSearchServerHost("tsServerHost");
    tss.set_TextSearchServerPort(8191);
    
    // Specify authentication token 
    tss.set_TextSearchCredential("EPhhaz0=".getBytes());
    
    // Set the usage mode for this server and enable it
    tss.set_TextSearchServerMode(TextSearchServerMode.INDEX_AND_SEARCH);
    tss.set_TextSearchServerStatus(TextSearchServerStatus.ENABLED);
    
    // Set the site for the server
    tss.set_Site(myDomain.get_DefaultSite());
    
    // Save the server
    tss.save(RefreshMode.REFRESH);    

C# Example

    // Create a CmTextSearchServer instance.
    // Assumes you have the ObjectStore object.
    IDomain myDomain = os.Domain;
    ICmTextSearchServer tss = Factory.CmTextSearchServer.CreateInstance(myDomain);
    
    // Provide a name for this server
    string serverName = "tsServer1";
    tss.DisplayName = serverName
    
    // Assign the server host and port.
    string myMachine = "tsServer1";
    tss.TextSearchServerHost = myMachine;
    tss.TextSearchServerPort = 8191;
    
    // Specify authentication token 
    byte [] authToken = { (byte)'E', (byte) 'P', (byte)'h', (byte)'h', (byte)'a', (byte)'z', (byte)'0', (byte)'='};
    tss.TextSearchCredential = authToken;
    
    // Set the usage mode for this server and enable it
    tss.TextSearchServerMode = TextSearchServerMode.INDEX_AND_SEARCH;
    tss.TextSearchServerStatus = TextSearchServerStatus.ENABLED;
    
    // Set the site for the server
    tss.Site = myDomain.Site
        
    // Save the server
    tss.Save(RefreshMode.NO_REFRESH);
        

Configuring Index Request Processing

By using the properties of a CmTextSearchConfiguration object, you can control IBM Content Search Services functions on the Content Engine server. Performance issues might lead you to consider changing the defaults for these properties. For example, one of the properties for which you might want to change the default value is the ThreadCount property. The default value of the ThreadCount property is 4. Set this value to a higher number if fewer Content Engine servers are available or to a lower number if more Content Engine servers are available. For more information, see CmTextSearchConfiguration properties.

The following example increases the value of the ThreadCount property:

Java Example

    // Increases the ThreadCount value from the default of 4 to 16 
    Domain domain = os.get_Domain();
    
    Iterator iterator1 = domain.get_SubsystemConfigurations().iterator();
    while (iterator1.hasNext()) {
        SubsystemConfiguration subsystem = (SubsystemConfiguration) iterator1.next();
        System.out.println("Setting thread count");
        if (subsystem instanceof CmTextSearchConfiguration)             
            ((CmTextSearchConfiguration) subsystem).set_ThreadCount(new Integer(16));
    }
    domain.save(RefreshMode.NO_REFRESH);

C# Example

    // Increases the ThreadCount value from the default of 4 to 16 
    
    IDomain domain = os.Domain;
    foreach (ISubsystemConfiguration subsystem in domain.SubsystemConfigurations)
    {
        if (subsystem is ICmTextSearchConfiguration)
        {
            System.Console.WriteLine("Setting thread count");
            ((ICmTextSearchConfiguration)subsystem).ThreadCount = 16;
        }
    }
    domain.Save(RefreshMode.NO_REFRESH);
        

Configuring an Index Area

The CmTextSearchIndexArea interface contains properties to configure an index area for an object store. You can have multiple index areas per object store. Only IBM Content Search Services servers that are in the same site as a particular index area can create indexes within that index area. All index areas in an object store must be in the same site as the object store.

Within each index area, you can control the number of indexes that can be created and the capacity of each of these indexes. In addition, you can specify the root directory to use for storing these indexes. For more information, see CmTextSearchIndexArea properties.

The general sequence for configuring an index area is as follows:

Java Example

    // Create a CmTextSearchIndexArea instance to store the
    // CmTextSearchIndex objects (created automatically) 
    // that contain the full-text indexing information. 

    // Assumes you have the ObjectStore object. 
    CmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.createInstance(os, null);
    
    // Set the file system path to use for this index area. This index area must be shared among 
    // all CSS servers for the same site or affinity group.  All CSS servers must have read/write 
    // access to this share storage. For example (Windows):
    String path = "\\\\MyServer\\IndexArea1";
    myIndexArea.set_RootDirectoryPath(path);

    // Set the maximum number of full-text indexes that can be created for this index area.
    // Unless you have a specific restriction on the number of full-text indexes per index area, 
    // use the default of -1, which is unlimited. Otherwise, set this property to a non-default 
    // value, for example:
    myIndexArea.set_MaxIndexes(new Integer(10));
 
    // Set the maximum number of indexed objects for a full-text index in this index area.
    // The number of indexed objects for a full-text index in this index area will vary 
    // depending on the configuration setting for MaxSizePerIndexKbytes. For example, 
    // if MaxSizePerIndexKbytes is set to 250GB, one full-text index  might contain 5 million 
    // objects and another full-text index might contain 10 million objects.  
    // It all depends on the content being indexed and stored in that particular full-text index 
    // of 250GB.
    //
    // Unless you have a specific restriction on the number of objects per full-text index,
    // use the default of -1, which is unlimited. If unlimited is set, CPE will not restrict the 
    // number of indexed objects for a full-text index in this index area.
    // Otherwise, set this property to a non-default value, for example:
    myIndexArea.set_MaxObjectsPerIndex(new Double(10000000));

    // Set the maximum size of an index in kilobytes for a full-text index in this index area.
    // The current default is 262144000 (250GB), which is the recommendation.
    // To use a non-default value, set this property explicitly, for example:
    myIndexArea.set_MaxSizePerIndexKbytes(new Double(250000000));

    // Set the display name.
    myIndexArea.set_DisplayName("ObjectStore1-IndexArea1");

    // Set the status (open, closed, standby).
    myIndexArea.set_ResourceStatus(ResourceStatus.OPEN);

    // Specify the site.
    myIndexArea.set_Site(os.get_Site());

    // Set the priority for activating this index area if it is in standby mode.
    myIndexArea.set_CmStandbyActivationPriority(1);

    // Save the index area.
    myIndexArea.save(RefreshMode.NO_REFRESH);
       

C# Example

    // Create a CmTextSearchIndexArea instance to store the
    // CmTextSearchIndex objects (created automatically) 
    // that contain the full-text indexing information. 

    // Assumes you have the ObjectStore object. 
    ICmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.CreateInstance(os, null);

    // Set the file system path to use for this index area. This index area must be shared among 
    // all CSS servers for the same site or affinity group.  All CSS servers must have read/write 
    // access to this share storage. For example (Windows):
    string path = "\\\\MyServer\\IndexArea1";
    myIndexArea.RootDirectoryPath = path;

    // Set the maximum number of full-text indexes that can be created for this index area.
    // Unless you have a specific restriction on the number of full-text indexes per index area, 
    // use the default of -1, which is unlimited. Otherwise, set this property to a non-default 
    // value, for example:
    myIndexArea.MaxIndexes = 10;

    // Set the maximum number of indexed objects for a full-text index in this index area.  
    // The number of indexed objects for a full-text index in this index area will vary 
    // depending on the configuration setting for MaxSizePerIndexKbytes.
    // For example, if MaxSizePerIndexKbytes is set to 250GB, one full-text index might 
    // contain 5 million objects and another full-text index might contain 10 million objects. 
    // It all depends on the content being indexed and stored in that particular full-text index of 250GB.
    //
    // Unless you have a specific restriction on the number of objects per full-text index,
    // use the default of -1, which is unlimited. If unlimited is set, CPE will not restrict the 
    // number of indexed objects for a full-text index in this index area.
    // Otherwise, set this property to a non-default value, for example:
    myIndexArea.MaxObjectsPerIndex = 10000000;

    // Set the maximum size of an index in kilobytes for a full-text index in this index area.  
    // The current default is 262144000 (250GB), which is the recommendation.
    // To use a non-default value, set this property explicitly, for example:
    myIndexArea.MaxSizePerIndexKbytes = 250000000;

    // Set the display name.
    myIndexArea.DisplayName = "ObjectStore1-IndexArea1";

    // Set the status (open, closed, standby).
    myIndexArea.ResourceStatus = ResourceStatus.OPEN;

    // Specify the site.
    myIndexArea.Site = os.Site;

    // Set the priority for activating this index area if it is in standby mode.
    myIndexArea.CmStandbyActivationPriority = 1;

    // Save the index area.
    myIndexArea.Save(RefreshMode.NO_REFRESH);

Enabling IBM Content Search Services in an Object Store

Before you can enable IBM Content Search Services for an object store, a CmTextSearchServer instance must exist in the same site as the object store and a CmTextSearchIndexArea object must exist in the object store. Set the language codes of the most common files that are indexed to increase the accuracy of automatic language selection and improve indexing performance.

Java Example

    // Enable IBM Content Search Services for an object store
    // Assumes you have the ObjectStore object. 
    os.set_TextSearchEnabled(Boolean.TRUE);
    // Set the language codes for full-text indexing in this object store to English and French.
    StringList langcodes = Factory.StringList.createList();
    langcodes.add("en");
    langcodes.add("fr");
    os.set_TextSearchIndexingLanguages(langcodes);
    // Save the changes to your object store
    os.save(RefreshMode.NO_REFRESH);

C# Example

    // Enable IBM Content Search Services for an object store
    // Assumes you have the ObjectStore object. 
    os.TextSearchEnabled = true;
    // Set the language codes for full-text indexing in this object store to English and French.
    IStringList langcodes = Factory.StringList.CreateList();
    langcodes.Add("en");
    langcodes.Add("fr");
    os.TextSearchIndexingLanguages = langcodes;
    // Save the changes to your object store
    os.Save(RefreshMode.NO_REFRESH);
        

Managing Indexing

An index job consists of items that you select for indexing and other configuration properties for the job. The items can be classes, IBM Content Search Services indexes, or single objects. You can create, monitor, and stop index jobs.

Creating an Index Job

Use the IndexJob interface to create and configure index jobs. The items that can be indexed are assigned by using the IndexJobClassItem, IndexJobCollectionItem, and IndexJobSingleItem interfaces.

The general sequence for creating and configuring an index job is as follows:

Java Example

    // Create a IndexJob instance.
    // Assumes you have the ObjectStore object.
    IndexJob indexJob = Factory.IndexJob.createInstance(os);
    
    // Create the job item list to hold the items to index.
    IndexJobItemList indexJobItemList = Factory.IndexJobItem.createList();

    // Designate the IndexJobClassItem, IndexJobCollectionItem, 
    // or IndexJobSingleItem items to index. 

    // To index a class, create the instance for the class item.
    IndexJobClassItem indexJobClassItem = Factory.IndexJobClassItem.createInstance(os);

    // Creates the ClassDefinition object for the class item.
    ClassDefinition classDef = Factory.ClassDefinition.getInstance(os, null);

    // Specify the class to index
    indexJobClassItem.set_ClassDefinition(classDef);
    indexJobItemList.add(indexJobClassItem);

    // To index a collection, create the instance for the collection item
    IndexJobCollectionItem indexJobCollectionItem = Factory.IndexJobCollectionItem.createInstance(os);

    // Get the index area instance. Assumes a valid IndexArea GUID.
    CmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.fetchInstance(os, new Id("{E7961EFD-BB0C-4ACA-9B41-35E3AD8E2771}"), null);

    // Get the list of CmTextSearchIndex objects. Selects the initial collection for indexing.
    CmTextSearchIndexList tsiList = myIndexArea.get_ TextSearchIndexes ();
    CmTextSearchIndex tsIndex = (CmTextSearchIndex) tsiList.get(0);

    // Specify the collection to index.
    Id myCollectionID = tsIndex.get_Id();
    indexJobCollectionItem.set_IndexationId(myCollectionID);
    indexJobItemList.add(indexJobCollectionItem);

    // To index an object, create the instance for the object item.
    IndexJobSingleItem indexJobSingleItem = Factory.IndexJobSingleItem.createInstance(os);

    // Specify the object to index; in this case, the root folder for the object store. 
    // Note that in practice, indexing the root folder may be a considerably long,
    // processing-intensive operation.
    indexJobSingleItem.set_SingleItem(os.get_RootFolder());
    indexJobItemList.add(indexJobSingleItem);

    // Specify the index job items and save the index job.
    indexJob.set_IndexItems(indexJobItemList);
    indexJob.save(RefreshMode.REFRESH);

C# Example

    // Create a IndexJob instance.
    // Assumes you have the ObjectStore object.
    IIndexJob indexJob = Factory.IndexJob.CreateInstance(os);
    IIndexJobItemList indexJobItemList = Factory.IndexJobItem.CreateList();

    // Create the job item list to hold the items to index.
    IIndexJobClassItem indexJobClassItem = Factory.IndexJobClassItem.CreateInstance(os);

    // Designate the IndexJobClassItem, IndexJobCollectionItem, 
    // or IndexJobSingleItem items to index.

    // Creates the ClassDefinition object for the class item.
    IClassDefinition classDef = Factory.ClassDefinition.GetInstance(os, null);

    // To index a class, create the instance for the class item.
    indexJobClassItem.ClassDefinition = classDef;

    // Specify the class to index
    indexJobItemList.Add(indexJobClassItem);

    // To index a collection, create the instance for the collection item
    IIndexJobCollectionItem indexJobCollectionItem = Factory.IndexJobCollectionItem.CreateInstance(os);

    // Get the index area instance. Assumes a valid IndexArea GUID.
    ICmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.FetchInstance(os, new Id("{E7961EFD-BB0C-4ACA-9B41-35E3AD8E2771}"), null);

    // Get the list of CmTextSearchIndex objects. Selects the initial collection for indexing.
    ICmTextSearchIndexList tsiList = myIndexArea.TextSearchIndexes
    ICmTextSearchIndex tsIndex = (ICmTextSearchIndex) tsiList[0];

    // Specify the collection to index.
    Id myCollectionID = tsIndex.Id;
    indexJobCollectionItem.IndexationId = myCollectionID;
    indexJobItemList.Add(indexJobCollectionItem);

    // To index an object, create the instance for the object item.
    IIndexJobSingleItem indexJobSingleItem = Factory.IndexJobSingleItem.CreateInstance(os);

    // Specify the object to index; in this case, the root folder for the object store. 
    // Note that in practice, indexing the root folder may be a considerably long,
    // processing-intensive operation.
    indexJobSingleItem.SingleItem = os.RootFolder;
    indexJobItemList.Add(indexJobSingleItem);

    // Specify the index job items and save the index job.
    indexJob.IndexItems = indexJobItemList;
    indexJob.Save(RefreshMode.REFRESH);

Monitoring the Status of an Index Job

The IndexJobStatus class contains constants that indicate the status of an index job. Use IndexJob.get_JobStatus to return the associated IndexJobStatus object. For example:

Java Example

indexJob.refresh();
System.out.println("JobStatus : " + indexJob.get_JobStatus().toString());
  

C# Example

    indexJob.Refresh();
    System.Console.WriteLine("JobStatus : " + indexJob.JobStatus.ToString());
  

Retrieving Failure Information for an Index Job

Use IndexJob.get_LastFailureReason to return a string that identifies the final failure condition for the index job. For example:

Java Example

    indexJob.refresh();
    System.out.println("Job Failure : " + indexJob.get_LastFailureReason());
  

C# Example

    indexJob.Refresh();
    System.Console.WriteLine("Job Failure : " + indexJob.LastFailureReason());
  

Fetching an Index Request Object

Use the factory method Factory.CmIndexRequest.fetchInstance to fetch an index request object.

Java Example

// Fetch an index request
CmIndexRequest requestObject=Factory.CmIndexRequest.fetchInstance(os, "{9FEC3C69-57B2-4E29-872A-0EE452881555}", null );

C# Example

// Fetch an index request
ICmIndexRequest requestObject=Factory.ICmIndexRequest.fetchInstance(os, "{9FEC3C69-57B2-4E29-872A-0EE452881555}", null );

Monitoring the Status of an Index Request

The IndexRequestStatus class contains constants that indicate the status of an index request. Use CmIndexRequest.get_IndexRequestStatus to return the associated IndexRequestStatus object. For example:

Java Example

indexRequest.refresh();
System.out.println("RequestStatus : " + indexRequest.get_IndexRequestStatus().toString());

C# Example

    indexRequest.Refresh();
    System.Console.WriteLine("JobStatus : " + indexRequest.IndexRequestStatus.ToString());
  

Skipping an Index Request

Use the IndexingOperation property of an IndexRequestStatus object to skip the indexing of a CBR-enabled object that is the subject of an index request. For example:

Java Example

    indexRequest.set_IndexingOperation(IndexingOperation.SKIP);
  

C# Example

    indexRequest.IndexingOperation = IndexingOperation.SKIP;
  

Retrieving Failure Information for an Index Request

Use CmIndexRequest.get_CmIndexingFailureCode to return an integer code that identifies the failure condition for the index request. The indexing failure codes reference constants in the IndexingFailureCode class. For example:

Java Example

indexRequest.refresh();
System.out.println("Request Failure : " + indexRequest.get_CmIndexingFailureCode());

C# Example

indexRequest.Refresh();
System.Console.WriteLine("Request Failure : " + indexRequest.CmIndexingFailureCode());

Pausing and Resuming an Index Job

You can submit a request to pause an index job by setting the Boolean value of its JobPauseRequested property. This action causes the JobStatus property of the index job to be updated to IndexJobStatus.PAUSED

For example:

Java Example

indexJob.set_JobPauseRequested(Boolean.TRUE);
indexJob.save(RefreshMode.REFRESH)
    

C# Example

indexJob.JobPauseRequested=true;
indexJob.Save(RefreshMode.REFRESH)
    

To resume the index job:

Java Example

    indexJob.set_JobPauseRequested(Boolean.FALSE);
    indexJob.save(RefreshMode.REFRESH)
  

C# Example

    indexJob.JobPauseRequested=false;
    indexJob.Save(RefreshMode.REFRESH)
  

Canceling an Index Job

You can submit a request to cancel a pending index job by setting the Boolean value of IndexJob.set_JobAbortRequested. For example:

Java Example

    indexJob.set_JobAbortRequested(Boolean.TRUE);
    indexJob.save(RefreshMode.REFRESH)
  

C# Example

    indexJob.JobAbortRequested= true;
    indexJob.Save(RefreshMode.REFRESH)
  
        

Creating Index Partitions

IBM Content Search Services indexes can be partitioned to address high-volume indexing of objects by their date properties, string properties, or both. By using index partitioning with a query that has partitioning criteria, you can reduce the number of indexes that must be searched as part of a CBR query.

Adding a Date Partition to an Object Store

Only a single Date property in an object store can be specified as an index partitioning property. Changing the partitioning property name (in other words, selecting a different partitioning property in the object store) can require reindexing all of the affected Document classes with these properties. However, you can modify the partitioning property criteria without requiring a reindex of affected Document classes.

Java Example

    // Assumes you have the ObjectStore object that has
    // an existing Date property called receivedDate.

    // Get the existing partition property list from
    // the object store and add a date partition property
    // to it.
    CmTextSearchPartitionPropertyList ppl = os.get_PartitioningProperties();
    CmTextSearchPartitionDateProperty dateProp = Factory.CmTextSearchPartitionDateProperty.createInstance();

    // Set the name of an existing custom property in the
    // object store that has a Date data type and a 
    // settability of settable-only-on-create.
    dateProp.set_PartitionPropertyName("receivedDate");

    // Set the length of time in months that the index will
    // span.
    dateProp.set_PartitionDateInterval(3);
    
    // Add this date property to the object store's
    // partition property list.  There can be, at most, 
    // one date property in this list.
    ppl.add(dateProp);

    // Save the changes to the object store.
    os.save(RefreshMode.REFRESH);

C# Example

    // Assumes you have the ObjectStore object that has
    // an existing Date property called receivedDate.

    // Get the existing partition property list from
    // the object store and add a date partition property
    // to it.
    ICmTextSearchPartitionPropertyList ppl = os.PartitioningProperties();
    ICmTextSearchPartitionDateProperty dateProp = Factory.CmTextSearchPartitionDateProperty.createInstance();

    // Set the name of an existing custom property in the
    // object store that has a Date data type and a
    // settability of settable-only-on-create.
    dateProp.PartitionPropertyName = "receivedDate";

    // Set the length of time in months that the index will
    // span.
    dateProp.PartitionDateInterval = 3;
    
    // Add this date property to the object store's
    // partition property list.  There can be, at most, one
    // date property in this list.
    ppl.Add(dateProp);

    // Save the changes to the object store.
    os.Save(RefreshMode.REFRESH);
        

Adding a String Partition to an Object Store

Only a single String property in an object store can be specified as an index partitioning property. Changing the partitioning property name (in other words, selecting a different partitioning property in the object store) or removing the property from the object store can require reindexing all of the affected Document classes with these properties. However, you can modify the partitioning property criteria without requiring a reindex of affected Document classes.

The value of the string partitioning property of a Document class is used to determine which CmTextSearchIndex index it is indexed into. For example, in a scenario that imports documents from multiple sources, a custom property (such as Origin) on a Document class might be used to identify the origin (such as email or file) of the document. This Origin property is specified as a String partitioning property in the object store. Documents that have an Origin property value of email are indexed into a CmTextSearchIndex index with only other email documents. Likewise, documents that have an Origin property value of file are indexed into a CmTextSearchIndex index with only other file documents.

Java Example

    // Assumes you have the ObjectStore object that has
    // an existing String property called tenant.

    // Get the existing partition property list from
    // the object store and add a String partition property
    // to it.
    CmTextSearchPartitionPropertyList ppl = os.get_PartitioningProperties();
    CmTextSearchPartitionStringProperty stringProp = Factory.CmTextSearchPartitionStringProperty.createInstance();

    // Set the name of an existing custom property in the
    // object store that has a String data type and a 
    // settability of settable-only-on-create.
    stringProp.set_PartitionPropertyName("tenant");

        
    // Add this string property to the object store's
    // partition property list.  There can be, at most, 
    // one String property in this list.
    ppl.add(stringProp);

    // Save the changes to the object store.
    os.save(RefreshMode.REFRESH);

C# Example

    // Assumes you have the ObjectStore object that has
    // an existing String property called tenant.

    // Get the existing partition property list from
    // the object store and add a String partition property
    // to it.
    ICmTextSearchPartitionPropertyList ppl = os.PartitioningProperties();
    ICmTextSearchPartitionStringProperty stringProp = Factory.CmTextSearchPartitionStringProperty.createInstance();

    // Set the name of an existing custom property in the
    // object store that has a String data type and a
    // settability of settable-only-on-create.
    stringProp.PartitionPropertyName = "tenant";

    // Add this String property to the object store's
    // partition property list.  There can be, at most, one
    // String property in this list.
    ppl.Add(stringProp);

    // Save the changes to the object store.
    os.Save(RefreshMode.REFRESH);


Last updated: October 2015
cbr_procedures.htm

© Copyright IBM Corporation 2015.