You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3098 lines
179 KiB

/*HEAD ICS2 HHH CLASSIFICATION */
/*==============================================================================
Copyright (c) 2003-2005 UGS Corporation
Unpublished - All Rights Reserved
==============================================================================*/
/**
@file
Published ITK functions to create/modify in-CLASS Objects
*/
/* */
#ifndef ICS2_H_INCLUDED
#define ICS2_H_INCLUDED
#include <common/tc_deprecation_macros.h>
/**
@ingroup ICS
<b>Common return values:</b>
#ICS_err_attribute_does_not_exist <br>
#ICS_err_attribute_not_unique <br>
#ICS_err_cannot_create_files <br>
#ICS_err_class_does_not_exist <br>
#ICS_err_could_not_open_file <br>
#ICS_err_file_already_exists <br>
#ICS_err_invalid_value <br>
#ICS_err_invalid_property <br>
#ICS_err_invalid_reference_type <br>
#ICS_err_parent_is_not_shared
@{
*/
/**
This value can be used as a value for theOptions parameter in ICS_ico_search().
In case a class id is passed in as a search criteria,
this option will restrict the search to the specified class only.
The default behavior will searach in all classes below the given one as well.
*/
#define ICS_SEARCH_THIS_CLASS_ONLY ( 1 << 0 )
/**
This option allows to specify that strings will be searched case insensitive.
Case sensitive is the default.
*/
#define ICS_SEARCH_CASE_INSENSITIVE ( 1 << 1 )
/**
This value can be used as a value for theOptions parameter in ICS_ico_search().
This option specifies that the search result is sorted by the object id.
The default behaviour is, that the search result is sorted by attributes, if
attributes are given. If no attributes are given, the search result is sorted
by the object id by default.
*/
#define ICS_SEARCH_ORDER_BY_ID ( 1 << 2 )
/**
This value can be used as a value for theOptions parameter in ICS_ico_search().
This option specifies that the search result will contain metric and non-metric instances.
By default only metric or non-metric will be found depending on the active unit system.
*/
#define ICS_SEARCH_IN_BOTH_UNIT_SYSTEMS ( 1 << 3 )
/**
This value can be used as a value for theOptions parameter in ICS_ico_search().
This option specifies that the search result will contain only instances of the other unit system than the active one.
*/
#define ICS_SEARCH_IN_OTHER_UNIT_SYSTEM ( 1 << 4 )
#define ICS_ICO_IGNORE_WRITE_PROTECTION_ERRORS ( 1 << 0 )
#define ICS_MAX_CLASS_ATTR_SIZE 10
#define ICS_DBL_STR_SIZE 64
/**
Defines valid values which can be used for theClassFlags parameter of #ICS_class_create
*/
typedef enum ICS_class_flags_s {
CLASS_flag_englishUnitBase = (1 << 0),
CLASS_flag_isGroup = (1 << 1),
CLASS_flag_unit_system_both = (1 << 2),
CLASS_flag_isStorrageClass = (1 << 4),
CLASS_flag_isAssembly = (1 << 5)
} ICS_class_flags_e;
typedef enum ICS_class_properties_s {
CLASS_prop_id = -600, /**< G */
CLASS_prop_parents = -603, /**< G */
CLASS_prop_name = -607 /**< GS */
} ICS_class_properties_e;
typedef int(* ICS_auto_compute_function_t)( tag_t, int );
typedef struct ICS_auto_compute_attr_s
{
int auto_compute_attr_id; /**< Attribute id of the attribute to be auto computed */
ICS_auto_compute_function_t auto_compute_function; /**< Pointer to the function which computes the value or property of this attribute */
int num_attr_deps; /**< Number of other attributes from this class used for auto computation */
int attr_deps[ICS_MAX_CLASS_ATTR_SIZE]; /**< Attribute ids of dependent attributes */
}ICS_auto_compute_attr_t;
/**
Defines the structure to hold configured KeyLOV description for a specific class attribute.
*/
typedef struct ICS_keylov_descriptor_s
{
int attribute_id; /**< Class Attribute ID */
char* keylov_id; /**< Keylov ID */
char* keylov_name; /**< Keylov Name */
tag_t keylov_tag; /**< Keylov tag */
char* owning_site; /**< Keylov owning site */
int num_shared_sites; /**< number of shared sites */
char** shared_sites; /**< Keylov owning site */
int flags; /**< Keylov flags */
int value_count; /**< number of values */
char** keys; /**< keys */
char** values; /**< values */
logical* deprecation_status; /**< deprecation status */
char* selected_key; /**< selected key */
}ICS_keylov_descriptor_t, *ICS_keylov_descriptor_p_t;
/**
Defines the list of available auto compute modes
*/
typedef enum ICS_auto_compute_mode_s {
AUTOCOMPUTE_MODE_load = 0, /**< manipulate attribute properties based on the input values and the custom logic in place
This mode will not manipulate any attribute values as this is used during loading,
and the values are already available in the database */
AUTOCOMPUTE_MODE_create = 1, /**< perform all the operations in the custom logic to manipulate attribute values as well as properties
based on the default values */
AUTOCOMPUTE_MODE_edit = 2 /**< perform all the operations in the custom logic to manipulate attribute values as well as properties
based on the updated values */
} ICS_auto_compute_mode_e;
/**
Defines the list of possible values for the unit system
*/
typedef enum ICS_unit_system_s {
UNIT_SYSTEM_unspecified = -1,
UNIT_SYSTEM_metric = 0,
UNIT_SYSTEM_english = 1
} ICS_unit_system_e;
/**
Defines valid values for the flags property of the class attributes
*/
typedef enum ICS_class_attr_flags_s {
CLASS_ATTR_vla = (1 << 0),
CLASS_ATTR_external_vla = (1 << 1),
CLASS_ATTR_mandatory = (1 << 2),
CLASS_ATTR_protected = (1 << 3),
CLASS_ATTR_unique = (1 << 4),
CLASS_ATTR_propagated = (1 << 5),
CLASS_ATTR_localValue = (1 << 6),
CLASS_ATTR_reference = (1 << 7),
CLASS_ATTR_auto_computed = (1 << 15),
CLASS_ATTR_hidden = (1 << 20),
CLASS_ATTR_localizable = (1 << 22),
CLASS_ATTR_use_as_facet = (1 << 30)
/* */
} ICS_class_attr_flags_e;
/**
Defines the list of available view types
*/
typedef enum ICS_view_type_s {
VIEW_type_subclass = 0, /**< Leagacy type view where instances are stored in */
VIEW_type_defaultView = 1, /**< Default view with fixed Name "defaultView" will be created automatically
if it does not exist */
VIEW_type_user = 2,
VIEW_type_group = 3,
VIEW_type_role = 4, /**< Currently not supported */
VIEW_type_project = 5,
VIEW_type_table = 6,
VIEW_type_indexing = 7,
VIEW_type_template_view = 100,
VIEW_type_mapping_internal = 200,
VIEW_type_mapping_user = 201,
VIEW_type_nxlib_search_criteria = 202,
VIEW_type_nxlib_search_result = 203,
VIEW_type_nxlib_retrieve = 204
} ICS_view_type_e;
/**
Defines the list of availabe types for #ICS_ask_children
*/
typedef enum ICS_child_type_s {
ICS_CHILD_type_group = (1 << 0),
ICS_CHILD_type_class = (1 << 1),
ICS_CHILD_type_view = (1 << 2), /**< All type of views including subclasses */
ICS_CHILD_type_view_no_subclass = (1 << 3), /**< Real views only */
ICS_CHILD_type_subclass = (1 << 4), /**< Subclasses only */
ICS_CHILD_type_template_view = (1 << 5), /**< Template views only */
ICS_CHILD_type_all = ICS_CHILD_type_group | ICS_CHILD_type_class | ICS_CHILD_type_view
} ICS_child_type_e;
/**
ICS_class_share_type_e defines the list of availabe types for ICS_class_share_incl_children
*/
typedef enum ICS_class_share_type_s {
ICS_CLASS_SHARE_child_classes = (1 << 1),
ICS_CLASS_SHARE_default_views = (1 << 2),
ICS_CLASS_SHARE_specific_views = (1 << 3), /**< user, group, and role views (specified in the preference ICS_share_viewtypes) */
ICS_CLASS_SHARE_subclasses = (1 << 4), /**< subclasses only */
ICS_CLASS_SHARE_views = ( ICS_CLASS_SHARE_default_views | ICS_CLASS_SHARE_specific_views | ICS_CLASS_SHARE_subclasses ),
ICS_CLASS_SHARE_all = ( ICS_CLASS_SHARE_child_classes | ICS_CLASS_SHARE_views )
} ICS_class_share_type_e;
/**
Defines the options for the ITK function ICS_class_list_children2.
*/
typedef enum ICS_list_children_options_s {
ICS_CHILDREN_NO_COUNT = 0 , /**< */
ICS_CHILDREN_INSTANCE_COUNT = (1 << 0), /**< Get the instance count for each child*/
ICS_CHILDREN_CHILD_COUNT = (1 << 1), /**< Get the children count for each child*/
ICS_CHILDREN_VIEW_COUNT = (1 << 2), /**< Get the view count*/
ICS_CHILDREN_INCLUDE_HIDDEN_INSTANCES = (1 << 4), /**< Include hidden instances on instance count*/
ICS_CHILDREN_ALL_COUNT = ICS_CHILDREN_INSTANCE_COUNT | ICS_CHILDREN_CHILD_COUNT | ICS_CHILDREN_VIEW_COUNT
} ICS_list_children_options_e;
/**
Specifies that a Classification class attribute uses the Reference Attribute definition that
is set in the Classification dictionary.
*/
#define ICS_REFATTR_INHERITED 1
/**
Specifies that a Classification class attribute uses the Reference Attribute definition that
is set locally in the Classification class.
*/
#define ICS_REFATTR_CLASS_LOCAL 2
/**
Reference Attribute type "classified object" (property or attribute of the classified object)
*/
#define ICS_REFATTR_CLASSIFIED_OBJECT 1
/**
Reference Attribute type "master form" (property or attribute of the master form of the
classified object).
*/
#define ICS_REFATTR_MASTERFORM 2
/**
Reference Attribute type "related object" (property or attribute of an object that is related
to the classified object).
*/
#define ICS_REFATTR_RELATED_OBJECT 3
/**
Reference Attribute type "ico" (attribute of a different ico).
*/
#define ICS_REFATTR_ICO 4
/**
The Reference Attribute value is read from the classified item OR (if the classified object
is an item revision) from the item of the classified item revision
*/
#define ICS_REFATTR_ITEM_ATTR 1
/**
The Reference Attribute specifies a TC property (not a POM attribute)
*/
#define ICS_REFATTR_PROPERTY ( 1 << 1 )
/**
Internal use only.
*/
#define ICS_SUBCLASSES_TO_STORAGE_CLASSES ( 1 )
/**
Copy the class even if it has unreadable children.
*/
#define ICS_IGNORE_UNREADABLE_CHILDREN ( 1 << 1 )
/**
Copy the class including its inherited attributes.
*/
#define ICS_COPY_INHERITED_ATTRIBUTES ( 1 << 2 )
/**
Don't actually copy the class / migrate the subclasses, only do the initial checks.
*/
#define ICS_DRY_RUN ( 1 << 3 )
/**
Copy the class only, not the hierarchy.
*/
#define ICS_COPY_THIS_CLASS_ONLY ( 1 << 4 )
#define ICS_SHARED_IS_ERROR ( 1 << 5 )
/**
Add attributes from new parent class to copy of view
*/
#define ICS_ADD_ATTRBIUTES_FROM_PARENT ( 1 << 6 )
#define ICS_DEFAULT_VIEW "defaultView"
/**
Don't stop moving part family templates if source attributes are mapped that do not exist in the target.
*/
#define ICS_IGNORE_MAPPING_ERRORS ( 1 )
/**
if this option is passed to the function ICS_class_add_attributes() the function will try to remove
the atrribute from any descendant and update the instances accordingly
*/
/* NOTE: The value of this definition must be in sync of the corresponding definition in sml_defines.h */
#define ICS_ADD_ATTRIBUTE_MOVE_UP ( 1 << 0 )
#define ICS_CLASS_USE_VIEW_IMAGE ( 1 << 0 )
#include <ics/libics_exports.h>
#ifdef __cplusplus
extern "C"{
#endif
/**
@name Class related Functions
<b>Common return values:</b>
#ICS_err_attribute_does_not_exist <br>
#ICS_err_cannot_create_files <br>
#ICS_err_class_does_not_exist <br>
#ICS_err_could_not_open_file <br>
#ICS_err_file_already_exists <br>
#ICS_err_invalid_property <br>
#ICS_err_invalid_reference_type <br>
#ICS_err_invalid_value <br>
#ICS_err_parent_is_not_shared <br>
@{
*/
/**
Checks whether a class with the given classId exists in the database
<b>Return values:</b>
true : class exists <br>
false : a class with this id does not exist
*/
extern ICS_API logical ICS_class_exists(
const char* theClassId /**< (I) The unique id of an existing class */
);
/**
Creates a new class as child of the given parent. The class is immediately created in the database.
*/
extern ICS_API int ICS_class_create(
const char* theClassId, /**< (I) The unique id of the new class */
const char* theParentId, /**< (I) The unique id of the existing parent this should belong to */
const char* theName, /**< (I) The display name of the new class */
int theClassFlags, /**< (I) Flags to configure the class */
int theAttrCount, /**< (I) The number of attributes to add to the class valid range is 0 to 100 */
int* theAttrIds /**< (I) The attribute id's to be added to the class.
The attributes must exist in the dictionary. */
);
/**
Creates a new class as child of the given parent. A new id for this class will be generated and returned.
*/
extern ICS_API int ICS_class_create_unique( const char* theParentId, /**< (I) the unique id of the existing parent this should belong to */
const char* theName, /**< (I) the 'display' Name of the new class */
int theClassFlags, /**< (I) Flags to configure the class */
int theAttrCount, /**< (I) the number of attributes to add to the class valid range is 0 to 100*/
int *theAttrIds, /**< (I) the attribute id's to be added to the class. The Attributes must exist in the dictionary. */
char* *theNewClassId /**< (OF) the new generated unique id of the new class */
);
/**
Permanently removes the class from the database
@note Classes can only be removed if the are not referenced by child classes, views, or instances
*/
extern ICS_API int ICS_class_remove(
const char* theClassId /**< (I) The unique id of an existing class */
);
/**
Saves unsaved modifications to the database.
All functions that require a call to this function are explicitly marked.
*/
extern ICS_API int ICS_class_save(
const char* theClassId /**< (I) The unique id of the class */
);
/**
Reloads the class definition from the database.
All changes made be any function call that requires the use of ICS_class_save() will be lost.
*/
extern ICS_API int ICS_class_refresh(
const char* theClassId /**< (I) The unique id of the class */
);
/**
This has the same functionality as ICS_class_refresh()
*/
extern ICS_API int ICS_class_cancel(
const char* theClassId /**< (I) The unique id of the class */
);
/**
Sets the given property value for the specified property
@note This function requires a subsequent call to ICS_class_save() to commit the changes to the database
*/
extern ICS_API int ICS_class_set_property(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* thePropertyName, /**< (I) The id of the property to set. Possible values are: <br>
PARENT, NAME, SHORT_NAME, FLAGS <br>
UNITSYSTEM, ABSTRACT, ISASSEMBLY <br>
MULTIINST, USER1, USER2 */
const char* thePropertyValue /**< (I) The value for the property */
);
/**
Returns the value for the specified property of an existing class
*/
extern ICS_API int ICS_class_ask_property(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* thePropertyName, /**< (I) The id of the property to set. Possible values: <br>
CID, ISAGROUP, NUM_SHARED_SITES, ATTR_COUNT <br>
also see ICS_class_set_property() */
char** thePropertyValue /**< (OF) The value for the property needs to be freed using #MEM_free */
);
/**
Adds the given shared site.
@note This function requires a subsequent call to ICS_class_save()
to commit the changes to the database
*/
extern ICS_API int ICS_class_add_shared_site(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theSharedSite, /**< (I) The name of the shared site */
logical approveShareOfParents /**< (I) A class can only be shared,
if its parents are shared. <br>
false: if the parents are not shared
theSharedSite will not be added <br>
true: if the parents are not shared
theSharedSite will be added to the
specified class and its parents */
);
/**
Returns the count and the values of the shared sites
*/
extern ICS_API int ICS_class_ask_shared_sites(
const char* theClassId, /**< (I) The unique id of an existing class */
int* theSiteCount, /**< (O) The number of shared sites */
char*** theSharedSites /**< (OF) theSiteCount The shared sides.
Need to be freed using #MEM_free */
);
/**
Set the alias names for the class. Any previously existing alis names will be overwitten.
This function can be used to remove all alias names by setting theCount = 0
@note This function requires a subsequent call to ICS_class_save()
to commit the changes to the database
*/
extern ICS_API int ICS_class_set_alias_names(
const char* theClassId, /**< (I) The unique id of an existing class */
int theCount, /**< (I) The number of alias names to set */
const char** theLanguages, /**< (I) The optional language identifiers of the alias names. Need to be at least an empty string (not NULL) */
const char** theAliasNames /**< (I) The alias names */
);
/**
Add a new alias name to existing list of alias names
@note This function requires a subsequent call to ICS_class_save()
to commit the changes to the database
*/
extern ICS_API int ICS_class_add_alias_name(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theLanguage, /**< (I) The number of alias names to set */
const char* theAliasName /**< (I) The alias name */
);
/**
returns all alias names of the class.
*/
extern ICS_API int ICS_class_ask_alias_names(
const char* theClassId, /**< (I) The unique id of an existing class */
int *theCount, /**< (OF) The number of alias names to set */
char** *theLanguages, /**< (OF) The optional language identifiers of the alias names. Might be "" */
char** *theAliasNames /**< (OF) The alias names */
);
/**
Imports a document for this class. An existing image will be overwritten.
A document can be the class image or icon or any other type of document.
*/
extern ICS_API int ICS_class_import_document(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theDocumentType, /**< (I) Possible values are: <br>
Image <br>
Icon */
const char* theFileName /**< (I) The name of the file to be imported */
);
/**
Exports all documents of the given type attached to this class
*/
extern ICS_API int ICS_class_export_document(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theDocumentType, /**< (I) For possible values see ICS_class_import_document() */
const char* theOutputDirectory, /**< (I) The directory name to put the files into */
logical overwriteExistingFiles, /**< (I) */
int* theFileCount, /**< (O) The number of files exported */
char*** theFileNames /**< (OF) theFileCount the names of the files put into theOutputDirectory */
);
extern ICS_API int ICS_class_ask_document_fileId(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theDocumentType, /**< (I) For possible values see ICS_class_import_document() */
char** theFileId /**< (OF) */
);
/**
Returns the types and tags of all documents according to the dataset of the given class
All parameters ecept for theClassId accept NULL pointer to indicate that this parameter should not be returned
*/
extern ICS_API int ICS_class_ask_documents(
const char* theClassId, /**< (I) The unique id of an existing class */
int* theDocumentCount, /**< (O) The number of named references */
char*** theDocumentTypes, /**< (OF) theDocumentCount The reference names of the documents */
tag_t** theDocumentTags /**< (OF) theDocumentCount The tags of the documents */
);
/**
Remove all images assigned to this class
*/
extern ICS_API int ICS_class_remove_document(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theDocumentType /**< (I) For possible values see ICS_class_import_document() */
);
/**
Adds the given attributes to an existing class <br>
Note: this function returns SML_ERR_NO_INSTANCE_FOUND if the class does not exist
*/
extern ICS_API int ICS_class_add_attributes(
const char* theClassId, /**< (I) The unique id of an existing class */
int theAttrCount, /**< (I) The number of attributes to add to the class valid range is 0 to 100 */
int* theAttrIds /**< (I) The attribute id's to be added to the class.
The Attributes must exist in the dictionary. */
);
/**
Extends ICS_class_add_attributes by adding theOptions paramter.
*/
extern ICS_API int ICS_class_add_attributes2( const char *theClassId, /**< (I) The unique id of an existing class. */
int theAttrCount, /**< (I) The number of attributes to add to the class valid range is 0 to 100 */
int *theAttrIds, /**< (I) The attribute id's to be added to the class.
The Attributes must exist in the dictionary. */
int theOptions /**< (I) Possible values are:
ICS_ADD_ATTRIBUTE_MOVE_UP: Will remove the attribute to add in any descendant
and update the ICOs accordingly.
This will only work for local classes/hierarchies */
);
/**
Returns all attributes of the given class
*/
extern ICS_API int ICS_class_ask_attributes(
const char* theClassId, /**< (I) The unique id of an existing class */
int* theAttributeCount, /**< (O) The attribute count */
tag_t** theAttributeTags, /**< (O) The tags of attributes */
int** theAttributeIds /**< (OF) theAttributeCount */
);
/**
Remove the given attributes from the class.
@note Attributes can only be removed under certain restrictions.
*/
extern ICS_API int ICS_class_remove_attributes(
const char* theClassId, /**< (I) The unique id of an existing class */
int theAttrCount, /**< (I) The number of attributes to remove from the class */
int* theAttrIds /**< (I) The attribute IDs to be removed from the class */
);
/**
Sets the property value for the property in the specified attribute of the class
@note This function requires a subsequent call to ICS_class_save() to commit the changes to the database
@note If you want to set the ATTRIBUTEID please use the following ITK functions:<br>
ICS_class_remove_attributes() and ICS_class_add_attributes()
*/
extern ICS_API int ICS_class_set_attr_property(
const char* theClassId, /**< (I) The unique id of an existing class */
int theAttributeId, /**< (I) The id of the attribute to set the property in. */
const char* thePropertyName, /**< (I) The id of the property to set
Possible values are: <br>
ANNOTATION, MIN, MAX, FLAGS, <br>
MANDATORY, PROTECTED, UNIQUE, PROPAGATED, <br>
ARRAY_SIZE, ARRAY, EXTERNAL_ARRAY, REFERENCE, <br>
LOCAL_VALUE, USER1, USER2 */
const char* thePropertyValue /**< (I) The value for the property */
);
/**
Asks for the value of the property in the specified attribute of the class
*/
extern ICS_API int ICS_class_ask_attr_property(
const char* theClassId, /**< (I) The unique id of an existing class */
int theAttributeId, /**< (I) The id of the attribute to set the property in */
const char* thePropertyName, /**< (I) The id of the property to ask.
For possible values see ICS_class_set_attr_property()
and additionally SMINDEX, DBINDEX, CID, _NAME, _FORMAT, LOCAL_USER1, LOCAL_USER2 */
char** thePropertyValue /**< (OF) The value for the property. Needs to be freed using #MEM_free. */
);
/*===+++========================================================================
** ICS_class_search returns information about the classes found by evaluating theQuery
**
** 3 attribute name
** theSortOption : specifies the attribute to be used for sorting the result
** Supported values are:
** -600 class id (default if 0 or any invalid value is specified )
** -607 class name
** -608 class short name
** -612 user data 1
** -613 user data 2
**
** theCount : the number of classes matching theQuery
**
** NOTE: The input to all following values can be NULL to indicate
** that the output should not be returned.
**
** theTags : the tags of the found classes
** theTypes : the types of the classes
** Posible values are: Group, Class, StorrageClass
** theCIDs : the unique class ids
** theName : the class names
** theInstancesCounts : the number of instances stored in each class (including subclass instances)
** theChildCounts : the number of children (of type Group,Class or StorrageClass) each class has
** theViewCounts : the number of views for each class
** theSubClassCounts : the number of SML-SubClasses for each class
**
**
** Return value :
** ITK_OK
** Error discovered
**
*/
extern ICS_API int ICS_class_search( const char* theQuery, /**< (I) Expression of type attributeId operator value
Supported values for attributeId are: <br>
-600 class id <br>
-607 class name <br>
-601 class type <br>
-608 short name <br>
-602 group id <br>
-612 user data 1 <br>
-613 user data 2 <br>
8 attribute id <br>
3 attribute name */
int theSortOption, /**< (I) Attribute Id to sort by*/
int *theCount, /**< (O) Number classes found */
tag_t **theTags, /**< (OF) Tgas of the classes found */
char* **theTypes, /**< (OF) theCount Types of the classe */
char* **theCIDs, /**< (OF) theCount Ids of the classe */
char* **theNames, /**< (OF) theCount Names of the classes */
int **theInstancesCounts, /**< (OF) Number of instances stored in the class and any child class */
int **theChildCounts, /**< (OF) Number of children of the class */
int **theViewCounts, /**< (OF) Number of views of the class */
int **theSubClassCounts /**< (OF) Number of subclasses of the class */
);
/**
Retrieves the tag and the id of the parent of the given class <br>
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_NO_INSTANCE_FOUND if the class ID does not exist
</ul>
*/
extern ICS_API int ICS_class_ask_parent(
const char* theClassId, /**< (I) The unique id of an existing class */
tag_t* theParentTag, /**< (O) The tag of the Parent */
char** theParentId /**< (OF) The Parent's Id */
);
/**
Retrieves the parents for the specified class of an existing class <br>
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_NO_INSTANCE_FOUND if the class ID does not exist
</ul>
*/
extern ICS_API int ICS_class_ask_parents(
const char* theClassId, /**< (I) The unique id of an existing class */
logical includeGroups, /**< (I) False : only parents of type class (where the given class inherits from) are returned <br>
True : the groups up to and including SAM are returned as well */
int* theParentCount, /**< (O) The number of classes returned */
tag_t** theParentTags, /**< (OF) theParentCount The list of unique id's of the parents <br>
null if theParentCount == 0 <br>
Needs to be freed using #MEM_free */
char*** theParentIds /**< (OF) theParentCount The list of unique id's of the parents <br>
null if theParentCount == 0 <br>
Needs to be freed using #MEM_free */
);
/**
Retrieves the children for the specified class of an existing class
*/
extern ICS_API int ICS_class_ask_children(
const char* theClassId, /**< (I) The unique id of an existing class */
int theChildTypeFilter, /**< (I) The following values from #ICS_child_type_e: <br>
#ICS_CHILD_type_class <br>
#ICS_CHILD_type_view */
int* theChildCount, /**< (O) The number of classes returned */
char*** theChildren /**< (OF) theChildCount The list of unique id's of the childern <br>
null if theChildCount == 0. Needs to be freed using #MEM_free */
);
/**
Retrieves the children for the specified class of an existing class
The following parameters accept NULL pointer to indicate that this parameter should not be returned:
theChildCount, theChildernTags, theChildrenIds, theChildrenTypes
@note The legacy objects SMLClass and SMLSubClass are treated as class and storageClass
*/
extern ICS_API int ICS_class_list_children(
const char* theClassId, /**< (I) The unique id of an existing class */
int theChildTypeFilter, /**< (I) The following values from #ICS_child_type_e: <br>
#ICS_CHILD_type_class <br>
#ICS_CHILD_type_view */
int theSortOption, /**< (I) */
int* theChildCount, /**< (O) The number of classes returned */
tag_t** theChildrenTags, /**< (OF) theChildCount The POM tags of the children */
char*** theChildrenIds, /**< (OF) theChildCount The unique id's of the childern */
char*** theChildrenTypes, /**< (OF) theChildCount The types of the children <br>
Group <br>
Class <br>
StorrageClass <br>
View */
char*** theChildrenNames, /**< (OF) The (display) names of the children */
int** theInstanceCounts, /**< (OF) The number of instances stored in the class and all its descendents */
int** theChildrenCounts, /**< (OF) The number of child classes for each child */
int** theViewCounts /**< (OF) The number of view for each child */
);
/**
Provides the same values as #ICS_class_list_children
with the exception that:
<ul>
<li>Instead of childrenTags childrenUid will be transfered.
<li>This method will be used until the web itk binding functionality
for arrays of tags is fixed.
</ul>
*/
extern ICS_API int ICS_WEB_class_list_children( const char *theClassId, /**< (I)> */
int theChildTypeFilter, /**< (I) */
int theSortOption, /**< (I) */
int *theChildCount, /**< (O) */
char* **theChildrenUid, /**< (OF) theChildCount */
char* **theChildrenIds, /**< (OF) theChildCount */
char* **theChildrenTypes, /**< (OF) theChildCount */
char* **theChildrenNames, /**< (OF) theChildCount */
int **theInstanceCounts, /**< (OF) theChildCount */
int **theChildrenCounts, /**< (OF) theChildCount */
int **theViewCounts /**< (OF) theChildCount */
);
/**
Retrieves the children for the specified class of an existing class
The following parameters accept NULL pointer to indicate that this parameter should not be returned:
theChildCount, theChildernTags, theChildrenIds, theChildrenTypes
@note The legacy objects SMLClass and SMLSubClass are treated as class and storageClass
*/
extern ICS_API int ICS_class_list_children2(
const char* theClassId, /**< (I) The unique id of an existing class */
int theChildTypeFilter, /**< (I) The following values from #ICS_child_type_e: <br>
#ICS_CHILD_type_class <br>
#ICS_CHILD_type_view */
int theSortOption, /**< (I) */
int theOptions, /**< (I) The options for the children search: <br>
#0
#ICS_CHILDREN_INSTANCE_COUNT
#ICS_CHILDREN_CHILD_COUNT
#ICS_CHILDREN_VIEW_COUNT
#ICS_CHILDREN_ALL_COUNT
#ICS_CHILDREN_INCLUDE_HIDDEN_INSTANCES */
int* theChildCount, /**< (O) The number of classes returned */
tag_t** theChildrenTags, /**< (OF) theChildCount The POM tags of the children */
char*** theChildrenIds, /**< (OF) theChildCount The unique id's of the childern */
char*** theChildrenTypes, /**< (OF) theChildCount The types of the children <br>
Group <br>
Class <br>
StorrageClass <br>
View */
char*** theChildrenNames, /**< (OF) theChildCount The (display) names of the children */
int** theInstanceCounts, /**< (OF) theChildCount The number of instances stored in the class and all its descendents */
int** theChildrenCounts, /**< (OF) theChildCount The number of child classes for each child */
int** theViewCounts, /**< (OF) theChildCount The number of view for each child */
char*** theIconImageTickets, /**< (OF) theChildCount The icon image ticket for each child */
char*** theClassImageTickets /**< (OF) theChildCount The class image ticket for each child */
);
/**
Retrieves the most important information about a class
@note If theClassId has the format xxx::yyy it is treated as a legacy SMLSubClass
*/
extern ICS_API int ICS_class_describe(
const char* theClassId, /**< (I) The unique id of an existing class */
char** theParent, /**< (OF) The id of the parent class or group */
int* theType, /**< (O) Group, Class, StorageClass */
char** theName, /**< (OF) The display name for the class */
char** theShortName, /**< (OF) An optional short version of theName */
char** theDescription, /**< (OF) A user oriented description of the class */
char** theUserData1, /**< (OF) Customer specific values not used by UGS */
char** theUserData2, /**< (OF) Customer specific values not used by UGS */
int* theOptions, /**< (O) Bit encoded values from #ICS_class_flags_e */
int* theInstanceCount, /**< (O) The number of instances stored in this class or any of its children */
int* theChildrenCount, /**< (O) The number of children of this class */
int* theViewCount /**< (O) The number of views defined for this class */
);
/**
@note The Attributes returned by this function are filtered through
the view defined for the user of this call
*/
extern ICS_API int ICS_class_describe_attributes(
const char* theClassId, /**< (I) The unique id of an existing class */
int* theCount, /**< (O) The number of attributes of this class */
int** theIds, /**< (OF) theCount The attribute id */
char*** theNames, /**< (OF) theCount The display name */
char*** theShortNames, /**< (OF) theCount The short version of the display name */
char*** theAnnotations, /**< (OF) theCount The annotation */
int** theArraySize, /**< (OF) theCount 1 for non vla attributes, > 1 for vla attribute */
int** theFormat, /**< (OF) theCount The internal format definition.
Use ICS_describe_format() to get details. */
char*** theUnit, /**< (OF) theCount */
char*** theMinValues, /**< (OF) theCount Minimum allowed value ( valid for integer and float attributes) */
char*** theMaxValues, /**< (OF) theCount Maximum allowed value ( valid for integer and float attributes) */
char*** theDefaultValues, /**< (OF) theCount Default value for new Instances */
char*** theDescriptions, /**< (OF) theCount The attribute description from the dictionary */
int** theOptions /**< (OF) theCount Bit encoded values from #ICS_class_attr_flags_e */
);
/**
Retrieves the definition of a view given the view tag.
<b>Restrictions:</b>
This function can only be used with views.
*/
extern ICS_API int ICS_view_describe_view (
tag_t view, /**< (I) Tag of the view */
int* nAttributes, /**< (O) Number of attributes defined for the given view */
int** uncts, /**< (OF) nAttributes UNCT's of the attributes */
int** formats, /**< (OF) nAttributes Attributes formats */
int** nonMetricFormats, /**< (OF) nAttributes Attributes Non Metric formats */
char*** attributeIds, /**< (OF) nAttributes Attribute Ids */
char*** attributeNames, /**< (OF) nAttributes Attribute names */
char*** shortNames, /**< (OF) nAttributes Short names for the attributes */
char*** units, /**< (OF) nAttributes Units for the attributes (NULL if no unit is defined for the attribute) */
char*** configBefore, /**< (OF) nAttributes */
char*** configField, /**< (OF) nAttributes */
char*** configAfter, /**< (OF) nAttributes */
int** flags, /**< (OF) nAttributes */
char*** metricMin, /**< (OF) nAttributes Metric Minimum values for the attributes */
char*** metricMax, /**< (OF) nAttributes Metric Maximum values for the attributes */
char*** nonMetricMin, /**< (OF) nAttributes Non Metric Minimum values for the attributes */
char*** nonMetricMax, /**< (OF) nAttributes Non Metric Maximum values for the attributes */
char*** metricDefaultValue, /**< (OF) nAttributes Metric Default values for the attributes */
char*** nonMetricDefaultValue/**< (OF) nAttributes Non Metric Default values for the attributes */
);
/**
@deprecated #ICS_class_ask_icos deprecated in Teamcenter 11.2.2. Use #ICS_ico_search instead.
Retrieves all instances (ICOs) of the given class
The following parameters accept NULL pointer to indicate that this parameter should not be returned:
theICOTags, theICOUIDs, theICOIds, theClassId, theWSOTag
*/
TC_DEPRECATED("11.2.2","ICS_class_ask_icos","ICS_ico_search")
extern ICS_API int ICS_class_ask_icos(
const char* theClassId, /**< (I) The unique id of an existing class */
logical includeFromChildren, /**< (I) */
int* theCount, /**< (O) The number of ICO tags returned */
tag_t** theICOTags, /**< (OF) theCount The list of ICOs of the given class */
char*** theICOUIDs, /**< (OF) theCount */
char*** theICOIds, /**< (OF) theCount The IDs of the ICOs */
char*** theClassIds, /**< (OF) theCount The class ids of the ICOs */
tag_t** theWSOTags, /**< (OF) theCount The tags of the objects the ICOs are classifying */
char*** theWSOUIDs /**< (OF) theCount */
);
/**
@deprecated #ICS_class_search_icos deprecated in Teamcenter 11.2.2. Use #ICS_ico_search instead.
*/
TC_DEPRECATED("11.2.2","ICS_class_search_icos","ICS_ico_search")
extern ICS_API int ICS_class_search_icos(
const char* theClassId, /**< (I) */
logical searchInChildren, /**< (I) */
int theExpressionCount, /**< (I) */
int* theAttrIds, /**< (I) */
char** theAttrExpressions, /**< (I) */
int* theCount, /**< (O) */
tag_t** theICOTags, /**< (OF) theCount */
char*** theICOUIDs, /**< (OF) theCount */
char*** theICOIds, /**< (OF) theCount */
char*** theClassIds, /**< (OF) theCount */
tag_t** theWSOTags, /**< (OF) theCount */
char*** theWSOUIDs /**< (OF) theCount */
);
/**
Determines whether theClassId is a descendant of theAncestor.
<br/>This will cover classes and parents.
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_NO_INSTANCE_FOUND if the class does not exist
</ul>
*/
extern ICS_API int ICS_class_is_descendant(
const char* theClassId, /**< (I) */
const char* theAncestor, /**< (I) */
logical* theVerdict /**< (O) */
);
/**
If theClassTag is a valid class, returns the id of the class
*/
extern ICS_API int ICS_class_ask_id(
tag_t theClassTag, /**< (I) The tag of the Class */
char** theClassId /**< (OF) The Id of the Class */
);
/**
Retrieves the class IDs of a list of classes.
@note Any invalid entry in @p theClasses will be represented by an empty string in the output array @p theClassIds.
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_INVALID_VALUE if @p theCount is 0 or if all the members of @p theClasses are invalid.
</ul>
*/
extern ICS_API int ICS_class_ask_ids(
unsigned int theCount, /**< (I) Number of classes */
const tag_t* theClasses, /**< (I) theCount Classes */
char* **theClassIds /**< (OF) theCount IDs corresponding to the given classes.
<br/>The array is packed, which means that the memory is deallocated by calling #MEM_free on the container only. */
);
/**
If theClassId is a valid class, returns the POM tag of the class <br>
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_NO_INSTANCE_FOUND if the class does not exist
</ul>
*/
extern ICS_API int ICS_class_ask_tag(
const char* theClassId, /**< (I) The Id of the Class */
tag_t* theClassTag /**< (O) The tag of the Class */
);
/**
Call this function to define an attribute ? given by the ID of the Classification class and its
attribute ID - as reference attribute.
@note Use 0 as theReferenceState to define the attribute to be a normal attribute (non reference
attribute).
@note This function requires a subsequent call to #ICS_class_save to commit the changes to the database.
*/
int ICS_API ICS_class_set_attr_as_reference(
const char *theClassId, /**< (I) Class ID of the Classification class where you want to
define the reference attribute. <br>
The parameter must specify an existing class ID. */
int theAttributeID, /**< (I) Attribute ID of the attribute that you want to define as
reference attribute. <br>
The parameter must specify the attribute ID of an
attribute that is used in Classification class
theClassId. */
int theReferenceState, /**< (I) 0 - non reference attribute <br>
#ICS_REFATTR_INHERITED - the Reference Attribute definition
from the Classification dictionary will be used <br>
#ICS_REFATTR_CLASS_LOCAL - set a Reference Attribute
definition for the attribute locally in this class
(only in this case the following parameters are used) */
int theReferenceAttributeType, /**< (I) One of the following values:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT - a property or attribute of the
classified object
<li> #ICS_REFATTR_MASTERFORM - a property or attribute of the
Masterform of the classified item or item revision
<li> #ICS_REFATTR_RELATED_OBJECT - a property or attribute of an
object that is related (via an IMAN Relation) to the
classified object
<li> #ICS_REFATTR_ICO - an attribute of a different ICO
</ul> */
int theFlags, /**< (I) Set to 0 or any combination of: <br>
#ICS_REFATTR_PROPERTY: set this flag if you want to define an
IMAN property - do not set it if you want to define a POM
Attribute <br>
#ICS_REFATTR_ITEM_ATTR: set this flag if you want to define a
reference attribute of an item. This means that if the
classified object is an item revision the reference
attribute value will be read from the item (or its
masterform / an object that is related to the item) of
the classified item revision. */
const char *theClassName, /**< (I) Depending on theReferenceAttributeType specify the
following value:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Classification class where the
referenced ICO is stored (the parameter must not be
NULL).
<li> #ICS_REFATTR_MASTERFORM: IMAN Type of the classified object /
its item if #ICS_REFATTR_ITEM_ATTR is set in the flags (the
parameter may be NULL to specify that different IMAN
Types are allowed)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: POM Class / IMAN Type of the
classified object / its item if ICS_ITEM_ATTR is set
in the flags (the parameter may be NULL to specify that
different IMAN Types are allowed)
<li> #ICS_REFATTR_RELATED_OBJECT: POM Class / IMAN Type of the
related object (the parameter must not be NULL)
</ul>
(The second alternatives are valid if #ICS_REFATTR_PROPERTY is
specified in theFlags) */
const char *theAttrName, /**< (I) This parameter must not be NULL. <br>
Depending on theReferenceAttributeType specify the following
value:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: name of the POM Attribute /
IMAN Property where the value of the reference
attribute will be read from
<li> #ICS_REFATTR_MASTERFORM: name of the POM Attribute / IMAN
Property where the value of the reference attribute
will be read from (the POM Attribute / IMAN Property is
found in the Masterform of the classified object / its
item)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Attribute ID of the attribute
that will be displayed as "key attribute" of the
referenced ICO
<li> #ICS_REFATTR_RELATED_OBJECT: name of the POM Attribute / IMAN
Property where the value of the reference attribute
will be read from (this POM Attribute / IMAN Property
is found in the related object)
</ul>
(The second alternatives are valid if #ICS_REFATTR_PROPERTY is
specified in theFlags) */
const char *theRelationName /**< (I) If theReferenceAttributeType is #ICS_REFATTR_RELATED_OBJECT: name of
the IMAN Relation with which the related object is attached
to the classified object (may be NULL to specify that any
relation is possible). <br>
For all other Reference Attribute types this parameter is
not used. */
);
/**
Call this function to ask the reference attribute properties of an attribute in a certain
Classification class (given by the Class ID and the attribute ID).
*/
int ICS_API ICS_class_ask_attr_reference_props(
const char **theClassId, /**< (I) Class ID of the Classification class in which the
attribute is used. */
int theAttributeID, /**< (I) Attribute ID of the Classification class attribute from
which you want to read the reference attribute definition.
The parameter must specify an attribute ID of an
attribute that is used in Classification class theClassId. */
int *theReferenceAttributeState,/**< (O) 0 - non reference attribute <br>
#ICS_REFATTR_INHERITED - the Reference Attribute
definition is taken from the Classification
dictionary (in this case the subsequent parameters are
set to the values defined in the Classification
dictionary) <br>
#ICS_REFATTR_CLASS_LOCAL - the Reference Attribute
definition is specified locally in the Classification
class */
int *theReferenceAttributeType, /**< (O) One of the following values:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT - a property or attribute of
the classified object
<li> #ICS_REFATTR_MASTERFORM - a property or attribute of the
Masterform of the classified item or item revision
<li> #ICS_REFATTR_RELATED_OBJECT - a property or attribute of an
object that is related (via an IMAN Relation) to the
classified object
<li> #ICS_REFATTR_ICO - an attribute of a different ICO
</ul> */
int *theFlags, /**< (O) 0 or any combination of: <br>
#ICS_REFATTR_PROPERTY: this flag is set if an IMAN property is
defined - if it is not set then a POM attribute is
defined <br>
#ICS_REFATTR_ITEM_ATTR: this flag is set if a reference attribute
of an item is defined. This means that if the classified
object is an item revision the reference attribute value
will be read from the item (or its masterform / an object
that is related to the item) of the classified item
revision.*/
char **theClassName, /**< (OF) Depending on theReferenceAttributeType this parameter
specifies one the following values:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Classification class where
the referenced ICO is stored.
<li> #ICS_REFATTR_MASTERFORM: IMAN Type of the classified object
/ its item if #ICS_REFATTR_ITEM_ATTR is set in the flags
(the parameter may be NULL to specify that
different IMAN Types are allowed)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: POM Class / IMAN Type of
the classified object / its item if #ICS_REFATTR_ITEM_ATTR
is set in the flags (the parameter may be NULL to
specify that different IMAN Types are allowed)
<li> #ICS_REFATTR_RELATED_OBJECT: POM Class / IMAN Type of the
related object
</ul>
(The second alternatives are valid if #ICS_REFATTR_PROPERTY is
set in theFlags) */
char **theAttrName, /**< (OF) Depending on theReferenceAttributeType this parameter
specifies the following value:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: name of the POM Attribute
/ IMAN Property where the value of the reference
attribute will be read from
<li> #ICS_REFATTR_MASTERFORM: name of the POM Attribute / IMAN
Property where the value of the reference attribute
will be read from (the POM Attribute / IMAN
Property is found in the Masterform of the
classified object / its item)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Attribute ID of the
attribute that will be displayed as "key attribute"
of the referenced ICO
<li> #ICS_REFATTR_RELATED_OBJECT: name of the POM Attribute /
IMAN Property where the value of the reference
attribute will be read from (this POM Attribute /
IMAN Property is found in the related object)
</ul>
(The second alternatives are valid if #ICS_REFATTR_PROPERTY is
set in theFlags) */
char **theRelationName /**< (OF) If theReferenceAttributeType is #ICS_REFATTR_RELATED_OBJECT:
name of the IMAN Relation with which the related object
is attached to the classified object (may be NULL to
specify that any relation is possible). <br>
For all other Reference Attribute types this parameter
is set to NULL. */
);
/**
The following function copies theClass to a new Classification class with theNewCid ID and theNewParent
parent; afterwards the descendants whose IDs are contained within theOldIDs are copied under the new Class
with the IDs specified in theNewIDs.
The function fails if one of the following error conditions is met:
<ul>
<li>theNewParent is a descendant of theClass
<li>theOldIDs contains IDs of Classes/Views that either aren't descendants of theClass or their immediate
parent is not in theOldIDs
<li>theNewIDs contains IDs that are not unique.
<li>theClass has unreadable descendants (this check is only executed if ICS_IGNORE_UNREADABLE_CHILDREN
is not specified in theOptions)
<li>theNewParent is not writable
</ul>
Moreover a warning is logged if
<ul>
<li>theClass is shared (the shared sites are not copied!)
<li>theClass or one of its descendants to copy has part family templates attached (part family templates
can only be attached to ONE Classification class - and they are not moved to the copies)
</ul>
If these checks succeed and theClass itself is successfully copied, then further errors during the
subsequent copy operation are logged to the syslog file but do not lead to a rollback.
*/
extern ICS_API int ICS_class_copy(
const char *theClass, /**< (I) The ID of the Classification class to be copied */
const char *theNewCidIn, /**< (I) The ID of the Classification class that is created as a copy of theClass */
const char *theNewParent, /**< (I) The ID of the Classification class under which the copy of theClass is created */
int theOptions, /**< (I) options - valid values are:
<ul>
<li> #ICS_COPY_THIS_CLASS_ONLY - only copy theClass (no descendants are copied.
If this option is not specified and theChildCount is 0,
then all descendants of theClass are copied under the new
Class and the IDs for the copies are automatically generated.
<li> #ICS_IGNORE_UNREADABLE_CHILDREN - no error if theClass has unreadable descendants
<li> #ICS_COPY_INHERITED_ATTRIBUTES - the copy of theClass will contain all attributes
of theClass (local and inherited attributes). If this option
is not specified, then only the local attributes of theClass
are copied to the new Class.
<li> #ICS_DRY_RUN - only executes the checks but does not actually copy any objects
</ul> */
int theChildCountIn, /**< (I) Count of the descendants of theClass that shall be copied together with theClass. */
const char **theOldIDsIn, /**< (I) IDs of the descendants to copy. theOldIDs must containthe IDs as
CID (for Classification classes) or CID::SID (for Classification views).*/
const char **theNewIDsIn, /**< (I) IDs of the copies. theNewIDs must contain the IDs of the objects to be created as
NEW_CID (for Classification classes) or NEW_SID (for Classification Views).*/
char **theNewCidOut, /**< (OF) The ID of the Classification class that is created as a copy of theClass. */
int *theChildCountOut, /**< (O) Count of the descendants that were successfully copied. */
char ***theOldIDsOut, /**< (OF) theChildCountOut IDs of the descendants the ware successfully copied. theOldIDsOut contain the IDs as
CID (for Classification classes) or CID::SID (for Classification views).*/
char ***theNewIDsOut /**< (OF) theChildCountOut IDs of the copies. theNewIDs contain the IDs of the objects that were created as
NEW_CID (for Classification classes) or NEW_SID (for Classification Views).*/
);
/**
The following function moves theClassToMove under theNewParent.
The operation will be done the following way:
<ul>
<li>The id of the class will be changed to theClassToMove
<li>The class will be copied to a new class with id theClassToMove and under theNewParent.
<li>The part family templates that are attached to and the ICOs that are stored in the class are moved to the copy.
</ul>
When this is done the class children and views (in other words: all descendants of the class) will be processed in
the same way. If something goes wrong there will not be a rollback. Moreover the operation will continue even if an
error occured. As many objects as possible will be moved.
After the objects have been renamed and copied the old objects will be deleted.
The function will fail completely if:
<ul>
<li>theNewParent is a descendant of theClassToMove
<li>theClassToMove has unreadable children
<li>theClassToMove is not writable
<li>theNewParent is not locally owned
<li>theNewParent is a class but theClassToMove is a group
<li>theClassToMove is shared
</ul>
*/
int ICS_API ICS_class_move( const char* theClassToMove, /**< (I) The ID of the Classification class to be moved */
const char* theNewParent, /**< (I) The ID of the Classification class under which the theClassToMove is moved */
int *theFailedCount, /**< (O) The number of objects that could not be moved (in case of classes only the top level object is counted)*/
char** *theFailedObjects /**< (OF) theFailedCount The IDs of the objects that could not be moved*/
);
extern ICS_API int ICS_class_move_partfamily_templates( const char *theSourceClassId, const char *theTargetClassId, int theOptions );
/**
The following function shares theClass to theSites and afterwards shares the following objects:
<ol>
<li>class children (and their children and so on) if theOptions contains ICS_CLASS_SHARE_child_classes
<li>subclasses (also the subclasses of class children if ICS_CLASS_SHARE_child_classes is specified )
if ICS_CLASS_SHARE_subclass is specified i theOptions
<li>default views (also the default views of class children if ICS_CLASS_SHARE_child_classes is specified ) if
ICS_CLASS_SHARE_default_view is specified in theOptions
<li>user, role and group views (also these types of views of class children if ICS_CLASS_SHARE_child_classes is specified ) if
ICS_CLASS_SHARE_specific_view is specified in theOptions (the preference ICS_share_viewtypes is evaluated to find out
which of these types will be shared)
</ol>
It is no error to specify sites to which theClass is already shared (this enables you share the
children of theClass although theClass itself is already shared).
The function fails if theClass's parent is not shared to at least one of theSites and shareParentsToo is false.
If theClass is successfully shared then no error is returned (but logged in the syslog file) if sharing any of
the children fails.
*/
extern ICS_API int ICS_class_share_incl_children( const char *theClass, /**< (I) the class to be shared */
int theSiteCount, /**< (I) the count of the sites to which the class
(and possibly children) will be shared */
const char **theSites, /**< (I) the names of the sites to which the class
(and possibly children) will be shared */
int theOptions, /**< (I) specifies which of the children of theClass
will be shared (see above). */
logical shareParentsToo /**< (I) If true then the parents of theClass will
be shared to theSites, too. */
);
/**
Retrieves the dependency configuration settings of the attributes for the given class.
@returns
<ul>
<li>#ITK_ok on success
<li>POM enquiry related error otherwise.
</ul>
*/
extern ICS_API int ICS_class_ask_attr_dep_config(
tag_t class_tag, /**< (I) The tag of the class*/
int *attr_count, /**< (O) The number of class attributes containing dependency settings */
int **attr_ids, /**< (OF) attr_count The class attribute IDs */
char* **dependency_attributes, /**< (OF) attr_count The dependency attribute values. The output string array is SM-packed,
hence should be freed by calling #MEM_free on the container only. */
char* **dependency_configurations /**< (OF) attr_count The dependency configuration values. The output string array is SM-packed,
hence should be freed by calling #MEM_free on the container only. */
);
/**
Retrieves the dependency configuration settings of the attributes for the given class.
If the value for @p class_id is invalid, no error is returned.
@returns
<ul>
<li>#ITK_ok on success
<li>POM enquiry related error otherwise.
</ul>
*/
extern ICS_API int ICS_class_ask_attr_dep_config_by_id(
const char* class_id, /**< (I) The ID of the class*/
int *attr_count, /**< (O) The number of class attributes containing dependency settings */
int **attr_ids, /**< (OF) attr_count The class attribute IDs */
char* **dependency_attributes, /**< (OF) attr_count The dependency attribute values */
char* **dependency_configurations /**< (OF) attr_count The dependency configuration values */
);
/** @} */
/**
@name View/Subclass related Functions
<b>Common return values:</b>
#ICS_err_attribute_does_not_exist <br>
#ICS_err_cannot_create_files <br>
#ICS_err_class_does_not_exist <br>
#ICS_err_could_not_open_file <br>
#ICS_err_file_already_exists <br>
#ICS_err_invalid_property <br>
#ICS_err_invalid_reference_type <br>
#ICS_err_invalid_value <br>
#ICS_err_parent_is_not_shared <br>
#ICS_err_view_does_not_exist
@{
*/
/**
Checks whether a class with the given classId exists in the database
<b>Return values:</b>
true : view exists <br>
false : a view with this id does not exist
*/
extern ICS_API logical ICS_view_exists(
const char* theClassId, /**< (I) The unique id of a class */
const char* theViewId /**< (I) The unique id of a view */
);
/**
Creates a view for the specified class
*/
extern ICS_API int ICS_view_create(
const char* theClassId, /**< (I) The unique id of an existing class the view should belong to */
const char* theViewId, /**< (I) The ID of the view which needs to be unique within
the scope of the class the view belongs to */
ICS_view_type_e theViewType, /**< (I) Defines how the view is used: <br>
#VIEW_type_subclass - legacy type can only be added to
abstract classes with no further class children <br>
#VIEW_type_defaultView - optionaly,
will be autogenerated if needed and does not exist <br>
The id is fixed: "defaultView" <br>
#VIEW_type_user, #VIEW_type_group, #VIEW_type_role <br>
For these views, theViewId needs to be set to the user, group or role Id. */
const char* theName, /**< (I) The view name is optional except for #VIEW_type_subclass */
int theAttrCount, /**< (I) The number of Attributes added to the view */
int* theAttrIds /**< (I) The Attributes added to the view (need to exist in the class) */
);
/**
Permanently removes the view from the database
@note Views of type #VIEW_type_subclass can only be removed if no instances are stored in it
*/
extern ICS_API int ICS_view_remove(
const char* theClassId, /**< (I) Id of the class the view to remove is assigned to */
const char* theViewId /**< (I) Id of the view */
);
/**
Saves unsaved modifications to the database.
All functions that require a call to this function are explicitly marked.
*/
extern ICS_API int ICS_view_save(
const char* theClassId, /**< (I) The unique id of the class */
const char* theViewId /**< (I) The unique id of a view in the specified class */
);
/**
Reloads the view definition from the database. All changes made by any function call
that requires the use of ICS_view_save() will be lost.
*/
extern ICS_API int ICS_view_refresh(
const char* theClassId, /**< (I) The unique id of the class */
const char* theViewId /**< (I) The unique id of a view in the specified class */
);
/**
Has the same functionality as ICS_view_refresh()
*/
extern ICS_API int ICS_view_cancel(
const char* theClassId, /**< (I) The unique id of the class */
const char* theViewId /**< (I) The unique id of a view in the specified class */
);
/**
Sets the given property value for the specifed property
@note This function requires a subsequent call to ICS_view_save()
to commit the changes to the database
*/
extern ICS_API int ICS_view_set_property(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theViewId, /**< (I) The unique id of a view in the specified class */
const char* thePropertyName, /**< (I) The id of the property to set. Possible values are: <br>
SID, TYPE, TYPENAME, NAME, SHORT_NAME, USER1, USER2, FLAGS */
const char* thePropertyValue /**< (I) The value for the property */
);
/**
Returns the value for the specifed property of an existing view.
*/
extern ICS_API int ICS_view_ask_property(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theViewId, /**< (I) The unique id of a view in the specified class */
const char* thePropertyName, /**< (I) The name of the property to set.
Possible values: see ICS_class_set_property()
and additionally CID, NUM_SHARED_SITES */
char** thePropertyValue /**< (OF) The value for the property.
Needs to be freed using SM_free */
);
/**
Adds the given shared site
@note This function requires a subsequent call to ICS_view_save()
to commit the changes to the database
*/
extern ICS_API int ICS_view_add_shared_site(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theViewId, /**< (I) The unique id of a view in the specified class */
const char* theSharedSite, /**< (I) The name of the shared site */
logical approveShareOfParents /**< (I) A view can only be shared, if its parents are shared. <br>
false: if the parents are not shared
theSharedSite will not be added <br>
true: if the parents are not shared
theSharedSite will be added to the
specified class and its parents */
);
/**
Returns the count and the values of the shared sites
*/
extern ICS_API int ICS_view_ask_shared_sites(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theViewId, /**< (I) The unique id of a view in the specified class */
int* theSiteCount, /**< (O) The number of shared sites */
char*** theSharedSites /**< (OF) theSiteCount The shared sides.
Need to be freed using #MEM_free */
);
extern ICS_API int ICS_view_add_attributes(
const char* theClassId, /**< (I) The unique Id of the class */
const char* theViewId, /**< (I) The View Id */
int theAttrCount, /**< (I) The attribute count */
int* theAttrIds /**< (I) The attributes to be added */
);
extern ICS_API int ICS_view_remove_attributes(
const char* theClassId, /**< (I) The unique Id of the class */
const char* theViewId, /**< (I) The View Id */
int theAttrCount, /**< (I) The attribute count */
int* theAttrIds /**< (I) The attributes to be removed */
);
/**
Sets the property value for the property in the specified attribute of the view
@note This function requires a subsequent call to ICS_view_save()
to commit the changes to the database
*/
extern ICS_API int ICS_view_set_attr_property(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theViewId, /**< (I) The unique id of a view in the specified class */
int theAttributeId, /**< (I) The id of the attribute to set the property in */
const char* thePropertyName, /**< (I) The id of the property to set. Possible values are: <br>
MIN, MAX, FLAGS, FLAGS1, FLAGS2,
TEXT, TEXT1, TEXT2, USER1, USER2 */
const char* thePropertyValue /**< (I) The value for the property */
);
/**
Asks for the value of the property in the specified attribute of the view
*/
extern ICS_API int ICS_view_ask_attr_property(
const char* theClassId, /**< (I) The unique id of an existing class */
const char* theViewId, /**< (I) The unique id of a view in the specified class */
int theAttributeId, /**< (I) The id of the attribute to set the property in */
const char* thePropertyName, /**< (I) The id of the property to ask. Possible values:
see ICS_view_set_attr_property() and additionally
UNCT, LINDEX, SMINDEX, MANDATORY, PROTECTED */
char** thePropertyValue /**< (OF) The value for the property.
Needs to be freed using #MEM_free */
);
/**
Returns all attributes of the given view
*/
extern ICS_API int ICS_view_ask_attributes(
const char* theClassId, /**< (I) The unique id of the class */
const char* theViewId, /**< (I) The View Id */
int* theAttributeCount, /**< (O) The attribute count */
int** theAttributeIds /**< (OF) theAttributeCount the attribute Ids */
);
/*********************************************************************************
**
*/
typedef struct ICS_view_attribute_descriptor_s
{
int id;
char* name;
char* shortName;
int format;
char* unit;
char* defautValue;
char* minValue;
char* maxValue;
char* preConfigOptions;
char* configOptions;
char* postConfigOptions;
int flags;
char* userData1;
char* userData2;
}ICS_view_attribute_descriptor_t, *ICS_view_attribute_descriptor_p_t;
/*********************************************************************************
**
*/
typedef struct ICS_view_descriptor_s
{
char* classId;
char* viewId;
char* unitSystem;
int type;
char* name;
int options;
char* userData1;
char* userData2;
int attributeCount;
ICS_view_attribute_descriptor_p_t attributes;
} ICS_view_descriptor_t, *ICS_view_descriptor_p_t;
/**
Returns the most important information about a view and its attributes
theUnitSystem: Possible values are "", "metric" and "non-metric"
If "non-metric" is specified for a class that supports both unit systems the non-metric values are returned.
Otherwise the metric values are returned.
If the class is either metric or non-metric theUnitSystem is ignored.
theUserMode: if true the display names of the units will be returned.
*/
extern ICS_API int ICS_view_describe(
const char* theClassId, /**< (I) The unique id of the class */
const char* theViewId, /**< (I) The View Id */
const char* theUnitSystem, /**< (I) Values can be "", "metric" and "non-metric" <br>
If "non-metric" is specified for a class that supports both unit systems the non-metric values are returned.<br>
Otherwise the metric values are returned.<br>
If the class is either metric or non-metric theUnitSystem is ignored.*/
logical theUserMode, /**< (I) If true, the display names of the units will be returned*/
ICS_view_descriptor_p_t *theViewDescriptor /**< (OF) The View Descriptor */
);
/**
Free up the memory for the given descriptor.
*/
extern ICS_API void ICS_view_descriptor_free(
ICS_view_descriptor_p_t theViewDescriptor /**< (I) The View Descriptor */
);
/**
If theViewTag is a valid view, returns the id of the view
in the following form: cid::sid
*/
extern ICS_API int ICS_view_ask_id(
tag_t theViewTag, /**< (I) The tag of the View */
char** theViewId /**< (OF) The Id of the View */
);
/**
If theViewId (cid::sid) is a valid view, returns the POM tag of the view
*/
extern ICS_API int ICS_view_ask_tag(
const char* theViewId, /**< (I) The Id of the View */
tag_t* theViewTag /**< (O) The tag of the View */
);
/**
Returns the types and tags of all documents according to the dataset of the given view
The following parameters accept NULL pointer to indicate that this parameter should not be returned:
theDocumentCount, theDocumentTypes, theDocumentTags
*/
extern ICS_API int ICS_view_ask_documents(
const char* theViewId, /**< (I) The unique id of an existing view */
int* theDocumentCount, /**< (O) The number of named references */
char*** theDocumentTypes, /**< (OF) theDocumentCount The reference names of the documents */
tag_t** theDocumentTags /**< (OF) theDocumentCount The tags of the documents */
);
/**
Import a document for this view. An existing image will be overwritten.
A document can be the view image or icon or any other type of document
*/
extern ICS_API int ICS_view_import_document(
const char* theViewId, /**< (I) The unique id of an existing view */
const char* theDocumentType, /**< (I) Possible values are: <br>
Image <br>
Icon */
const char* theFileName /**< (I) The name of the file to be imported */
);
/**
Exports all documents of the given type attached to this class
*/
extern ICS_API int ICS_view_export_document(
const char* theViewId, /**< (I) The unique id of an existing view */
const char* theDocumentType, /**< (I) For possible values see ICS_view_import_document() */
const char* theOutputDirectory, /**< (I) The directory name to put the files into */
logical overwriteExistingFiles, /**< (I) */
int* theFileCount, /**< (O) The number of files exported */
char*** theFileNames /**< (OF) theFileCount The names of the files put into theOutputDirectory */
);
/**
Removes all images assigned to this view
*/
extern ICS_API int ICS_view_remove_document(
const char* theViewId, /**< (I) The unique id of an existing view */
const char* theDocumentType /**< (I) For possible values see ICS_view_import_document() */
);
/**
Search for views using specified query.
The input to all output parameter except theCount can be NULL to indicate
that the output should not be returned.
*/
extern ICS_API int ICS_view_search( const char* theQuery, /**< (I) the query: (unct) (op) (value), e.g. "-600 = classid" *
Supported values for unct are:
<ul><li> -600 class id
<li> -607 view name
<li> -608 short name
<li> -612 user data 1
<li> -613 user data 2
<li> 8 attribute id
<li> 3 attribute name </ul> */
int theSortAttrId, /**< (I) specifies the attribute to be used for sorting the result */
int theOptions, /**< (I) options, currently not supported */
int *theCount, /**< (O) the number of views matching theQuery */
tag_t **theTags, /**< (OF) theCount the tags of the found views */
char* **theTypes, /**< (OF) theCount the types of the views. <br>
possible values are "subclass", "default",
"user", "group", "role", "graphics_mapping" */
char* **theClassIds, /**< (OF) theCount the class ids */
char* **theViewIds, /**< (OF) theCount the view ids */
char* **theNames, /**< (OF) theCount the names of the views */
int **theInstanceCounts /**< (OF) theCount the number of instances */
);
/**
** Copy a view to another parent class.
*/
extern ICS_API int ICS_view_copy(
const char *theClass, /**< (I) The ID of the Classification class of the view to be copied */
const char *theView, /**< (I) The ID of the Classification view to be copied */
const char *theNewParent, /**< (I) The ID of the Classification class under which the copy of theView is created */
const char *theNewId, /**< (I) The ID of the Classification view that is created as a copy of theView. */
ICS_view_type_e theNewType, /**< (I) Defines how the created view is used: <br>
#VIEW_type_subclass - legacy type can only be added to
abstract classes with no further class children <br>
#VIEW_type_defaultView - optionaly,
will be autogenerated if needed and does not exist <br>
The id is fixed: "defaultView" <br>
#VIEW_type_user, #VIEW_type_group, #VIEW_type_role <br>
For these views, theViewId needs to be set to the user, group or role Id. */
int theOptions /**< (I) options - valid values are:
<ul>
<li> #ICS_ADD_ATTRBIUTES_FROM_PARENT - all attributes of theNewParent will be
added to the copy of the view
<li> #ICS_DRY_RUN - only executes the checks but does not copy the view
</ul> */
);
/** @} */
/**
@name Classification Object (ICO) related Functions
<b>Common Return Values:</b>
#ICS_invalid_ico - The provided ICO tag is invalid
@{
*/
/**
Create a new ICO
*/
extern ICS_API int ICS_ico_create(
const char* theICOId, /**< (I) The id of the ICO. Will be ignored i theClassifiedObjectTag is != NULLTAG */
tag_t theClassifiedObjectTag, /**< (I) The WSO to classify with the new ICO*/
const char* theClassId, /**< (I) The id of the class the ICo should be stored in*/
int theAttributeCount, /**< (I) The number of attribute id/values given*/
int* theAttributeId, /**< (I) The attribute ids*/
const char** theAttributeValues, /**< (I) The values for the listed Attributes */
tag_t* theICOTag /**< (O) The Tag of the created ICO */
);
extern ICS_API int ICS_ico_create2(
const char* theICOId, /**< (I) The id of the ICO. Will be ignored i theClassifiedObjectTag is != NULLTAG */
tag_t theClassifiedObjectTag, /**< (I) The WSO to classify with the new ICO*/
const char* theClassId, /**< (I) The id of the class the ICo should be stored in*/
int theAttributeCount, /**< (I) The number of attribute id/values given*/
int* theAttributeId, /**< (I) The attribute ids*/
int* theAttributeValCounts, /**< (I) The attribute value count */
const char*** theAttributeValues, /**< (I) The values for the listed Attributes */
tag_t* theICOTag /**< (O) The Tag of the created ICO */
);
/**
Remove the ICO identified by theICOTag from the database
*/
extern ICS_API int ICS_ico_remove( tag_t theICOTag /* (I) The tag of the ICO to be removed */
);
/**
@deprecated #ICS_ico_find deprecated in Teamcenter 11.2.2. Use #ICS_ico_search instead.
Find the ICO identified by its id and/or classified object tag
e.g. <br>
1. find ICO with a given ID ( ignore WSO tag ) <br>
ICS_ico_find( id, wsoTag, 0, &count, &icoTags ); <br>
2. Find ICO for given WSO tag ( ignoring id ) <br>
ICS_ico_find( "", wsoTag, 1, &count, &icoTags ); <br>
3. Find ICO with given id where WSO is null tag <br>
ICS_ico_find( id, NULLTAG, 1, &count, &icoTags );
*/
TC_DEPRECATED("11.2.2","ICS_ico_find","ICS_ico_search")
extern ICS_API int ICS_ico_find(
const char* theICOId, /**< (I) The id of the ICO */
tag_t theClassifiedObjectTag, /**< (I) The classified WSO */
int theOptions, /**< (I) 0 or 1. If 0, then ICO will be searched only using theICOId. The value of theClassifiedObjectTag will be ignored, even if specified.<br>
If 1, the ICOs will be searched using theICOId and theClassifiedObjectTag both */
int* theCount, /**< (O) No of ICOs found */
tag_t** theICOTags /**< (OF) theCount Tags of ICOs found */
);
/**
Executes the POM enquiry resulting from the theAttrIds and theAttrExpr.
theOptions affects the search, the following values can be used: #ICS_SEARCH_THIS_CLASS_ONLY,
#ICS_SEARCH_CASE_INSENSITIVE, #ICS_SEARCH_ORDER_BY_ID and/or ICS_SEARCH_IN_BOTH_UNIT_SYSTEMS.
The out parameters accept NULL pointer to indicate that this parameter should not be returned.
If not specified by theOptions, the out parameters are sorted by the values for the given
search attributes. If no search attributes are gives, then they are sorted by theICOIds.
@note For more compilcated queries use the ICS_enquiry_ functions (ics_enquiry.h)
*/
extern ICS_API int ICS_ico_search(
int theExprCount, /**< (I) The number of attributss */
int* theAttrIds, /**< (I) Array of attributes to search for.
Supported values for internal Attribute ID are:
<ul>
<li>@c #ICS_UNCT_INSTANCE_WSO_TYPE - Workspace Object Type
<li>@c #ICS_UNCT_INSTANCE_ID - Classification Object (ICO) ID
<li>@c #ICS_UNCT_CID - Class CID
<li>@c #ICS_UNCT_INSTANCE_SID_PUID - View UID
<li>@c #ICS_UNCT_INSTANCE_CID_PUID - Class UID
<li>@c #ICS_UNCT_INSTANCE_ICO_TYPE - Classification Object (ICO) Type
<li>@c #ICS_UNCT_INSTANCE_REVISION_RULE - Revision Rule. This should be used in combination with class ID.<br/>
For example: ICS_ico_search( 2, { -600, -726 }, { "ClassID", "Latest Working" }, theOptions, theCount, theICOTags, theICOUIDs, theICOIds, theClassIds, theWSOTags, theWSOUIDs )
<li>@c #ICS_UNCT_INSTANCE_READ_ACCESS - Read Access. This should be used in combination with class ID.<br/>
For example: ICS_ico_search( 2, { -600, -727 }, { "ClassID", "" }, theOptions, theCount, theICOTags, theICOUIDs, theICOIds, theClassIds, theWSOTags, theWSOUIDs )
</ul>
@note You cannot use an attribute search without a class ID.<br/>
Usage:ICS_ico_search( 2, { -600, attributeID }, { "ClassID", "attributValue" }, theOptions, theCount, theICOTags, theICOUIDs, theICOIds, theClassIds, theWSOTags, theWSOUIDs )
*/
char** theAttrExpr, /**< (I) A search string for each attribute in theAttrIds */
int theOptions, /**< (I) The enquiry options: <br>
#ICS_SEARCH_THIS_CLASS_ONLY to limit search results to
the class with the unique ID, theClassId. <br>
#ICS_SEARCH_CASE_INSENSITIVE to search without case sensitivity. <br>
#ICS_SEARCH_ORDER_BY_ID to sort the result by object ids. <br>
#ICS_SEARCH_IN_BOTH_UNIT_SYSTEMS to search in both unit systems. If this option is used then you need to specify the active unitsystem
-630 = 0/1 (metric/non-metric) as theAttrIds & theAttrExpr. This determines in which unit system the returned attribute values are displayed*/
int* theCount, /**< (O) The number of found ICOs. */
tag_t** theICOTags, /**< (OF) The tags of the found ICOs. */
char*** theICOUIDs, /**< (OF) The UIDs of the found ICOs. */
char*** theICOIds, /**< (OF) The IDs of the found ICOs. */
char*** theClassIds, /**< (OF) The Class IDs of the found ICOs. */
tag_t** theWSOTags, /**< (OF) The workspace object tags of the found ICOs. */
char*** theWSOUIDs /**< (OF) The workspace object UIDs of the found ICOs. */
);
/**
Executes the POM enquiry resulting from the theAttrIds and theAttrExpr.
theOptions affects the search, the following values can be used: #ICS_SEARCH_THIS_CLASS_ONLY,
#ICS_SEARCH_CASE_INSENSITIVE and/or #ICS_SEARCH_ORDER_BY_ID.
The out parameters accept NULL pointer to indicate that this parameter should not be returned.
If not specified by theOptions, the out parameters are sorted by the values for the given
search attributes. If no search attributes are gives, then they are sorted by theICOIds.
@note For more compilcated queries use the ICS_enquiry_ functions (ics_enquiry.h)
*/
extern ICS_API int ICS_ico_search_count(
int theExprCount, /**< (I) The number of attributss */
int *theAttrIds, /**< (I) theExprCount Array of attributes to search for */
char* *theAttrExpr, /**< (I) theExprCount A search string for each attribute in theAttrIds */
int theOptions, /**< (I) The enquiry options: <br>
#ICS_SEARCH_THIS_CLASS_ONLY to limit search results to
the class with the unique ID, theClassId. <br>
#ICS_SEARCH_CASE_INSENSITIVE to search without case sensitivity. <br>
#ICS_SEARCH_ORDER_BY_ID to sort the result by object ids. */
int *theCount /**< (O) The number of found ICOs. */
);
/**
Returns the tag of the worksoace object the ICO classifies
*/
extern ICS_API int ICS_ico_ask_classified_object(
tag_t theICOTag, /**< (I) The Tag of the ICO */
tag_t* theClassifiedObject /**< (OF) The Classified WSO */
);
/**
Returns the class id of the class the ICO is stored in
If the ICO is stored in a (legacy) sml-subclass theClassId has the following format:
classid::subclassid
*/
extern ICS_API int ICS_ico_ask_class(
tag_t theICOTag, /**< (I) The Tag of the ICO */
char** theClassId /**< (OF) The Id of the Class */
);
/**
Returns the tag of the class the ICO is stored in
*/
extern ICS_API int ICS_ico_ask_class_tag(
tag_t theICOTag, /**< (I) The Tag of the ICO */
tag_t* theClassTag /**< (O) The tag of the Class */
);
/**
Returns the values of the given attributes
*/
extern ICS_API int ICS_ico_ask_named_attributes(
tag_t theICOTag, /**< (I) The Tag of the ICO */
int theAttributeCount, /**< (I) The attribute count */
int* theAttributeIds, /**< (I) The attributes */
int** theAttributeValCounts, /**< (OF) theAttributeCount The count of attribute values */
char**** theAttributeValues /**< (OF) theAttributeCount The attribute values */
);
/**
Sets all attributes of the given ICO
*/
extern ICS_API int ICS_ico_set_attributes(
tag_t theICOTag, /**< (I) The Tag of the ICO */
int theAttributeCount, /**< (I) The attribute count */
int* theAttributeIds, /**< (I) The attributes */
int* theAttributeValCounts, /**< (I) The count of attribute values */
const char*** theAttributeValues /**< (I) The attribute values */
);
/**
Returns all attributes of the given ICO
@note Only those attributes are retuned which are accessible through the user specific view.
*/
extern ICS_API int ICS_ico_ask_attributes(
tag_t theICOTag, /**< (I) The Tag of the ICO */
int* theAttributeCount, /**< (O) The attribute count */
int** theAttributeIds, /**< (OF) theAttributeCount The attribute Ids */
int** theAttributeValCounts, /**< (OF) theAttributeCount The count of Attribute values */
char**** theAttributeValues /**< (OF) theAttributeCount The attribute values */
);
/**
Returns all attributes with their optimized units ans values of the given ICO
For the attributes that are numeric and optimization flag is turned "on" , optimized units ans values are returned
For other attributes, storage units ans values are returned
@note Only those attributes are retuned which are accessible through the user specific view.
*/
extern ICS_API int ICS_ico_ask_attributes_optimized(
tag_t theICOTag, /**< (I) The Tag of the ICO */
int *theAttributeCount, /**< (O) The attribute count */
int* *theAttributeIds, /**< (OF) theAttributeCount The attribute Ids */
char** *theAttributeNames, /**< (OF) theAttributeCount The attribute names */
int* *theAttributeValCounts, /**< (OF) theAttributeCount The attribute value count */
char*** *theAttributeOptimizedValues, /**< (OF) theAttributeCount The attribute values */
char*** *theAttributeOptimizedUnits /**< (OF) theAttributeCount The attribute units */
);
/**
Returns all attributes of the given ICO without using a view
*/
extern ICS_API int ICS_ico_ask_all_attributes(
tag_t theICOTag, /**< (I) The Tag of the ICO */
int* theAttributeCount, /**< (O) The attribute count */
int** theAttributeIds, /**< (OF) theAttributeCount The attribute Ids */
int** theAttributeValCounts, /**< (OF) theAttributeCount The attribute value count */
char**** theAttributeValues /**< (OF) theAttributeCount The attribute values */
);
/**
Appropriately frees the memory allocated for the parameters theAttributeIds, theAttributeValCounts, theAttributeValues.
This function is convenient to free memory from the variables returned by functions like #ICS_ico_ask_all_attributes.
This function returns:
<ul>
<li>#ITK_ok
</ul>
*/
extern ICS_API int ICS_ico_free_attributes(
int theAttributeCount, /**< (I) The attribute count */
int* theAttributeIds, /**< (I) The attributes*/
int* theAttributeValCounts, /**< (I) The attribute value count */
char*** theAttributeValues /**< (I) The attribute values */
);
/**
Search the distinct list of values in the given context for theAttributeId
The function will search for all ICOs using the given criteria (theAttrIds/theAttrExpr)
*/
extern ICS_API int ICS_ico_find_values(
int theExprCount, /**< (I) The count of expressions */
int *theAttrIds, /**< (I) The attribute Ids */
char* *theAttrExpr, /**< (I) Array of expressions */
int theOptions, /**< (I) Placeholder for future use */
int theAttributeId, /**< (I) The attribute Id for which the values are being returned */
int *theCount, /**< (O) the value count */
char* **theValues, /**< (OF) theCount The values */
int **theValueCounts /**< (OF) theCount The count of values */
);
/**
Search the distinct list of values in the given context for theAttributeId
The function will search for all ICOs using the given criteria (theAttrIds/theAttrExpr)
In addition to ICS_ico_find_values() this function returns a display value
*/
extern ICS_API int ICS_ico_find_values2(
int theExprCount, /**< (I) The count of expressions */
int *theAttrIds, /**< (I) The attribute Ids */
char* *theAttrExpr, /**< (I) Array of expressions*/
int theOptions, /**< (I) */
int theAttributeId, /**< (I) */
int *theCount, /**< (O) The value count */
char* **theValues, /**< (OF) theCount The values */
int **theValueCounts, /**< (OF) theCount The value count */
char* **theDisplayValues /**< (OF) theCount The display values */
);
/**
moves ICO to the given new class
*/
extern ICS_API int ICS_ico_move( int theCount, /**< (I) The count */
const tag_t *theICOTags, /**< (I) The tags of the ICO */
const char *theNewClass, /**< (I) The destination class */
int *theErrorCount, /**< (O) The count of errors*/
tag_t **theUnsuccessfulICOTags, /**< (OF) theErrorCount The tags of ICOs failed to move */
int **theErrorCodes, /**< (OF) theErrorCount The error codes */
char ***theErrorMessages /**< (OF) theErrorCount The error messages */
);
/*===+++======================================================================== */
/**
Checks if the provided Classification Object (ICO) classifies an item.
If yes, it modifies the internal data structures such that after completion
the ICO will classify the item's latest revision instead of the item itself.
<b>Return values:</b>
#ITK_ok - The ICO does not classify an item,
or it was successfully reassigned to the item's latest revision
*/
extern ICS_API int ICS_ico_reassign_to_rev( tag_t theICOTag /**< (I) The tag of the ICO to be reassociated */
);
/**
Map the source ICO identified by theSourceICOTag to the new target item and
ICO identified by theTargetItemID. The target ICO will be created in the
Classification class having theTargetClassID.
*/
extern ICS_API int ICS_ico_map( tag_t theSourceICOTag, /**< (I) The tag of the ICO to be mapped */
char * theTargetItemID, /**< (I) The ID of the new target item */
char * theTargetItemName, /**< (I) The new target item's name */
char * theTargetItemTypeName, /**< (I) The name of the target item type */
char * theTargetItemRevID, /**< (I) The ID of the new item Revision */
char * theTargetItemDescription, /**< (I) The new target item's decription */
char * theTargetClassID, /**< (I) The ID of the class to map to */
int theOptions, /**< (I) Options to the mapping process */
tag_t * theNewICOTag /**< (O) The new target ICO */
);
/**
@deprecated #ICS_class_ask_mapping_sources deprecated in Teamcenter 12.2.
<br/>Internal Classification Objects (ICO) are now mapped based on ICO IDs. Hence retrieving mapping sources functionality will not be based on class ID.
Determine the source classes that have been mapped to the given target class.
*/
TC_DEPRECATED_NO_REPLACEMENT("12.2","ICS_class_ask_mapping_sources")
extern ICS_API int ICS_class_ask_mapping_sources( char * theTargetClassID, /**< (I) ID of a class to map ICOs to */
int theMappingViewType, /**< (I) Type of mappings to return */
int * theSourceClassCount, /**< (O) Count of mapping source classes */
char *** theSourceClassIDs, /**< (OF) theSourceClassCount The Ids of source class */
char *** theSourceClassNames /**< (OF) theSourceClassCount The names of source Class */
);
/**
Determine the target classes that the given source class has been mapped to.
*/
extern ICS_API int ICS_class_ask_mapping_targets( char * theSourceClassID, /**< (I) ID of the class to map ICOs from */
int theMappingViewType, /**< (I) Type of mappings to return */
int * theTargetClassCount, /**< (O) Count of mapping target classes */
char *** theTargetClassIDs, /**< (OF) theTargetClassCount The Ids of target class */
char *** theTargetClassNames /**< (OF) theTargetClassCount The names of target Class */
);
/**
Define a mapping between the given source and target class,
as well as the attribute mappings to the target class? attributes.
*/
extern ICS_API int ICS_class_create_mapping( char * theSourceClassID, /**< (I) ID of class to map ICOs from */
char * theTargetClassID, /**< (I) ID of class to map ICOs to */
int theMappingViewType, /**< (I) Mapping view type to create */
int theAttributeCount, /**< (I) Count of mapped attributes */
int * theAttributeIds, /**< (I) theAttributeCount The attribute Ids */
char ** theAttributeMappings /**< (I) theAttributeCount The attribute mappings */
);
/**
If a mapping exists between the given source and target class, return the
target class? attributes as well as their corresponding attribute mappings.
*/
extern ICS_API int ICS_class_describe_mapping( char * theSourceClassID, /**< (I) ID of class to map ICOs from */
char * theTargetClassID, /**< (I) ID of class to map ICOs to */
int theMappingViewType, /**< (I) Requested mapping view type */
int * theAttributeCount, /**< (O) Count of mapped attributes */
int ** theAttributeIds, /**< (OF) theAttributeCount The attribute Ids */
char *** theAttributeMappings /**< (OF) theAttributeCount The attribute mappings */
);
/**
Delete the mapping between the given source and target class, if one exists.
*/
extern ICS_API int ICS_class_delete_mapping( char * theSourceClassID, /**< (I) ID of the mapping?s source class */
char * theTargetClassID, /**< (I) ID of the mapping?s target class */
int theMappingViewType /**< (I) Type of mapping view to delete */
);
/**
Creates a new Item in inClass.
The function is called by inClass Server before the save action of an ICO.
The Classification Server provides the necessary Data as input (arrays) parameter for the call.
These are the Classification Class ID and the attributes from the Dialog appearing
when pressing the Save Button if the ICS_create_wso_on_save is set to "yes".
The first thing to be done by the interface is to generate the attributes defined by the mapping preferences.
Then it must check the validity and existence of the attributes according to the preferences.
If all checks are done and don't result in a roll back, the workspace object (Item/Item Revision) will be created.
Once the WSO is created the relevant Seed Data will be copied and related to the WSO according to the Seed Part.
*/
extern ICS_API int ICS_ico_create_wso(
const char* theClassId, /**< (I) The unique Id of the Class */
int theAttrCount, /**< (I) The count of the attributes */
int* theAttrIds, /**< (I) The attribute Ids */
char** theAttrValues, /**< (I) The attribute values */
int theOptions, /**< (I) Placeholder for future use */
tag_t *theWSO /**< (O) Tag of the WSO */
);
/**
Returns the tag of the ICOs whare the given ICO is used
*/
extern ICS_API int ICS_ico_where_used(
const char* theICOId, /**< (I) The id of the ICO to find where used */
int *theCount, /**< (O) The number of references found */
tag_t* *theTagsWhereUsed /**< (OF) theCount The list of ICO where the ICO is used */
);
/** @} */
/**
@name Attribute Dictionary related functions
<b>Common return values:</b>
#ICS_err_attribute_does_not_exist <br>
#ICS_err_attribute_not_unique <br>
#ICS_err_invalid_parameter <br>
#ICS_err_invalid_property <br>
#ICS_err_invalid_value <br>
#ICS_err_missing_parameter <br>
#ICS_err_object_referenced <br>
#ICS_err_property_readonly <br>
#ICS_invalid_attribute_id
@{
*/
/**
Creates a new attribute with the given name and format.
*/
extern ICS_API int ICS_attribute_create(
int theAttrId, /**< (I) Unique identifier of the attribute. A value between -999 to 999 is not possible. */
const char* theAttrName, /**< (I) Optional name of the attribute */
int theAttrFormat /**< (I) The format of the attribute. For additional information about the
attribute format definition refer #ICS_describe_format.
*/
);
/**
ICS_attribute_creates a new unique attribute with the given name and format.
*/
extern ICS_API int ICS_attribute_create_unique( const char* theAttrName, /**< (I) The Attribute Name */
int theAttrFormat, /**< (I) The Format (!= 0) for the attribute */
int *theAttrId /**< (O) the newly created unique attribute id (>= 1000) */
);
/**
Removes the attribute identified by theAttrId permanently from the database
*/
extern ICS_API int ICS_attribute_remove(
int theAttrId /**< (I) The unique identifier of the attribute */
);
/**
Sets the value for the specified property of an existing attribute
*/
extern ICS_API int ICS_attribute_set_property(
int theAttrId, /**< (I) The unique identifier of the attribute */
const char* thePropertyName, /**< (I) The specified property. Possible values are: <br>
NAME <br>
SHORT_NAME <br>
REFERENCE <br>
UNIT1 <br>
UNIT2 <br>
FLAGS <br>
USER1 <br>
USER2 <br>
DEFAULT_VALUE <br>
DEFAULT_VALUE2 <br>
DESCRIPTION */
const char* thePropertyValue /**< (I) The value for the specified property */
);
/**
Returns the value for the specified property of an existing attribute
*/
extern ICS_API int ICS_attribute_ask_property(
int theAttrId, /**< (I) The unique identifier of the attribute */
const char* thePropertyName, /**< (I) The specified property.
For possible values see #ICS_attribute_set_property and additionally: <br>
ID <br>
FORMAT1 <br>
FORMAT2 <br>
COMMENT */
char** thePropertyValue /**< (OF) The value of the given property */
);
/**
Returns the count and the values of the shared sites
*/
extern ICS_API int ICS_attribute_ask_shared_sites(
int theAttrId, /**< (I) The unique identifier of the attribute */
int* theSiteCount, /**< (O) The number of shared sites */
char*** theSharedSites /**< (OF) theSiteCount The shared sites.
Need to be freed using #MEM_free */
);
/**
Returns all classes where this attribute is used
*/
extern ICS_API int ICS_attribute_ask_references(
int theAttrId, /**< (I) The unique identifier of the attribute */
int* theRefCount, /**< (O) The number of classes where this attribute is used */
char*** theRefs /**< (OF) theRefCount The classes where this attribute is used */
);
/**
Returns the tag for the given Attribute Id
*/
extern ICS_API int ICS_attribute_ask_tag(
int theAttrId, /**< (I) The Attribute Id */
tag_t* theTag /**< (O) The Tag */
);
/**
Returns the Attribute Id for the given tag
*/
extern ICS_API int ICS_attribute_ask_id(
tag_t theTag, /**< (I) The Tag */
int* theAttrId /**< (O) The Attribute Id */
);
/**
Call this function to define an attribute - given by its attribute ID in the Classification dictionary
- as reference attribute. <br>
Returns ITK_ok or different kinds of errors, for example trying to set a Reference Attribute type that
does not exist.
@note Use 0 as theReferenceAttributeType to define the attribute to be a "normal" attribute (non
reference attribute).
*/
int ICS_API ICS_attribute_set_as_reference(
int theAttributeID, /**< (I) Attribute ID of the attribute that you want to define as
reference attribute. The parameter must specify an
existing attribute ID. */
int theReferenceAttributeType, /**< (I) One of the following values: <br>
0 - non reference attribute (in this case the subsequent
parameters are not used) <br>
#ICS_REFATTR_CLASSIFIED_OBJECT - a property or attribute of the
classified object <br>
#ICS_REFATTR_MASTERFORM - a property or attribute of the
Masterform of the classified item or item revision <br>
#ICS_REFATTR_RELATED_OBJECT - a property or attribute of an object
that is related (via an IMAN Relation) to the classified
object <br>
#ICS_REFATTR_ICO - an attribute of a different ICO */
int theFlags, /**< (I) Set to 0 or any combination of: <br>
#ICS_REFATTR_PROPERTY: set this flag if you want to define an IMAN
property - do not set it if you want to define a POM
Attribute <br>
#ICS_REFATTR_ITEM_ATTR: set this flag if you want to define a
reference attribute of an item. This means that if the
classified object is an item revision the reference
attribute value will be read from the item (or its
masterform / an object that is related to the item) of the
classified item revision. */
const char *theClassName, /**< (I) Depending on theReferenceAttributeType specify the
following value:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Classification class where
the referenced ICO is stored (parameter must not be
NULL).
<li> #ICS_REFATTR_MASTERFORM: IMAN Type of the classified object /
its item if #ICS_REFATTR_ITEM_ATTR is set in the flags (the
parameter may be NULL to specify that different IMAN
Types are allowed)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: POM Class / IMAN Type of the
classified object (its item if #ICS_REFATTR_ITEM_ATTR is set
in the flags) <br>
(the parameter may be NULL to specify that different
IMAN Types are allowed)
<li> #ICS_REFATTR_RELATED_OBJECT: POM Class / IMAN Type of the
related object (the parameter must not be NULL)
</ul>
(The second alternatives are valid if #ICS_REFATTR_PROPERTY is
specified in parameter theFlags) */
const char *theAttrName, /**< (I) This parameter must not be NULL. <br>
Depending on theReferenceAttributeType specify the
following value:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: name of the POM Attribute /
IMAN Property where the value of the reference
attribute will be read from
<li> #ICS_REFATTR_MASTERFORM: name of the POM Attribute / IMAN
Property where the value of the reference attribute
will be read from (the POM Attribute / IMAN Property
is found in the Masterform of the classified object /
its item)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Attribute ID of the attribute
that will be displayed as "key attribute" of the
referenced ICO
<li> #ICS_REFATTR_RELATED_OBJECT: name of the POM Attribute / IMAN
Property where the value of the reference attribute
will be read from (this POM Attribute / IMAN Property
is found in the related object)
</ul>
(The second alternatives are valid if ICS_PROPERTY is
specified in theFlags) */
const char *theRelationName /**< (I) If theReferenceAttributeType is #ICS_REFATTR_RELATED_OBJECT then
this parameter specifies the name of the IMAN Relation
with which the related object is attached to the classified object (may be
NULL to specify that any relation is possible). <br>
For all other Reference Attribute types this parameter is
not used. */
);
/**
Call this function to ask the reference attribute properties of an attribute given by its attribute ID
in the Classification dictionary. <br>
Returns ICS_invalid_attribute_id if no attribute with the given attribute ID exists.
*/
int ICS_API ICS_attribute_ask_reference_props(
int theAttributeID, /**< (I) Attribute ID of the attribute from which you want to read the
reference attribute definition. The parameter must specify an
existing attribute ID. */
int *theReferenceAttributeType, /**< (O) One of the following values:
<ul>
<li> 0 - normal attribute
<li> #ICS_REFATTR_CLASSIFIED_OBJECT - a property or attribute of the
classified object
<li> #ICS_REFATTR_MASTERFORM - a property or attribute of the
Masterform of the classified item or item revision
<li> #ICS_REFATTR_RELATED_OBJECT - a property or attribute of an
object that is related (via an IMAN Relation) to the
classified object
<li> #ICS_REFATTR_ICO - an attribute of a different ICO
</ul> */
int *theFlags, /**< (O) 0 or a combination of: <br>
#ICS_REFATTR_PROPERTY: this flag is set if an IMAN property is
defined - if it is not set then a POM attribute is defined <br>
#ICS_REFATTR_ITEM_ATTR: this flag is set if a reference attribute of
an item is defined. This means that if the classified object
is an item revision the reference attribute value will be
read from the item (or its masterform / an object that is
related to the item) of the classified item revision. */
char **theClassName, /**< (OF) Depending on theReferenceAttributeType this parameter
specifies one the following values:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Classification class where the
referenced ICO is stored.
<li> #ICS_REFATTR_MASTERFORM: IMAN Type of the classified object /
its item if #ICS_REFATTR_ITEM_ATTR is set in the flags (the
parameter may be NULL to specify that different IMAN
Types are allowed)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: POM Class / IMAN Type of the
classified object / its item if ICS_ITEM_ATTR is set in
the flags (the parameter may be NULL to specify that
different IMAN Types are allowed)
<li> #ICS_REFATTR_RELATED_OBJECT: POM Class / IMAN Type of the
related object
</ul>
(The second alternatives are valid if #ICS_REFATTR_PROPERTY is set
in theFlags) */
char **theAttrName, /**< (OF) Depending on theReferenceAttributeType this parameter
specifies the following value:
<ul>
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: name of the POM Attribute /
IMAN Property where the value of the reference
attribute will be read from
<li> #ICS_REFATTR_MASTERFORM: name of the POM Attribute / IMAN
Property where the value of the reference attribute
will be read from (the POM Attribute / IMAN Property is
found in the Masterform of the classified object / its
item)
<li> #ICS_REFATTR_CLASSIFIED_OBJECT: Attribute ID of the attribute
that will be displayed as "key attribute" of the
referenced ICO
<li> #ICS_REFATTR_RELATED_OBJECT: name of the POM Attribute / IMAN
Property where the value of the reference attribute
will be read from (this POM Attribute / IMAN Property
is found in the related object)
</ul>
(The second alternatives are valid if #ICS_REFATTR_PROPERTY is set
in theFlags) */
char **theRelationName /**< (OF) If theReferenceAttributeType is #ICS_REFATTR_RELATED_OBJECT: name of
the IMAN Relation with which the related object is attached
to the classified object (may be NULL to specify that any
relation is possible). <br>
For all other Reference Attribute types this parameter is
set to NULL. */
);
/**
This function returns all dictionary attributes that match the
given search criteria values. <br>
The input to all output parameter except theCount can be NULL to indicate
that the output should not be returned.
*/
extern ICS_API int ICS_attribute_search( const char* theQuery, /**< (I) the query: (unct) (op) (value), e.g. "-401 = attributename".
Supported values for unct are:
<ul><li> -400 Attribute ID
<li> -401 Name
<li> -402 Short Name
<li> -403 Default Annotation
<li> -404 Format 1
<li> -405 Unit 1
<li> -406 Format 2
<li> -407 Unit 2 </ul> */
int theSortAttrID, /**< (I) specifies the ID to be used for sorting the result,
Possible value is one of the supported values for unct in theQuery */
int theOptions, /**< (I) search options, supported is #ICS_SEARCH_CASE_INSENSITIVE to search without case sensitivity,
when searching for IDs -401, -402, -403, -405 and -407 */
int *theCount, /**< (O) Number of attributes found */
tag_t **theTags, /**< (OF) theCount Tags of the attributes found */
int **theIDs, /**< (OF) theCount Ids of the attributes */
char* **theNames /**< (OF) theCount Names of the attributes */
);
/**
This function convert the attribute value from one unit to another unit.
*/
extern ICS_API int ICS_attribute_convert_attribute_values( const char* theInputUnit, /**< (I) The input unit */
const char* theInputValue, /**< (I) The input value */
const char* theOutputUnit, /**< (I) The output unit */
int theOutputAttributeFormat, /**< (I) The attribute format */
char** theOutputValue /**< (OF)The output value */
);
/** @} */
/**
@name KeyLOV functions
<b>Common return values:</b>
#ICS_err_invalid_keylov_id <br>
#ICS_err_kelov_does_not_exist <br>
#ICS_err_keylov_key_not_unique <br>
#ICS_err_keylov_key_unknown <br>
#ICS_err_object_referenced
@{
*/
/**
Creates a new KeyLOV with the given parameters
*/
extern ICS_API int ICS_keylov_create(
const char* theKeyLOVId, /**< (I) Unique identifier of the KeyLOV
@note Even if theKeyLOVId is of type char*,
only id's representing a negative integer can be used
as definition from an attribute. */
const char* theKeyLOVName, /**< (I) Optional name of the KeyLOV */
int theOptions, /**< (I) Not used in V8.1.1 and below */
int theCount, /**< (I) The count of the entries ( key + value ) */
char** theKeys, /**< (I) Required list of keys
The keys will be stored in the ICO */
char** theValues /**< (I) Optional corresponding list of values. The Values are only used for display.
@note If a list of values are passed in,
it must contain one value for each key which might be "" but not NULL */
);
/**
Creates a new KeyLOV with a unique id and with the given parameters
For the description of the parameter please refer ICS_keylov_create()
*/
extern ICS_API int ICS_keylov_create_unique(
const char *theKeyLOVName, /**< (I) Key LOV Name */
int theOptions, /**< (I) The flags */
int theCount, /**< (I) The count */
char **theKeys, /**< (I) The Keys for the Key LOV */
char **theValues, /**< (I) The Values for the Key LOV */
char* *theNewId /**< (OF) The Unique Id of the Key LOV created */
);
/**
Removes the KeyLOV definition identified by theKeyLOVId permanently from the database
*/
extern ICS_API int ICS_keylov_remove(
const char* theKeyLOVId /**< (I) The unique identifier of the KeyLOV */
);
/**
Adds keys and values to a KeyLOV
*/
extern ICS_API int ICS_keylov_insert_entries(
const char* theKeyLOVId, /**< (I) The unique identifier of the KeyLOV */
const char* theInsertKey, /**< (I) In front of this existing key the following keys are inserted.
If theInsertKey = NULL or "" then the inserted keys are added
at the end of the existing keys. */
int theCount, /**< (I) The number of keys to be added to the KeyLOV */
char** theKeys, /**< (I) The KeyLOV keys to be added to the KeyLOV */
char** theValues /**< (I) The values for the added keys */
);
/**
Removes keys and values from a KeyLOV
*/
extern ICS_API int ICS_keylov_remove_entries(
const char* theKeyLOVId, /**< (I) The unique identifier of the KeyLOV */
int theCount, /**< (I) The number of keys to be removed */
char** theKeys /**< (I) The keys to be removed */
);
/**
Sets the hide key option for the KeyLOV identified by theKeyLOVId
To enable the setting set theOptions to 1. To disable the setting set it to 0.
Return value: ICS_err_kelov_does_not_exist if the KeyLOV does not exist
*/
extern ICS_API int ICS_keylov_set_options(
const char* theKeyLOVId, /**< (I) The Key LOV Id*/
int theOptions /**< (I) */
);
/**
Sets the value for the specified property of an existing key LOV.
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_NO_INSTANCE_FOUND if the key LOV does not exist.
<li>#ICS_err_invalid_property if the property does not exist.
</ul>
*/
extern ICS_API int ICS_keylov_set_property(
const char* theKeyLOVId, /**< (I) The Key LOV ID */
const char* thePropertyName, /**< (I) The specified property. Valid values are:
<ul>
<li>NAME: any value is allowed and taken as the name of the key LOV.
<li>HIDEKEYS: any value other than "true" and "1" for @p thePropertyValue will result in not setting the HIDEKEYS flag.
</ul> */
const char* thePropertyValue /**< (I) The value for the specified property. */
);
/**
Retrieves the value for the specified property of an existing key LOV.
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_NO_INSTANCE_FOUND if the key LOV does not exist.
<li>#ICS_err_invalid_property if the property does not exist.
</ul>
*/
extern ICS_API int ICS_keylov_ask_property(
const char* theKeyLOVId, /**< (I) The Key LOV ID */
const char* thePropertyName, /**< (I) The specified property. Valid values are "NAME", "HIDEKEYS" and "ID". */
char** thePropertyValue /**< (OF) The value of the given property */
);
/**
Overwrites all existing values of the KeyLOV with the provided ones.
@returns
<ul>
<li>#ITK_ok on success
<li>#ICS_err_kelov_does_not_exist if the KeyLOV does not exist
<li>#SML_ERR_KEY_NOT_UNIQUE if @p theKeys contains a 0 pointer or empty string
</ul>
*/
extern ICS_API int ICS_keylov_set_entries(
const char* theKeyLOVId, /**< (I) The unique identifier of the KeyLOV */
const unsigned int theCount, /**< (I) The number of keys to be added to the KeyLOV */
const char **theKeys, /**< (I) theCount The KeyLOV keys to be set into the KeyLOV */
const char **theValues, /**< (I) theCount The values for the keys to be set
@note If an entry in @p theValues is a 0 pointer, the value will be set to an empty string*/
const logical *theDeprecateStatus /**< (I) theCount The deprecation status corresponding to KeyLOV keys.
@note If no entry is to be deprecated, use a 0 pointer.*/
);
/**
Returns the count and the values of the shared sites
*/
extern ICS_API int ICS_keylov_ask_shared_sites(
const char* theKeyLOVId, /**< (I) The unique identifier of the KeyLOV */
int* theSiteCount, /**< (O) The number of shared sites */
char*** theSharedSites /**< (OF) theSiteCount The shared sites.
Need to be freed using #MEM_free */
);
/**
Returns all attributes Ids which use the KeyLOV identified by theKeyLOVId
*/
extern ICS_API int ICS_keylov_ask_references(
const char* theKeyLOVId, /**< (I) The unique identifier of the KeyLOV */
int* theRefCount, /**< (O) The number of references */
int** theRefs /**< (OF) theRefCount The references */
);
/**
Returns the POM tag for the given KeyLOV Id
*/
extern ICS_API int ICS_keylov_ask_tag(
const char* theKeyLOVId, /**< (I) The unique Id of the Key LOV */
tag_t* theTag /**< (O) The POM Tag */
);
/**
Returns the KeyLOV Id for the given POM tag
*/
extern ICS_API int ICS_keylov_ask_id(
tag_t theTag, /**< (I) The POM Tag */
char** theKeyLOVId /**< (OF) The unique Id of the Key LOV*/
);
/**
This function returns all keylovs that match the
given search criteria values. <br>
The input to all output parameter except theCount can be NULL to indicate
that the output should not be returned.
*/
extern ICS_API int ICS_keylov_search( const char* theQuery, /**< (I) the query: (unct) (op) (value), e.g. "-430 = keylovid" *
Supported values for unct are:
<ul><li> -430 Keylov ID
<li> -431 Keylov Name </ul> */
int theSortAttrID, /**< (I) specifies the unct to be used for sorting the result,
Possible value is one of the supported values for unct in theQuery */
int theOptions, /**< (I) search options, supported is #ICS_SEARCH_CASE_INSENSITIVE to search without case sensitivity */
int *theCount, /**< (O) Number of keylovs found */
tag_t **theTags, /**< (OF) theCount Tags of the keylovs found */
char* **theIDs, /**< (OF) theCount Ids of the keylovs */
char* **theNames /**< (OF) theCount Names of the keylovs */
);
/**
Deprecates/Un-deprecates the specified Key LOV entries for the given LOV Keys.
*/
extern ICS_API int ICS_keylov_deprecate_entries( const char *key_lov_id , /* <(I)> The unique identifier of the Key LOV */
int n_lov_value_keys, /* <(I)> Number of Keys of the LOV values */
char **lov_value_keys, /* <(I)> n_lov_value_keys Array of LOV value Keys */
logical *deprecate_status /* <(I)> n_lov_value_keys Array of Logical values true/false, indicates
Deprecate/Un-deprecate status corresponds Key LOV
value in the lov_value_keys array*/
);
/**
Returns all values of the Key LOV for the specified Key LOV ID.
*/
extern ICS_API int ICS_keylov_get_keylov( const char* key_lov_id, /* <I> The unique identifier of the Key LOV */
char **key_lov_name, /* <OF> The name of Key LOV */
int *options, /* <O> The options for the Key LOV */
int *n_lov_entries, /* <O> Number of Key LOV values */
char ***lov_keys, /* <OF> n_lov_entries Array of LOV Keys */
char ***lov_values, /* <OF> n_lov_entries Array of LOV values */
logical **deprecated_staus, /* <OF> n_lov_entries Array of Deprecated status of each Key LOV value */
char **owning_site, /* <OF> The owning site*/
int *n_shared_sites, /* <O> The number of shared sites*/
char ***shared_sites /* <OF> n_shared_sites Array of shared sites */
);
/**
Returns the deprecated status of given LOV Key.
*/
extern ICS_API int ICS_keylov_is_entry_deprecated( const char *key_lov_id, /**< (I) The unique identifier of the KeyLov*/
const char *lov_value_key, /**< (I)KeyLOV Value*/
logical *deprecate /**<O>Deprecated status of the entry*/
);
/**
Returns true if the ICO attribute is localizable
*/
extern ICS_API int ICS_ico_property_isLocalizable(
tag_t theICOTag, /**< (I) The ICO Tag */
const int theAttributeId, /**< (I) The Attribute id*/
logical *isLocalizable /**< (O) is Localizable*/
);
/**
Returns the list of localizable ICO attributes
*/
extern ICS_API int ICS_ico_ask_localizable_properties(
tag_t theICOTag, /**< (I) The ICO Tag */
int *theAttributeCount, /**< (O) The Attribute count*/
int **theAttributeIds /**< (OF) theAttributeCount The Localizable Attribute Ids*/
);
/**
Sets one or more values on a string property.
*/
extern ICS_API int ICS_ico_set_localized_value_strings( tag_t theICOTag, /**< (I) The ICO Tag*/
int noAttributes, /**< (I) The Attribute count */
int* theAttributeIds, /**< (I) List of attribute Id */
const char* locale, /**< (I) locale for which the value need to set*/
int* theAttributeValCount, /**< (I) Array of number of values*/
char*** theAttributeValues, /**< (I) List of value array */
char** localization_statuses, /**< (I) Array of localisation */
logical isMaster /**< (I) Flag to Indicate wether the locale is master*/
);
/**
Asks one or more values of a string property. The property can be single-valued or multi-valued (i.e., array or list).
*/
extern ICS_API int ICS_ico_ask_localized_value_strings(
tag_t theICOTag, /**< (I) The ICO Tag */
const int theAttributeId, /**< (I) Attribute Id of the ICO */
const char* locale, /**< (I) The locale of the property value */
int* theAttributeValCount, /**< (O) Number of values returned. */
char*** theAttributeValues, /**< (OF) theAttributeValCount The num values of the property. This must be a list or array of constant chars. */
char** localization_statuses, /**< (OF) theAttributeValCount The list of localization statuses each applicable to the corresponding property value in the values array. */
logical* isMaster /**< (O) specifies if the locale specified as input is the master locale for each property value in the values array. */
);
/**
Returns true if theTag is of the asked type
*/
extern ICS_API logical ICS_is_keylov(
tag_t theTag /**< (I) */
);
/**
Returns true if theTag is of the asked type
*/
extern ICS_API logical ICS_is_attribute(
tag_t theTag /**< (I) */
);
/**
Returns true if theTag is of the asked type
*/
extern ICS_API logical ICS_is_class(
tag_t theTag /**< (I) */
);
/**
Returns true if theTag is of the asked type
*/
extern ICS_API logical ICS_is_view(
tag_t theTag /**< (I) */
);
/**
Returns true if theTag is of the asked type
*/
extern ICS_API logical ICS_is_subclass(
tag_t theTag /**< (I) */
);
/**
Returns true if theTag is of the asked type
*/
extern ICS_API logical ICS_is_ico(
tag_t theTag /**< (I) */
);
/**
Imports the content of the given sml file
*/
extern ICS_API int ICS_sml_import(
char *file, /**< (I) absolute pathname of file to import from */
char *importMode /**< (I) import mode: Use "1" to insert and "2" to update. */
);
/**
Auto-compute attribute values for classification object (ICO) based on custom program registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE
*/
extern ICS_API int ICS_ico_auto_compute(
const char *theICOid, /**< (I) ICO id */
const char *theClassId, /**< (I) Class id */
const char *theViewId, /**< (I) View id */
const int theUnitSystem, /**< (I) Unit System of the ICO */
tag_t theWsoTag, /**< (I) Workspace object tag that is being classified */
const int theMode, /**< (I) AutoCompute operation mode */
const int theAttributeCount, /**< (I) The number of attributes */
const int *theAttributeIds, /**< (I) Array of attribute ids */
const int *theAttrValueCounts, /**< (I) Array of attribute value count */
const char ***theAttributeValues, /**< (I) Array of attribute values */
const int *theAttributeLengths, /**< (I) Array of attribute array sizes */
const char **theAttributeUnits, /**< (I) Array of attribute units */
const int *theAttributeFlags, /**< (I) Array of attribute flags */
const logical *theModifiedFlag, /**< (I) Array of flags specifying the updated attributes */
int *theAutoComputedCount, /**< (O) The number of auto computed attributes */
int **theAutoComputedIds, /**< (OF) theAutoComputedCount Array of auto computed attribute ids */
int **theAutoComputedValueCounts, /**< (OF) theAutoComputedCount Array of attribute value count */
char ****theAutoComputedValues, /**< (OF) theAutoComputedCount Array of auto computed attribute values */
int **theAutoComputedLengths, /**< (OF) theAutoComputedCount Array of attribute array sizes */
char ***theAutoComputedUnits, /**< (OF) theAutoComputedCount Array of auto computed attribute units */
int **theAutoComputedFlags /**< (OF) theAutoComputedCount Array of auto computed attribute flags */
);
/**
This API is to be used for writing the custom program to be registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE.
Register the attribute dependencies for auto-computed attributes.
*/
extern ICS_API int ICS_auto_compute_register_attrs(
const char *class_id, /**< (I) Class Id */
const char *view_id, /**< (I) View Id */
const int size, /**< (I) No of Attributes */
ICS_auto_compute_attr_t *auto_compute_attrs, /**< (I) Array of attribute structures */
logical toOverride /**< (I) Flag to indicate overiding of the parent class registration*/
);
/**
This API is to be used for writing the custom program to be registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE.
Set the auto computed attribute values. This API to be used with attributes with an array of values.
*/
extern ICS_API int ICS_auto_compute_set_attr_values(
const int theAttributeId, /**< (I) Attribute Id */
const int theAttrValueCount, /**< (I) Attribute Value Count */
const char **theAttributeValues, /**< (I) Attribute Value Array */
const char *theUnit /**< (I) Attribute Unit System */
);
/**
This API is to be used for writing the custom program to be registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE.
Set the auto computed attribute value
*/
extern ICS_API int ICS_auto_compute_set_attr_value(
const int theAttributeId, /**< (I) Attribute Id */
const char *theAttributeValue, /**< (I) Attribute Value */
const char *theUnit /**< (I) Attribute Unit System */
);
/**
This API is to be used for writing the custom program to be registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE.
Set the auto computed attribute property
*/
extern ICS_API int ICS_auto_compute_set_attr_prop(
const int theAttributeId, /**< (I) Attribute Id */
const int thePropType, /**< (I) Property Type */
const logical theValue /**< (I) Property Value */
);
/**
This API is to be used for writing the custom program to be registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE.
The method is used for retreiving the values of the attribute. This API is to be used with attributes with an array of values.
*/
extern ICS_API int ICS_auto_compute_get_attr_values(
const int attributeId, /**< (I) attribute id */
int *valueCount, /**< (O) Attribute Value count */
char ***value, /**<(OF) valueCount array of values for the attribute */
int *format, /**< (O) The attribute format */
char **unit /**<(OF) valueCount value of the unit */
);
/**
This API is to be used for writing the custom program to be registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE.
The method is used for retreiving the value of the attribute
*/
extern ICS_API int ICS_auto_compute_get_attr_value(
const int attributeId, /**< (I) attribute id */
char **value, /**<(OF) value of the attribute id */
int *format, /**< (O) The attribute format */
char **unit /**<(OF) value of the unit */
);
/**
This API is to be used for writing the custom program to be registered with BMF_ICS_exec_custom_attribute_logic operation in BMIDE.
The method is used for retreiving the property value of the attribute id
*/
extern ICS_API int ICS_auto_compute_get_attr_prop(
const int theAttributeId, /**< (I) attribute id */
int thePropType, /**< (I) property type of the attribute */
logical *theValue /**< (O) true/false for the specified property */
);
/**
This API is used for checking the privialge of the Inclass object like Class,Subclass,Class Attributes,View Attributes
based on the ACL information configured in the classification Admin
*/
extern ICS_API int ICS_check_privilege(
tag_t theInstanceTag,/**< (I) Instance Tag */
const char *thePrivilegeName,/**< (I) The name of the privilage to be checked*/
logical *isGrantedExt /**< (O) true/false for the specified privilage */
);
/**
Removes the class and its hierarchy with the given parameters
*/
extern ICS_API int ICS_class_remove_hierarchy (
const char *theClassId, /**< (I) class id */
logical theRecurseOption, /**< (I) theRecurseOption for child elements */
logical theViewsOption, /**< (I) Option to remove views */
logical theIcosOption, /**< (I) Option to remove Icos */
logical theWSOOption, /**< (I) Option to remove WSO */
logical theChildrenOnlyOption, /**< (I) Option to remove the ChildrenOnly */
logical theIgnoreOption, /**< (I) theIgnoreOption */
logical thePurgeAttrs, /**< (I) thePurgeAttrs */
logical thePurgeKeyLOV, /**< (I) thePurgeKeyLOV */
int *theFailedObjectsCount, /**< (O) the number of failed objects count */
char* *theFailedObjects /**< (OF) theFailedObjectsCount the failed class id's */
);
/*===========================================================================
** ICS_class_search_libraries returns the information about the libraries found by searchStrings
**
** theCount : the number of classes matching theQuery
**
** NOTE: The input to all following values can be NULL to indicate
** that the output should not be returned.
**
** theTags : the tags of the found classes
** theTypes : the types of the classes
** Posible values are: Group, Class, StorrageClass
** theCIDs : the unique class ids
** theparentCIDs : the unique class ids of parent
** theNames : the class names
** theInstancesCounts : the number of instances stored in each class (including subclass instances)
** theChildCounts : the number of children (of type Group,Class or StorrageClass) each class has
** theLibraries : the library value for found libraries
**
** Return value :
** ITK_OK
** Error discovered
**
*/
/**
Returns the information about the libraries found by theSearchStrings
*/
extern ICS_API int ICS_class_search_libraries(
int theNumSearchStrings, /**< (I) Number of search strings */
const char* *theSearchStrings, /**< (I) Array of search strings */
int *theCount, /**< (O) Number of classes found */
tag_t **theTags, /**< (OF) theCount Tags of the classes found */
char* **theTypes, /**< (OF) theCount Types of the classes */
char* **theCIDs, /**< (OF) theCount Ids of the classes */
char* **theParentCIDs, /**< (OF) theCount Parent ids of the classes */
char* **theNames, /**< (OF) theCount Names of the classes */
int **theInstancesCounts, /**< (OF) Number of instances stored in the class and any child class */
int **theChildCounts, /**< (OF) Number of children of the classes */
char* **theLibraries /**< (OF) theCount library values for classes */
);
/*===========================================================================
** ICS_class_ask_parentinfo returns the information about all the parents found by theChildCIDs
**
** theParentCount : the number of classes matching theChildCIDs
**
** NOTE: The input to all following values can be NULL to indicate
** that the output should not be returned.
**
** theparentTags : the tags of the found parent classes
** theparentTypes : the types of the parent classes
** Posible values are: Group, Class, StorrageClass
** theparentCIDs : the unique class ids of parents
** theNames : the class names of parents
** theInstancesCounts : the number of instances stored in each parent class (including subclass instances)
** theChildCounts : the number of children (of type Group,Class or StorrageClass) each parent class has
**
** Return value :
** ITK_OK
** Error discovered
**
*/
/**
Returns the information about all the parents found by theChildCIDs
*/
extern ICS_API int ICS_class_ask_parentinfo( int theNumCIDs, /**< (I) Number of the child classes */
const char* *theChildCIDs, /**< (I) Array of child class IDs */
int *theParentCount, /**< (O) The number of parents found */
tag_t **theParentTags, /**< (OF) theParentCount Tags of the parents found */
char* **theParentTypes, /**< (OF) theParentCount Types of the parent classes
Posible values are: Group, Class, StorageClass */
char* **theParentCIDs, /**< (OF) theParentCount Class IDs of the Parent classes */
char* **theNames, /**< (OF) theParentCount Names of the parent classes */
int **theInstancesCounts, /**< (OF) Number of instances stored in the class and any child class */
int **theChildCounts /**< (OF) Number of children of the classes */
);
/**
Retrieves the information about dependent attributes in the given class when the selected attribute value has changed.
<br/>Values are returned for all given UI attributes that have changed in the parameters @p selected_attr / @p selected_value.
<br/>The @p class_id parameter must be a valid class ID and not NULL <br>
All other input values can be set as follows:
<table>
<tr><td>USE CASE </td><td> selected_attr </td><td> selected_value </td><td> ui_attr_count </td><td> ui_attr_ids </td><td> ui_attr_values </td></tr>
<tr><td>User has selected a value </td><td> valid attr ID </td><td> valid value </td><td> UI attr count </td><td> UI attr IDs </td><td> UI attr values </td></tr>
<tr><td>User has deselected a value </td><td> valid attr ID </td><td> "" or NULL </td><td> UI attr count </td><td> UI attr IDs </td><td> UI attr values </td></tr>
<tr><td>Initial view </td><td> 0 </td><td> 0 </td><td> UI attr count </td><td> UI attr IDs </td><td> NULL or empty UI attr values </td></tr>
<tr><td>Edit Mode </td><td> 0 </td><td> 0 </td><td> UI attr count </td><td> UI attr IDs </td><td> ICO values (currently displayed in the view) </td></tr>
</table>
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_NO_INSTANCE_FOUND if the class does not exist.
<li>#SML_ERR_ATTR_NOT_IN_CLASS if the selected attribute is not in the class
</ul>
*/
extern ICS_API int ICS_class_attr_ask_dep_keylovs(
const char* class_id, /**< (I) Class ID, must not be NULL */
int selected_attr, /**< (I) The selected attribute */
const char* selected_value, /**< (I) The selected value */
int ui_attr_count, /**< (I) Number of attributes in the UI */
const int* ui_attr_ids, /**< (I) UI attribute IDs */
const char** ui_attr_values, /**< (I) UI attribute values */
int *changed_attr_count, /**< (O) Number of changed keylovs */
ICS_keylov_descriptor_p_t **changed_keylovs /**< (OF) changed_attr_count The changed Keylovs */
);
/**
Retrieves the information about the 'common' attributes for the input classes.
<br/>The attributes searched and returned must:
<ul>
<li>belong to the 'Search Index View'</li>
<li>have 'Used as facet' flag set.</li>
</ul>
@returns #ITK_ok always.
<br/>In case of invalid inputs, no results will be returned (attribute count equals to 0).
*/
extern ICS_API int ICS_ask_common_attributes_used_as_facets2(
int class_ids_count, /**< (I) The Class ID count. */
const char **class_ids, /**< (I) The Class IDs for which the attributes are to be found. */
int *attribute_count, /**< (O) The count of the matching attributes found. */
int **attribute_ids, /**< (OF) attribute_count The IDs of the matching attributes. */
int **attribute_metric_formats, /**< (OF) attribute_count The metric format values of the attributes.
<br> The attribute format defines the type of value that
can be stored for the attribute.
<br> For additional information about the attribute format
definition, refer #ICS_describe_format. */
int **attribute_non_metric_formats, /**< (OF) The non-metric format values of the attributes. */
char ***attribute_names, /**< (OF) attribute_count The attribute names.The output string array is SM-packed,
hence should be freed by calling #MEM_free on the container only. */
char ***attribute_metric_units, /**< (OF) attribute_count The metric unit value for attributes.The output string array is SM-packed,
hence should be freed by calling #MEM_free on the container only. */
char ***attribute_non_metric_units /**< (OF) attribute_count The non metric unit value for attributes.The output string array is SM-packed,
hence should be freed by calling #MEM_free on the container only. */
);
/**
Retrieves the information about the "indexable" attributes in the system.
<br/>The attributes searched and returned must:
<ul>
<li>belong to the 'Search Index View'</li>
</ul>
@returns
<ul>
<li>#ITK_ok on success
<li>POM enquiry related error otherwise.
</ul>
*/
extern ICS_API int ICS_ask_indexable_attributes(
int *attribute_count, /**< (O) The count of the matching attributes found. */
int **attribute_ids, /**< (OF) attribute_count The IDs of the matching attributes. */
int **attribute_metric_formats, /**< (OF) attribute_count The metric format values of the attributes.
<br> The attribute format defines the type of value that
can be stored for the attribute.
<br> For additional information about the attribute format
definition, refer #ICS_describe_format. */
int **attribute_non_metric_formats, /**< (OF) The non-metric format values of the attributes. */
char ***attribute_names, /**< (OF) attribute_count The attribute names.The output string array is packed,
hence should be freed by calling #MEM_free on the container only. */
char ***attribute_metric_units, /**< (OF) attribute_count The metric unit value for attributes.The output string array is packed,
hence should be freed by calling #MEM_free on the container only. */
char ***attribute_non_metric_units /**< (OF) attribute_count The non metric unit value for attributes.The output string array is packed,
hence should be freed by calling #MEM_free on the container only. */
);
/**
Retrieves the dependent classified workspace object.
@returns
<ul>
<li>#ITK_ok on success
<li>#SML_ERR_MISSING_PARAMETER in case of invalid input.
</ul>
*/
extern ICS_API int ICS_ask_dependent_classified_WSO(
const tag_t theWSOTag, /**< (I) The WorkspaceObject tag */
tag_t *theDependentClassifiedWSO /**< (O) The dependent WorkspaceObject tag */
);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */
#include <ics/libics_undef.h>
#endif