CA ERwin Data Modeler
API Reference Guide
r7.3
This documentation and any related computer software help programs (hereinafter referred to as the
“Documentation”) is for the end user’s informational purposes only and is subject to change or withdrawal by CA at
any time.
This Documentation may not be copied, transferred, reproduced, disclosed, modified or duplicated, in whole or in
part, without the prior written consent of CA. This Documentation is confidential and proprietary information of CA
and protected by the copyright laws of the United States and international treaties.
Notwithstanding the foregoing, licensed users may print a reasonable number of copies of the Documentation for
their own internal use, and may make one copy of the related software as reasonably required for back-up and
disaster recovery purposes, provided that all CA copyright notices and legends are affixed to each reproduced copy.
Only authorized employees, consultants, or agents of the user who are bound by the provisions of the license for
the Product are permitted to have access to such copies.
The right to print copies of the Documentation and to make a copy of the related software is limited to the period
during which the applicable license for the Product remains in full force and effect. Should the license terminate for
any reason, it shall be the user’s responsibility to certify in writing to CA that all copies and partial copies of the
Documentation have been returned to CA or destroyed.
EXCEPT AS OTHERWISE STATED IN THE APPLICABLE LICENSE AGREEMENT, TO THE EXTENT PERMITTED BY
APPLICABLE LAW, CA PROVIDES THIS DOCUMENTATION “AS IS” WITHOUT WARRANTY OF ANY KIND, INCLUDING
WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
OR NONINFRINGEMENT. IN NO EVENT WILL CA BE LIABLE TO THE END USER OR ANY THIRD PARTY FOR ANY
LOSS OR DAMAGE, DIRECT OR INDIRECT, FROM THE USE OF THIS DOCUMENTATION, INCLUDING WITHOUT
LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION, GOODWILL, OR LOST DATA, EVEN IF CA IS EXPRESSLY
ADVISED OF SUCH LOSS OR DAMAGE.
The use of any product referenced in the Documentation is governed by the end user’s applicable license
agreement.
The manufacturer of this Documentation is CA.
Provided with “Restricted Rights.” Use, duplication or disclosure by the United States Government is subject to the
restrictions set forth in FAR Sections 12.212, 52.227-14, and 52.227-19(c)(1) - (2) and DFARS Section 252.227-
7014(b)(3), as applicable, or their successors.
All trademarks, trade names, service marks, and logos referenced herein belong to their respective companies.
Copyright © 2008 CA. All rights reserved.
CA Product References
This document references the following CA products:
■ CA ERwin® Data Modeler (CA ERwin DM)
■ CA ERwin® Model Manager (CA ERwin MM)
Contact CA
Contact Technical Support
For your convenience, CA provides one site where you can access the
information you need for your Home Office, Small Business, and Enterprise CA
products. At http://ca.com/support, you can access:
■ Online and telephone contact information for technical assistance and
customer services
■ Information about user communities and forums
■ Product and documentation downloads
■ CA Support policies and guidelines
■ Other helpful resources appropriate for your product
Provide Feedback
If you have comments or questions about CA product documentation, you can
send a message to
[email protected].
If you would like to provide feedback about CA product documentation, please
complete our short customer survey, which is also available on the CA support
website, found at http://ca.com/support.
Contents
Chapter 1: Introduction 9
Major Features ............................................................................... 10
Typical Use Cases ............................................................................ 10
Standalone Client ......................................................................... 11
Add-in Component or Script ............................................................... 12
Chapter 2: API Components 13
Overview .................................................................................... 13
Application Tier ........................................................................... 13
Model Directory Tier ...................................................................... 15
Sessions Tier ............................................................................. 16
Model Data Tier ........................................................................... 17
Access to Model Data ......................................................................... 18
Objects and Properties ........................................................................ 20
Object Identifiers ......................................................................... 20
Object Identifiers and Type Codes ......................................................... 21
Properties, Property Flags, and Value Facets ................................................ 22
Scalar and Non-Scalar Property Values ..................................................... 23
Collections and Automation ................................................................... 23
_NewEnum Property of a Collection Object ................................................. 25
Default Properties ......................................................................... 25
Optional Parameter ....................................................................... 25
The API Sample Client ........................................................................ 25
Using the API Sample Client ............................................................... 26
ERwin Spy ................................................................................... 27
How the ERwin Spy Application Works ...................................................... 28
Chapter 3: API Tasks 35
API Environment ............................................................................. 35
Creating the ISCApplication Object ............................................................ 36
Application Properties ......................................................................... 37
ISCApplication Interface ................................................................... 37
ISCApplicationEnvironment ................................................................ 38
Accessing a Model ............................................................................ 41
Using the API as an Add-in Tool ............................................................ 42
Using the API as a Standalone Executable .................................................. 46
Contents 5
Creating a Model .......................................................................... 47
Opening an Existing Model ................................................................ 49
Opening a Session ........................................................................ 50
Accessing a Model Set ..................................................................... 52
Accessing Objects in a Model .................................................................. 55
ISCSession Interface ...................................................................... 56
ISCModelObjectCollection Interface ........................................................ 56
ISCModelObject Interface ................................................................. 56
Accessing a Specific Object ................................................................ 58
Filtering Object Collections ................................................................ 60
Accessing Object Properties ................................................................... 64
Iteration of Properties ..................................................................... 64
ISCModelProperty Interface ............................................................... 68
Iterating Over Non-Scalar Property Values .................................................. 70
Accessing a Specific Property .............................................................. 74
Filtering Properties ........................................................................ 75
Modifying the Model Using Session Transactions ................................................ 78
Begin Transaction ......................................................................... 79
Commit Transaction ....................................................................... 80
Creating Objects.............................................................................. 81
ISCModelObjectCollection Interface ........................................................ 82
Setting Property Values ....................................................................... 83
Setting Scalar Property Values ............................................................. 84
Setting Non-Scalar Property Values ........................................................ 85
Deleting Objects .............................................................................. 86
ISCModelObjectCollection Interface ........................................................ 87
Deleting Properties and Property Values ........................................................ 87
ISCModelPropertyCollection Interface ...................................................... 88
ISCModelProperty Interface ............................................................... 88
Deleting Non-Scalar Property Values ....................................................... 89
Saving the Model ............................................................................. 90
ISCPersistenceUnit Interface............................................................... 90
Accessing Metamodel Information ............................................................. 91
ISCApplicationEnvironment Interface ....................................................... 92
ISCSession Interface ...................................................................... 93
Closing the API ............................................................................... 94
ISCSession Interface ...................................................................... 94
ISCSessionCollection Interface ............................................................. 95
Clearing Persistence Units ................................................................. 96
Error Handling ................................................................................ 96
ISCApplicationEnvironment ................................................................ 98
Advanced Tasks ............................................................................. 100
6 API Reference Guide
Creating User-Defined Properties ......................................................... 101
History Tracking ......................................................................... 105
Appendix A: API Interfaces Reference 109
API Interfaces ............................................................................... 109
ISCApplication ........................................................................... 109
ISCApplicationEnvironment ............................................................... 110
ISCModelDirectory ....................................................................... 111
ISCModelDirectoryCollection .............................................................. 123
ISCModelDirectoryUnit ................................................................... 125
ISCModelObject ......................................................................... 128
ISCModelObjectCollection ................................................................ 130
ISCModelProperty ........................................................................ 135
ISCModelPropertyCollection .............................................................. 141
ISCModelSet ............................................................................ 147
ISCModelSetCollection ................................................................... 149
ISCPersistenceUnit ....................................................................... 150
ISCPersistenceUnitCollection.............................................................. 152
ISCPropertyBag.......................................................................... 156
ISCPropertyValue ........................................................................ 158
ISCPropertyValueCollection ............................................................... 160
ISCSession .............................................................................. 162
ISCSessionCollection ..................................................................... 166
Enumerations ............................................................................... 167
SC_ModelDirectoryFlags .................................................................. 167
SC_ModelDirectoryType .................................................................. 168
SC_ModelObjectFlags .................................................................... 168
SC_ModelPropertyFlags .................................................................. 169
SC_SessionFlags ......................................................................... 169
SC_SessionLevel ......................................................................... 170
SC_ValueTypes .......................................................................... 170
Property Bag Reference ...................................................................... 171
Property Bag for Application Environment ................................................. 171
Property Bag for Model Directory and Model Directory Unit ................................. 179
Property Bag for Persistence Units and Persistence Unit Collections.......................... 182
Property Bag for Session ................................................................. 187
Location and Disposition in Model Directories and Persistence Units ............................. 188
Locator Property ......................................................................... 189
Disposition Property...................................................................... 191
Contents 7
Appendix B: CA ERwin DM Metamodel 193
Metadata Element Renaming ................................................................. 194
Metadata Organization ....................................................................... 195
Metamodel Elements ..................................................................... 196
Metadata Tags ........................................................................... 196
Abstract Metadata Objects................................................................ 199
Metamodel Classes....................................................................... 200
XML Schema ................................................................................ 200
Conversion from CA ERwin DM API Version 4.1.4 to r7 ......................................... 202
User-Defined Property (UDP) ............................................................. 202
Changes in Type Names .................................................................. 202
Additions and Deprecations in Metadata ................................................... 203
Datatype Changes ....................................................................... 203
Index 205
8 API Reference Guide
Chapter 1: Introduction
The Script Client API that is part of CA ERwin DM provides advanced
customization capabilities that enable you to access and manipulate modeling
data in memory at runtime, as well as models persisted in files and in the CA
ERwin MM repository. The API interfaces are automation-compatible and
provide extensive design and runtime facilities for third-party integrators as
well as users of script-based environments.
The API complements the original modeling tool with custom components
when you use scripts, add-ins, and COM-based API technologies. The API is
flexible and promotes a seamless integration of the modeling tool in a client
development cycle.
This section contains the following topics:
Major Features (see page 10)
Typical Use Cases (see page 10)
Chapter 1: Introduction 9
Major Features
Major Features
The API is a group of interfaces that includes the following features:
Active Model Data Objects (AMDO)
Lets a third-party client to access model data through a COM automation-
compatible API. This feature is the major component in the API
functionality. All interfaces that comprise the API are automation-based,
and are therefore dual. These dual interfaces allow you faster access to
methods and properties. Using dual interfaces, you can directly call the
functions without using an Invoke() function.
Collections and enumerators
Facilitates programming constructions in script languages that target the
AMDO automation features.
Connection points
Delivers a collection of connection points interfaces and support for the
ITypeInfo2 interface to support the sync event facilities of languages.
Automation-rich error handling
Supports automation-rich error handling through IErrorInfo interfaces
exposed by the API components.
Active Model Directory
Lets you navigate available model storage, including CA ERwin MM.
Delivers the ability for a client to open or to create a model in a file as well
as from a CA ERwin MM repository.
Active Scripting
Lets you host a scripting environment and provide an invocation
mechanism for script and add-in components. A mechanism is provided to
register add-ins and scriplets with the Active Scripting environment.
Typical Use Cases
The typical use cases of the API are automation and scripts to support specific
interface design requirements imposed by COM automation standards. For
example, you can be limited to a single incoming and outgoing interface
exposed by any particular COM object. This limitation is due to the fact that
the only recognizable interface type for pure automation is IDispatch and it
renders the use of QueryInterface functionality unfit. The common technique
to address the problem includes Alternate Identities and read-only properties
that expose secondary interfaces.
10 API Reference Guide
Typical Use Cases
Another example of a targeted domain customer is one using alternative (not
C++) languages to implement a client. The list includes Visual Basic, VB
Script, Java Script, and so on. The list includes specially tailored language
idioms to encapsulate language-COM binding, such as collections of objects,
connection points, rich error handling, and so on.
The API combines number of components and presents them as a set of
interfaces accessible using COM.
The list of integrated components includes CA ERwin Data Modeler, CA ERwin
Model Manager, and Microsoft Internet Explorer.
Standalone Client
One of the ways the API is used is as a standalone client. A third-party client
activates the API as an in-process server. The API component does not have
visual representation, that is, it does not expose a user interface. The API
provides Active Model Directory facilities to specify a target model from a list
of available models. Active Model Data Objects provide session-based access
to model data.
There can be times when API clients compete with other parties over access to
model data. Using CA ERwin MM provides advanced model sharing facilities to
prevent other parties from accessing the model during your session.
Chapter 1: Introduction 11
Typical Use Cases
Add-in Component or Script
Another way the API is used is as an add-in component or script. CA ERwin DM
hosts third-party add-in modules and scripts. The Active Scripting component
in the API provides a mechanism for registering modules with a host tool,
arranging representation in the host user interface, creating add-in menus,
and invoking them on the host menu selection or event.
The add-in module is a client DLL, activated in-process.
The script is a VBScript or JScript procedure embedded in a DHTML document,
activated using a menu or a model event. This Active Scripting provides
hosting for web browser control and makes the API objects available through
the window.external property of the DHTML object model.
You can observe changes in a model on the screen and can activate a pause to
investigate the state of a model by accessing the modeling tool user interface.
12 API Reference Guide
Chapter 2: API Components
This section contains the following topics:
Overview (see page 13)
Access to Model Data (see page 18)
Objects and Properties (see page 20)
Collections and Automation (see page 23)
The API Sample Client (see page 25)
ERwin Spy (see page 27)
Overview
The API is a collection of interfaces that represent CA ERwin DM functionality.
The application exports the top-level interface, from which the client obtains
lower-level interfaces as needed. Interfaces are logically grouped into tiers,
where each tier includes interfaces that represent the functionality of the
application. Each tier is represented in the following sections, with a table
describing the interfaces grouped into that tier.
Application Tier
The Application Tier represents CA ERwin DM functionality, establishes access
to models in persistent storage, and controls the exchange between models in
memory and models in persistent storage. The following table describes the
interfaces of the Application Tier:
Interface Role
ISCApplication Represents application-wide functionality, and serves
as the entry point for the interface hierarchy of the
API. Holds a list of available persistence units and
connections between the client and persistence units.
ISCApplicationEnvironment Provides information about the runtime environment.
ISCPersistenceUnitCollection Collects all active persistence units known to the
application.
ISCPersistenceUnit Represents an active persistence unit (such as a CA
ERwin DM model) within the application. A persistence
unit groups data in the form of model sets. Clients can
connect to persistence units to manipulate them and
the data they contain.
Chapter 2: API Components 13
Overview
Interface Role
ISCModelSetCollection Represents model sets associated with a persistence
unit.
ISCModelSet Represents a model set (such as EMX or EM2 classes
of model data) within a single persistence unit.
ISCPropertyBag Represents an array of properties for application tier
interface calls.
This is a graphical representation of the relationships of the Application Tier:
14 API Reference Guide
Overview
Model Directory Tier
The Model Directory Tier accesses and manipulates the persistence storage
directories, such as a file system directory or a CA ERwin MM directory. The
following table describes the interfaces of the Model Directory Tier:
Interface Role
ISCModelDirectoryCollection Enumerates all top-level model directories
available for the API client.
ISCModelDirectory Encapsulates information on a single model
directory entry.
ISCModelDirectoryUnit Encapsulates information on a single directory
unit.
This is a graphical representation of the relationships of the Model Directory
Tier:
Chapter 2: API Components 15
Overview
Sessions Tier
The Sessions Tier establishes access to model data in memory. The following
table describes the interfaces of the Sessions Tier:
Interface Role
ISCSessionCollection Collects all active sessions between the API client and
the persistence units.
ISCSession Represents an active connection between the client and
a model. Clients create sessions, and then open them
against model sets of persistence units. An open session
exposes a single level (such as data, metadata, and so
on) of a model set.
This is a graphical representation of the relationships of the Sessions Tier:
16 API Reference Guide
Overview
Model Data Tier
The Model Data Tier accesses and manipulates model data. The following table
describes the interfaces of the Model Data Tier:
Interface Role
ISCModelObjectCollection Represents objects available for manipulation.
Membership in this collection can be limited by
establishing filter criteria.
ISCModelObject Accesses and manipulates a single object within a
model.
ISCModelPropertyCollection Represents a list of properties owned by a single
object. The list can be limited by using filters.
ISCModelProperty Accesses and manipulates a single property.
Properties may contain multiple values. Values
within a multi-valued property are accessed by
keys. The current multi-valued property
implementation treats the value list as an array,
and the key is the array index.
ISCPropertyValueCollection Represents a list of single property values.
ISCPropertyValue Data and a key are contained within a single value.
Chapter 2: API Components 17
Access to Model Data
This is a graphical representation of the relationships of the Model Data Tier:
Access to Model Data
The API allows API clients to manipulate models. An API client locates models
in persistence storage by using the Model Directory Collection, Model
Directory, and the Model Directory Unit components. By using its properties,
the Model Directory Unit provides the information necessary to register the
unit with the pool of available persistence units by using the Persistence Units
collection. The API client can then specify access attributes such as read-only
or ignore locks. A new model can be created and registered with a persistence
unit collection. CA ERwin DM can add or remove models from the pool as a
response to user interface actions.
18 API Reference Guide
Access to Model Data
A persistence unit maintains a set of properties to control visibility in the
application user interface, access attributes, and so on. A persistence unit
organizes data as a group of linked model sets. The model sets are arranged
in a tree-like hierarchy with a single model set at the top. The top model set in
the persistence unit contains the bulk of the modeling data. The API uses the
abbreviation EMX to identify the top model set. The EMX model set owns a
secondary model set abbreviated as EM2, that contains user options and user
interface settings.
API clients access the model data by constructing a session and connecting it
to a model set using the Session component. A model set contains several
levels of data. It contains the data the application manipulates, such as entity
instances, attribute instances, or relationship instances.
The model set also contains metadata, which is a description of the objects
and properties that may occur within the application's data. In CA ERwin DM,
metadata includes object and property classes, object aggregations, and
property associations. The metadata defines each object class that may occur
within a model, for example, an entity class, an attribute class, or a
relationship class. Object aggregations identify an ownership relationship
between classes of objects. For example, a model owns entities, entities own
attributes, and so on. The property associations define property usage by
object classes. For instance, the metadata includes property associations for
every object class that has the Name property.
Clients specify the necessary level of model data at the same time as
connecting a session to a model set. When a new model is created it acquires
a set of default objects, such as model object, main subject area, and stored
display. The initial API implementation supports the following levels:
Name Description Supported Actions
SCD_SL_ M0 Model Level Access model data, create and
delete objects (including the
entire model), and set
property values.
SCD_SL_ M1 Metamodel Level Access object and property
definitions, along with other
metadata. Create and delete
user-defined properties and
user-defined object definitions.
Levels are identified by long integer values. Values have symbolic definitions.
Chapter 2: API Components 19
Objects and Properties
Objects and Properties
The API presents data in object/property form. In a CA ERwin DM model, for
example, an attribute is represented by an instance of an Attribute object. The
name of the attribute is contained in the Name property of the Attribute
object.
Object Identifiers
Each object must bear an identifier, which is a value that uniquely identifies
the object instance. Internally, object identifiers are 20 bytes long. They
contain two components: a GUID (also known as a UUID) in the first 16 bytes,
and a 32-bit unsigned integer suffix in the last 4 bytes.
A GUID contains the following components:
■ One 32-bit unsigned integer
■ Two 16-bit unsigned integers
■ Eight 8-bit unsigned integers (represented as unsigned characters)
These components total of 128 bits, or 16 bytes. Therefore, an object identifier
contains an extra 32-bit unsigned integer (the 4 byte suffix) at the end for a
total of 160 bits, or 20 bytes.
To simplify working with object identifiers and due to COM automation
limitations on datatypes, the API uses a string to represent object identifiers.
The following table lists aliases used in this guide and in the interface
definitions:
Type Name Format Use
SC_OBJID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}+suffix Object identifier
SC_CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}+suffix Class (object, property
type, and so on)
identifier
SC_MODELTYPEID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}+suffix Model type identifier
SC_CREATORID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} Creator identifier
The identifiers whose GUID component contains zero is one set of object
identifiers that is predefined. If the final 4 bytes of the identifier also contain
zero, the identifier represents a null identifier. Other values of the offset are
reserved for future use.
20 API Reference Guide
Objects and Properties
Object Identifiers and Type Codes
Consider the relationship between object instances in the SCD_SL_ M0 layer
and object instances in the SCD_SL_ M1 layer. An instance in the SCD_SL_ M0
layer is described by an instance in the SCD_SL_ M1 layer. For instance, a
single object in the SCD_SL_ M1 layer describes every entity instance in the
SCD_SL_ M0 layer.
Since all type codes are also object identifiers, they must have the same
format.
Chapter 2: API Components 21
Objects and Properties
Properties, Property Flags, and Value Facets
Properties present data in the form of values and additional flags.
Property values are either scalar with a single value, or non-scalar with
multiple values. More information about scalar and non-scalar property values
is located in the Scalar and Non-Scalar Property Values (see page 23) section.
Property values are defined by a property type, such as a string or an integer.
More information about property types is located in the Enumerations (see
page 167) section.
Two types of additional property flags exist:
Property level flags
Provide information about the property and are read-only. Property level
flags can provide the following information about a property instance:
Metadata information
Shows whether a property in the metadata is user-defined or contains
a scalar value.
Property state information
Shows whether or not a property is read-only.
Data source information
Shows whether or not a data source is calculated.
Property value level flags
Convey information about property value and can be updated.
An individual property level flag is represented by a bit field in the property
flag's value. The flags are provided for information only and cannot be
changed. More information about specific property flags is located in the
Enumerations (see page 167) section.
The value level flags, or facets, convey additional data associated with
property value such as if a property value was 'hardened' and cannot be
changed due to inheritance.
An individual facet is identified by a numeric ID or a name and has one of
three possible states: non-set, set to TRUE, or set to FALSE.
22 API Reference Guide
Collections and Automation
The facets are treated as part of the property value. Assigning a new value to
a property places all facets in the non-set state. Similarly, a value update or
removal renders all facets into the non-set state. There is only one
combination of facets per property, either scalar or non-scalar. Changes in
individual values of non-scalar properties do not affect the property facets.
More information about specific value facets is located in the Property Bag for
Application Environment (see page 171) section.
Scalar and Non-Scalar Property Values
A scalar property is a property that can be represented as a single value. The
properties that contain multiple values (either homogeneous or
heterogeneous) are non-scalar properties.
The type of a property can be recognized by reviewing the property flags.
Scalar properties have a SCD_MPF_SCALAR flag.
More information about specific property flags is located in the Enumerations
(see page 167) section.
The value of a scalar property or a single member of a non-scalar property is
accessed through the Value property of the ISCModelProperty interface.
Note: In r7, heterogeneous non-scalar properties are not supported by this
product. Members in a non-scalar property always have the same datatype.
A property, either scalar or non-scalar, can have a special NULL value. The
properties with a NULL value have a SCD_MPF_NULL flag set.
Collections and Automation
Automation defines the IEnumVARIANT interface to provide a standard way for
the API clients to iterate over collections. Every collection interface in the API
exposes a read-only property named _NewEnum to let the API clients know
that the collection supports iteration. The _NewEnum property returns a
pointer on the IEnumVARIANT interface.
Chapter 2: API Components 23
Collections and Automation
The IEnumVARIANT interface provides a way to iterate through the items
contained by a collection. This interface is supported by an enumerator
interface that is returned by the _NewEnum property of the collection.
The IEnumVARIANT interface defines the following member functions:
Next
Retrieves one or more elements in a collection starting with the current
element.
Skip
Skips over one or more elements in a collection.
Reset
Resets the current element to the first element in the collection.
Clone
Copies the current state of the enumeration so you can return to the
current element after using Skip or Reset.
The IEnumVARIANT collection implements a Rogue Wave Software, Inc. style
advance and return iteration. For this reason, they have the following life
cycle:
24 API Reference Guide
The API Sample Client
When the iterator is created, it enters the Created state, and then forces itself
into the BeforeStart state. A successful advance drives the iterator into the
InList state, while an unsuccessful advance drives it into the AtEnd state. A
Reset drives the iterator back to the BeforeStart state, and deletion drives it
into the Deleted state.
Note: The iterator is positioned over a member of the collection (that is,
associated with a current member) only if it is in the InList state.
_NewEnum Property of a Collection Object
The _NewEnum property identifies support for iteration through the
IEnumVARIANT interface. The _NewEnum property has the following
requirements:
■ The name is _NewEnum.
■ It returns a pointer to the enumerator IUnknown interface.
■ The Dispatch identification for the property is DISPID = DISPID_NEWENUM
(-4).
Default Properties
A default property for automation is the property that is accessed when the
object is referred to without any explicit property or method call. The property
dispatch identifier is DISPID_VALUE.
Optional Parameter
To support automation client requirements, all optional parameters are
represented as VARIANT. For that reason, a parameter type in an interface
description is only to document an expected type in the VARIANT structure.
The API Sample Client
Two Visual Basic 6.0 sample projects are provided with the API,
ERwinSpy_Sample.vbp and ErwinSpy_Addin_Sample.vbp.
If you run the Custom Setup type of installation, select the ERwin API Sample
Client when prompted to select the program features you want to install. After
installation, you can access the two sample Visual Basic 6.0 projects from the
Sample Client subdirectory. The path is CA\ERwin Data
Modeler\Samples\ERwin API\Sample Client.
Chapter 2: API Components 25
The API Sample Client
Using the API Sample Client
This section describes how to utilize the API sample client as a standalone
version and as an add-in component.
The standalone version of the sample program is ERwinSpy_Sample.vbp. You
can build ERwinSpy_Sample.vbp to create the ERwinSpy_Sample.exe
program. This program is a CA ERwin DM model data browser that you can
use to research data internals, such as the metamodel, model data, and model
objects and their properties.
Using ERwinSpy_Sample.exe, you can open an *.ERWIN file by clicking Open
on the File menu. When a model is opened or selected from Models menu,
model objects from the model are displayed in the left pane. You can view a
model object's hierarchy (parents and children) by double-clicking on the
object. You can view the properties of an object by clicking the button that is
between the left and right panes of the program screen.
The Models menu shows in-memory models that are currently open. You can
use the upper part of the menu to access model data, and you can use the
lower part to access the metamodel information associated with the model.
The add-in version of the sample program is ErwinSpy_Addin_Sample.vbp.
You can build ERwinSpy_Addin_Sample.vbp to create an add-in component.
The add-in component runs when you select it from the Tools, Add-Ins menu.
After you build the add-in component with the ErwinSpy_Addin_Sample.vbp
project, you must register it.
26 API Reference Guide
ERwin Spy
Register the Add-in Component
After you build the add-in component with the ErwinSpy_Addin_Sample.vbp
project, you must register it.
To register the add-in component
1. Click Add-ins, Customize on the Tools menu.
The Add-In Manager dialog opens.
2. Click the Add New Menu Item button on the toolbar.
The Add New Menu Item dialog opens.
3. Set Name to AddIn Sample, set COM ProgId to
ERwinSpy_AddIn_Sample.ErwinSpy, set Function Name to Run, select
Com Object in the Menu Type box, and click OK.
The Add New Menu Item dialog closes and you are returned to the Add-In
Manager dialog.
4. Click Save.
Your settings are saved and the Add-In Manager dialog closes.
When the sequence is executed, a new menu item is created on the Tools
menu under Add-Ins. The name of the item matches the text that was typed in
Name field of the Add New Menu Item dialog, which in this case is AddIn
Sample. You can select this new menu item to activate the add-in sample
component. The Models menu of the add-in shows the models opened in CA
ERwin DM.
ERwin Spy
The ERwin Spy application visualizes metadata information and provides
intrinsic and model-specific metadata. It demonstrates the API functionality
and provides a set of useful features to study how model data is stored. ERwin
Spy reads the CA ERwin DM metamodel and simplifies the task of
comprehending the intricate details of any CA ERwin DM model, which can be
a complicated net of model objects, properties, and cross-references. When
you install CA ERwin DM, you can choose to install the optional ERwin Spy
utility.
Chapter 2: API Components 27
ERwin Spy
There are two versions of the utility available in the ERwin Spy folder, the
standalone version, ERwinSpy.7.3.exe, and the add-in version,
ERwinSpy_AddIn.7.3.dll.
These versions are identical in functionality and vary only in how you want to
launch the application. The standalone version runs without CA ERwin DM
present and can access models stored in .erwin files, while the add-in version
launches within CA ERwin DM from the Tools menu and can access models
stored in either CA ERwin DM memory or in .erwin files.
Note: See the Add-In Manager online help for more information on defining an
add-in software application for the Tools, Add-Ins menu.
How the ERwin Spy Application Works
To see how ERwin Spy can help you visualize metadata information, do the
following:
■ Start with an empty logical-physical model.
■ Click ERwin Spy on the Tools, Add-Ins menu to launch ERwin Spy.
Note: Ensure that you have added the ERwin Spy application as a CA
ERwin DM add-in application on the Tools, Add-Ins menu. See the Add-In
Manager online help for more information on defining an add-in software
application.
■ Select the top item on the Models menu in ERwin Spy, which should be
your empty model.
28 API Reference Guide
ERwin Spy
■ Double-click the Model object in the left pane to expand it. You should see
a picture similar to the following illustration:
There are many objects listed by ERwin Spy. Even though the model is empty,
you still see objects there that represent CA ERwin DM defaults, such as
Domains, Main Subject Area, Trigger Templates, and so on. All default objects
are marked with a { Default; } flag to the right of the type of the model
object.
Chapter 2: API Components 29
ERwin Spy
The right pane of ERwin Spy displays object properties. To see a specific
object's properties, select the object, click the button located in the center of
the screen, and the selected object's properties display in the right panel. The
following illustration shows the properties of a specific entity that was added to
this model:
The first column shows property names, such as Name, Long ID, Type,
Physical Name, and so on.
The second column, DT, shows property datatypes, such as Str for a string, I4
for a number, Bool for Boolean, Id for a reference to another object, and so
on.
The third column, Value, displays the property value in native format.
The fourth column, As String, displays the property value reinterpreted as a
string. To understand this better, look at Physical Name in the left column. Its
value in the Value column is %EntityName(), which is a macro, while As String
holds the macro expansion, Entity_1.
30 API Reference Guide
ERwin Spy
The rest of the columns in the right pane represent property flags. The
following list describes the meaning of these columns:
NL
Displays properties with NULL/no value.
Note: The flag is never on for ERwin Spy.
UD
Displays user-defined properties.
VC
Displays vector properties.
TL
Displays properties that are maintained by CA ERwin DM and that cannot
be changed directly using the API.
RO
Displays read-only properties.
DR
Displays derived properties whose value was inherited (from a parent
domain, for example).
Facets True
Displays the facet value of a property that is set to True.
Facets False
Displays the facet value of a property that is set to False.
Chapter 2: API Components 31
ERwin Spy
In the previous illustration, a primary key attribute named ATTR01 was added
to Entity_1. It was migrated to Entity_2 by creating an identifying relationship.
When you double-click Entity_2, and then select ATTR01, you can see how
ERwin Spy displays the information. You can click the button in the center of
the screen to view its properties on the right.
32 API Reference Guide
ERwin Spy
Since the attribute for the Parent_Relationship_Ref property is a product of
foreign key migration, this property shows which relationship object is used to
store data about it. The value Id in the DT column shows that the property is a
reference, which means that the value is a unique ID of the involved
relationship object.
Look at the name in the As String column or locate an object by its unique ID
to traverse back to the relationship object. To see object IDs, click Show Ids
on the File, Options menu. With this option enabled, when the cursor is
positioned over an object in the left panel, that object's unique ID is displayed
in a popup window, as shown in the following illustration:
Now compare the Parent_Relationship_Ref property with the
Parent_Attribute_Ref and the Master_Attribute_Ref properties. The
Master_Attribute_Ref property is read-only. This means that it is displayed for
informational purposes only and cannot be changed using the API. As you
build your model, you can expand objects in the model to see how CA ERwin
DM uses their properties to represent different relationships in the model.
Use the ERwin Spy utility to see and understand the details of the data in a CA
ERwin DM model that is available through the API. If you need to learn how
particular data is represented in a CA ERwin DM model, you can use the
scenarios that were just described. Start with an empty model, create the
minimum model that is necessary to represent the feature in question, and
then use ERwin Spy to look at the details of the data representation.
Chapter 2: API Components 33
Chapter 3: API Tasks
This chapter describes how to perform basic tasks using the API. Each task is
documented with a table that lists the interfaces and methods needed for that
task. In most cases, the table shows a subset of all the methods for that
interface. A complete list of API interfaces and their methods is located in the
appendix API Interfaces Reference (see page 109).
This section contains the following topics:
API Environment (see page 35)
Creating the ISCApplication Object (see page 36)
Application Properties (see page 37)
Accessing a Model (see page 41)
Accessing Objects in a Model (see page 55)
Accessing Object Properties (see page 64)
Modifying the Model Using Session Transactions (see page 78)
Creating Objects (see page 81)
Setting Property Values (see page 83)
Deleting Objects (see page 86)
Deleting Properties and Property Values (see page 87)
Saving the Model (see page 90)
Accessing Metamodel Information (see page 91)
Closing the API (see page 94)
Error Handling (see page 96)
Advanced Tasks (see page 100)
API Environment
The API is packaged as a set of COM Dynamic Link Libraries (DLL) and works
as a part of a customer process. EAL.dll is responsible for launching the API
environment. When CA ERwin DM is installed, EAL.dll and the rest of the API
components are copied to the Binaries directory, (a subdirectory of the install
directory) and the installer registers the API with the System Registry.
To use the API in a development environment, use the API Type Library
embedded as a resource in the EAL.dll file. This operation is language specific.
Consult your development environment documentation for details.
Chapter 3: API Tasks 35
Creating the ISCApplication Object
The API works in two different modes, standalone mode and add-in mode.
The API is activated and controlled by a client application that hosts its own
process in the standalone mode.
In the add-in mode, the API is also activated and controlled by a client
application, but the client application is implemented as a COM DLL. The CA
ERwin DM executable owns a process and all the client application DLLs run
inside of that process. COM DLLs must be registered with the System Registry
and with the CA ERwin DM Add-In Manager so that it can be available for add-
in mode activation.
Behavior of the API components in both modes is the same with a few
exceptions that are discussed further in this section.
The API is implemented as a tree of COM interfaces. The application exports
the top-level interface, from which the client fetches lower-level interfaces as
needed.
Creating the ISCApplication Object
The entry point into the interface hierarchy of the API is through the
ISCApplication interface. The ISCApplication interface provides access to the
persistence units and sessions. You must create an instance of ISCApplication
prior to using any of the other interfaces in the API.
Example 1
The following example illustrates how to use C++ to create the ISCApplication
object:
#import "EAL.dll" using namespace SCAPI;
ISCApplicationPtr scAppPtr;
HRESULT hr;
hr = scAppPtr.CreateInstance(__uuidof(SCAPI::Application));
The following example illustrates how to use Visual Basic .NET to create the
ISCApplication object:
Dim scApp As SCAPI.Application
scApp = New SCAPI.Application
// Or the alternative with the ProgId
Dim oApp As Object
oApp = CType(CreateObject("AllFusionERwin.SCAPI"), SCAPI.Application)
36 API Reference Guide
Application Properties
Application Properties
You can get information about the CA ERwin DM application by using the
following tables.
ISCApplication Interface
The following table contains information on the ISCApplication interface:
Signature Description Valid Arguments
BSTR Name() Modeling Application Title None
BSTR Version() Modeling Application Version None
BSTR ApiVersion() API version None
ISCApplicationEnvironment Reports attributes of runtime None
environment and available
ApplicationEnvironment()
features such as add-in mode,
user interface visibility, and so
on
ISCPersistenceUnitCollection Returns a collection of all None
* PersistenceUnits() persistence units loaded in the
application.
ISCSessionCollection * Returns a collection of sessions None
Sessions() created within the application
Chapter 3: API Tasks 37
Application Properties
ISCApplicationEnvironment
The following table contains information on the ISCApplicationEnvironment
interface:
Signature Description Valid Arguments
ISCPropertyBag Populates a property bag Category:
with one or more property
PropertyBag(VARIANT ■ Empty – Complete set of features from
values as indicated by
Category[optional], all categories returned
Category and Name
VARIANT Name[optional],
VARIANT AsString[optional]) ■ VT_BSTR – Features returned from the
given category
Name:
■ Empty – All properties from the
selected category are returned
■ VT_BSTR – The property with the given
name and category returned
AsString:
■ Empty – All values in the property bag
are presented in their native type
■ VT_BOOL – If set to TRUE, all values in
the property bag are presented as
strings
Feature categories in the Category parameter of the PropertyBag property are
hierarchical and use a dot (.) to define feature subsets. For example, the
Application category populates a property bag with a complete set of CA ERwin
DM features, while Application.API provides a subset related to the API.
38 API Reference Guide
Application Properties
If the Category parameter is not set, then the PropertyBag property returns
the complete set of all the features from all the available categories.
Example 2
The following example illustrates how to use the API to retrieve the Application
Features using C++. It uses the Application object created in Example 1.
void IteratePersistenceUnits(ISCApplicationPtr & scAppPtr)
{
ISCPropertyBagPtr scBag;
// Retrieve all of application environment properties in one call
scBag = scAppPtr ->GetApplicationEnvironment()->GetPropertyBag();
// Get an array with categories by using empty string as a category name
scBag = scAppPtr ->GetApplicationEnvironment()->GetPropertyBag("", "Categories")
// Get Api Version value Application Api category
scBag = scAppPtr ->GetApplicationEnvironment()->GetPropertyBag ("Application.Api","Api Version")
}
Chapter 3: API Tasks 39
Application Properties
The following example illustrates how to use the API to retrieve the Application
Features using Visual Basic .NET. It uses the Application object created in
Example 1.
Public Sub GetApplicationFeatures(ByRef scApp As SCAPI.Application)
Dim scBag As SCAPI.PropertyBag
' Retrieve all of application environment properties in one call
scBag = scApp.ApplicationEnvironment.PropertyBag
' Retrieve values
PrintPropertyBag(scBag)
' Get an array with categories by using empty string as a category name
scBag = scApp.ApplicationEnvironment.PropertyBag("", "Categories")
' Retrieve a list of categories from the bag
Dim aCategories() As String
Dim CategoryName As Object
If IsArray(scBag.Value("Categories")) Then
' Retrieve an array
aCategories = scBag.Value("Categories")
If aCategories.Length > 0 Then
' Retrieve values on category basis
For Each CategoryName In aCategories
' Get a property bag with values for the category
scBag = scApp.ApplicationEnvironment.PropertyBag(CategoryName)
Console.WriteLine(" Values for the " + CategoryName + " category:")
' Retrieve values
PrintPropertyBag(scBag)
Next CategoryName
End If
End If
' Get Api Version value Application Api category
scBag = scApp.ApplicationEnvironment.PropertyBag("Application.Api", "Api Version")
' Retrieve values
PrintPropertyBag(oBag)
End Sub
' Retrieves and prints values from a property bag
Public Sub PrintPropertyBag(ByRef oBag As SCAPI.PropertyBag)
Dim Idx As Short
Dim nIdx1 As Short
If Not (oBag Is Nothing) Then
For Idx = 0 To oBag.Count - 1
If IsArray(oBag.Value(Idx)) Then
' Retrieve an array
If oBag.Value(Idx).Length > 0 Then
Console.WriteLine(Str(Idx) + ") " + oBag.Name(Idx) + " is an array: ")
For nIdx1 = 0 To UBound(oBag.Value(Idx))
Console.WriteLine(" " + oBag.Value(Idx)(nIdx1).ToString)
Next nIdx1
End If
Else
' A single value
40 API Reference Guide
Accessing a Model
Console.WriteLine(Str(Idx) + ") " + oBag.Name(Idx) + " = " + oBag.Value(Idx).ToString)
End If
Next Idx
End If
End Sub
Accessing a Model
An API client accesses model data by working with a pool of available
persistence units. A persistence unit is the API concept that describes all data
related to a single model. A persistence unit can be accessed and saved to
persistence storage, such as a file or a CA ERwin MM model. A client
manipulates persistence units by using the Persistence Units collection.
The existence of some persistence units in the application is dictated by a
context in which an instance of the application was created. For example, in
standalone mode, none of the units exist at launch time. Methods from the
unit collection interface must be used to accumulate units in the collection. In
add-in component mode, the collection contains all the units known to the CA
ERwin DM user interface at the time when the client component is activated.
When the client program is terminated, the arrangement for the persistence
units in memory for standalone mode is that all units are closed. In add-in
component mode, after the client program has ended, the units are still open
and available in the CA ERwin DM user interface with the exception of those
that were explicitly closed and removed from the persistence unit collection
before exiting the program.
Note: For CA ERwin DM, the collection is a snapshot. The collection includes
only those units that exist at the moment of collection construction (such as at
the moment when the PersistenceUnits method of the ISCApplication interface
was called). An exception to this is units added or deleted from the collection-
these changes are reflected. All new collections reflect the changes as well.
Chapter 3: API Tasks 41
Accessing a Model
Using the API as an Add-in Tool
When the API client is a DLL that is invoked by clicking Add-Ins from the Tools
menu, the client runs within the environment of CA ERwin DM. As a result, all
the models that are currently open within CA ERwin DM are populated in the
PersistenceUnits property of the ISCApplication interface, when an instance of
the interface is created.
To iterate through the models that are currently open in CA ERwin DM, you
can use the ISCApplication interface, ISCPersistenceUnitCollection interface,
and the ISCPersistenceUnit interface, which are described in the sections that
follow.
ISCApplication Interface
The following table contains information on the ISCApplication interface:
Signature Description Valid Arguments
ISCPersistenceUnitCollection Returns a collection of all None
persistence units loaded in
PersistenceUnits()
the application
ISCPersistenceUnitCollection Interface
The following table contains information on the ISCPersistenceUnitCollection
interface:
Signature Description Valid Arguments
ISCPersistenceUnit Passes back a pointer for Index:
the PersistenceUnit
Item(VARIANT nIndex) ■ VT_UNKNOWN – A pointer to a
component identified by
its ordered position session. Retrieves the persistence unit
associated with the session.
■ VT_I4 – Index within the collection.
Collection index is from 0 to size-1.
Retrieves the persistence unit in the
collection with the given index.
■ VT_BSTR – Application-wide unique
persistence unit identifier.
long Count() Number of persistence None
units in the collection
42 API Reference Guide
Accessing a Model
ISCPersistenceUnit Interface
The following table contains information on the ISCPersistenceUnit interface:
Signature Description Valid Arguments
BSTR Name() Returns the name of the None
persistence unit
SC_MODELTYPEID Returns an identifier for None
ObjectId() the persistence unit
ISCPropertyBag Returns a property bag List:
with the properties of the
PropertyBag(VARIANT ■ VT_BSTR – Semicolon-separated list of
persistence unit
List[optional], VARIANT property names. Returns a property
AsString[optional]) bag with the unit properties in the
given list.
AsString:
■ VT_BOOL – Returns a property bag
with all values presented as strings if
set to TRUE. Otherwise, the values are
presented in its native format.
VARIANT_BOOL Returns TRUE if a unit has None
one or more sessions
HasSession()
connected
VARIANT_BOOL IsValid() Returns TRUE is self is None
valid
Property Bag Members for a Persistence Unit
The following table shows some property names and descriptions for property
bag members of an existing persistence unit.
Note: A complete set of available properties is located in the appendix API
Interfaces Reference (see page 109).
Property Name Type Description
Locator BSTR Returns the location of the persistence
unit, such as file name. Not available for
models without a persistence location,
such as new models that were never
saved.
Disposition BSTR Returns the disposition of the persistence
unit, such as read-only.
Chapter 3: API Tasks 43
Accessing a Model
Property Name Type Description
Persistence_Unit_Id SC_MODELTYPEID Retrieves an identifier for the persistence
unit.
Model_Type Long Retrieves the type of the persistence unit,
such as logical, logical-physical, and
physical models.
Target_Server Long Retrieves the target database properties
Target_Server_Version for physical and logical-physical models.
Target_Server_Minor_Version
Active_Model Boolean TRUE if the persistence unit represents the
current model and is active in the CA
ERwin DM user interface. Not available for
the API in standalone mode.
Hidden_Model Boolean TRUE if a model window with the
persistence unit data is not visible in the
CA ERwin DM user interface. Not available
for the API in standalone mode.
Active_Subject_Area_and_Stored SAFEARRAY(BSTR) Reports names of active Subject Area and
_Display Stored Display model objects. This
indicates the Subject Area and Stored
Display that CA ERwin DM shows on the
screen. The returned value is a safe-array
with two elements. The first element is a
name for the active Subject Area and the
second element is for the Stored Display.
44 API Reference Guide
Accessing a Model
ISCPropertyBag Interface
The following table contains information on the ISCPropertyBag interface:
Signature Description Valid Arguments
long Count() Returns the number of None
properties
VARIANT Value(VARIANT Retrieves the indicated Property:
Property) property in the bag
■ VT_BSTR – Name of property. Value
of the property with the given name
in the property bag.
■ VT_I4 – Zero-based property index.
Value of the property with the given
index in the property bag.
BSTR Name(long Retrieves the indicated None
property name with the
PropertyIdx)
given index. Range of
indices is from 0 to size-1.
Example 3
The following example illustrates how to use the API as an add-in tool to
iterate through the open models using C++. The example uses the Application
object created in Example 1:
void IteratePersistenceUnits(ISCApplicationPtr & scAppPtr)
{
ISCPersistenceUnitCollectionPtr scPUnitColPtr;
scPUnitColPtr = scAppPtr->GetPersistenceUnits();
ISCPersistenceUnitPtr scPUnit = 0;
long lCnt = scPUnitColPtr->GetCount();
for(long i = 0; i < lCnt; i++)
{
scPUnit = scPUnitColPtr->GetItem(i);
CString csName = scPUnit->GetName(); // name of model
ISCPropertyBagPtr scPropBag = scPUnit->GetPropertyBag("Locator;Active Model");
long index = 0;
CComVariant vPathName = scPropBag->GetValue(ColeVariant(index)); // full
//path of model
index = 1;
CComVariant cActiveModel = scPropBag->GetValue(COleVariant(index)); // true if active model
// …
}
}
Chapter 3: API Tasks 45
Accessing a Model
The following example illustrates how to use the API as an add-in tool to
iterate through the open models using Visual Basic .NET. The example uses
the Application object created in Example 1:
Public Sub IteratePersistenceUnits(ByRef scApp As SCAPI.Application)
Dim scPersistenceUnitCol as SCAPI.PersistenceUnits
Dim numUnits As Integer
Dim scPUnit As SCAPI.PersistenceUnit
scPersistenceUnitCol = scApp.PersistenceUnits
' Count open units
numUnits = scPersistenceUnitCol.Count
If (numUnits > 0) Then
For Each scPUnit In scPersistenceUnitCol
Dim propBag As SCAPI.PropertyBag
propBag = scPUnit.PropertyBag("Locator")
Console.WriteLine( persUnit.Name ) ' name of model
Console.WriteLine( propBag.Value(0)) ' full path of model
'…
Next
End If
End Sub
Using the API as a Standalone Executable
When the API client is a standalone executable, the client runs outside the CA
ERwin DM environment. As a result, when the ISCApplication interface is
created, the PersistenceUnits property is an empty collection. Even if CA ERwin
DM is running and there are open models, the PersistenceUnits property is still
empty because the API environment is independent of the CA ERwin DM
environment. To get a valid persistence unit, the API client needs to either
create a new model or open an existing model.
46 API Reference Guide
Accessing a Model
Creating a Model
To create a new model using the API, you first need to create a new instance
of ISCPropertyBag. The ISCPropertyBag interface is a property bag that is
used to hold the properties of the new model. The following properties are
used in creating a new model.
Note: A complete set of properties is located in the appendix API Interfaces
Reference (see page 109).
Property Name Type Description
Model_Type Long Sets the type of the persistence unit as follows:
■ 1 – Logical (for logical models; this is the default if
no type is provided)
■ 2 – Physical (for physical models)
■ 3 – Combined (for logical/physical models)
Target_Server Long Sets the target database properties for physical and
Target_Server_Version logical/physical models.
Target_Server_Minor_Versio
n
Once the property bag is created and populated, a new persistence unit must
be created within the persistence unit collection.
ISCPersistenceUnitCollection Interface
The following table contains information on the ISCPersistenceUnitCollection
interface:
Signature Description Valid Arguments
ISCPersistenceUnit * Creates a new unit, and ObjectId:
Create(ISCPropertyBag * registers the unit with the
PropertyBag, VARIANT ObjectId collection ■ Empty – The API assigns an
[optional]) ID to the new persistence
unit.
■ VT_BSTR – The API assigns
the given ID to the new
persistence unit.
Chapter 3: API Tasks 47
Accessing a Model
ISCPropertyBag Interface
The following table contains information on the ISCPropertyBag interface:
Signature Description Valid Arguments
VARIANT_BOOL Add(BSTR Adds a new property to the bag Value:
Name, VARIANT Value)
All VARIANTs are valid. The
function returns TRUE if the
property was added to the bag,
otherwise, it is FALSE.
Example 4
The following example illustrates how to create a new persistence unit using
C++. The example uses the Application object created in Example 1:
ISCPersistenceUnitPtr CreateNewModel(ISCApplicationPtr & scAppPtr)
{
ISCPersistenceUnitCollectionPtr scPUnitColPtr;
scPUnitColPtr = scAppPtr->GetPersistenceUnits();
ISCPropertyBagPtr propBag;
HRESULT hr =propBag.CreateInstance(__uuidof(SCAPI::PropertyBag));
if (FAILED(hr))
return;
propBag->Add("Name", “Test Model”);
propBag->Add("ModelType", “Logical”);
ISCPersistenceUnitPtr scPUnitPtr = scPUnitColPtr->Create(propBag,vtMissing);
return scPUnitPtr;
}
The following example illustrates how to create a new persistence unit using
Visual Basic .NET. The example uses the Application object created in Example
1:
Public Function CreateNewModel(ByRef scApp As SCAPI.Application) As SCAPI.PersistenceUnit
Dim scPersistenceUnitCol as SCAPI.PersistenceUnits
scPersistenceUnitCol = scApp.PersistenceUnits
Dim propBag As New SCAPI.PropertyBag
propBag.Add("Name", "Test Model")
propBag.Add("ModelType", 0)
CreateNewModel = scPersistenceUnitCol.Create(propBag)
End Function
48 API Reference Guide
Accessing a Model
Opening an Existing Model
An existing CA ERwin DM model is opened by adding a persistence unit to the
persistence unit collection (ISCPersistenceUnitCollection). When the API client
is an add-in tool, opening a model through the API also opens the model in the
CA ERwin DM user interface.
ISCPersistenceUnitCollection Interface
The following table contains information on the ISCPersistenceUnitCollection
interface:
Signature Description Valid Arguments
ISCPersistenceUnit * Adds a new persistence unit to Locator:
Add(VARIANT Locator, VARIANT the unit collection
Disposition [optional]) ■ VT_BSTR – Full path to the
CA ERwin DM model. This is
the model that is loaded into
the persistence unit.
Disposition:
■ VT_BSTR – Arranges access
attributes, such as read-
only.
Note: Detailed descriptions of the location and format of the Disposition
parameters is located in the appendix API Interfaces Reference (see
page 109).
Example 5
The following example illustrates how to open an existing model using C++.
The example uses the Application object created in Example 1:
ISCPersistenceUnitPtr OpenModel(ISCApplicationPtr & scAppPtr, CString & csFullPath)
{
ISCPersistenceUnitCollectionPtr scPUnitColPtr;
scPUnitColPtr = scAppPtr->GetPersistenceUnits();
ISCPersistenceUnitPtr scPUnitPtr = scPUnitColPtr- >Add(COleVariant(csFullPath));
return scPUnitPtr;
}
Chapter 3: API Tasks 49
Accessing a Model
The following example illustrates how to open an existing model using Visual
Basic .NET. The example uses the Application object created in Example 1:
Public Function OpenModel(ByRef scApp As SCAPI.Application, _
fullModelPath As String) As SCAPI.PersistenceUnit
Dim scPersistenceUnitCol as SCAPI.PersistenceUnits
scPersistenceUnitCol = scApp.PersistenceUnits
OpenModel = scPersistenceUnitCol.Add(fullModelPath)
End Sub
Opening a Session
Before the objects of a model can be accessed using the API, an ISCSession
instance must first be established for the ISCPersistenceUnit of the model. To
open a session for a persistence unit, add a new ISCSession to the
ISCSessionCollection, and then open the ISCPersistenceUnit in the new
session.
ISCSessionCollection Interface
The following table contains information on the ISCSessionCollection interface:
Signature Description Valid Arguments
ISCSession * Add() Constructs a new, closed None
Session object, and adds it to
the collection
50 API Reference Guide
Accessing a Model
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
VARIANT_BOOL Binds self to the Unit:
Open(IUnknown * Unit, persistence unit identified
VARIANT Level by the Unit parameter ■ Pointer to a persistence unit that was
[optional], VARIANT loaded. Attaches the persistence unit to
Flags [optional]) the session.
Level:
■ Empty – Defaults to data level access
(SCD_SL_M0).
■ SCD_SL_M0 – Data level access.
Flags:
■ Empty – Defaults to SCD_SF_NONE.
■ SCD_SF_NONE – Specifies that other
sessions can have access to the attached
persistence unit.
■ SCD_SF_EXCLUSIVE – Specifies that other
sessions cannot have access to the
attached persistence unit.
Example 6
The following example illustrates how to open a session using C++. The
example uses the Application object created in Example 1 and the
CreateNewModel function from Example 4:
ISCSessionPtr OpenSession(ISCApplicationPtr & scAppPtr)
{
ISCSessionCollectionPtr scSessionColPtr = scAppPtr->GetSessions();
ISCSessionPtr scSessionPtr = scSessionColPtr->Add(); // add a new session
ISCPersistenceUnitPtr scPUnitPtr = CreateNewModel(scAppPtr); // From Example 4
CComVariant varResult = scSessionPtr->Open(scPUnitPtr, (long) SCD_SL_M0); // open unit
if (varResult.vt == VT_BOOL && varResult.boolVal == FALSE)
return NULL;
return scSessionPtr;
}
Chapter 3: API Tasks 51
Accessing a Model
The following example illustrates how to open a session using Visual Basic
.NET. The example uses the Application object created in Example 1 and the
CreateNewModel function from Example 4:
Public Function OpenSession(ByRef scApp As SCAPI.Application) As SCAPI.Session
Dim scSessionCol As SCAPI.Sessions
Dim scPUnit As SCAPI.PersistenceUnit
scSessionCol = scApp.Sessions
OpenSession = scSessionCol.Add 'new session
scPUnit = CreateNewModel(scApp) ' From Example 4
scSession.Open(scPUnit, SCD_SL_M0) ' open the persistence unit
End Sub
Accessing a Model Set
A persistence unit contains data as a group of linked model sets. The model
sets are arranged in a tree-like hierarchy with a single model set at the top.
The top model set in a persistence unit contains the bulk of modeling data.
The CA ERwin DM API uses the abbreviation EMX to identify the top model set.
The EMX model set owns a secondary model set, abbreviated as EM2, that
contains user options and user interface settings.
The ISCSession interface allows you to open the top model set by simply
providing a pointer to the ISCPersistenceUnit interface in ISCSession::Open
call.
It is possible to iterate over all model sets constituting a persistence unit.
While iterating, a pointer to the ISCModelSet interface can be used to open a
session with the particular model set. This is done by submitting the pointer to
ISCSession::Open call as the first parameter, instead of a persistence unit.
The ModelSet property of the ISCPersistenceUnit interface provides the
starting point for iteration over a persistence unit's model sets. The use of the
OwnedModelSets property of ISCModelSet allows you to iterate over the next
level of model sets in the persistence unit.
52 API Reference Guide
Accessing a Model
ISCPersistenceUnit Interface
The following table contains information on the ISCPersistenceUnit interface:
Signature Description Valid Arguments
ISCModelSet * Passes back a pointer on None
ModelSet() the top model set in the
Persistence Unit.
ISCModelSet Interface
The following table contains information on the ISCModelSet interface:
Signature Description Valid Arguments
ISCModelSetCollection * Provides a collection with None
OwnedModelSets() directly owned model sets.
ISCModelSetCollection Interface
The following table contains information on the ISCModelSetCollection
interface:
Signature Description Valid Arguments
ISCModelSet * Passes back a pointer for nIndex:
Item(VARIANT nIndex) a ModelSet component.
■ VT_I4 – Index of a model set in the model
set collection. The index is zero-based.
■ VT_BSTR – Model set identifier.
■ VT_BSTR – Class identifier for metadata
associated with a model set.
■ VT_BSTR – Class name for metadata
associated with a model set.
Note: For information on metadata class identifiers and names see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
Chapter 3: API Tasks 53
Accessing a Model
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
VARIANT_BOOL Binds self to the model set ModelSet:
Open(IUnknown * identified by the ModelSet
ModelSet, VARIANT parameter ■ Pointer to a model set from a persistence
Level [optional], unit that was loaded. Attaches the model
VARIANT Flags set to the session.
[optional]) Level:
■ Empty – Defaults to data level access
(SCD_SL_M0).
■ SCD_SL_M0 – Data level access.
Flags:
■ Empty – Defaults to SCD_SF_NONE.
■ SCD_SF_NONE – Other sessions can have
access to the attached persistence unit.
■ SCD_SF_EXCLUSIVE – Other sessions
cannot have access to the attached
persistence unit.
Example 7
The following example illustrates how to open a session with the EM2 model of
a persistence unit using C++. The example uses the Application object created
in Example 1 and the CreateNewModel function from Example 4:
void OpenEM2(ISCApplicationPtr & scAppPtr)
{
ISCSessionCollectionPtr scSessionColPtr = scAppPtr->GetSessions();
ISCPersistenceUnitPtr scPUnitPtr = CreateNewModel(scAppPtr); // From Example 4
ISCModelSetPtr scEMXModelSetPtr = scPUnitPtr->ModelSet(); // Collect the top model set
ISCModelSetPtr scEM2ModelSetPtr = scEMXModelSetPtr- >GetOwnedModelSets()-
>GetItem(COleVariant("EM2"));
if (scEM2ModelPtr != NULL)
{
ISCSessionPtr scSessionPtr = scSessionColPtr->Add(); // add a new session
CComVariant varResult = scSessionPtr->Open(scEM2ModelSetPtr);
if (varResult.vt == VT_BOOL && varResult.boolVal == FALSE)
return;
// …
}
54 API Reference Guide
Accessing Objects in a Model
The following example illustrates how to open a session with the EM2 model of
a persistence unit using Visual Basic .NET. The example uses the Application
object created in Example 1 and the CreateNewModel function from Example
4:
Public Sub OpenEM2(ByRef scApp As SCAPI.Application )
Dim scSession As SCAPI.Session
Dim scEMXModelSet As SCAPI.ModelSet
Dim scEM2ModelSet As SCAPI.ModelSet
Dim scPUnit As SCAPI.PersistenceUnit
scSessionCol = scApp.Sessions
scPUnit = CreateNewModel(scApp) ' From Example 4
' Access the top model set - of EMX type
scEMXModelSet = persUnit.ModelSet
' Access an owned EM2 model set by class name
scEM2ModelSet = scEMXModelSet.OwnedModelSets("EM2")
Console.WriteLine(vbTab + " Access EM2 Model Set by class name" + scEM2ModelSet.Name + _" Id " +
scEM2ModelSet.ModelSetId)
Console.WriteLine(vbTab + vbTab + " Class Name " + scEM2ModelSet.ClassName + _" Class id " +
scEM2ModelSet.ClassId)
scSession = scSessionCol.Add ' new session
scSession.Open(scEM2ModelSet, SCD_SL_M0) ' connect EM2 to a session
'…
End Sub
Accessing Objects in a Model
You can access model objects through the ModelObjects property in an active
ISCSession instance. The ModelObjects property is a collection of all model
objects associated with the persistence unit of the session. The ModelObjects
property is an instance of the ISCModelObjectCollection. Iteration through an
instance of ISCModelObjectCollection is done in a depth-first fashion, and
returns instances of ISCModelObject.
The following sections describe the interfaces used to access model objects.
Chapter 3: API Tasks 55
Accessing Objects in a Model
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
ISCModelObjectCollection * Creates a ModelObject collection None
ModelObjects() for the session
ISCModelObjectCollection Interface
The following table contains information on the ISCModelObjectCollection
interface:
Signature Description Valid Arguments
long Count() Number of objects in the None
collection
IUnknown _NewEnum() Constructs an instance of the None
collection enumerator object
ISCModelObject Interface
The following table contains information on the ISCModelObject interface:
Signature Description Valid Arguments
BSTR ClassName() Returns the class name of the None
current object
SC_OBJID ObjectId() Uniquely identifies the current None
object
BSTR Name() Returns the name or a string None
identifier of the current object
SC_CLSID ClassId() Returns the class identifier of None
the current object
ISCModelObject * Context() Passes back the context (parent) None
of the object
56 API Reference Guide
Accessing Objects in a Model
Example 8
The following example illustrates how to access model objects using C++. The
example uses the Application object created in Example 1 and the
OpenSession function from Example 6:
void IterateObjects(ISCApplicationPtr & scAppPtr)
{
ISCSessionPtr scSessionPtr = OpenSession( scAppPtr ); // From Example 6
//Make sure the Session Ptr is Open
if(!scSessionPtr->IsOpen())
{
AfxMessageBox("Session Not Opened");
return;
}
ISCModelObjectCollectionPtr scModelObjColPtr = scSessionPtr >GetModelObjects();
IUnknownPtr _NewEnum = NULL;
IEnumVARIANT* ObjCollection;
_NewEnum = scModelObjColPtr ->Get_NewEnum();
if (_NewEnum != NULL)
{
HRESULT hr = _NewEnum->QueryInterface(IID_IEnumVARIANT, (LPVOID*) &ObjCollection);
if (!FAILED(hr))
COleVariant xObject;
{
while (S_OK == ObjCollection->Next(1,&xObject,NULL))
{
ISCModelObjectPtr pxItem = (V_DISPATCH (&xObject));
// ISCModelObject in xObject was AddRefed already. All we need is to
//attach it to a smart pointer
xObject.Clear();
// Process the Item
CString csName = (LPSTR) pxItem->GetName();
CString csID = (LPSTR) pxItem->GetObjectId();
CString csType = (LPSTR) pxItem->GetClassName();
// …
}
}
if (ObjCollection)
ObjCollection->Release();
}
}
Chapter 3: API Tasks 57
Accessing Objects in a Model
The following example illustrates how to access model objects using Visual
Basic .NET. The example uses the Application object created in Example 1 and
the OpenSession function from Example 6:
Public Sub IterateObjects(ByRef scApp As SCAPI.Application)
Dim scSession As SCAPI.scSession
Dim scModelObjects As SCAPI.ModelObjects
Dim scObj As SCAPI.ModelObject
scSession = OpenSession( scApp ) ' From Example 6
' Make sure that the session is open
If scSession.IsOpen() Them
scModelObjects = scSession.ModelObjects
For Each scObj In scModelObjects
Console.WriteLine( scObj.Name )
Console.WriteLine( scObj.ObjectId )
Dubug.WriteLine( scObj.ClassName )
Next
End If
End Sub
Accessing a Specific Object
You can directly access model objects in an ISCModelObjectCollection instance
by using the Item method of the interface.
58 API Reference Guide
Accessing Objects in a Model
ISCModelObjectCollection Interface
The following table contains information on the ISCModelObjectCollection
interface:
Signature Description Valid Arguments
ISCModelObject * Returns an IUnknown nIndex:
Item(VARIANT nIndex, pointer for a Model Object
VARIANT Class component identified by ■ VT_UNKNOWN – Pointer to the
[optional]) the nIndex parameter ISCModelObject interface. Given object is
returned from the collection.
■ VT_BSTR – ID of an object. The object
with the given identifier is returned from
the collection.
■ VT_BSTR – Name of an object. If the
name of an object is used, the Class
parameter must also be used. The object
with the given name and given Class type
is returned from the collection.
Class:
■ Empty – The object specified by nIndex is
returned from the collection.
■ VT_BSTR – Name of a class. Must be used
if the nIndex parameter is the name of an
object. Returns the object with the given
name and given Class.
■ VT_BSTR – Class ID of object type. Must
be used if the nIndex parameter is the
name of an object. Returns the object
with the given name and given Class
identifier.
Chapter 3: API Tasks 59
Accessing Objects in a Model
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
Example 9
The following example illustrates how to access a specific object using C++.
The example uses a Session object from Example 6:
void GetObject(ISCSessionPtr & scSessionPtr, CString & csID)
{
ISCModelObjectCollectionPtr scModelObjColPtr = scSessionPtr->GetModelObjects();
ISCModelObjectPtr scObjPtr = scModelObjColPtr->GetItem(COleVariant(csID));
// …
}
The following example illustrates how to access a specific object using Visual
Basic .NET. The example uses a Session object from Example 6:
Public Sub GetObject(ByRef scSession As SCAPI.Session, ByRef objID As String)
Dim scObjCol as SCAPI.ModelObjects
Dim scObj as SCAPI.ModelObject
scObjCol = scSession.ModelObjects
scObj = scObjCol.Item(objID) ' retrieves object with given object ID
End Sub
Filtering Object Collections
You can create subsets of a collection by using
ISCModelObjectCollection::Collect method. The Collect method creates a new
instance of the Model Objects collection component based on the filtering
criteria specified in the parameters of the method. The filtering criteria is
optional, and any number of combinations of criteria can be used.
60 API Reference Guide
Accessing Objects in a Model
ISCModelObjectCollection Interface
The following table contains information on the ISCModelObjectCollection
interface:
Signature Description Valid Arguments
ISCModelObjectCollection * Creates a Model Objects Root:
Collect(VARIANT Root, collection, which
VARIANT ClassId [optional], represents a subcollection ■ VT_UNKNOWN – ISCModelObject
VARIANT Depth [optional], of itself. pointer of the root object. Returns the
VARIANT MustBeOn descendants of the given object.
The method creates a
[optional], VARIANT ■ VT_BSTR – The Object ID of the root
valid collection even
MustBeOff [optional]) object. Returns the descendants of the
though the collection may
be empty. object with the given object identifier.
ClassId:
■ VT_ARRAY|VT_BSTR – SAFEARRAY of
class IDs. Returns the descendants of
the root with the given object class
identifiers.
■ VT_ARRAY|VT_BSTR – SAFEARRAY of
class names. Returns the descendants
of the root with the given object class
name.
■ VT_BSTR – Class ID. Returns the
descendants of the root with the given
object class identifier.
■ VT_BSTR – Semicolon delimited list of
class IDs. Returns the descendants of
the root with the given class identifiers.
■ VT_BSTR – Class name. Returns the
descendants of the root with the given
class name.
■ VT_BSTR – Semicolon delimited list of
class names. Returns the descendants
of the root with the given class names.
■ Empty – Returns all descendants
regardless of class type.
Chapter 3: API Tasks 61
Accessing Objects in a Model
Signature Description Valid Arguments
Depth:
■ VT_I4 – Maximum depth. Returns the
descendants of the root at a depth no
more than the given depth. A depth of
-1 represents unlimited depth.
■ Empty – Returns all descendants of the
root (unlimited depth).
MustBeOn:
■ VT_I4 – Returns the descendants of
the root with the given object flags set.
■ Empty – Defaults to
SCD_MOF_DONT_CARE.
MustBeOff:
■ VT_I4 – Returns the descendants of
the root that do not have the given
object flags set.
■ Empty – Defaults to
SCD_MOF_DONT_CARE.
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed. More information about SC_ModelObjectFlags is
located in the appendix API Interfaces Reference (see page 109).
The following sections show the code examples for the different filters.
Example 10
The following example illustrates the Object Type filter using C++. The
example uses the Session object from Example 6 and creates a collection of
objects of csType type, owned by the rootObj object:
void FilterObjects(ISCSessionPtr scSessionPtr, ISCModelObjectPtr & rootObj,
CString & csType)
{
ISCModelObjectCollectionPtr scModelObjectsPtr;
scModelObjectsPtr = scSessionPtr->GetModelObjects()->Collect(rootObj->GetObjectId(), COleVariant(csType));
// …
}
62 API Reference Guide
Accessing Objects in a Model
The following example illustrates the Object Type filter using Visual Basic .NET.
The example uses the Session object from Example 6 and creates a collection
of objects of csType type, owned by the rootObj object:
Public Sub FilterObjects(ByRef scSession As SCAPI.Session, _
ByRef rootObj As SCAPI.ModelObject, ByRef objType as String)
Dim scModelObjects As SCAPI.ModelObjects
scModelObjects = scSession.ModelObject.Collect(rootObj, objType)
' scModelObjects will contain only objects of type objType
End Sub
Example 11
The following example illustrates the Depth filter using C++:
void FilterObjects(ISCSessionPtr scSessionPtr, ISCModelObjectPtr & rootObj,
CString & csType, long depth)
{
ISCModelObjectCollectionPtr scModelObjectsPtr;
scModelObjectsPtr = scSessionPtr->GetModelObject()->
Collect(rootObj->GetObjectId(), COleVariant(csType),depth);
// …
}
The following example illustrates the Depth filter using Visual Basic .NET:
Public Sub FilterObjects(ByRef scSession As SCAPI.Session, _
ByRef rootObj As SCAPI.ModelObject, ByRef classID As String, depth As Integer)
Dim scModelObjects As SCAPI.ModelObjects
scModelObjects = scSession.ModelObjects.Collect(rootObj, classID, depth)
End Sub
Example 12
The following example illustrates the MustBeOn/MustBeOff filter using C++.
The example uses the Session object from Example 6:
void FilterObjects(ISCSessionPtr scSessionPtr, ISCModelObjectPtr & rootObj, long depth)
{
ISCModelObjectCollectionPtr scModelObjectsPtr;
scModelObjectsPtr = scSessionPtr->GetModelObjects()->
Collect(rootObj->GetObjectId(), vtMissing, depth, SCD_MOF_USER_DEFINED);
// …
}
Chapter 3: API Tasks 63
Accessing Object Properties
The following example illustrates the MustBeOn/MustBeOff filter using Visual
Basic .NET. The example uses the Session object from Example 6:
Public Sub FilterObjects(ByRef scSession As SCAPI.Session, _
ByRef rootObj As SCAPI.ModelObject, depth As Integer)
Dim scModelObjects As SCAPI.ModelObjects
scModelObjects = scSession.ModelObjects.Collect(rootObj, , depth, SCD_MOF_USER_DEFINED)
End Sub
Accessing Object Properties
You can access the properties of an object through the Properties property of
ISCModelObject. The Properties property is an instance of
ISCModelPropertyCollection. The ISCModelPropertyCollection contains
instances of ISCModelProperty.
Iteration of Properties
This section describes the interfaces involved with the iteration of properties.
ISCModelObject Interface
The following table contains information on the ISCModelObject interface:
Signature Description Valid Arguments
ISCModelPropertyCollection * Returns a property collection None
Properties() of all available properties
ISCModelPropertyCollection Interface
The following table contains information on the ISCModelPropertyCollection
interface:
Signature Description Valid Arguments
Long Count() Number of properties in the None
collection
IUnknown _NewEnum() Constructs an instance of the None
collection enumerator object
64 API Reference Guide
Accessing Object Properties
ISCModelProperty Interface
The following table contains information on the ISCModelProperty interface:
Signature Description Valid Arguments
BSTR ClassName() Returns the class name of the None
property
SC_CLSID ClassId() Returns the class identifier of None
the property
Long Count() Contains the number of values None
in the property
BSTR FormatAsString() Formats the property value as a None
string
Chapter 3: API Tasks 65
Accessing Object Properties
Example 13
The following example illustrates the iteration of properties using C++. The
example uses a Model Object object from Example 9:
void IterateObjectProperties(ISCModelObjectPtr & scObjPtr)
{
ISCModelPropertyCollectionPtr propColPtr = scObjPtr->GetProperties();
// Iterate over the Collection
IUnknownPtr _NewEnum = NULL;
IEnumVARIANT* propCollection;
_NewEnum = propColPtr->Get_NewEnum();
if (_NewEnum != NULL)
{
HRESULT hr = _NewEnum->QueryInterface(IID_IEnumVARIANT, (LPVOID*) &propCollection);
if (!FAILED(hr))
{
COleVariant xObject;
while (S_OK == propCollection->Next(1,&xObject,NULL))
{
ISCModelPropertyPtr scObjPropPtr = (V_DISPATCH (&xObject));
xObject.Clear();
if (scObjPropPtr.GetInterfacePtr())
{
CString csPropName = (LPSTR) scObjPropPtr->GetClassName();
CString csPropVal= (LPSTR) scObjPropPtr->FormatAsString();
// …
}
} // property iteration
}
if (propCollection)
propCollection->Release();
}
}
66 API Reference Guide
Accessing Object Properties
The following example illustrates the iteration of properties using Visual Basic
.NET. The example uses a Model Object object from Example 9:
Public Sub IterateObjectProperties(ByRef scObj As SCAPI.ModelObject)
Dim scObjProperties As SCAPI.ModelProperties
Dim scObjProp As SCAPI.ModelProperty
scObjProperties = scObj.Properties
For Each scObjProp In scObjProperties
Debug.WriteLine( scObjProp.ClassName )
Console.WriteLine( scObjProp.Name )
Next
End Sub
Chapter 3: API Tasks 67
Accessing Object Properties
ISCModelProperty Interface
The following table contains information on the ISCModelProperty interface:
Signature Description Valid Arguments
long Count() Contains the number of values None
in the property.
For scalar properties, the
number of values in the property
is always one.
It is possible to have a non-
scalar property with no
elements. In this case, the
number of values in the property
will be zero.
SC_ModelPropertyFlags Flags() Returns the flags of the None
property.
VARIANT Value(VARIANT Retrieves the indicated property ValueId:
ValueId [optional], VARIANT value in the requested format.
ValueType [optional]) ■ Empty – Valid for a scalar
property only.
■ VT_I4 – Zero-based index
within a homogeneous
array. The value of the
member indicated by this
index is returned.
ValueType:
■ Empty – Indicates a native
datatype for a return value.
■ SCVT_DEFAULT – Indicates
a native datatype for a
returned value.
■ SCVT_BSTR – Requests
conversion to a string for a
returned value.
68 API Reference Guide
Accessing Object Properties
Note: More information about SC_ModelPropertyFlags is located in the
Enumerations (see page 167) section. More information about property
datatypes is located in the SC_ValueTypes (see page 170) section.
Example 14
The following example illustrates how to access scalar property values using
C++. The example uses a Model Property object from Example 13:
void GetScalarProperty(ISCModelPropertyPtr & scObjPropPtr)
{
if (scObjPropPtr->GetCount() <= 1)
{
_bstr_t bstrPropVal= scObjPropPtr->FormatAsString();
// …
}
}
The following example illustrates how to access scalar property values using
Visual Basic .NET. The example uses a Model Property object from Example
13:
Public Sub GetPropertyElement(ByRef scObjProp As SCAPI.ModelProperty)
If (scObjProp.Flags And SCAPI.SC_ModelPropertyFlags.SCD_MPF_NULL) Then
Console.WriteLine( "The value is Null" )
Else
If (scObjProp.Flags And SCAPI.SC_ModelPropertyFlags.SCD_MPF_SCALAR) Then
Console.WriteLine( scObjProp.Value.ToString() )
Else
For j = 0 To scObjProp.Count-1
Console.WriteLine( scObjProp.Value(j).ToString() )
Next
End If
End If
End Sub
Chapter 3: API Tasks 69
Accessing Object Properties
Iterating Over Non-Scalar Property Values
The properties that contain multiple values (either homogeneous or
heterogeneous) are non-scalar properties. To access the individual values of a
non-scalar property, the PropertyValues member of the ISCModelProperty
interface is used. The PropertyValues member is an instance of
ISCPropertyValueCollection. Each member of ISCPropertyValueCollection is an
instance of ISCPropertyValue. The ValueId member of the ISCPropertyValue
interface identifies the individual property values in a non-scalar property.
ValueId can either be a zero-based index or the name of the non-scalar
property value member if the property type is a structure.
ISCModelProperty Interface
The following table contains information on the ISCModelProperty interface:
Signature Description Valid Arguments
ISCPropertyValueCollection * Returns the values for the None
PropertyValues() property
ISCPropertyValueCollection Interface
The following table contains information on the ISCPropertyValueCollection
interface:
Signature Description Valid Arguments
long Count() Number of values in the None
collection
IUnknown _NewEnum() Constructs an instance of the None
collection enumerator object
70 API Reference Guide
Accessing Object Properties
ISCPropertyValue Interface
The following table contains information on the ISCPropertyValue interface:
Signature Description Valid Arguments
VARIANT ValueId(VARIANT ValueType Uniquely identifies the value in ValueType:
[optional]) a non-scalar property.
■ SCVT_I2 – If the
property is non-scalar,
the value of the property
index is returned.
■ SCVT_I4 – If the
property is non-scalar,
the value of the property
index is returned.
■ SCVT_BSTR – The name
of the non-scalar
property member if it is
available, or else the
index of the member is
returned.
■ SCVT_DEFAULT – If the
property is non-scalar,
the value of the property
index is returned.
■ Empty – Defaults to
SCVT_DEFAULT.
SC_CLSID PropertyClassId() Returns the class identifier of None
the current property
BSTR PropertyClassName() Returns the class name of the None
current property
Chapter 3: API Tasks 71
Accessing Object Properties
Signature Description Valid Arguments
VARIANT Value(VARIANT ValueType Converts the current value to ValueType:
[optional]) the passed value type.
■ SCVT_DEFAULT –
Indicates a value in the
native format.
■ SCVT_BSTR – String
representation of the
property value.
■ Target Type – Identifies
a target for a type
conversion.
■ Empty – Defaults to
SCVT_DEFAULT.
SC_ValueTypes ValueType() Passes back the identifier of None
the value default type
SC_ValueTypes ValueIdType() Passes back the identifier of None
the value identifier default
type
SC_ValueTypes * Groups a list of supported None
GetSupportedValueTypes() value types and returns it as a
SAFEARRAY
SC_ValueTypes * Groups a list of supported None
GetSupportedValueIdTypes() value types for the current
value identifier and returns it
as a SAFEARRAY
72 API Reference Guide
Accessing Object Properties
Note: More information about value datatypes is located in the
SC_ValueTypes (see page 170) section.
Example 15
The following example illustrates how to access non-scalar property values
using C++. The example uses a Model Property object from Example 13:
void IterateNonScalarProperties(ISCModelPropertyPtr & scObjPropPtr)
{
if (scObjPropPtr->GetCount() > 1)
{
ISCPropertyValueCollectionPtr propVals = scObjPropPtr->GetPropertyValues();
long numVals = propVals->GetCount();
for (long i = 0; i < numVals; i++)
{
ISCPropertyValuePtr propValPtr = propVals->GetItem(COleVariant(i));
VARIANT valType;
V_VT(&valType) = VT_I4;
V_I4(&valType) = SCVT_BSTR;
bstr_t bstrPropVal = propValPtr->GetValue(valType);
// …
}
}
}
The following example illustrates how to access non-scalar property values
using Visual Basic .NET. The example uses a Model Property object from
Example 13:
Public Sub IterateNonScalarProperties(ByRef scObjProp As SCAPI.ModelProperty)
Dim scPropValue as SCAPI.PropertyValue
If (scObjProp.Count > 1) Then
For Each scPropValue In scObjProp.PropertyValues
If (scPropValue.ValueIdType = SCVT_BSTR) Then
Console.WriteLine( scPropValue.ValueId(SCVT_BSTR),": ", _
scPropValue.Value.ToString())
Else
Console.WriteLine (scPropValue.Value.ToString())
End If
Next
End If
End Sub
Chapter 3: API Tasks 73
Accessing Object Properties
Accessing a Specific Property
For non-scalar properties, you can directly access individual values by using
the Item method of ISCPropertyValueCollection.
ISCPropertyValueCollection Interface
The following table contains information on the ISCPropertyValueCollection
interface:
Signature Description Valid Arguments
ISCPropertyValue * Returns a single value from the ValueId:
Item(VARIANT ValueId) property value collection
■ VT_I4 – Index of the
member in a non-scalar
property.
■ VT_BSTR – Name of a
member in a non-scalar
property.
Note: For r7.3, CA ERwin DM does not support naming of non-scalar property
members.
Example 16
The following example illustrates how to access a specific property using C++.
The example uses a Model Object object from Example 9:
// This function retrieves a specific value with the given index from the property with the
// given name.
ISCPropertyValuePtr GetPropValue(ISCModelObjectPtr & scObjPtr, CString & csName, int index)
{
ISCModelPropertyCollectionPtr propColPtr = scObjPtr->GetProperties();
ISCModelPropertyPtr scObjPropPtr = propColPtr->GetItem(COleVariant(csName));
ISCPropertyValueCollectionPtr propVals = scObjPropPtr->GetPropertyValues();
return propVals->GetItem(COleVariant(index));
}
74 API Reference Guide
Accessing Object Properties
The following example illustrates how to access a specific property using Visual
Basic .NET. The example uses a Model Object object from Example 9:
' This function retrieves a specific value with the given index from the property with the
' given name.
Public Function GetPropValue(ByRef scObj As SCAPI.ModelObject, ByRef propName As String, _index As
Integer) As SCAPI.PropertyValue
Dim scProp as SCAPI.ModelProperty
Set scProp = scObj.Properties.Item(propName)
Set GetPropValue = scProp.PropertyValues.Item(index)
End Function
Filtering Properties
Subsets of an instance of ISCModelPropertyCollection can be created by using
its CollectProperties method of ISCModelObject. The CollectProperties method
creates a new instance of ISCModelPropertyCollection based on the filtering
criteria specified in the parameters of the method. By filtering the property
collection, you can retrieve properties of a certain class, properties with
specified flags set, or properties that do not have specified flags set. The
filtering criteria is optional, and any number of combinations of criteria can be
used. More information about specific property flags is located in the
Enumerations (see page 167) section.
Note: For more information about identifiers used in property classes, see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
Chapter 3: API Tasks 75
Accessing Object Properties
ISCModelObject Interface
The following table contains information on the ISCModelObject interface:
Signature Description Valid Arguments
ISCModelPropertyCollection * Returns a property ClassIds:
CollectProperties(VARIANT collection of the type
ClassIds [optional], VARIANT that you require ■ Empty – All properties of the object are
MustBeOn [optional], returned.
VARIANT MustBeOff ■ VT_ARRAY|VT_BSTR – SAFEARRAY of
[optional]) property class IDs. Returns the properties
with the given property class identifiers.
■ VT_ARRAY|VT_BSTR – SAFEARRAY of
property names. Returns the properties
with the given class names.
■ VT_BSTR – ID of a property class. Returns
the property with the given property class
identifier.
■ VT_BSTR – Name of a property. Returns
the property with the given class name.
■ VT_BSTR – List of property class IDs
delimited by semicolons. Returns the
properties with the given property class
identifiers.
■ VT_BSTR – List of property names
delimited by semicolons. Returns the
properties with the given class names.
MustBeOn:
■ Empty – Defaults to
SCD_MPF_DONT_CARE and returns all
properties.
■ VT_I4 – SC_ModelObjectFlags flags that
must be on. Returns the properties with
the specified flags set.
MustBeOff:
■ Empty – Defaults to SCD_MPF_NULL and
returns all properties.
■ VT_I4 – SC_ModelObjectFlags flags that
must be off. Returns the properties that do
not have the specified flags set.
76 API Reference Guide
Accessing Object Properties
Note: Setting certain filter criteria can influence the effectiveness of data
retrieving. For example, setting the MustBeOn filter to SCD_MPF_DERIVED
builds a collection with only the calculated and derived properties. Requests to
evaluate the calculated and derived properties will reduce performance while
iterating over the collection. However, setting the MustBeOff filter to the same
value, SCD_MPF_DERIVED, which excludes the calculated and derived
properties, improves performance.
Example 17
The following example illustrates how to filter properties using C++. The
example uses a Model Object object from Example 9:
void GetProperties(ISCModelObjectPtr & scObjPtr)
{
ISCModelPropertyCollectionPtr propColPtr;
propColPtr = scObjPtr->GetProperties(); // no filtering
VARIANT valFlags;
V_VT(&valFlags) = VT_I4;
V_I4(&valFlags) = SCD_MPF_SCALAR;
propColPtr = scObjPtr->CollectProperties(vtMissing, valFlags, vtMissing); // scalar properties only
propColPtr = scObjPtr->CollectProperties(vtMissing, vtMissing, valType); // non-scalar properties only
}
The following example illustrates how to filter properties using Visual Basic
.NET. The example uses a Model Object object from Example 9:
Public Sub( ByRef scObj As SCAPI.ModelObject )
Dim scObjProperties As SCAPI.ModelProperties
scObjProperties = scObj.Properties ' no filtering
scObjProperties = scObj.CollectProperties(, SCD_MPF_SCALAR) ' scalar properties only
scObjProperties = scObj.CollectProperties(, , SCD_MPF_SCALAR) ' non-scalar properties only
End Sub
Chapter 3: API Tasks 77
Modifying the Model Using Session Transactions
Modifying the Model Using Session Transactions
In order to make modifications to a model, session transactions must be used.
Prior to making a modification, either BeginTransaction() or
BeginNamedTransaction() must be called. Once all the modifications are
completed, CommitTransaction() must be called.
Note: In r7.3, the nested transactions and rollbacks are supported with
certain limitations. The limitation is illustrated in the following state diagram:
After the beginning of an outer transaction, the API is in State I of the
diagram. A new nested transaction can be opened or the outer transaction can
be closed. Any operation other than the open or close of a transaction, such as
creating, modifying objects, properties, and so on, will transfer the API to
State II. In that state further modifications can continue, but no new nested
transactions are allowed. The API continues to be in that state until the current
transaction is committed or rolled back.
Use of nested transactions allows better control over modification flow. The
following examples describe the uses:
Commit Transaction
Carries out enlisted modifications immediately. Therefore, without closing
the outer transaction, the small nested transactions can reflect separate
steps of the complex changes with the results of the committed
transaction instantly available for the consumption by the next step.
Rollback
Cancels out the results of all nested transactions. This includes
transactions that were committed before the outer transaction rollback.
78 API Reference Guide
Modifying the Model Using Session Transactions
Begin Transaction
To indicate that a modification to the model is about to occur, either the
BeginTransaction() or the BeginNamedTransaction() must be called.
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
VARIANT BeginTransaction() Opens a transaction on the None
session. Returns an identifier
of the transaction.
VARIANT Opens a transaction on the Name – Provides a name for a
BeginNamedTransaction(BSTR Name, session with the given name. new transaction.
VARIANT PropertyBag [optional]) Returns an identifier of the
PropertyBag – Collection of
transaction.
optional parameters for the
transaction.
Example 18
The following example illustrates modifying the model using the Begin
Transaction in C++. The example uses a Session object from Example 6:
void OpenSession(ISCSessionPtr & scSessionPtr )
{
variant_t transactionId; // transaction ID for the session
VariantInit(&transactionId);
transactionId = scSessionPtr->BeginTransaction();
// …
}
The following example illustrates modifying the model using the Begin
Transaction in Visual Basic .NET. The example uses a Session object from
Example 6:
Public Sub OpenSession( ByRef scSession As SCAPI.Session )
Dim m_scTransactionId As Variant
scTransactionId = scSession.BeginNamedTransaction("My Transaction")
End Sub
Chapter 3: API Tasks 79
Modifying the Model Using Session Transactions
Commit Transaction
The CommitTransaction() is used to commit the modifications to the in-
memory model.
Note: The Commit only applies to the in-memory model while the API is
running. To persist the modifications, the model must be explicitly saved using
the ISCPersistenceUnit::Save() function.
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
VARIANT_BOOL Commits the specified None
CommitTransaction(VARIANT transaction
TransactionId)
Example 19
The following example illustrates modifying the model using the Commit
Transaction in C++. The example uses a Session object from Example 6:
void Transaction(ISCSessionPtr & scSessionPtr )
{
variant_t transactionId; // transaction ID for the session
VariantInit(&transactionId);
transactionId = scSessionPtr->BeginTransaction();
// Make modifications to the model here ….
scSessionPtr->CommitTransaction(transactionId);
}
The following example illustrates modifying the model using the Commit
Transaction in Visual Basic .NET. The example uses a Session object from
Example 6:
Public Sub Transaction(ByRef scSession As SCAPI.Session )
Dim scTransactionId As Variant
scTransactionId = scSession.BeginTransaction
' make modifications here …
scSession.CommitTransaction( scTransactionId )
End Sub
80 API Reference Guide
Creating Objects
Creating Objects
The first step in creating a new object is to retrieve the ISCModelObject
instance of the parent of the new object. From the parent of the new object,
retrieve its child objects in an instance of ISCModelObjectCollection. Then, add
the new object to the child objects collection.
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
Chapter 3: API Tasks 81
Creating Objects
ISCModelObjectCollection Interface
The following table contains information on the ISCModelObjectCollection
interface, which is used when you create a new model object:
Signature Description Valid Arguments
ISCModelObjectCollection Creates a Model Root:
* Collect(VARIANT Root, Objects collection,
VARIANT ClassId which represents a ■ VT_UNKNOWN – The ISCModelObject pointer of
[optional], VARIANT subcollection of the root object. Returns the descendants of the
Depth [optional], itself given object.
VARIANT MustBeOn ■ VT_BSTR – The ID of the root object. Returns
[optional], VARIANT the descendants of the object with the given
MustBeOff[optional]) object identifier.
ClassId:
■ Empty – Not needed when obtaining the
children of an object.
Depth:
■ VT_I4 – Set depth to 1 when obtaining the
immediate children of an object.
MustBeOn:
■ Empty – Not needed when obtaining the
children of an object.
MustBeOff:
■ Empty – Not needed when obtaining the
children of an object.
ISCModelObject * Adds an object of Class:
Add(VARIANT Class, type Class to the
VARIANT ObjectId model ■ VT_BSTR – Name of a class. Creates an object
[optional]) of the given class name.
■ VT_BSTR – Class ID of an object type. Creates
an object of the class with the given identifier.
ObjectId:
■ Empty – The API assigns an object identifier for
a new object.
■ VT_BSTR – ID for a new object. The API assigns
the given object identifier to the new object.
82 API Reference Guide
Setting Property Values
Example 20
The following example illustrates how to create objects using C++. The
example uses a Session object from Example 6:
// NOTE: ISCSession::BeginTransaction() must be called prior to calling this
// function
// ISCSession::CommitTransaction() must be called upon returning from this
// function
void CreateObject(ISCSessionPtr & scSessionPtr, CString & csType,
ISCModelObjectPtr & parentObj)
{
variant_t transactionId; // transaction ID for the session
VariantInit(&transactionId);
transactionId = scSessionPtr->BeginTransaction();
ISCModelObjectCollectionPtr childObjColPtr = scSessionPtr->GetModelObject()->Collect(parentObj-
>GetObjectId(),vtMissing,(long)1); // get
// child objects
// Add child object to collection
ISCModelObjectPtr childObjPtr = childObjColPtr->Add(COleVariant(csType));
// …
scSessionPtr->CommitTransaction(transactionId);
}
The following example illustrates how to create objects using Visual Basic
.NET. The example uses a Session object from Example 6:
Public Sub AddNewObject(ByRef scSession As SCAPI.Session, _
ByRef parentObj As SCAPI.ModelObject, type As String)
Dim scObj as SCAPI.ModelObject
Dim scChildObjCol As SCAPI.ModelObjects
Dim transactionID as Variant
transactionID = scSession.BeginTransaction
scChildObjCol = scSession.ModelObjects.Collect(parentObj, , 1) ' child objects collection
scObj = scChildObjCol.Add(type) ' add new object to the child object collection
scSession.CommitTransaction( transactionID )
End Sub
Setting Property Values
To set a property value of a model object, use the Value member of an
instance of the ISCModelProperty interface.
Chapter 3: API Tasks 83
Setting Property Values
Setting Scalar Property Values
The valid VARIANT types that can be used to set a scalar property value is
dependent on the type of the property.
Note: For more information, see the document ERwin Metamodel
Reference.PDF, which is in the \Doc folder where this product is installed.
ISCModelProperty Interface
The following table contains information on the ISCModelProperty interface:
Signature Description Valid Arguments
void Value(VARIANT Sets the indicated ValueId:
ValueId [optional], property value with the
VARIANT ValueType given value ■ Empty – Not used when setting scalar
[optional], VARIANT Val ) properties.
ValueType:
■ Empty – Not used.
Val:
■ Dependent upon the property type.
Note: For information on valid property values see the document ERwin
Metamodel Reference.PDF, which is in the \Doc folder where this product is
installed.
Example 21
The following example illustrates how to set scalar property values using C++.
The example uses a Model Object object from Example 9 and assumes that a
transaction has opened:
// NOTE: ISCSession::BeginTransaction() must be called prior to calling this
// function
// ISCSession::CommitTransaction() must be called upon returning from this
// function
void SetNameProperty(ISCModelObjectPtr & scObjPtr, CString & csName)
{
ISCModelPropertyCollectionPtr propColPtr = scObjPtr->GetProperties();
CString csPropName = "Name";
ISCModelPropertyPtr nameProp = propColPtr > GetItem(COleVariant(csPropName));
if (nameProp != NULL)
nameProp->PutValue(vtMissing, (long) SCVT_BSTR, csName);
}
84 API Reference Guide
Setting Property Values
The following example illustrates how to set scalar property values using
Visual Basic .NET. The example uses a Model Object object from Example 9
and assumes that a transaction has opened:
' NOTE: ISCSession::BeginTransaction() must be called prior to calling this function
' ISCSession::CommitTransaction() must be called upon returning from this function
Public Sub SetScalarPropValue(ByRef scObj As SCAPI.ModelObject, ByRef val As Variant)
Dim modelProp As SCAPI.ModelProperty
modelProp = scObj.Properties(“Name”)
modelProp.Value = val
End Sub
Setting Non-Scalar Property Values
To set a non-scalar property value, you must identify the specific value that
you want to set. This is done using the ValueId parameter. The ValueId can
either be the zero-based index of the property value collection or the name of
the member if the property is a structure.
Note: For r7.3, CA ERwin DM does not support naming non-scalar property
members.
ISCModelProperty Interface
The following table contains information on the ISCModelProperty interface:
Signature Description Valid Arguments
void Value(VARIANT ValueId Sets the indicated property ValueId:
[optional], VARIANT value with the given value
ValueType [optional], ■ VT_I4 – Index for a non-scalar
VARIANT Val ) property of which the given value
is set.
■ VT_BSTR – Name of a member in a
non-scalar property of which the
given value is set.
ValueType:
■ Empty – Not used.
Val:
■ Dependent upon the property type.
Note: For information on valid property values see the document ERwin
Metamodel Reference.PDF, which is in the \Doc folder where this product is
installed.
Chapter 3: API Tasks 85
Deleting Objects
Example 22
The following example illustrates how to set non-scalar property values using
C++. The example uses a Model Object object from Example 9 and assumes
that a transaction has opened:
// NOTE: ISCSession::BeginTransaction() must be called prior to calling this
// function
// ISCSession::CommitTransaction() must be called upon returning from this
// function
void SetNameProperty(ISCModelObjectPtr & scObjPtr, CString & csValue)
{
ISCModelPropertyCollectionPtr propColPtr = scObjPtr->GetProperties();
CString csPropName = "Non-Scalar";
ISCModelPropertyPtr nameProp = propColPtr > GetItem(COleVariant(csPropName));
if (nameProp != NULL)
// Setting the first element
nameProp->PutValue(COleVariant(0L), (long) SCVT_BSTR, csValue);
}
The following example illustrates how to set non-scalar property values using
Visual Basic .NET. The example uses a Model Object object from Example 9
and assumes that a transaction has opened:
' NOTE: ISCSession::BeginTransaction() must be called prior to calling this function
' ISCSession::CommitTransaction() must be called upon returning from this function
Public Sub SetScalarPropValue(ByRef scObj As SCAPI.ModelObject, ByRef val As Variant)
Dim modelProp As SCAPI.ModelProperty
modelProp = scObj.Properties(“Name”)
Dim index As Long
Index = 0 ' Setting index to zero
modelProp.Value(index) = val ' index is used to access non-scalar property
End Sub
Deleting Objects
You can delete an object by removing the ISCModelObject interface instance of
the object from the instance of ISCModelObjectCollection. You identify the
object that you want to delete either by its pointer to the interface or by its
object identifier.
86 API Reference Guide
Deleting Properties and Property Values
ISCModelObjectCollection Interface
The following table contains information on the ISCModelObjectCollection
interface, which is used to delete model objects:
Signature Description Valid Arguments
VARIANT_BOOL Removes the specified Object:
Remove(VARIANT model object from a
Object) model ■ VT_UNKNOWN – ISCModelObject * pointer to
the object that you want to delete. Removes
the given object.
■ VT_BSTR – ID of the object. Removes the
object with the given object identifier.
Example 23
The following example illustrates how to delete objects in C++ if there is a
model objects collection and that a transaction has opened:
CString csID; // ID of object to be removed
// …
CComVariant bRetVal = scObjColPtr->Remove(COleVariant(csID));
The following example illustrates how to delete objects in Visual Basic .NET if
there is a model objects collection and that a transaction has opened:
bRetVal = scObjCol.Remove(objID)
Deleting Properties and Property Values
Properties are deleted by removing the property from the instance of the
ISCModelPropertyCollection interface. If the property is non-scalar, the
individual property value can be removed by using the RemoveValue method
of the ISCModelProperty interface.
Note: For more information on valid property names and property identifiers
see the document ERwin Metamodel Reference.PDF, which is in the \Doc folder
where this product is installed.
The following sections describe the interfaces used to delete model properties
and model property values.
Chapter 3: API Tasks 87
Deleting Properties and Property Values
ISCModelPropertyCollection Interface
The following table contains information on the ISCModelPropertyCollection
interface:
Signature Description Valid Arguments
VARIANT_BOOL Removes the indicated ClassId:
Remove(VARIANT ClassId) property from the bound
object ■ VT_UNKNOWN – ISCModelProperty
pointer to the object that you want to
remove. Removes the given property.
■ VT_BSTR – Name of the property.
Removes the property with the given
class name.
■ VT_BSTR – ID of the property.
Removes the property with the given
class identifier.
ISCModelProperty Interface
The following table contains information on the ISCModelProperty interface:
Signature Description Valid Arguments
VARIANT_BOOL Removes the specified ValueId:
RemoveValue(VARIANT value from the property
ValueId [optional]) ■ Empty – For scalar properties only.
■ VT_I4 – Index of a non-scalar
property. Removes the value with the
given index in a non-scalar property.
■ VT_BSTR – Name of the property
member in a non-scalar property.
Removes the value of the non-scalar
property member with the given
name.
VARIANT_BOOL Remove all values from the None
RemoveAllValues() property
88 API Reference Guide
Deleting Properties and Property Values
Example 24
The following example illustrates how to delete scalar properties using C++ if
there is a model object and a transaction is open:
CString propName("Some Property Name");
// …
CComVariant bRetVal = scObjPtr->GetProperties()->Remove(COleVariant(propName));
The following example illustrates how to delete scalar properties using Visual
Basic .NET if there is a model object and a transaction is open:
Dim propName As String
propName = "Some Property Name"
bRetVal = scObj.Properties.Remove(propName)
Deleting Non-Scalar Property Values
To remove all the values from a non-scalar property, remove the property
itself from the ISCModelPropertyCollection using the Remove method. To
remove a specific value from a non-scalar property, use the RemoveValue
method of the ISCModelProperty interface. As with accessing the non-scalar
property values, the property value is identified using the ValueId parameter.
ValueId can either be the zero-based index of the value, or the name of the
member if the property type is a structure.
Note: For r7.3, CA ERwin DM does not support naming non-scalar property
members.
Example 25
The following example illustrates how to delete non-scalar property values
using C++ if there is a model object and a transaction is open:
ISCModelPropertyCollectionPtr propColPtr = scObjPtr->GetProperties();
CString csPropName = "Some Property Name";
ISCModelPropertyPtr scPropPtr = propColPtr->GetItem(COleVariant(csPropName));
long index; // index of a member in a non-scalar property
index = 0; // Set to the first element
// …
bRetVal = scPropPtr->RemoveValue(index); // remove single value from the property
Chapter 3: API Tasks 89
Saving the Model
The following example illustrates how to delete non-scalar property values
using Visual Basic .NET if there is a model object and a transaction is open:
Dim scProp As SCAPI.ModelProperty
scProp = scObj.Properties("Some Property Name")
bRetVal = scProp.RemoveValue(index) ' Remove single value from the property
Saving the Model
If modifications were made to the CA ERwin DM model, the persistence unit
must be saved in order to persist the changes.
ISCPersistenceUnit Interface
The following table contains information on the ISCPersistenceUnit interface:
Signature Description Valid Arguments
VARIANT_BOOL Persists model data to Locator:
Save(VARIANT Locator external storage
[optional], VARIANT ■ VT_BSTR – Full path of the location to store
Disposition [optional] the model. Provides a new location for the
persistence unit data source as a string with a
file or CA ERwin MM item location, along with
the attributes required for successful access to
storage.
■ Empty – Indicates the use of the original
persistence unit location.
Disposition:
Specifies changes in access attributes, such as
read only.
90 API Reference Guide
Accessing Metamodel Information
Example 26
The following example illustrates how to save a model using C++. The
example uses a Persistence Unit object from Example 5:
void Save( ISCPersistenceUnitPtr & scPUnitPtr )
{
ISCPropertyBagPtr propBag = scPUnitPtr->GetPropertyBag ("Locator");
long index = 0;
_bstr_t bstrFileName = propBag->GetValue(COleVariant(index));
// Change bstrFileName to a new location
scPUnitPtr->Save(bstrFileName);
}
The following example illustrates how to save a model using Visual Basic .NET.
The example uses a Persistence Unit object from Example 5:
Public Sum Save( scPUnit As SCAPI.PersistenceUnit )
Dim propBag as SCAPI.PropertyBag
propBag = scUnit.PropertyBag(“Locator”)
Dim sFileName As String
sFileName = propBag.Value(“Locator”)
sFileName = sFileName + “.bak”
scPUnit.Save(sFileName )
End Sub
Accessing Metamodel Information
You can obtain the metamodel of CA ERwin DM by using the API. The
metamodel can be accessed in the same manner as a CA ERwin DM model. As
in the case with model data, the ISCPersistenceUnit or ISCModelSet pointer in
an ISCSession::Open call indicates the model set with which you are working.
There is a special case for the intrinsic metamodel. To obtain the intrinsic
metamodel for a specific class of metadata, you can use the Property Bag
component created with the PropertyBag method of the
ISCApplicationEnvironment interface. A Property Bag instance populated with
EMX_Metadata_Class or EM2_Metadata_Class properties from the Application
category indicates the type of the intrinsic metamodel to access. The instance
must be submitted as the first parameter in an ISCSession::Open call, instead
of ISCPersistenceUnit or ISCModelSet pointers. If the first parameter in an
ISCSession::Open call is NULL, then the intrinsic metamodel for the top model
set in a persistence unit, the EMX class metadata, will be accessed.
To indicate that a session will access metamodel information, you set the Level
parameter of the Open method to SCD_SL_M1.
Chapter 3: API Tasks 91
Accessing Metamodel Information
ISCApplicationEnvironment Interface
The following table contains information on the ISCApplicationEnvironment
interface:
Signature Description Valid Arguments
ISCPropertyBag Populates a property bag Category:
with one or more property
PropertyBag(VARIANT ■ VT_BSTR – Features returned from the
values as indicated by
Category[optional], given category. Must be Application.
Category and Name
VARIANT Name[optional],
Name:
VARIANT AsString[optional])
■ VT_BSTR – The property with the given
name and category is returned. Must
be EMX Metadata Class for EMX
metadata and EM2 Metadata Class for
EM2 metadata.
AsString:
■ Empty – All values in the property bag
are presented in their native type.
92 API Reference Guide
Accessing Metamodel Information
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
VARIANT_BOOL Binds self to the intrinsic Unit:
Open(IUnknown * Unit, metamodel, persistence
VARIANT Level [optional], unit, or model set ■ NULL – The intrinsic metamodel for the
VARIANT Flags [optional]) identified by the Unit top model set in a persistence unit. For
parameter the current version this is EMX class
metadata.
■ ISCPropertyBag – The intrinsic
metamodel defined by the metadata
class in the first property of the bag.
■ ISCPersistenceUnit – The metamodel
for the top model set in the persistence
unit.
■ ISCModelSet – The metamodel for the
model set.
Level:
■ SCD_SL_M1 – Metadata access.
Flags:
■ Empty – Defaults to SCD_SF_NONE.
Example 27
The following example illustrates how to access an intrinsic metamodel using
C++. The example uses an Application object from Example 1:
void AccessMetaModel( ISCApplicationPtr & scAppPtr )
{
ISCSessionPtr scSessionPtr = scAppPtr->GetSessions()->Add(); // add a new
// session
// Open EMX intrinsic metamodel
CComVariant varResult = scSessionPtr->Open(NULL, (long) SCD_SL_M1); // meta-model level
if (varResult.vt == VT_BOOL && varResult.boolVal == FALSE)
return;
// …
}
Chapter 3: API Tasks 93
Closing the API
The following example illustrates how to access an intrinsic metamodel using
Visual Basic .NET. The example uses an Application object from Example 1:
Public Sub AccessMetaModel( ByRef scApp As SCAPI.Application )
Dim scBag As SCAPI.PropertyBag
Dim scSession As SCAPI.Session
' Get a property bag with the EM2 metadata class
scBag = scApp.ApplicationEnvironment.PropertyBag("Application ", "EM2 Metadata Class")
' Open EM2 intrinsic metamodel
scSession = scApp.Sessions.Add
scSession.Open( scBag, SCD_SL_M1 )
End Sub
Closing the API
When the client of the API has finished accessing the model, the sessions that
were open must be closed, and the persistence unit collection must be cleared.
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
VARIANT_BOOL Close() Disconnects self from its None
associated persistence unit
94 API Reference Guide
Closing the API
ISCSessionCollection Interface
The following table contains information on the ISCSessionCollection interface:
Signature Description Valid Arguments
VARIANT_BOOL Removes a Session object from SessionId:
Remove(VARIANT SessionId) the collection
■ VT_UNKNOWN – Pointer to
the ISCSession interface.
Removes the given session
from the collection.
■ VT_I4 – Zero-based index in
the session collection.
Removes the session with
the given index from the
collection.
Example 28
The following example illustrates how to close a session using C++. It
assumes that there is a Session object and the session is open. The examples
use an Application object from Example 1:
void CloseSessions( ISCApplicationPtr & scAppPtr )
{
ISCSessionCollectionPtr scSessionColPtr = scAppPtr->GetSessions();
ISCSessionPtr scSessionPtr = scSessionColPtr->GetItem(COleVariant(0L))
// close the sessions
scSessionPtr->Close(); // close a single session
scSessionColPtr->Clear(); // clear the collection of sessions
}
The following example illustrates how to close a session using Visual Basic
.NET. It assumes that there is a Session object and the session is open. The
examples use an Application object from Example 1:
Public Sub CloseSessions( scApp As SCAPI.Application )
Dim scSessionCol As SCAPI.Sessions
scSessionCol = scApp.Sessions
Dim scSession As SCAPI.Session
For Each scSession In scSessionCol
scSession.Close
Next
While (scSessionCol.Count > 0)
scSessionCol.Remove (0)
End
End Sub
Chapter 3: API Tasks 95
Error Handling
Clearing Persistence Units
This section describes how to clear persistence units.
The effect of leaving persistence units in the Persistence Units collection is
dictated by a context in which an instance of the application is created. If a
client is using the API in the standalone mode, all units are closed. If a client is
using the API as an add-in component, then after the client program is over,
units are still open and available in the application user interface with the
exception of those that were explicitly closed and removed from the
persistence unit collection before exiting the program.
ISCPersistenceUnitCollection Interface
The following table contains information on the ISCPersistenceUnitCollection
interface:
Signature Description Valid Arguments
VARIANT_BOOL Clear() Purges all units from the None
collection
Example 29
The following example illustrates how to clear persistence units using C++. It
assumes that there is an Application object from Example 1:
// remove the persistence units
scAppPtr->GetPersistenceUnits()->Clear();
The following example illustrates how to clear persistence units using Visual
Basic .NET. It assumes that there is an Application object from Example 1:
scApp.PersistenceUnits.Clear
Error Handling
The API uses a generic COM error object to handle errors. Depending on the
programming environment, languages have their own protocols to retrieve
errors from the generic error object. For example, C++ and Visual Basic .NET
use exception handling to handle errors. To ensure a stable application, it is
recommended that API clients use error handling to trap potential errors such
as attempting to access an object that was deleted, or attempting to access an
empty collection.
96 API Reference Guide
Error Handling
Example 30
The following example illustrates error handling using C++. It assumes that
there is a Model Object object from Example 9:
long GetObjectProperties(ISCModelObjectPtr & scObjPtr)
{
// Get the collection of Properties
ISCModelPropertyCollectionPtr scPropColPtr;
try
{
scPropColPtr = scObjPtr->GetProperties();
if (!scPropColPtr.GetInterfacePtr())
{
AfxMessageBox("Unable to Get Properties Collection");
return FALSE;
}
// …
}
catch(_com_error &error)
{
AfxMessageBox(error.Description());
}
}
The following example illustrates error handling using Visual Basic .NET. It
assumes that there is a Model Object object from Example 9:
Public Sub GetObject(ByRef scSession As SCAPI.Session, ByRef objID As String)
Dim scObjCol as SCAPI.ModelObjects
Dim scObj as SCAPI.ModelObject
Try
scObjCol = scSession.ModelObjects
scObj = scObjCol.Item(objID) ' retrieves object with given object ID
Catch ex As Exception
' Failed
Console.WriteLine(" API Failed With Error message :" + ex.Message())
End Try
End Sub
In addition to the generic error object, the API provides an extended error
handling mechanism with the Application Environment Message log. The
message log can handle a sequence of messages that is useful in a context of
complex operations like transactions.
More information about the Application Environment Message log organization
is located in the Property Bag for Application Environment (see page 171)
section.
Chapter 3: API Tasks 97
Error Handling
ISCApplicationEnvironment
The following table contains information on the ISCApplicationEnvironment
interface:
Signature Description Valid Arguments
ISCPropertyBag Populates a property bag Category:
with one or more property
PropertyBag(VARIANT VT_BSTR – Must be Application.API.
values as indicated by
Category[optional],
Category and Name Name:
VARIANT Name[optional],
VARIANT AsString[optional]) ■ VT_BSTR – The property with the given
name and category is returned. Must
be Is Empty to determine if the
message log has messages. To retrieve
the message log content, it must be
Log.
AsString:
■ Empty – All values in the property bag
are presented in their native type.
■ VT_BOOL – If set to TRUE, all values in
the property bag are presented as
strings.
98 API Reference Guide
Error Handling
Example 32
The following example illustrates how to use the API to check messages from
the API extended message log using C++. It assumes that there is an
Application object from Example 1:
CString GetExtendedErrorInfo(ISCApplicationPtr & scAppPtr)
{
CString csExtendedErrors = "";
long index = 0;
// Do we have messages in the log?
variant_t val = scAppPtr->GetApplicationEnvironment()-> GetPropertyBag("Application.Api.MessageLog","Is
Empty")-> GetValue(COleVariant(index));
if (val.vt == VT_BOOL && val.boolVal == false)
{
// Retrieve the log
val = m_scAppPtr->GetApplicationEnvironment()-> GetPropertyBag("Application.Api.MessageLog","Log")->
GetValue(COleVariant(index));
if (val.vt & VT_ARRAY)
{
// this is a SAFEARRAY
VARIANT HUGEP *pArray;
HRESULT hr;
// Get a pointer to the elements of the array.
hr = SafeArrayAccessData(val.parray, (void HUGEP**)&pArray);
if (FAILED(hr))
return csExtendedErrors;
long numErrors = 0;
VARIANT vValue = pArray[0]; // number of errors
if (vValue.vt == VT_I4)
numErrors = vValue.lVal;
// …
SafeArrayUnaccessData(val.parray);
}
}
}
Chapter 3: API Tasks 99
Advanced Tasks
The following example illustrates how to use the API to check messages from
the API extended message log using Visual Basic .NET. It assumes that there
is an Application object from Example 1:
Public Sub GetExtendedErrorInfo( ByRef scApp As SCAPI.Application )
Dim nSize As Integer
Dim nWarnings As Integer
Dim nErrors As Integer
Dim nIdx As Integer
Dim nMsgNumber As Integer
Dim aErrors() As Object
' Do we have messages in the log?
If scApp.ApplicationEnvironment.PropertyBag("Application.Api.MessageLog", _ "Is Empty").Value(0) = False
Then
' Retrieve a log
aErrors = _
scApp.ApplicationEnvironment.PropertyBag("Application.Api.MessageLog", _ "Log").Value(0)
nSize = Int(aErrors(0))
nIdx = 1
nMsgNumber = 0
Do While nMsgNumber < nSize
Console.WriteLine("Error " & aErrors(nIdx) & " " + aErrors(nIdx + 2))
Select Case aErrors(nIdx + 1)
Case SCAPI.SC_MessageLogSeverityLevels.SCD_ESL_WARNING
nWarnings = nWarnings + 1
Case SCAPI.SC_MessageLogSeverityLevels.SCD_ESL_ERROR
nErrors = nErrors + 1
End Select
nIdx = nIdx + 8
nMsgNumber = nMsgNumber + 1
Loop
Console.WriteLine("Total number of errors in the transaction " & Str(nSize) & " with: " _& Str(nWarnings) & "
warnings, " & Str(nErrors) & " errors.")
End If
End Sub
Advanced Tasks
The material in this section provides examples of some advanced tasks and
how they can be executed.
100 API Reference Guide
Advanced Tasks
Creating User-Defined Properties
A User-Defined Property (UDP) is an example of a client expanding the CA
ERwin DM metadata and involves creating and modifying objects on the
metadata level. The structure of the UDP definition is similar to the definition
of all native properties. The following diagram shows the metamodel objects
involved when you define a UDP:
In this diagram an instance of the Property_Type object defines a UDP class,
the Object_Type object defines an object class with which the UDP is
associated, and the Association_Type object defines the association between
object and property classes.
Chapter 3: API Tasks 101
Advanced Tasks
You are only required to create an instance of the Property_Type object to
define a UDP. CA ERwin DM populates the rest of the necessary data. The
following table describes the properties and tags of the Property_Type object:
Property or Tag Description Valid Arguments
Name
Name Property, UDP name CA ERwin DM upholds the following convention in
naming UDPs to ensure their uniqueness. The
convention is a three part name separated with dot
(.) symbols:
<ObjectClassName>.<Logical/Physical>.<Name>
An example of this naming convention is:
Model.Logical.My UDP
The CA ERwin DM editors display only the last
component.
Data_Type Property, SCVT_BSTR The property is read-only and set by CA ERwin DM.
All UDP values have a string datatype.
tag_Is_Locally_Defined Property, TRUE The property is read-only and set to TRUE for all
user-defined metadata.
Definition Property, Optional Optional – Text that displays the UDP description.
tag_Is_Logical Tag, TRUE or FALSE Optional – The tag has a TRUE value for UDPs used
in logical modeling.
tag_Is_Physical Tag, TRUE or FALSE Optional – The tag has a TRUE value for UDPs used
in physical modeling.
tag_Udp_Default_Value Tag Optional – A string with the UDP default value.
tag_Udp_Data_Type Tag Defines the interpretation for the UDP value in the
CA ERwin DM editors. The valid values are:
■ 1 (Integer)
■ 2 (Text)
■ 3 (Date)
■ 4 (Command)
■ 5 (Real)
■ 6 (List)
The property value can be:
■ VT_I4 – Uses the numeric values listed above.
■ VT_BSTR – Uses the string values listed above.
Assumes the Text type if it is not specified.
102 API Reference Guide
Advanced Tasks
Property or Tag Description Valid Arguments
Name
tag_Udp_Owner_Type Tag Required. Defines an object class to host instances
of the UDPs.
■ VT_BSTR – Name of an object class. Indicates
the host class by the given class name.
■ VT_BSTR – Class ID of an object class. Indicates
the host class by the given identifier.
tag_Udp_Values_List Tag String with comma-separated values. Only values
from the list are valid values for a UDP.
Valid only if the tag_Udp_Data_Type tag is set to
List.
Chapter 3: API Tasks 103
Advanced Tasks
Example 33
The following example illustrates how to use the API to define a UDP using
Visual Basic .NET:
Public Sub Main()
Dim oAPI As New SCAPI.Application
Dim oPU As SCAPI.PersistenceUnit
Dim oSession As SCAPI.Session
' Create a new model with all defaults
oPU = oAPI.PersistenceUnits.Create(Nothing)
' Add a new session
oSession = oAPI.Sessions.Add
' Start a session on the metadata level with the top (EMX) model set from the model
oSession.Open(oPU, SCAPI.SC_SessionLevel.SCD_SL_M1)
' Start a transaction
Dim TransId As Object
TransId = oSession.BeginNamedTransaction("Create UDP")
' Create a new UDP definition
Dim oUDP As SCAPI.ModelObject
oUDP = oSession.ModelObjects.Add("Property Type")
' Populate properties
oUDP.Properties("Name").Value = "Entity.Logical.My UDP"
oUDP.Properties("Udp_Owner_Type").Value = "Entity"
oUDP.Properties("IsLogical").Value = True
oUDP.Properties("Udp_Datatype").Value = "Text"
' Commit changes
oSession.CommitTransaction(TransId)
' Report the result
Dim oProperty As SCAPI.ModelProperty
Console.WriteLine(" --- Report the new User-Defined Property properties")
For Each oProperty In oUDP.Properties
Console.WriteLine(oProperty.ClassName + " '" + oProperty.FormatAsString + "'")
Next
Console.WriteLine(" Press Entry to exit ")
Console.Read()
104 API Reference Guide
Advanced Tasks
' Release the session
oSession.Close()
oSession = Nothing
oAPI.Sessions.Clear()
' Save to the file
oPU.Save("w:\UDP.erwin", "OVF=Yes")
End Sub
History Tracking
Historical information can be saved for your model, entities, attributes, tables,
and columns. CA ERwin DM uses History objects to store the information in the
model.
The API provides functionality that allows you to customize the process of
history tracking without having to work with the History objects directly. The
BeginNamedTransaction function of the ISCSession interface accepts a
Property Bag instance populated with the history tracking properties. The
properties are in effect at the initiation of an outer transaction and are
confined to the scope of the transaction.
ISCSession Interface
The following table contains information on the ISCSession interface:
Signature Description Valid Arguments
VARIANT Opens a transaction on the session Name – Provides a name for a new
BeginNamedTransaction( with the given name. Returns an transaction.
identifier of the transaction.
BSTR Name, VARIANT PropertyBag – Collection of
PropertyBag [optional] ) parameters for history tracking in
the transaction.
Chapter 3: API Tasks 105
Advanced Tasks
The following table describes the properties used in creating a new model:
Property Name Type Description
History_Tracking Boolean TRUE – Indicates that all historical information
generated during the transaction will be marked as the
API event. The TRUE value is assumed if the property is
not provided.
FALSE – Uses the standard CA ERwin DM mechanism of
history tracking.
History_Description BSTR When the History_Tracking property is TRUE, it provides
the content for the Description field of the history event.
Note: A complete set of available properties is located in the appendix API
Interfaces Reference (see page 109).
106 API Reference Guide
Advanced Tasks
Example 34
The following example illustrates how to mark history records for entities and
attributes as API events, and how to mark history records with the API History
Tracking description using Visual Basic .NET:
Public Sub Main()
Sub Main()
Dim oApi As New SCAPI.Application
Dim oBag As New SCAPI.PropertyBag
Dim oPU As SCAPI.PersistenceUnit
' Construct a new logical-physical model. Accept the rest as defaults
oBag.Add("Model Type", "Combined")
oPU = oApi.PersistenceUnits.Create(oBag)
' Clear the bag for the future reuse
oBag.ClearAll()
' Start a session
Dim oSession As SCAPI.Session
oSession = oApi.Sessions.Add
oSession.Open(oPU)
' Prepare a property bag with the transaction properties
oBag.Add("History Description", "API History Tracking")
' Start a transaction
Dim nTransId As Object
nTransId = oSession.BeginNamedTransaction("Create Entity and Attribute", oBag)
' Create an entity and an attribute
Dim oEntity As SCAPI.ModelObject
Dim oAttribute As SCAPI.ModelObject
oEntity = oSession.ModelObjects.Add("Entity")
oAttribute = oSession.ModelObjects.Collect(oEntity).Add("Attribute")
oAttribute.Properties("Name").Value = "Attr A"
' Commit
oSession.CommitTransaction(nTransId)
End Sub
You can select the history options for the model objects for which you want to
preserve history, as well as to control the type of events to track. This is done
within the History Options tab in the Model Properties dialog.
Chapter 3: API Tasks 107
Advanced Tasks
If the check box for API events is cleared (unchecked), then no historic events
from the API category are recorded. It is possible to control the status of that
check box, as well as the check boxes for model object types from the API, by
controlling the value of properties in the model where the status of these
check boxes is stored.
108 API Reference Guide
Appendix A: API Interfaces Reference
This appendix lists the interfaces contained in the API, together with the
methods and arguments associated with these interfaces. There is also a
section that contains information regarding enumerations and describes
various Property Bag components.
This section contains the following topics:
API Interfaces (see page 109)
Enumerations (see page 167)
Property Bag Reference (see page 171)
Location and Disposition in Model Directories and Persistence Units (see page
188)
API Interfaces
This section describes each API interface, and the methods associated with
them. Where applicable, signatures and valid arguments are also described.
Note: Some parameters contain an [optional] designation. This means that
this particular part of the parameter is optional and not required.
ISCApplication
The ISCApplication interface is the entry point for the API client. Only one
instance of the component can be externally instantiated to activate the API.
The client navigates the interface hierarchy by using interface properties and
methods to gain access to the rest of the API functionality.
The following table contains the methods for the ISCApplication interface:
Method Description
BSTR ApiVersion() The API version.
ISCApplicationEnvironment * Reports attributes of runtime environment and
ApplicationEnvironment() available features, such as add-in mode, user
interface visibility, and so on.
ISCModelDirectoryCollection * ModelDirectories() Collects model directories accessible from the
current machine.
BSTR Name() Modeling tool application name.
Appendix A: API Interfaces Reference 109
API Interfaces
Method Description
ISCPersistenceUnitCollection * PersistenceUnits() Returns a collection of all persistence units loaded
in the application.
ISCSessionCollection * Sessions() Returns a collection of sessions created within the
application.
BSTR Version() Modeling tool application version.
ISCApplicationEnvironment
The ISCApplicationEnvironment interface contains the information about the
runtime environment.
The following table contains the methods for the ISCApplicationEnvironment
interface:
Method Description
ISCPropertyBag * Populates a property bag with one or more
property values as indicated by Category and
PropertyBag(VARIANT Category [optional],
Name.
VARIANT Name [optional], VARIANT AsString
[optional])
Note: More information about ISCApplicationEnvironment is located in the
Property Bag for Application Environment (see page 171) section.
ISCApplicationEnvironment::PropertyBag Arguments
Here is the signature for the PropertyBag function:
ISCPropertyBag *PropertyBag(VARIANT Category, VARIANT Name, VARIANT AsString)
The following table contains the valid arguments for the PropertyBag function:
Parameter Valid Type/Value Description
Category [optional] Empty Complete set of features from all
categories are returned.
Category [optional] VT_BSTR – Name of category Features from the given
category are returned.
Name [optional] Empty All properties from the selected
category are returned.
110 API Reference Guide
API Interfaces
Parameter Valid Type/Value Description
Name [optional] VT_BSTR – Property name The property with the given
name and category is returned.
AsString [optional] Empty All values in the property bag
are presented in native type.
AsString [optional] VT_BOOL – TRUE or FALSE If set to TRUE, all values in the
property bag are presented as
strings.
Note: More information about category and property names relating to
VT_BSTR is located in the Property Bag for Application Environment (see
page 171) section.
ISCModelDirectory
The Model Directory encapsulates information on a single model directory
entry. Examples of the Model Directory are a file system directory or a CA
ERwin MM library.
The following table contains the methods for the ISCModelDirectory interface:
Method Description
VARIANT_BOOL CopyDirectory(BSTR Source, BSTR Recursively copies one or more model directories
Destination, VARIANT Disposition [optional], from one location to another.
VARIANT Overwrite [optional])
VARIANT_BOOL CopyDirectoryUnit(BSTR Source, Copies one or more model directory units from
BSTR Destination, VARIANT Disposition [optional], one location to another.
VARIANT Overwrite [optional])
VARIANT_BOOL CreateDirectory( BSTR Name) Creates a model directory.
VARIANT_BOOL DeleteDirectory( BSTR Locator, Deletes the specified model directories and their
VARIANT Force [optional]) contents.
VARIANT_BOOL DeleteDirectoryUnit( BSTR Deletes specified model directory units.
Locator, VARIANT Force [optional])
VARIANT_BOOL DirectoryExists( BSTR Locator) Returns TRUE if a specified directory exists.
VARIANT_BOOL DirectoryUnitExists( BSTR Returns TRUE if a specified directory unit exists.
Locator)
SC_ModelDirectoryFlags Flags() Model Directory flags. A 32-bit property flag
word.
Appendix A: API Interfaces Reference 111
API Interfaces
Method Description
VARIANT_BOOL IsOfType( ISCModelDirectory * Returns TRUE if Directory has the same type of
Directory) connection as self.
For example, directory entries from the same
mart and with the same login attributes, such as
user, password, and so on, are considered of the
same type.
ISCModelDirectory * LocateDirectory (BSTR Starts enumeration over the directory sub-
Locator, VARIANT Filter [optional]) entries.
ISCModelDirectory * LocateDirectoryNext() Locates the next sub-entry in the directory
enumeration. Returns a NULL pointer if no more
model directory entries can be found.
ISCModelDirectoryUnit * LocateDirectoryUnit Starts enumeration over the directory units.
(BSTR Locator, VARIANT Filter [optional])
ISCModelDirectoryUnit * Locates the next unit in the directory
LocateDirectoryUnitNext() enumeration.
BSTR Locator() Location of the directory including the absolute
path and parameters. Does not include password
information.
VARIANT_BOOL MoveDirectory( BSTR Source, Recursively moves one or more directories from
BSTR Destination, VARIANT Disposition [optional], one location to another.
VARIANT Overwrite [optional])
VARIANT_BOOL MoveDirectoryUnit( BSTR Source, Moves one or more model directory units from
BSTR Destination, VARIANT Disposition [optional], one location to another.
VARIANT Overwrite [optional])
BSTR Name() Model Directory name. For example, the file
system directory name without path information.
ISCPropertyBag* PropertyBag( VARIANT List Returns a pointer on a property bag with the
[optional], VARIANT AsString [optional]) directory properties.
Note: A directory property is present in the
resulting bag only if it has a value. If the
property does not have any value set, the
property bag will not have the property listed.
void PropertyBag( VARIANT List [optional], Accepts a pointer on a property bag with the
VARIANT AsString [optional], ISCPropertyBag* directory properties.
Property Bag)
SC_ModelDirectoryType Type() Type of a directory.
112 API Reference Guide
API Interfaces
ISCModelDirectory::CopyDirectory Arguments
Here is the signature for the CopyDirectory function:
VARIANT_BOOL CopyDirectory(BSTR Source, BSTR Destination, VARIANT Disposition, VARIANT Overwrite)
The following table contains the valid arguments for the CopyDirectory
function:
Parameter Valid Type/Value Description
Source BSTR – String with a directory Provides a directory path that
path can include wildcard characters
in the last path component, for
the location of one or more
model directories from which to
copy.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Source Empty Denotes self as a subject for the
operation.
Destination BSTR – String with a directory Provides a string with a relative
path or absolute location to identify
where to copy the model
directory from Source. Wildcard
characters are not allowed.
Disposition [optional] Empty
Disposition [optional] VT_BSTR – Semicolon separated Arranges access attributes, such
keyword parameters as resume session, for
Destination. In combination with
the absolute location, this allows
for Source and Destination to be
in different marts.
Overwrite [optional] Empty Indicates if it is to override
existing directories. By default,
directories are overwritten.
Overwrite [optional] VT_BOOL-TRUE or FALSE Indicates if it is to override
existing directories. If TRUE,
directories are overwritten.
Appendix A: API Interfaces Reference 113
API Interfaces
ISCModelDirectory::CopyDirectoryUnit Arguments
Here is the signature for the CopyDirectoryUnit function:
VARIANT_BOOL CopyDirectoryUnit(BSTR Source, BSTR Destination, VARIANT Disposition, VARIANT
Overwrite)
The following table contains the valid arguments for the CopyDirectoryUnit
function:
Parameter Valid Type/Value Description
Source BSTR – String with a directory Provides a directory path that
path can include wildcard characters
in the last path component, for
the location of one or more
model directory units from which
to copy.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Source Empty Denotes self as a subject for the
operation.
Destination BSTR – String with a directory Provides a string with a relative
path or absolute location to identify
where to copy the model
directory from Source. Wildcard
characters are not allowed.
Disposition [optional] Empty
Disposition [optional] VT_BSTR – Semicolon separated Arranges access attributes, such
keyword parameters as resume session, and so on,
for Destination. In combination
with the absolute location, this
allows for Source and
Destination to be in different
marts.
114 API Reference Guide
API Interfaces
Parameter Valid Type/Value Description
Overwrite [optional] Empty Indicates if it is to override
existing directory units. By
default, directory units are
overwritten.
Overwrite [optional] VT_BOOL-TRUE or FALSE Indicates if it is to override
existing directory units. If TRUE,
directory units are overwritten.
ISCModelDirectory::CreateDirectory Arguments
Here is the signature for the CreateDirectory function:
VARIANT_BOOL CreateDirectory( BSTR Name)
The following table contains the valid arguments for the CreateDirectory
function:
Parameter Valid Type/Value Description
Name BSTR – String with a directory Identifies a name of a directory
name to create.
ISCModelDirectory::DeleteDirectory Arguments
Here is the signature for the DeleteDirectory function:
VARIANT_BOOL DeleteDirectory( BSTR Locator, VARIANT Force)
The following table contains the valid arguments for the DeleteDirectory
function:
Parameter Valid Type/Value Description
Locator BSTR – String with a directory Identifies a directory path that
name can contain wildcard characters
in the last path component.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Locator Empty Denotes self as a subject for the
operation.
Appendix A: API Interfaces Reference 115
API Interfaces
Parameter Valid Type/Value Description
Force [optional] Empty Instructs to avoid the enforcing
of overrides.
Force [optional] VT_BOOL – TRUE or FALSE Contains TRUE if the operation
overrides certain locks, such as
read-only, in a file system.
ISCModelDirectory::DeleteDirectoryUnit Arguments
Here is the signature for the DeleteDirectoryUnit function:
VARIANT_BOOL DeleteDirectoryUnit( BSTR Locator, VARIANT Force)
The following table contains the valid arguments for the DeleteDirectoryUnit
function:
Parameter Valid Type/Value Description
Locator BSTR – String with a directory Identifies a directory unit path
name that can contain wildcard
characters in the last path
component.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Force [optional] Empty Instructs to avoid the enforcing
of overrides.
Force [optional] VT_BOOL – TRUE or FALSE Contains TRUE if the operation
overrides certain locks, such as
read-only, in a file system.
116 API Reference Guide
API Interfaces
ISCModelDirectory::DirectoryExists Arguments
Here is the signature for the DirectoryExists function:
VARIANT_BOOL DirectoryExists( BSTR Locator)
The following table contains the valid arguments for the DirectoryExists
function:
Parameter Valid Type/Value Description
Locator BSTR – String with a directory Identifies a directory path.
name
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
ISCModelDirectory::DirectoryUnitExists Arguments
Here is the signature for the DirectoryUnitExists function:
VARIANT_BOOL DirectoryUnitExists( BSTR Locator)
The following table contains the valid arguments for the DirectoryUnitExists
function:
Parameter Valid Type/Value Description
Locator BSTR – String with a directory Identifies a directory unit path.
name
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
ISCModelDirectory::IsOfType Arguments
Here is the signature for the IsOfType function:
VARIANT_BOOL IsOfType(ISCModelDirectory * Directory)
The following table contains the valid arguments for the IsOfType function:
Parameter Valid Type/Value Description
Directory ISCModelDirectory *. Model Identifies a directory
Directory component pointer
Appendix A: API Interfaces Reference 117
API Interfaces
ISCModelDirectory::LocateDirectory Arguments
Here is the signature for the LocateDirectory function:
ISCModelDirectory * LocateDirectory (BSTR Locator, VARIANT Filter)
The following table contains the valid arguments for the LocateDirectory
function:
Parameter Valid Type/Value Description
Locator BSTR – String with a directory Identifies a directory path that
location can contain wildcard characters
in the last path component in
order to search for sub-entries.
If the path provides an exact
location, it can also be used to
return to a single model
directory entry.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Filter [optional] VT_BSTR – Options Specifies a set of options to
narrow a search.
118 API Reference Guide
API Interfaces
ISCModelDirectory::LocateDirectoryUnit Arguments
Here is the signature for the LocateDirectoryUnit function:
ISCModelDirectoryUnit * LocateDirectoryUnit (BSTR Locator, VARIANT Filter)
The following table contains the valid arguments for the LocateDirectoryUnit
function:
Parameter Valid Type/Value Description
Locator BSTR – String with a directory Identifies a directory path that
or unit location can contain wildcard characters
in the last path component in
order to search for units.
If the path provides an exact
location, it can also be used to
return to a single model
directory unit.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Filter [optional] VT_BSTR – Options Specifies a set of options to
narrow a search.
Appendix A: API Interfaces Reference 119
API Interfaces
ISCModelDirectory::MoveDirectory Arguments
Here is the signature for the MoveDirectory function:
VARIANT_BOOL MoveDirectory(BSTR Source, BSTR Destination, VARIANT Disposition, VARIANT Overwrite)
The following table contains the valid arguments for the MoveDirectory
function:
Parameter Valid Type/Value Description
Source BSTR – String with a directory Provides a directory path that
path can include wildcard characters
in the last path component, for
the location of one or more
model directories from which to
move one or more model
directories.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Source Empty Denotes self as a subject for the
operation.
Destination BSTR – String with a directory Provides a string with a relative
path or absolute location to identify
where to move the model
directory from Source. Wildcard
characters are not allowed.
Disposition [optional] Empty
Disposition [optional] VT_BSTR – Semicolon separated Arranges access attributes, such
keyword parameters as resume session, for
Destination. In combination with
the absolute location, this allows
for Source and Destination to be
in different marts.
Overwrite [optional] Empty Indicates if it is to override
existing directories. By default,
directories are overwritten.
Overwrite [optional] VT_BOOL – TRUE or FALSE Indicates if it is to override
existing directories. If TRUE,
directories are overwritten.
120 API Reference Guide
API Interfaces
ISCModelDirectory::MoveDirectoryUnit Arguments
Here is the signature for the MoveDirectoryUnit function:
VARIANT_BOOL MoveDirectoryUnit(BSTR Source, BSTR Destination, VARIANT Disposition, VARIANT
Overwrite)
The following table contains the valid arguments for the MoveDirectory
function:
Parameter Valid Type/Value Description
Source BSTR – String with a directory Provides a directory path that
path can include wildcard characters
in the last path component, for
the location of one or more
model directory units from which
to move one or more model
directory units.
For an absolute path, the CA
ERwin MM database information
and access parameters are
ignored.
Source Empty Denotes self as a subject for the
operation.
Destination BSTR – String with a directory Provides a string with a relative
path or absolute location to identify
where to move the model
directory units from Source.
Wildcard characters are not
allowed.
Disposition [optional] Empty
Disposition [optional] VT_BSTR – Semicolon separated Arranges access attributes, such
keyword parameters as resume session, and so on,
for Destination. In combination
with the absolute location, this
allows for Source and
Destination to be in different
marts.
Appendix A: API Interfaces Reference 121
API Interfaces
Parameter Valid Type/Value Description
Overwrite [optional] Empty Indicates if it is to override
existing model directory units.
By default, model directory units
are overwritten.
Overwrite [optional] VT_BOOL – TRUE or FALSE Indicates if it is to override
existing model directory units. If
TRUE, model directory units are
overwritten.
ISCModelDirectory::PropertyBag Arguments (Get Function)
Here is the signature for the PropertyBag (Get) function:
ISCPropertyBag * PropertyBag(VARIANT List, VARIANT AsString)
The following table contains the valid arguments for the PropertyBag (Get)
function:
Parameter Valid Type/Value Description
List [optional] VT_BSTR – Semicolon separated Provides a list of the model
list of property names directory properties. If the list is
provided, only listed properties
are placed in the returned
property bag.
List [optional] Empty Requests a complete set of
properties.
AsString [optional] VT_BOOL – TRUE or FALSE If set to TRUE, requests that all
values in the bag to be
presented as strings. The default
is FALSE with all values in their
native format.
AsString [optional] Empty All values in the property bag
are presented in native type.
Note: Information about valid property names for VT_BSTR is located in the
Property Bag for Model Directory and Model Directory Unit (see page 179)
section.
122 API Reference Guide
API Interfaces
ISCModelDirectory::PropertyBag Arguments (Set Function)
Here is the signature for the PropertyBag (Set) function:
void PropertyBag(VARIANT List, VARIANT AsString, ISCPropertyBag * propBag)
The following table contains the valid arguments for the PropertyBag (Set)
function:
Parameter Valid Type/Value Description
List [optional] Not used
AsString [optional] Not used
propBag ISCPropertyBag * A pointer on a property bag with
the directory properties to
process.
Note: Information about valid property names and format for ISCPropertyBag
* is located in the Property Bag for Model Directory and Model Directory Unit
(see page 179) section.
ISCModelDirectoryCollection
The Model Directory Collection lists all top-level Model Directories available
including the one made available with the application user interface. A client
can register new Model Directories with this collection.
Method Description
IUnknown _NewEnum() Constructs an instance of the collection
enumerator object.
ISCModelDirectory * Add(BSTR Locator, VARIANT Adds a new top-level directory on the list of
Disposition [optional]) available directories.
VARIANT_BOOL Clear() Removes all the top-level directories from a
collection and disconnects the directories from
associated marts.
long Count() The number of ModelDirectory components in the
collection.
Appendix A: API Interfaces Reference 123
API Interfaces
Method Description
ISCModelObject * Item(long nIndex) Returns an IUnknown interface pointer identified
by its ordered position.
VARIANT_BOOL Remove(VARIANT Selector, Removes a top-level directory from the list of
available directories.
VARIANT_BOOL Disconnect [optional])
ISCModelDirectoryCollection::Add Arguments
Here is the signature for the Add function:
ISCModelDirectory * Add(BSTR Locator, VARIANT Disposition)
The following table contains the valid arguments for the Add function:
Parameter Valid Type/Value Description
Locator BSTR – A model directory Identifies a model directory
location location along with the attributes
required for successful access to
storage.
Disposition [optional] VT_BSTR – List of keywords Arranges access attributes, such
parameters as resume session.
ISCModelDirectoryCollection::Item Arguments
Here is the signature for the Item function:
ISCModelDirectory * Item(long nIndex)
The following table contains the valid arguments for the Item function:
Parameter Valid Type/Value Description
nIndex A long number Identifies an ordered position of
a Model Directory item. The
index is zero-based.
Class [optional] Empty Returns the object specified by
nIndex.
124 API Reference Guide
API Interfaces
ISCModelDirectoryCollection::Remove Arguments
Here is the signature for the Remove function:
VARIANT_BOOL Remove(VARIANT Selector, VARIANT_BOOL Disconnect [optional])
The following table contains the valid arguments for the Remove function:
Parameter Valid Type/Value Description
Selector VT_UNKNOWN – An object pointer for the Model
ISCModelDirectory pointer Directory to remove.
Selector VT_I4 – Numeric index Identifying a model directory for
removal with a zero-based
index.
ISCModelDirectoryUnit
The Model Directory Unit encapsulates information on a single directory unit. A
file system file and a CA ERwin MM model are examples of the Model Directory
Unit.
The following table contains the methods for the ISCModelDirectoryUnit
interface:
Method Description
SC_ModelDirectoryFlags Flags() Model directory unit flags. A 32-bit property flag
word.
VARIANT_BOOL IsOfType( ISCModelDirectory * Returns TRUE if directory has the same type of
Directory) connection as self.
For example, directory entries from the same
mart and with the same login attributes, such
as user, password, and so on, are considered of
the same type.
BSTR Locator() Location of the directory unit including the
absolute path and parameters. Does not include
password information.
BSTR Name() Model directory unit name. For example, the file
system file name without path information.
Appendix A: API Interfaces Reference 125
API Interfaces
Method Description
ISCPropertyBag* PropertyBag( VARIANT List Returns a pointer on a property bag with the
[optional], VARIANT AsString [optional]) directory unit properties.
Note: A directory unit property is present in the
resulting bag only if it has a value. If the
property does not have any value set, the
property bag will not have the property listed.
void PropertyBag( VARIANT List [optional], Accepts a pointer on a property bag with the
VARIANT AsString [optional], ISCPropertyBag* directory unit properties.
Property Bag)
SC_ModelDirectoryType Type() Type of a directory.
Note: More information about Model Directory flags is located in the
Enumerations (see page 167) section.
ISCModelDirectoryUnit::IsOfType Arguments
Here is the signature for the IsOfType function:
VARIANT_BOOL IsOfType(ISCModelDirectory * Directory)
The following table contains the valid arguments for the IsOfType function:
Parameter Valid Type/Value Description
Directory ISCModelDirectory * – Model Identifies a directory
Directory component pointer
126 API Reference Guide
API Interfaces
ISCModelDirectoryUnit::PropertyBag Arguments (Get Function)
Here is the signature for the PropertyBag (Get) function:
ISCPropertyBag * PropertyBag(VARIANT List, VARIANT AsString)
The following table contains the valid arguments for the PropertyBag (Get)
function:
Parameter Valid Type/Value Description
List [optional] VT_BSTR – Semicolon separated Provides a list of the model
list of property names directory unit properties. If the
list is provided, only listed
properties are placed in the
returned property bag.
List [optional] Empty Requests a complete set of
properties.
AsString [optional] VT_BOOL – TRUE or FALSE If set to TRUE, requests that all
values in the bag to be
presented as strings. The default
is FALSE with all values in their
native format.
AsString [optional] Empty All values in the property bag
are presented in native type.
Note: Information about valid property names for VT_BSTR is located in the
Property Bag for Model Directory and Model Directory Unit (see page 179)
section.
ISCModelDirectoryUnit::PropertyBag Arguments (Set Function)
Here is the signature for the PropertyBag (Set) function:
void PropertyBag(VARIANT List, VARIANT AsString, ISCPropertyBag * propBag)
The following table contains the valid arguments for the PropertyBag (Set)
function:
Parameter Valid Type/Value Description
List [optional] Not used
AsString [optional] Not used
propBag ISCPropertyBag * A pointer on a property bag with
the unit properties to process.
Appendix A: API Interfaces Reference 127
API Interfaces
Note: Information about valid property names and format for ISCPropertyBag
* is located in the Property Bag for Model Directory and Model Directory Unit
(see page 179) section.
ISCModelObject
The ISCModelObject interface represents an object in a model.
The following table contains the methods for the ISCModelObject interface:
Method Description
SC_ModelObjectFlags Flags() Returns the flags of the object.
SC_CLSID ClassId() Returns the class identifier of the current object.
BSTR ClassName() Returns the class name of the current object.
ISCModelPropertyCollection * Returns a property collection of the type that you
CollectProperties(VARIANT ClassIds [optional], want. This method always returns a valid
VARIANT MustBeOn [optional], VARIANT collection even if the collection is empty.
MustBeOff [optional])
ISCModelObject * Context() Passes back the context (parent) of the object in
the model's object tree. Passes back NULL if the
current object is the tree root.
VARIANT_BOOL IsInstanceOf(VARIANT ClassId) Returns TRUE if self is an instance of the passed
class. This method respects inheritance. If
ClassId contains an ancestor class, the method
returns TRUE.
VARIANT_BOOL IsValid() Returns TRUE if self is valid. This method is used
to detect if the referenced object is deleted.
BSTR Name() Returns the name or a string identifier of the
current object.
SC_OBJID ObjectId() Uniquely identifies the current object.
ISCModelPropertyCollection * Properties() Returns a property collection of all available
properties.
Note: More information about SC_ModelObjectFlags is located in the
Enumerations (see page 167) section.
128 API Reference Guide
API Interfaces
ISCModelObject::CollectProperties Arguments
Here is the signature for the CollectProperties function:
ISCModelPropertyCollection * CollectProperties(VARIANT ClassIds, VARIANT MustBeOn, VARIANT MustBeOff)
The following table contains the valid arguments for the CollectProperties
function:
Parameter Valid Type/Value Description
ClassIds [optional] Empty All properties of the object are
returned.
ClassIds [optional] VT_ARRAY|VT_BSTR – Provides a list of property class
SAFEARRAY of property IDs identifiers.
ClassIds [optional] VT_ARRAY|VT_BSTR – Provides a list of property class
SAFEARRAY of property names names.
ClassIds [optional] VT_BSTR – ID of a property Identifies a property class.
ClassIds [optional] VT_BSTR – Name of a property Identifies a property class.
ClassIds [optional] VT_BSTR – List of IDs delimited Provides a list of property class
by semicolons identifiers.
ClassIds [optional] VT_BSTR – List of property Provides a list of property class
names delimited by semicolons names.
MustBeOn [optional] Empty Defaults to
SCD_MPF_DONT_CARE which
indicates no filtering.
MustBeOn [optional] VT_I4 – SC_ModelObjectFlags Identifies the properties with the
flags that must be on specified flags set.
MustBeOff [optional] Empty Defaults to
SCD_MPF_DONT_CARE which
indicates no filtering
MustBeOff [optional] VT_I4 – SC_ModelObjectFlags Identifies the properties that do
flags that must be off not have the specified flags.
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed. More information about
SC_ModelObjectFlags is located in the Enumerations (see page 167) section.
Appendix A: API Interfaces Reference 129
API Interfaces
ISCModelObject::IsInstanceOf Arguments
Here is the signature for the IsInstanceOf function:
VARIANT_BOOL IsInstanceOf(VARIANT ClassId)
The following table contains the valid arguments for the IsInstanceOf function:
Parameter Valid Type/Value Description
ClassId VT_BSTR – ID of an object class Identifies a target object class
by the given identifier.
ClassId VT_BSTR – Name of an object Identifies an object class by the
class given name.
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
ISCModelObjectCollection
The ISCModelObjectCollection interface is a collection of objects in the model
that is connected to the active session. Membership in this collection can be
limited by establishing filter criteria.
The following table contains the methods for the ISCModelObjectCollection
interface:
Method Description
IUnknown _NewEnum() Constructs an instance of the collection
enumerator object.
ISCModelObject * Add(VARIANT Class, VARIANT Adds an object of type Class to the model.
ObjectId)
130 API Reference Guide
API Interfaces
Method Description
SC_CLSID * ClassIds() Returns a SAFEARRAY of class identifiers (such as
object type IDs).
Represents a value of the Model Object collection
attribute that limited the membership in the
collection at the time when this collection was
created and can be used for reference purposes.
ClassIds contains a list of acceptable class
identifiers (such as object types). If this list is
non-empty, the collection includes only those
objects whose class identifier appears in the list.
If the list is empty or returns a NULL pointer,
then all objects are included.
BSTR * ClassNames() Similar to ClassIds except that it returns a
SAFEARRAY of class names (such as object type
names).
ISCModelObjectCollection * Collect(VARIANT Creates a collection of Model Objects, which
Root, VARIANT ClassId [optional], VARIANT represents a subcollection of itself. All filtering
Depth [optional], VARIANT MustBeOn [optional], criteria specified in the Collect call is applied
VARIANT MustBeOff [optional]) toward membership in the collection.
The method creates a valid collection even
though the collection may be empty.
All enumerations are depth-first.
long Count() Number of objects in the collection. The number
does not include the root object.
long Depth() Depth limit on iteration in the collection. -1
represents unlimited depth.
ISCModelObject * Item(VARIANT nIndex, Returns an IUnknown pointer for a Model Object
VARIANT Class [optional]) component identified by the Index parameter.
SC_ModelObjectFlags MustBeOff() Filter on model object flags in the collection.
SC_ModelObjectFlags MustBeOn() Filter on model object flags in the collection.
VARIANT_BOOL Remove(VARIANT Object) Removes the specified model object from a
model.
ISCModelObject * Root() Returns a pointer to the root object in a
collection.
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
Appendix A: API Interfaces Reference 131
API Interfaces
ISCModelObjectCollection::Add Arguments
Here is the signature for the Add function:
ISCModelObject * Add(VARIANT Class, VARIANT ObjectId)
The following table contains the valid arguments for the Add function:
Parameter Valid Type/Value Description
Class VT_BSTR – Name of a class Identifies an object class by the
given class name.
Class VT_BSTR – Class ID of an object Identifies an object class by the
type given identifier.
ObjectId [optional] Empty The API assigns an object
identifier for a new object.
ObjectId [optional] VT_BSTR – Object ID for a new The API assigns the given object
object identifier to the new object.
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
ISCModelObjectCollection::Collect Arguments
Here is the signature for the Collect function:
ISCModelObjectCollection * Collect(VARIANT Root, VARIANT ClassId, VARIANT Depth, VARIANT MustBeOn,
VARIANT MustBeOff)
The following table contains the valid arguments for the Collect function:
Parameter Valid Type/Value Description
Root VT_UNKNOWN – Provides a context (parent)
ISCModelObject pointer of the object for the collection.
root object
Root VT_BSTR – ID of the root object Provides a context (parent)
object for the collection.
ClassId [optional] VT_ARRAY|VT_BSTR – Contains a list of acceptable
SAFEARRAY of class IDs class identifiers.
ClassId [optional] VT_ARRAY|VT_BSTR – Contains a list of acceptable
SAFEARRAY of class names class names.
132 API Reference Guide
API Interfaces
Parameter Valid Type/Value Description
ClassId [optional] VT_BSTR – Class ID Provides a class identifier for a
monotype collection.
ClassId [optional] VT_BSTR – Semicolon delimited Contains a list of acceptable
list of class IDs class identifiers.
ClassId [optional] VT_BSTR – Class name Provides a type name for a
monotype collection.
ClassId [optional] VT_BSTR – Semicolon delimited Contains a list of acceptable
list of class names class names.
ClassId [optional] Empty Returns all descendents
regardless of class type.
Depth [optional] VT_I4 – Maximum depth for Returns the descendents of the
descendents. Depth of 1 returns root at a depth no more than
the immediate children of the the given depth.
root. A depth of -1 (which is the
default value) represents
unlimited depth.
Depth [optional] Empty Returns all descendents of the
root (unlimited depth).
MustBeOn [optional] VT_I4 – SC_ModelObjectFlags Provides a set of required flags.
that must be set
MustBeOn [optional] Empty Defaults to
SCD_MOF_DONT_CARE.
MustBeOff [optional] VT_I4 – SC_ModelObjectFlags Provides a set of flags that must
that must not be set not be set.
MustBeOff [optional] Empty Defaults to
SCD_MOF_DONT_CARE.
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed. More information about SC_ModelObjectFlags is
located in the Enumerations (see page 167) section.
Appendix A: API Interfaces Reference 133
API Interfaces
ISCModelObjectCollection::Item Arguments
Here is the signature for the Item function:
ISCModelObject * Item(VARIANT nIndex, VARIANT Class)
The following table contains the valid arguments for the Item function:
Parameter Valid Type/Value Description
nIndex VT_UNKNOWN – Pointer to Identifies an object with the
ISCModelObject interface Model Object pointer.
nIndex VT_BSTR – ID of an object Identifies an object with the
given object identifier.
nIndex VT_BSTR – Name of an object If the name of an object is used,
the Class parameter must also
be used. Identifies an object
with the given name and given
object class.
Class [optional] Empty Only if nIndex is not an object
name.
Class [optional] VT_BSTR – Name of a class Must be used if the nIndex
parameter is the name of an
object. Identifies an object class
name.
Class [optional] VT_BSTR – Class ID of object Must be used if the nIndex
type parameter is the name of an
object. Identifies an object class
identifier.
Note: For information on valid object class names and identifiers see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
134 API Reference Guide
API Interfaces
ISCModelObjectCollection::Remove Arguments
Here is the signature for the Remove function:
VARIANT_BOOL Remove(VARIANT Object)
The following table contains the valid arguments for the Remove function:
Parameter Valid Type/Value Description
Object VT_UNKNOWN. ISCModelObject Identifies the removed object by
– pointer to an object the Model Object pointer.
Object VT_BSTR – ID of the object Identifies the removed object by
the object's identifier.
ISCModelProperty
The ISCModelProperty interface represents a property of a given object.
The following table contains the methods for the ISCModelProperty interface:
Method Description
BSTR ClassName() Returns the class name of the property.
BSTR FormatAsString() Formats the property value as a string.
ISCPropertyValueCollection * PropertyValues() Returns the collection of values for the model
property
long Count() Contains the number of values in the property.
SC_CLSID ClassId() Returns the class identifier of the property.
SC_ModelPropertyFlags Flags() Returns the flags of the property.
SC_ValueTypes DataType(VARIANT ValueId Passes back the identifier of the native value type
[optional]) for the indicated property value.
VARIANT_BOOL GetValueFacetIds( Long* Retrieves available property facet IDs.
FacetsTrueBasket, Long* FacetsFalseBasket)
FacetsTrueBasket is a SAFEARRAY of facet ID
numbers. The listed facets have TRUE as a value.
FacetsFalseBasket is a SAFEARRAY of facet ID
numbers. The listed facets have FALSE as a
value.
The method returns FALSE if the property does
not have a value.
Appendix A: API Interfaces Reference 135
API Interfaces
Method Description
VARIANT_BOOL GetValueFacetNames(BSTR* Retrieves available property facet names.
FacetsTrueBasket,BSTR* FacetsFalseBasket)
FacetsTrueBasket is a SAFEARRAY of facet name
strings. The listed facets have TRUE as a value.
FacetsFalseBasket is a SAFEARRAY of facet name
strings. The listed facets have FALSE as a value.
The method returns FALSE if the property does
not have a value.
VARIANT_BOOL IsValid() Returns TRUE if self is valid.
VARIANT_BOOL RemoveAllValues() Removes all values from the property.
VARIANT_BOOL RemoveValue(VARIANT ValueId Removes the specified value from the property. If
[optional]) no values remain after the removal, the property
has a NULL value.
Returns TRUE if the value was removed.
VARIANT Value(VARIANT ValueId [optional], Retrieves the indicated property value in the
VARIANT ValueType [optional]) requested format.
Void SetValueFacets(VARIANT* Assigns new values to the property facets.
FacetsTrueBasket, VARIANT* FacetsFalseBasket)
FacetsTrueBasket is a list of facets to be set to
TRUE. It is either a SAFEARRAY of facet ID
numbers, a SAFEARRAY of facet name strings, or
a string with semicolon-separated facet names.
FacetsFalseBasket is a list of facets to be set to
FALSE. It is either a SAFEARRAY of facet ID
numbers, a SAFEARRAY of facet name strings, or
a string with semicolon-separated facet names.
The method returns FALSE if the property does
not have a value
void Value(VARIANT ValueId [optional], VARIANT Sets the indicated property value with the given
ValueType [optional], VARIANT Val ) value.
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed. More information about
SC_ModelPropertyFlags is located in the Enumerations (see page 167) section.
More information about property datatypes is located in the SC_ValueTypes
(see page 170) section.
136 API Reference Guide
API Interfaces
ISCModelProperty::DataType Arguments
Here is the signature for the DataType function:
SC_ValueTypes DataType(VARIANT ValueId)
The following table contains the valid arguments for the DataType function:
Parameter Valid Type/Value Description
ValueId Empty Valid if a property is scalar or if
all elements of a multi-valued
property have the same
datatype.
ValueId VT_I4 – Index Ignored if the property is scalar.
Identifies an element in a multi-
valued property with a zero-
based index.
ValueId VT_BSTR – Name of a non- Ignored if the property is scalar.
scalar element If the property is multi-valued,
indicates an element by name.
ISCModelProperty::RemoveValue Arguments
Here is the signature for the RemoveValue function:
VARIANT_BOOL RemoveValue(VARIANT ValueId)
The following table contains the valid arguments for the RemoveValue
function:
Parameter Valid Type/Value Description
ValueId Empty Valid for a scalar property only.
ValueId VT_I4 – Index Ignored if the property is scalar.
Identifies an element in a multi-
valued property with a zero-
based index.
ValueId VT_BSTR – Name of a non- Ignored if the property is scalar.
scalar element If the property is multi-valued,
indicates an element by name.
Appendix A: API Interfaces Reference 137
API Interfaces
ISCModelProperty::Value Arguments (Get Function)
Here is the signature for the Value (Get) function:
VARIANT Value(VARIANT ValueId, VARIANT ValueType)
The following table contains the valid arguments for the Value (Get) function:
Parameter Valid Type/Value Description
ValueId [optional] Empty Valid for a scalar property only.
ValueId [optional] VT_BSTR – Name of a non- Ignored if the property is scalar.
scalar element If the property is multi-valued,
indicates an element by name.
ValueId [optional] VT_I4 – Index of a non-scalar Ignored if the property is scalar.
element If the property is multi-valued,
indicates an element by a zero-
based index.
ValueType [optional] Empty Indicates a native datatype for
return values.
ValueType [optional] VT_I4 – SCVT_DEFAULT Indicates a native datatype for
return values.
ValueType [optional] VT_I4 – SCVT_BSTR Indicates a conversion to a
string for return values.
ISCModelProperty::Value Arguments (Set Function)
Here is the signature for the Value (Set) function:
void Value(VARIANT ValueId, VARIANT ValueType, VARIANT Val)
The following table contains the valid arguments for the Value (Set) function:
Parameter Valid Type/Value Description
ValueId [optional] Empty Valid for a scalar property only.
ValueId [optional] VT_I4 – Index of a non-scalar Indicates a value position with a
property zero-based index in a non-scalar
property.
A value of -1 causes a new value
to be added at the end of the
vector.
ValueId [optional] VT_BSTR – Name of the element Indicates a value position with
in a multi-valued property the given name.
138 API Reference Guide
API Interfaces
Parameter Valid Type/Value Description
ValueType [optional] Empty Not used
Val Dependent upon the property
type
ISCModelProperty::GetValueFacetIds Arguments
Here is the signature for the GetValueFacetIds function:
VARIANT_BOOL GetValueFacetIds(Long* FacetsTrueBasket, Long* FacetsFalseBasket)
The following table contains the valid arguments for the GetValueFacetIds
function:
Parameter Valid Type/Value Description
FacetsTrueBasket SAFEARRAY(VT_I4) – Array of Lists facets that are set and
facet IDs have TRUE as a value.
FacetsFalseBasket SAFEARRAY(VT_I4) – Array of Lists facets that are set and
facet IDs have FALSE as a value.
Note: More information about FacetsTrueBasket and FacetsFalse Basket is
located in the Property Bag for Application Environment (see page 171)
section.
ISCModelProperty::GetValueFacetNames Arguments
Here is the signature for the GetValueFacetNames function:
VARIANT_BOOL GetValueFacetNames(BSTR* FacetsTrueBasket, BSTR* FacetsFalseBasket)
The following table contains the valid arguments for the GetValueFacetNames
function:
Parameter Valid Type/Value Description
FacetsTrueBasket SAFEARRAY(VT_BSTR) – Array Lists facets that are set and
of facet names have TRUE as a value.
FacetsFalseBasket SAFEARRAY(VT_BSTR) – Array Lists facets that are set and
of facet names have FALSE as a value.
Note: More information about FacetsTrueBasket and FacetsFalse Basket is
located in the Property Bag for Application Environment (see page 171)
section.
Appendix A: API Interfaces Reference 139
API Interfaces
ISCModelProperty::SetValueFacets Arguments
Here is the signature for the SetValueFacets function:
void SetValueFacets(VARIANT FacetsTrueBasket, VARIANT FacetsFalseBasket)
The following table contains the valid arguments for the SetValueFacets
function:
Parameter Valid Type/Value Description
FacetsTrueBasket SAFEARRAY(VT_I4) – array A list of facets to be set to TRUE.
of facet IDs
FacetsTrueBasket SAFEARRAY(VT_BSTR) – A list of facets to be set to TRUE.
array of facet names
FacetsTrueBasket VT_BSTR – string with facet A list of facets to be set to TRUE.
names separated
by semicolon
FacetsFalseBasket SAFEARRAY(VT_I4) – array A list of facets to be set to FALSE.
of facet IDs
FacetsFalseBasket SAFEARRAY(VT_BSTR) – A list of facets to be set to FALSE.
array of facet names
FacetsFalseBasket VT_BSTR – string with facet A list of facets to be set to FALSE.
names separated
by semicolon
Note: More information about FacetsTrueBasket and FacetsFalse Basket is
located in the Property Bag for Application Environment (see page 171)
section.
140 API Reference Guide
API Interfaces
ISCModelPropertyCollection
The ISCModelPropertyCollection interface is a collection of properties for a
given model object. Membership in this collection can be limited by
establishing filter criteria.
The following table contains the methods for the ISCModelPropertyCollection
interface:
Method Description
IUnknown _NewEnum() Constructs an instance of the collection
enumerator object.
ISCModelProperty * Add(VARIANT ClassId) Construct a new property for a bound model
object if it does not exist.
SC_CLSID * ClassIds() Returns a SAFEARRAY of property class identifiers
in the property collection.
Represents a value of the ModelProperties
collection attribute that limited the membership
at the time when this collection was created and
can be used for reference purposes.
ClassIds contain an array of acceptable class
identifiers (such as property classes). If this list is
non-empty, the property collection includes only
those properties whose class identifier appears on
the list. If the list is empty or the caller supplies a
NULL pointer, the collection includes all the
properties owned by the object.
BSTR * ClassNames() Same as the ClassIds property, but returns a
SAFEARRAY of property type names in the
property collection.
long Count() Number of properties in the collection.
VARIANT_BOOL HasProperty(VARIANT ClassId, Returns TRUE if the object owns a property of the
VARIANT MustBeOn [optional], VARIANT passed class.
MustBeOff [optional])
Treats properties as absent if they fail to satisfy
ClassIds, MustBeOn, and MustBeOff attributes of
the collection.
Alternative MustBeOn, MustBeOff can be offered
using optional parameters.
Appendix A: API Interfaces Reference 141
API Interfaces
Method Description
VARIANT_BOOL HasPropertyFacets(VARIANT Returns TRUE if the object owns a property of the
ClassId, VARIANT MustBeOn [optional], VARIANT passed class.
MustBeOff [optional],
Treats properties as absent if they fail to satisfy
VARIANT FacetsMustBeSet [optional]) ClassIds, MustBeOn, and MustBeOff attributes of
the collection.
Alternative FlagsMustBeOn, FlagsMustBeOff,
FacetsMustBeSet can be offered using optional
parameters.
FacetsMustBeSet indicates that a property must
have one or more facets. The parameter can be
either a SAFEARRAY of the facet's ID numbers, a
SAFEARRAY of the facet's name strings, or a
string with facet names separated by a
semicolon.
ISCModelProperty * Item(VARIANT Class) Returns a model object property.
The method checks if the property exists. If it
does not, the method creates a property
description, returns an ISCModelProperty
instance, and sets the NULL flag for the property.
A new property value can be set by using the
Value property of the instance. However, it will
fail to retrieve a value before it is set.
The method allows you to create an instance of
ISCModelProperty for properties like ReadOnly,
Maintained By the Tool, and so on. The value for
these properties cannot be changed or assigned.
Yet property flags, datatype, and so on are
available even when the collection does not have
the property instance. Use HasProperty to check
on the existence of the property for a model
object instance.
SC_ModelPropertyFlags MustBeOff() Filter on property flags in the collection. The filter
is set when the property collection is created
through the ISCModelObject::CollectProperties
method.
142 API Reference Guide
API Interfaces
Method Description
SC_ModelPropertyFlags MustBeOn() Filter on property flags in the collection. The filter
is set when the property collection is created
through the ISCModelObject::CollectProperties
method.
VARIANT_BOOL Remove(VARIANT ClassId) Removes the indicated property from the bound
object.
Successful execution of the call renders all binds
with the removed property invalid. The client
should release all ISCModelProperty pointers, and
all related Value Collection and Value pointers
known to represent such an association. Calls to
interfaces fail and the IsValid method returns
FALSE.
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed. More information about
SC_ModelPropertyFlags is located in the Enumerations (see page 167) section.
ISCModelPropertyCollection::Add Arguments
Here is the signature for the Add function:
ISCModelProperty * Add(VARIANT ClassId)
The following table contains the valid arguments for the Add function:
Parameter Valid Type/Value Description
ClassId VT_BSTR – Name of a property Provides a new property type
class name.
ClassId VT_BSTR – ID of a property Provides a new property class
identifier.
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed.
Appendix A: API Interfaces Reference 143
API Interfaces
ISCModelPropertyCollection::HasProperty Arguments
Here is the signature for the HasProperty function:
VARIANT_BOOL HasProperty(VARIANT ClassId, VARIANT MustBeOn, VARIANT MustBeOff)
The following table contains the valid arguments for the HasProperty function:
Parameter Valid Type/Value Description
ClassId VT_BSTR – Name of a property Identifies a class name for a
property.
ClassId VT_BSTR – ID of a property Identifies a class identifier for a
property.
MustBeOn [optional] VT_I4 – SC_ModelPropertyFlags Provides a set of required flags.
that must be set
MustBeOn [optional] Empty Default is set to the MustBeOn
filter that was used to create the
property collection.
MustBeOff [optional] VT_I4 – SC_ModelPropertyFlags Provides a set of flags that must
that must not be set not be set.
MustBeOff [optional] Empty Default is set to the MustBeOff
filter that was used to create the
property collection.
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed. More information about
SC_ModelPropertyFlags is located in the Enumerations (see page 167) section.
144 API Reference Guide
API Interfaces
ISCModelPropertyCollection::HasPropertyFacets Arguments
Here is the signature for the HasPropertyFacets function:
VARIANT_BOOL HasPropertyFacets(VARIANT ClassId, VARIANT FlagsMustBeOn, VARIANT
FlagsMustBeOff, VARIANT FacetsMustBeSet)
The following table contains the valid arguments for the HasPropertyFacets
function:
Parameter Valid Type/Value Description
ClassId VT_BSTR – Name of a property Identifies a class name for a
property.
ClassId VT_BSTR – ID of a property Identifies a class identifier for a
property.
FlagsMustBeOn [optional] VT_I4 – SC_ModelPropertyFlags Provides a set of required flags.
that must be set
FlagsMustBeOn [optional] Empty Default is set to the MustBeOn
filter that was used to create the
property collection.
FlagsMustBeOff [optional] VT_I4 – SC_ModelPropertyFlags Provides a set of flags that must
that must not be set not be set.
FlagsMustBeOff [optional] Empty Default is set to the MustBeOff
filter that was used to create the
property collection.
FacetsMustBeSet [optional] SAFEARRAY(VT_I4) – array of Indicates one or more facets
facet IDs that a property must have.
FacetsMustBeSet [optional] SAFEARRAY(VT_BSTR) – array Indicates one or more facets
of facet names that a property must have.
FacetsMustBeSet [optional] VT_BSTR – string with facet Indicates one or more facets
names separated by semicolon that a property must have.
FacetsMustBeSet [optional] Empty No facet requirements
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed. More information about
SC_ModelPropertyFlags is located in the Enumerations (see page 167) section.
More information about FacetsMustBeSet is located in the Property Bag for
Application Environment (see page 171) section.
Appendix A: API Interfaces Reference 145
API Interfaces
ISCModelPropertyCollection::Item Arguments
Here is the signature for the Item function:
ISCModelProperty * Item(VARIANT Class)
The following table contains the valid arguments for the Item function:
Parameter Valid Type/Value Description
Class VT_BSTR – ID of a property Provides the property class
identifier.
Class VT_BSTR – Name of a property Provides the property class
name.
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed.
ISCModelPropertyCollection::Remove Arguments
Here is the signature for the Remove function:
VARIANT_BOOL Remove(VARIANT ClassId)
The following table contains the valid arguments for the Remove function:
Parameter Valid Type/Value Description
ClassId ISCModelProperty * Identifies a property with a
Model Property object.
ClassId VT_BSTR – Name of the Identifies the property with a
property class name.
ClassId VT_BSTR – ID of the property Identifies the property with a
class identifier.
Note: For information on valid property class identifiers and valid property
class names see the document ERwin Metamodel Reference.PDF, which is in
the \Doc folder where this product is installed.
146 API Reference Guide
API Interfaces
ISCModelSet
A Model Set component provides access to a member of a hierarchically
organized collection of model sets.
The following table contains the methods for the ISCModelSet interface:
Method Description
SC_MODELTYPEID ClassId() Class identifier for metadata associated with the
model set.
BSTR ClassName() Class name for metadata associated with the
model set.
VARIANT_BOOL DirtyBit() Returns a flag that indicates that the data has
changed in the model set.
void DirtyBit(VARIANT_BOOL ) Sets the flag that indicates that the data in the
model set has changed.
SC_MODELTYPEID ModelSetId() Passes back an identifier for the model set.
BSTR Name() Passes back a persistence unit name.
ISCModelSet * Owner() A pointer to the owner model set. Returns NULL
for the top model set in the persistence unit.
ISCModelSetCollection * OwnedModelSets() Provides a collection with directly owned model
sets.
SC_MODELTYPEID PersistenceUnitId() The identifier for the persistence unit that
contains the model set.
ISCPropertyBag * PropertyBag(VARIANT List Returns a property bag with the model set's
[optional], VARIANT AsString [optional]) properties.
A model set property is present in the resulting
bag only if it has a value. If the property does not
have any value set, the property bag will not
have the property listed.
void PropertyBag(VARIANT List [optional], Sets a model set with the properties in the given
VARIANT AsString [optional], ISCPropertyBag * property bag.
propBag)
Note: For information on metadata class identifiers and names see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
Appendix A: API Interfaces Reference 147
API Interfaces
ISCModelSet::PropertyBag Arguments (Get Function)
Here is the signature for the PropertyBag (Get) function:
ISCPropertyBag * PropertyBag(VARIANT List, VARIANT AsString)
The following table contains the valid arguments for the PropertyBag (Get)
function:
Parameter Valid Type/Value Description
List [optional] VT_BSTR – Semicolon separated Provides a list of the model set
list of properties properties. If the list is provided,
only listed properties are placed
in the returned property bag.
List [optional] Empty Requests a complete set of
properties.
AsString [optional] VT_BOOL – TRUE or FALSE If set to TRUE, requests that all
values in the bag to be
presented as strings. The default
is FALSE with all values in their
native format.
AsString [optional] Empty All values in the property bag
are presented in native type.
Note: More information about property names is located in the Property Bag
for Persistence Units and Persistence Unit Collections (see page 182) section.
ISCModelSet::PropertyBag Arguments (Set Function)
Here is the signature for the PropertyBag (Set) function:
void PropertyBag(VARIANT List, VARIANT AsString, ISCPropertyBag * propBag)
The following table contains the valid arguments for the PropertyBag (Set)
function:
Parameter Valid Type/Value Description
List [optional] Not used
AsString [optional] Not used
propBag ISCPropertyBag * A pointer on a property bag with
the model set properties to
process.
148 API Reference Guide
API Interfaces
ISCModelSetCollection
A Model Set Collection contains all model sets directly owned by an owner
model set.
The following table contains the methods for the ISCModelSetCollection
interface:
Method Description
IUnknown _NewEnum() Constructs an instance of a model set enumerator
object.
long Count() Number of model sets in the collection.
ISCPersistenceUnit * Item(VARIANT nIndex) Passes back a pointer for a ModelSet component.
ISCModelSet * Owner() Returns a pointer to the owner model set.
ISCModelSetCollection::Item Arguments
Here is the signature for the Item function:
ISCModelSet * Item(VARIANT nIndex)
The following table contains the valid arguments for the Item function:
Parameter Valid Type/Value Description
nIndex VT_UNKNOWN – Pointer to Creates a clone for the Model
ISCPersistenceUnit Set object.
nIndex VT_I4 – Index of a model set in Ordered position in the
the model set collection collection. The index is zero-
based.
nIndex VT_BSTR – Model Set ID Model set identifier.
nIndex VT_BSTR – Metadata Class ID Class identifier for metadata
associated with a model set.
nIndex VT_BSTR – Metadata Class Class name for metadata
name associated with a model set.
Note: For information on metadata class identifiers and names see the
document ERwin Metamodel Reference.PDF, which is in the \Doc folder where
this product is installed.
Appendix A: API Interfaces Reference 149
API Interfaces
ISCPersistenceUnit
A Persistence Unit encapsulates the information required to connect to an
existing, outer level persistence unit within an application.
The following table contains the methods for the ISCPersistenceUnit interface:
Method Description
VARIANT_BOOL DirtyBit() Returns a flag that indicates that the data has
changed in the persistence unit.
void DirtyBit(VARIANT_BOOL ) Sets the flag that indicates that the data in the
persistence unit has changed.
VARIANT_BOOL HasSession() Returns TRUE if a unit has one or more sessions
connected.
VARIANT_BOOL IsValid() Returns TRUE if self is valid.
ISCModelSet * ModelSet() Passes back a pointer on the top model set in the
Persistence Unit.
BSTR Name() Passes back a persistence unit name.
SC_MODELTYPEID ObjectId() Passes back an identifier for the persistence unit.
ISCPropertyBag * PropertyBag(VARIANT List Returns a property bag with the persistence unit's
[optional], VARIANT AsString [optional]) properties.
A unit property is present in the resulting bag
only if it has a value. If the property does not
have any value set, the property bag will not
have the property listed.
void PropertyBag(VARIANT List [optional], Sets a persistence unit with the properties in the
VARIANT AsString [optional], ISCPropertyBag * given property bag.
propBag)
VARIANT_BOOL Save(VARIANT Locator Persists model data to external storage.
[optional], VARIANT Disposition [optional]) Uncommitted transactions are ignored.
Note: More information about property descriptions is located in the Property
Bag for Persistence Units and Persistence Unit Collections (see page 182)
section.
150 API Reference Guide
API Interfaces
ISCPersistenceUnit::PropertyBag Arguments (Get Function)
Here is the signature for the PropertyBag (Get) function:
ISCPropertyBag * PropertyBag(VARIANT List, VARIANT AsString)
The following table contains the valid arguments for the PropertyBag (Get)
function:
Parameter Valid Type/Value Description
List [optional] VT_BSTR – Semicolon separated Provides a list of the unit
list of properties properties. If the list is provided,
only listed properties are placed
in the returned property bag.
List [optional] Empty Requests a complete set of
properties.
AsString [optional] VT_BOOL – TRUE or FALSE If set to TRUE, it requests that
all values in the bag be
presented as strings. The default
is FALSE and all values are in
their native format.
AsString [optional] Empty All values in the property bag
are presented in native type.
Note: More information about valid property names is located in the Property
Bag for Persistence Units and Persistence Unit Collections (see page 182)
section.
ISCPersistenceUnit::PropertyBag Arguments (Set Function)
Here is the signature for the PropertyBag (Set) function:
void PropertyBag(VARIANT List, VARIANT AsString, ISCPropertyBag * propBag)
The following table contains the valid arguments for the PropertyBag (Set)
function:
Parameter Valid Type/Value Description
List [optional] Not used
AsString [optional] Not used
propBag ISCPropertyBag * A pointer on a property bag with
the unit properties to process.
Appendix A: API Interfaces Reference 151
API Interfaces
ISCPersistenceUnit::Save Arguments
Here is the signature for the Save function:
VARIANT_BOOL Save(VARIANT Locator, VARIANT Disposition)
The following table contains the valid arguments for the Save function:
Parameter Valid Type/Value Description
Locator [optional] VT_BSTR – Full path to a Provides a new location for the
storage location persistence unit data source as a
string with a file or CA ERwin
MM item location, along with the
attributes required for successful
access to storage.
Locator [optional] Empty Indicates the use of the original
persistence unit location.
Disposition [optional] VT_BSTR – List of keywords Specifies changes in access
parameters attributes, such as read-only.
Note: More information about the format of the Locator parameter is located
in the Locator Property (see page 189) section.
ISCPersistenceUnitCollection
The ISCPersistenceUnitCollection contains all outer level persistence units
loaded in the application. It contains one entry for each active data model.
The following table contains the methods for the ISCPersistenceUnitCollection
interface:
Method Description
IUnknown _NewEnum() Constructs an instance of unit enumerator object.
ISCPersistenceUnit * Add(VARIANT Locator, Adds a new persistence unit to the unit collection.
VARIANT Disposition [optional])
VARIANT_BOOL Clear() Purges all units from the collection.
long Count() Number of persistence units in the collection.
ISCPersistenceUnit * Create(ISCPropertyBag * Creates a new unit, and registers the unit with
PropertyBag, VARIANT ObjectId [optional]) the collection.
152 API Reference Guide
API Interfaces
Method Description
ISCPersistenceUnit * Item(VARIANT nIndex) Passes back an IUnknown pointer for a
PersistenceUnit component.
VARIANT_BOOL Remove(VARIANT Selector, Removes a persistence unit from the collection.
VARIANT Save [optional])
Note: More information about property descriptions is located in the Property
Bag for Persistence Units and Persistence Unit Collections (see page 182)
section.
ISCPersistenceUnitCollection::Add Arguments
Here is the signature for the Add function:
ISCPersistenceUnit * Add(VARIANT Locator, VARIANT Disposition)
The following table contains the valid arguments for the Add function:
Parameter Valid Type/Value Description
Locator VT_BSTR – Persistence unit Identifies a location for the
location persistence unit data source as a
string with a file or CA ERwin
MM item location, along with the
attributes required for successful
access to storage.
Disposition [optional] VT_BSTR – List of keywords Arranges access attributes, such
parameters as read only.
Note: More information about the Locator and Disposition parameters is
located in the Locator Property (see page 189) section.
Appendix A: API Interfaces Reference 153
API Interfaces
ISCPersistenceUnitCollection::Create Arguments
Here is the signature for the Create function:
ISCPersistenceUnit * Create(ISCPropertyBag * Property Bag, VARIANT ObjectId)
The following table contains the valid arguments for the Create function:
Parameter Valid Type/Value Description
Property Bag ISCPropertyBag * – Pointer to a Supplies required and optional
Property Bag object properties to the creation
process, such as type of the
model.
ObjectId [optional] Empty Generates an ID for the new
persistence unit.
ObjectId [optional] VT_BSTR – Object ID for the Provides an identifier for the
new persistence unit new persistence unit.
Note: More information about property names and format is located in the
Property Bag for Persistence Units and Persistence Unit Collections (see
page 182) section.
ISCPersistenceUnitCollection::Item Arguments
Here is the signature for the Item function:
ISCPersistenceUnit * Item(VARIANT nIndex)
The following table contains the valid arguments for the Item function:
Parameter Valid Type/Value Description
nIndex VT_UNKNOWN – Pointer to Creates a clone for the
ISCPersistenceUnit Persistence Unit object.
nIndex VT_I4 – Index of a persistence Ordered position in the
unit in the persistence unit collection. The index is zero-
collection based.
nIndex VT_BSTR – ID of a persistence Application-wide unique
unit persistence unit identifier.
154 API Reference Guide
API Interfaces
ISCPersistenceUnitCollection::Remove Arguments
Here is the signature for the Remove function:
VARIANT_BOOL Remove(VARIANT Selector, VARIANT Save)
The following table contains the valid arguments for the Remove function:
Parameter Valid Type/Value Description
Selector VT_UNKNOWN – Pointer to Identifies the persistence unit.
ISCPersistenceUnit interface
Selector VT_BSTR – ID of a persistence Application-wide unique
unit persistence unit identifier.
Selector VT_I4 – Index of a persistence Ordered position in the
unit in the persistence unit collection. The index is zero-
collection based.
Save [optional] VT_BOOL If set to TRUE, it saves the
persistence unit prior to
removing it from the collection.
By default, all unsaved data is
saved unless the Save
parameter has a FALSE value, or
the unit has a temporary status
with an unspecified location
property.
Note: Models should be closed prior to exiting the application. Add the
following line in your code to provide a call to explicitly close the model prior
to exiting your application:
...
SaveNewPersistenceUnit(ThePersistenceUnit, DefaultFileName)
TheApplication.PersistenceUnits.Remove(ThePersistenceUnit, False)
...
Appendix A: API Interfaces Reference 155
API Interfaces
ISCPropertyBag
The ISCPropertyBag interface is used to set and access the properties of
ISCApplicationEnvironment, ISCPersistenceUnit, and ISCModelSet. The
ISCPropertyBag is also used to set the properties of a new persistence unit.
The following table contains the methods for the ISCPropertyBag interface:
Method Description
VARIANT_BOOL Add(BSTR Name, VARIANT Adds a new property to the bag. Does not check
Value) for duplicate names. Returns TRUE if the property
was added to the bag, otherwise, it is FALSE.
void ClearAll() Removes all properties from the bag.
long Count() Returns the number of properties.
BSTR Name(long PropertyIdx) Retrieves the indicated property name in the bag.
VARIANT Value(VARIANT Property) Retrieves the indicated property in the bag.
void Value(VARIANT Property, VARIANT Val) Sets the indicated property in the bag.
ISCPropertyBag::Add Arguments
Here is the signature for the Add function:
VARIANT_BOOL Add(BSTR Name, VARIANT Value)
The following table contains the valid arguments for the Add function:
Parameter Valid Type/Value Description
Name BSTR Name of a new property.
Value Dependent on the property Value for a new property.
156 API Reference Guide
API Interfaces
ISCPropertyBag::Name Arguments
Here is the signature for the Name function:
BSTR Name(long PropertyIdx)
The following table contains the valid arguments for the Name function:
Parameter Valid Type/Value Description
PropertyIdx Long A zero-based index for the
requested name.
ISCPropertyBag::Value Arguments (Get Function)
Here is the signature for the Value (Get) function:
VARIANT Value(VARIANT Property)
The following table contains the valid arguments for the Value (Get) function:
Parameter Valid Type/Value Description
Property VT_BSTR – Name of the Identifies retrieved property.
property
Property VT_I4 – Index of the property Zero-based property index in
the Property Bag.
ISCPropertyBag::Value Arguments (Set Function)
Here is the signature for the Value (Set) function:
void Value(VARIANT Property, VARIANT Val)
The following table contains the valid arguments for the Value (Set) function:
Parameter Valid Type/Value Description
Property VT_BSTR – Name of the Identifies the property to
property update.
Val Dependent on the property Value for the given property.
Appendix A: API Interfaces Reference 157
API Interfaces
ISCPropertyValue
The ISCPropertyValue interface is a single value of a given property.
The following table contains the methods for the ISCPropertyValue interface:
Method Description
SC_ValueTypes * GetSupportedValueIdTypes() Groups a list of supported value types for the
current value identifier and returns it as a
SAFEARRAY.
The GetValue method must be able to convert the
current value into any value type whose code
appears in the returned list. If the list is empty,
the value is available only in its native (such as
default) format. Reference properties must return
an empty list.
SC_ValueTypes * GetSupportedValueTypes() Groups a list of supported value types and
returns it as a SAFEARRAY.
The GetValueId method must be able to convert
the current value into any value type whose code
appears in the returned list. If the list is empty,
then the current identifier is available only in its
native (such as default) format.
SC_CLSID PropertyClassId() Returns the class identifier of the current
property.
BSTR PropertyClassName() Returns the class name of the current property.
VARIANT Value(VARIANT ValueType [optional]) Converts the current value to the passed value
type.
VARIANT ValueId(VARIANT ValueType [optional]) Uniquely identifies the value in a non-scalar
property.
SC_ValueTypes ValueIdType() Passes back the default type of the ValueId that
identifies the value within the non-scalar
property.
SC_ValueTypes ValueType() Passes back the default type of the property
value.
Note: More information about value data types is located in the
SC_ValueTypes (see page 170) section.
158 API Reference Guide
API Interfaces
ISCPropertyValue::ValueId Arguments
Here is the signature for the ValueId function:
VARIANT ValueId(VARIANT ValueType)
The following table contains the valid arguments for the ValueId function:
Parameter Valid Type/Value Description
ValueType [optional] VT_I4 – SCVT_I2 or SCVT_I4 Returns VT_EMPTY if property is
scalar. If it is non-scalar, the
value of the zero-based index of
the property is returned.
ValueType [optional] VT_I4 – SCVT_BSTR Returns VT_EMPTY if the
property is scalar, returns the
name of the non-scalar property
member if it is available, or else
it returns the index of the
member.
ValueType [optional] VT_I4 – SCVT_DEFAULT Returns VT_EMPTY if the
property is scalar. If it is non-
scalar, the value of the zero-
based index of the property is
returned.
ValueType [optional] Empty Defaults to SCVT_Default.
ISCPropertyValue::Value Arguments
Here is the signature for the Value function:
VARIANT Value(VARIANT ValueType)
The following table contains the valid arguments for the Value function:
Parameter Valid Type/Value Description
ValueType [optional] VT_I4 – SCVT_DEFAULT Identifies a request for the
property value in native format.
ValueType [optional] VT_I4 – SCVT_BSTR Identifies a request for the
string conversion for the
property value.
ValueType [optional] VT_I4 – Type of property Identifies a target for type
conversion.
ValueType [optional] Empty Defaults to SCVT_DEFAULT.
Appendix A: API Interfaces Reference 159
API Interfaces
ISCPropertyValueCollection
The ISCPropertyValueCollection interface is a collection of values for a non-
scalar property.
The following table contains the methods for the ISCPropertyValueCollection
interface:
Method Description
IUnknown _NewEnum() Constructs an instance of the collection
enumerator object.
long Count() Number of values in the collection.
ISCPropertyValue * Item(VARIANT ValueId) Returns a single value from the property value
collection.
VARIANT_BOOL Facet ( VARIANT Facet) Retrieves a facet. It fails if the facet is not set.
Facet is either a facet ID or facet name.
void Facet ( VARIANT Facet, VARIANT_BOOL Val) Sets a facet with the given value.
Facet is either a facet ID or facet name.
VARIANT_BOOL RemoveFacet ( VARIANT Facet) Removes a facet to non-set state.
Facet is either a facet ID or facet name.
ISCPropertyValueCollection::Item Arguments
Here is the signature for the Item function:
ISCPropertyValue * Item(VARIANT ValueId)
The following table contains the valid arguments for the Item function:
Parameter Valid Type/Value Description
ValueId VT_I4 – Index of the element in Identifies an element with a
multi-valued property zero-based index.
ValueId VT_BSTR – Name of an element Identifies an element by name.
in a multi-valued property
160 API Reference Guide
API Interfaces
ISCPropertyValueCollection::Facet Arguments (Get Function)
Here is the signature for the Facet (Get) function:
VARIANT_BOOL Facet (VARIANT Facet)
The following table contains the valid arguments for the Facet (Get) function:
Parameter Valid Type/Value Description
Facet VT_I4 – Facet ID Retrieves a facet value. It fails if
the facet is not set.
Facet VT_BSTR – Facet name Retrieves a facet value. It fails if
the facet is not set.
Note: More information is located in the Property Bag for Application
Environment (see page 171) section.
ISCPropertyValueCollection::Facet Arguments (Set Function)
Here is the signature for the Facet (Set) function:
Void Facet (VARIANT Facet, VARIANT_BOOL Val)
The following table contains the valid arguments for the Facet (Set) function:
Parameter Valid Type/Value Description
Facet VT_I4 – Facet ID Sets a facet with the given
value. It fails if the facet is not
set.
Facet VT_BSTR – Facet name Sets a facet with the given
value. It fails if the facet is not
set.
Note: More information is located in the Property Bag for Application
Environment (see page 171) section.
Appendix A: API Interfaces Reference 161
API Interfaces
ISCPropertyValueCollection::RemoveFacet Arguments
Here is the signature for the RemoveFacet function:
VARIANT_BOOL RemoveFacet (VARIANT Facet)
The following table contains the valid arguments for the RemoveFacet
function:
Parameter Valid Type/Value Description
Facet VT_I4 – Facet ID Removes a facet to non-set
state.
Facet VT_BSTR – Facet name Removes a facet to non-set
state.
Note: More information is located in the Property Bag for Application
Environment (see page 171) section.
ISCSession
The ISCSession interface is an active connection between the API client and a
model.
The following table contains the methods for the ISCSession interface:
Method Description
VARIANT BeginTransaction() Opens a transaction on the session. The method
passes back a transaction identifier.
Implementations use the identifier to scope
Commit and Rollback operations. If the
application does not support nested transactions,
it passes back VT_EMPTY.
Transaction nesting is implicit. If an API client
invokes BeginTransaction and a transaction is
already open, the new transaction is nested
inside the existing one.
VARIANT BeginNamedTransaction(BSTR Name, Opens a transaction on the session. Similar to
VARIANT PropertyBag [optional]) BeginTransaction with an option to provide a
transaction name and additional properties.
VARIANT_BOOL ChangeAccess(SC_SessionFlags Changes the model access to the specified level.
Flags)
162 API Reference Guide
API Interfaces
Method Description
VARIANT_BOOL Close() Disconnects self from its associated persistence
unit or model set.
VARIANT_BOOL CommitTransaction(VARIANT Commits the specified transaction and all nested
TransactionId) transactions contained within it.
SC_SessionFlags Flags() Returns a set of flags associated with the session.
VARIANT_BOOL IsValid() Returns TRUE if self is valid.
VARIANT_BOOL IsTransactionEmpty( VARIANT All TRUE if there was no data modification applied
[optional] ) from the beginning of the outer transaction or for
the duration of the current transaction.
Returns TRUE with no open transaction present.
SC_SessionLevel Level() Returns the level at which the persistence unit or
model is bound.
This value is valid only if the session is open.
VARIANT_BOOL IsOpen() TRUE only if the session is open.
ISCModelObjectCollection * ModelObjects() Creates a ModelObject collection for the session.
The returned collection contains every object
associated with the persistence unit or model set.
SC_MODELTYPEID ModelSetId() Passes back an identifier for the model set
associated with the session.
BSTR Name() Name of the associated persistence unit or model
set.
Contains a valid name only when self is in the
Opened state.
VARIANT_BOOL Open(IUnknown * Target, Binds to the persistence unit, model set, or
VARIANT Level [optional], VARIANT Flags intrinsic metamodel identified by the Target
[optional]) parameter.
ISCPersistenceUnit * PersistenceUnit() Persistence unit associated with the session.
Contains a valid pointer only when it is in the
Opened state.
long TransactionDepth() Returns the current depth level of the nested
transaction. Returns zero if there are no active
transactions present.
Note: More property information about the BeginNamedTransaction method is
located in the Property Bag for Session (see page 187) section. More
information about SC_SessionFlags and SC_SessionLevel is located in the
Enumerations (see page 167) section.
Appendix A: API Interfaces Reference 163
API Interfaces
ISCSession::BeginNamedTransaction Arguments
Here is the signature for the BeginNamedTransaction function:
VARIANT_BOOL BeginNamedTransaction(BSTR Name, VARIANT PropertyBag )
The following table contains the valid arguments for the
BeginNamedTransaction function:
Parameter Valid Type/Value Description
Name BSTR Provides a name for a new
transaction.
PropertyBag Empty No optional parameters.
PropertyBag VT_UNKNOWN – Pointer to a Collection of the transaction
Property Bag object properties.
Note: More information about the transaction properties is located in the
Property Bag for Session (see page 187) section.
ISCSession::CommitTransaction Arguments
Here is the signature for the CommitTransaction function:
VARIANT_BOOL CommitTransaction(VARIANT TransactionId)
The following table contains the valid arguments for the CommitTransaction
function:
Parameter Valid Type/Value Description
TransactionId The ID of the session Provides a transaction identifier.
164 API Reference Guide
API Interfaces
ISCSession::IsTransactionEmpty Arguments
Here is the signature for the IsTransactionEmpty function:
VARIANT_BOOL IsTransactionEmpty(VARIANT All)
The following table contains the valid arguments for the IsTransactionEmpty
function:
Parameter Valid Type/Value Description
All Empty Identifies a request on the
status of the current transaction.
All VT_BOOL, FALSE Identifies a request on the
status of the current transaction.
All VT_BOOL, TRUE Identifies a request on the
status of all transactions starting
with the beginning of the outer
transaction.
ISCSession::Open Arguments
Here is the signature for the Open function:
VARIANT_BOOL Open(ISCPersistenceUnit * Unit, VARIANT Level, VARIANT Flags)
The following table contains the valid arguments for the Open function:
Parameter Valid Type/Value Description
Target ISCPersistenceUnit * – pointer Provides a persistence unit to
to a persistence unit attach.
Target ISCModelSet * – pointer to a Provides a model set to attach.
model set
Target ISCPropertyBag * – pointer to a Provides a property bag with the
property bag description of an intrinsic
metamodel to attach.
Level [optional] Empty Defaults to SCD_SL_M0.
Level [optional] SCD_SL_M0 Data-level access.
Level [optional] SCD_SL_M1 Metamodel access.
Flags [optional] Empty Defaults to SCD_SF_NONE.
Appendix A: API Interfaces Reference 165
API Interfaces
Parameter Valid Type/Value Description
Flags [optional] SCD_SF_NONE Other sessions can have access
to the attached persistence unit.
Flags [optional] SCD_SF_EXCLUSIVE Other sessions cannot have
access to the attached
persistence unit.
ISCSession::RollbackTransaction Arguments
Here is the signature for the RollbackTransaction function:
VARIANT_BOOL RollbackTransaction(VARIANT TransactionId)
The following table contains the valid arguments for the RollbackTransaction
function:
Parameter Valid Type/Value Description
TransactionId The ID of the session Provides a transaction identifier.
ISCSessionCollection
The Session Collection contains the active connections between the API client
and the application.
The following table contains the methods for the ISCSessionCollection
interface:
Method Description
IUnknown _NewEnum() Constructs an instance of a session enumerator
object.
ISCSession * Add() Construct a new, closed Session object, and adds
it to the collection.
VARIANT_BOOL Clear() Removes all Session objects from the collection
long Count() The number of sessions in the collection.
ISCSession * Item(long nIndex) Passes back a session identified by its ordered
position.
VARIANT_BOOL Remove(VARIANT SessionId) Removes a Session object from the collection. If
the session is opened, it is closed before it is
removed. All committed changes are saved in the
persistence unit.
166 API Reference Guide
Enumerations
ISCSessionCollection::Item Arguments
Here is the signature for the Item function:
ISCSession * Item(long Index)
The following table contains the valid arguments for the Item function:
Parameter Valid Type/Value Description
Index long-Index Provides a zero-based index of a
session.
ISCSessionCollection::Remove Arguments
Here is the signature for the Remove function:
VARIANT_BOOL Remove(VARIANT SessionId)
The following table contains the valid arguments for the Remove function:
Parameter Valid Type/Value Description
SessionId VT_UNKNOWN – Pointer to the Identifies a session with the
ISCSession interface Session object.
SessionId VT_I4 – Index in the session Provides a zero-based index of a
collection session.
Enumerations
This section contains information regarding the various enumerations for the
API. The enumerations define valid values for various properties.
SC_ModelDirectoryFlags
The following table contains the properties and enumerations for
SC_ModelDirectoryFlags:
Property Enumeration Description
SCD_MDF_DIRECTORY 0 Directory
SCD_MDF_ROOT 1 Root directory
Appendix A: API Interfaces Reference 167
Enumerations
SC_ModelDirectoryType
The following table contains the properties and enumerations for
SC_ModelDirectoryType:
Property Enumeration Description
SCD_MDT_NONE 0 Type is not available
SCD_MDT_FILE 1 File system
SCD_MDT_MART 2 CA ERwin MM
SC_ModelObjectFlags
The following table contains the properties and enumerations for
SC_ModelObjectFlags:
Property Flag Bit Enumeration Description
SCD_MOF_DONT_CARE 0 No flags are set
SCD_MOF_PERSISTENCE_UNIT 0 1 Object is a persistence unit (such as
model)
SCD_MOF_USER_DEFINED 1 2 Object is user-defined (such as user-
defined properties)
SCD_MOF_ROOT 2 4 Object is the root object (such as
model)
SCD_MOF_TOOL 3 8 Object is maintained by the tool
SCD_MOF_DEFAULT 4 16 Object is created by the tool and not
removable
SCD_MOF_TRANSACTION 5 32 Object is new or updated in a
transaction and the transaction was
not committed
168 API Reference Guide
Enumerations
SC_ModelPropertyFlags
The following table contains the properties and enumerations for
SC_ModelPropertyFlags:
Property Flag Bit Enumeration Description
SCD_MPF_DONT_CARE 0 No flags are set
SCD_MPF_NULL 0 1 Property has NULL value or no value
SCD_MPF_USER_DEFINED 1 2 Property is user-defined
SCD_MPF_SCALAR 2 4 Property is scalar
SCD_MPF_TOOL 3 8 Property is maintained by the tool
SCD_MPF_READ_ONLY 4 16 Property is read-only (not used in
CA ERwin DM)
SCD_MPF_DERIVED 5 32 Property is inherited, calculated, or
derived
SCD_MPF_OPTIONAL 6 64 Property is optional and can be
removed
SC_SessionFlags
The following table contains the properties and enumerations for
SC_SessionFlags:
Property Enumeration Description
SCD_SF_NONE 0 Session has non-exclusive access to its
connected persistence unit. Other sessions
can connect to the same persistence unit.
SCD_SF_EXCLUSIVE 1 Session has exclusive access to its connected
persistence unit. No other sessions are
allowed to access the persistence unit.
Appendix A: API Interfaces Reference 169
Enumerations
SC_SessionLevel
The following table contains the properties and enumerations for
SC_SessionLevel:
Property Enumeration Description
SCD_SL_NONE -1 Not used
SCD_SL_M0 0 Data level access
SCD_SL_M1 1 Metamodel access
SC_ValueTypes
The following table contains the properties and enumerations for
SC_ValueTypes:
Property Enumeration Description
SCVT_NULL 0 Missing value
SCVT_I2 1 Signed 16-bit integer
SCVT_I4 2 Signed 32-bit integer
SCVT_UI1 3 Unsigned 8-bit integer. Do not use this
type to hold character data.
SCVT_R4 4 4 byte floating point real
SCVT_R8 5 8 byte floating point real
SCVT_BOOLEAN 6 Boolean
SCVT_CURRENCY 7 64-bit currency value
SCVT_IUNKNOWN 8 IUnknown interface pointer
SCVT_IDISPATCH 9 IDispatch interface pointer
SCVT_DATE 10 Date value in VARIANT_DATE format
SCVT_BSTR 11 String
SCVT_UI2 12 Unsigned 16-bit integer
SCVT_UI4 13 Unsigned 32-bit integer
SCVT_GUID 14 GUID
SCVT_OBJID 15 A string (VT_BSTR) contains an object
identifier with offset
170 API Reference Guide
Property Bag Reference
Property Enumeration Description
SCVT_BLOB 16 SAFEARRAY of unsigned BYTEs
SCVT_DEFAULT 17 Default value type
SCVT_I1 18 Signed 1 byte integer. Do not use this
type to hold character data.
SCVT_INT 19 Machine-dependent signed integer
SCVT_UINT 20 Machine-dependent unsigned integer
SCVT_RECT 21 Rectangle-array of four integers
(VT_ARRAY & VT_I2)
SCVT_POINT 22 Point-array of two integers (VT_ARRAY
& VT_I2)
SCVT_I8 23 Signed 64-bit integer
SCVT_UI8 24 Unsigned 64-bit integer
SCVT_SIZE 25 Size array of two integers (VT_ARRAY
& VT_I4)
Property Bag Reference
This section contains information about the content of the Property Bag
container. A property bag is a placeholder for an array of properties. The
content of the bag is dictated by a source interface.
Property Bag for Application Environment
This property bag provides access for Application Features sets. The
parameters of the PropertyBag call determine the context of the bag. The
contents of the bag can have one of two available forms, either native format
or a string based on the optional parameter of the PropertyBag property of the
ISCApplicationEnvironment interface.
Feature categories in the Category parameter of the PropertyBag property are
hierarchical and use a dot (.) to define feature subsets. For example, the
Application category populates a property bag with a complete set of CA ERwin
DM features, while Application.API provides a subset related to the API.
If the Category parameter is not set, then the Property Bag property returns
the complete set of all the features from all the available categories.
The following tables summarize the available feature categories and list the
Property Bag properties for each category.
Appendix A: API Interfaces Reference 171
Property Bag Reference
ISCApplicationEnvironment::PropertyBag
The PropertyBag function from the ISCApplicationEnvironment interface
populates a property bag with one or more property values as indicated by
Category and Name.
Here is the signature for the ISCApplicationEnvironment PropertyBag function:
ISCPropertyBag * PropertyBag(VARIANT Category, VARIANT Name, VARIANT AsString)
The following table contains the valid arguments for the
ISCApplicationEnvironment PropertyBag function:
Parameter Valid Type/Value Description
Category [optional] Empty Complete set of features from all
categories are returned.
Category [optional] VT_BSTR – Name of category Features from the given
category are returned.
Name [optional] Empty All properties from the selected
category are returned.
Name [optional] VT_BSTR – Name of property The property with the given
name and category is returned.
AsString [optional] Empty All values in the property bag
are presented in native type.
AsString [optional] VT_BOOL – TRUE or FALSE If set to TRUE, all values in the
property bag are presented as
strings.
Category Parameter Contains an Empty String
The following table describes the Category parameter that contains an empty
string:
Property Name Type Description
Categories SAFEARRAY(BSTR) Returns an array of all the available categories.
172 API Reference Guide
Property Bag Reference
Application Category
The following table describes the Application category, which describes the
features associated with the CA ERwin DM tool:
Property Name Type Description
Title BSTR Provides the CA ERwin DM title.
Version BSTR Provides the CA ERwin DM version.
Hosting_Application Long ■ 0 – Returns 0 if the API is controlled by third-
party application, in standalone mode.
■ 1 – Returns 1 if the CA ERwin DM user interface
is active and the API is in add-in mode.
Metadata_Version Long Metadata value for the current version of CA ERwin
DM.
EMX_Metadata_Class SC_MODELTYPEID Metadata class identifier for EMX model sets.
EM2_Metadata_Class SC_MODELTYPEID Metadata class identifier for EM2 model sets.
Application.API Category
The following table describes the Application.API category, which describes the
features associated with the API:
Property Name Type Description
API_Version BSTR Provides the version of the API interfaces.
API_Major_Version_Number Long The API major version number.
API_Minor_Version_Number Long The API minor version number.
Appendix A: API Interfaces Reference 173
Property Bag Reference
Application.API.Features Category
The following table describes the Application.API.Features category, which
summarizes the level of support the API provides in its main set of operations:
Property Name Type Description
Undo Long Describes the ability to undo operations.
■ 0 – Undo not supported.
■ Non-zero – Undo is supported.
Redo Long Describes the ability to redo undone operations.
■ 0 – Redo not supported.
■ Non-zero – Redo is supported.
Change_Logging Long Describes the ability to report all changes since the
last synchronization with the client.
■ 0 – Change logging not supported.
■ Non-zero – Change logging is supported.
Ownership_Support Long Queries the support level of the application for
object ownership. The following describes the
support levels:
■ 0 – The application does not support object
ownership.
■ 1 – The application supports ownership and the
ownership meta-relation contains no cycles.
■ 2 – The application supports ownership and the
ownership meta-relation contains cycles.
Transactions Long Describes the level of support for transaction
control. The following describes the support levels:
■ 0 – No support for transactions.
■ 1 – Begin and End only. No nesting.
■ 2 – Begin, End, and Rollback. No nesting.
■ 3 – Begin, End, and Rollback, with arbitrary
transaction nesting.
174 API Reference Guide
Property Bag Reference
Application.API.MessageLog Category
The following table describes the Application.API.MessageLog category, which
provides access to additional messages registered during API operations:
Property Name Type Description
Is_Empty Boolean Returns TRUE if the message log is not empty. The
log is reset before the beginning of every API
operation.
Log SAFEARRAY(VA Returns the content of the log.
RIANT)
The Property Log from the MessageLog category is organized as a one-
dimensional SAFEARRAY with VARIANT type as elements. The array has the
following structure:
The following table describes the elements of the array:
Message Log Element Type Description
Total Number Long Total number of messages in the array. The
value can be zero if there were no messages
when the Log property was requested.
Error Code BSTR A message string identifier.
Severity Code Long The following are the
SC_MessageLogSeverityLevels severity codes:
■ SCD_ESL_NONE – No severity code was
assigned.
■ SCD_ESL_INFORMATION – Information
message.
■ SCD_ESL_WARNING – Warning message.
■ ESD_ESL_ERROR – Error message.
Message BSTR Message text.
Appendix A: API Interfaces Reference 175
Property Bag Reference
Message Log Element Type Description
Model Set Id SC_MODELSETID An identifier of a model set associated with a
message. An element has the VARIANT type
VT_EMPTY if no data was provided.
Object Type SC_CLSID Class identifier for a model object associated
with a message. An element has the VARIANT
type VT_EMPTY if no data was provided.
Object Id SC_OBJID Identifier for a model object associated with a
message. The identifier is unique in the scope of
the model set. An element has the VARIANT
type VT_EMPTY if no data was provided.
Property Type SC_CLSID Class identifier for a property associated with a
message. An element has the VARIANT type
VT_EMPTY if no data was provided.
Reserved Always marked as VT_EMPTY.
Note: For information on object class identifiers and property class identifiers
see the document ERwin Metamodel Reference.PDF, which is in the \Doc folder
where this product is installed. More information about using the Model Set
Identifier to locate a model set is located in the Accessing a Model (see
page 41) and Accessing a Model Set (see page 52) sections. More information
about using the Class Identifier to learn more about object types and property
types is located in the Accessing Metamodel Information (see page 91)
section. More information about using the Object Identifier to access the
associated model object is located in the Accessing Objects in a Model (see
page 55) section.
176 API Reference Guide
Property Bag Reference
Application.Modeling Category
The Application.Modeling category describes the features associated with the
CA ERwin DM modeling engine:
Property Name Type Description
Model_Property_Value_ SAFEARRAY(Long) The data is organized as a one-dimensional
Facet_Ids SAFEARRAY with the Long type as elements.
The elements represent property value facet IDs
available in model data.
The elements are ordered to match the order in
the Model_Property_Value_Facet_Names.
Model_Property_Value_ SAFEARRAY(BSTR) The data is organized as a one-dimensional
Facet_Names SAFEARRAY with the BSTR type as elements.
The elements represent property value facet
names available in model data.
The elements are ordered to match the order in
the Model_Property_Value_Facet_Ids.
The following table lists available property facets:
Property Name Type Description
Hardened 5 Indicates that a value will not change due to
inheritance. For example, a name for a foreign key
attribute in a child entity.
AutoCalculated 3 Indicates that a value is auto-calculated by the
tool. For example, cardinality is auto-calculated by
default. In this case, the auto-calculated facet is
set to true.
Appendix A: API Interfaces Reference 177
Property Bag Reference
Application.Modeling.Physical Category
The following table describes the Application.Modeling.Physical category, which
describes the features associated with physical modeling in CA ERwin DM:
Property Name Type Description
DBMS_Brand_And_Version_List SAFEARRAY(Long) The data is organized as a one-
dimensional SAFEARRAY with the
Long type as elements.
The elements are grouped into
subsets of three. The first
member of the subset contains a
DBMS brand identifier, the second
member is the major version
value, and the last member is the
minor version value.
Application.Persistence Category
The Application.Persistence category describes the features associated with
persistence support in CA ERwin DM. There are no properties in this category.
Application.Persistence.FileSystem Category
The following table describes the Application.Persistence.FileSystem category,
which describes the features associated with the file system:
Property Name Type Description
Current_Directory BSTR Absolute path for the current
local directory.
Application.Persistence.ModelMart
The following table describes the Application.Persistence.ModelMart category,
which describes the features associated with persistence support in CA ERwin
DM working with CA ERwin MM:
Property Name Type Description
Model_Mart_Connection_Types SAFEARRAY(BSTR) Enumerate CA ERwin MM
supported database connection
types.
178 API Reference Guide
Property Bag Reference
Property Bag for Model Directory and Model Directory Unit
This Property Bag provides access to the properties of the Model Directory and
the Model Directory Unit objects. The PropertyBag property for both the
ISCModelDirectory interface and the ISCModelDirectoryUnit interface populates
the bag with the set of current properties. The same property of these
interfaces allows modification of directory (if it is not read-only) or directory
unit attributes. The contents of the bag can have one of two available forms,
either native format or as a string based on the optional parameter of the
PropertyBag property of ISCModelDirectory and ISCModelDirectoryUnit. The
client can populate the bag in either of these two forms. Different forms can
be mixed in the same instance of the bag.
Not all properties that exist in the directory or directory unit have to be
present in the bag when it is submitted. All property data as well as property
names are validated by the API, and all are either accepted or rejected. The
rejection forces a method call to fail. If the bag includes properties that are
read-only at the moment, for example, the Locator property, then such
properties are ignored and do not affect validation of the bag data.
The following table lists the Property Bag properties and datatypes for the
Model Directory:
Property Name Type Read-only Description
Directory_Name BSTR No Returns a directory name without the path
information.
Applying a new value renames a directory.
For the CA ERwin MM root directory, this is a
repository name. The property does not allow
the modification of the repository name.
Locator BSTR Yes Location of a directory including absolute
path and parameters. For CA ERwin MM,
parameters do not include password
information.
Directory_Path BSTR Yes Directory absolute path.
Created_By BSTR Yes Identification for a user that has created a
directory. For CA ERwin MM only, a CA ERwin
MM user ID is used.
Updated_By BSTR Yes Identification for a user that has updated a
directory. For CA ERwin MM only, a CA ERwin
MM user ID is used.
Appendix A: API Interfaces Reference 179
Property Bag Reference
Property Name Type Read-only Description
Created SAFEARRAY(Long) Yes Creation date of a directory. The time is an
array of numbers in the following order:
■ Seconds after minute (0 - 59)
■ Minutes after hour (0 - 59)
■ Hours since midnight (0 - 23)
■ Day of month (1 - 31)
■ Month (0 - 11; January = 0)
■ Year (current year)
■ Day of week (0 - 6; Sunday = 0)
■ Day of year (0 - 365; January 1 = 0)
Updated SAFEARRAY(Long) Yes Update date of a directory. The time is an
array of numbers in the following order:
■ Seconds after minute (0 - 59)
■ Minutes after hour (0 - 59)
■ Hours since midnight (0 - 23)
■ Day of month (1 - 31)
■ Month (0 - 11; January = 0)
■ Year (current year)
■ Day of week (0 - 6; Sunday = 0)
■ Day of year (0 - 365; January 1 = 0)
Description BSTR No A directory description. This is only for CA
ERwin MM.
The following table lists the Property Bag properties and datatypes for the
Model Directory Unit:
Property Name Type Read-only Description
Directory_Unit_Name BSTR No Returns a directory unit name without path
information.
Applying a new value renames a directory
unit.
Locator BSTR Yes Location of a directory unit including
absolute path and parameters. For CA ERwin
MM, parameters do not include password
information.
180 API Reference Guide
Property Bag Reference
Property Name Type Read-only Description
Directory_Unit_Path BSTR Yes Directory unit absolute path.
Created_By BSTR Yes Identification for a user that has created a
unit. For CA ERwin MM only, a CA ERwin MM
user ID is used.
Updated_By BSTR Yes Identification for a user that has updated a
unit. For CA ERwin MM only, a CA ERwin MM
user ID is used.
Created SAFEARRAY(Long) Yes Creation date of a directory. The time is an
array of numbers in the following order:
■ Seconds after minute (0 - 59)
■ Minutes after hour (0 - 59)
■ Hours since midnight (0 - 23)
■ Day of month (1 - 31)
■ Month (0 - 11; January = 0)
■ Year (current year)
■ Day of week (0 - 6; Sunday = 0)
■ Day of year (0 - 365; January 1 = 0)
Updated SAFEARRAY(Long) Yes Update date of a directory. The time is an
array of numbers in the following order:
■ Seconds after minute (0 - 59)
■ Minutes after hour (0 - 59)
■ Hours since midnight (0 - 23)
■ Day of month (1 - 31)
■ Month (0 - 11; January = 0)
■ Year (current year)
■ Day of week (0 - 6; Sunday = 0)
■ Day of year (0 - 365; January 1 = 0)
Description BSTR Yes A directory description. This is only for CA
ERwin MM.
Model_Type Long Yes Retrieves the type of a unit model. A model
type can be logical, logical/physical, or
physical.
Object_Count Long Yes Reports total number of objects in the unit.
This is only for CA ERwin MM.
Appendix A: API Interfaces Reference 181
Property Bag Reference
Property Name Type Read-only Description
Entity_Count Long Yes Reports total number of entity objects in the
unit. This is only for CA ERwin MM.
Is_Template Boolean Yes Returns TRUE if a unit model is a template.
Property Bag for Persistence Units and Persistence Unit Collections
This Property Bag provides access to the properties of a persistence unit. An
empty Property Bag can be obtained through a call to the CoCreateInstance of
the COM API. The client populates a bag and then submits it as a parameter
for the Create method of the ISCPersistenceUnitCollection interface.
Alternatively, the present state of persistence unit properties can be retrieved
through the PropertyBag property of ISCPersistenceUnit. The retrieved value
can be reviewed, modified, and submitted back through the PropertyBag
property of the same interface. The contents of the bag can have one of two
available forms: native format or as a string based on the optional parameter
of the PropertyBag property of the ISCPersistenceUnit. The client can populate
the bag in either of these two forms. Different forms can be mixed in the same
instance of the bag.
Not all properties that exist in the unit have to be present in the bag when it is
submitted. All property data as well as property names are validated by the
API and either all are accepted or all are rejected. The rejection forces a
method call to fail. If the bag includes properties that are read-only at the
moment, for instance, the model type for a CA ERwin DM model when the
model was created previously, then such properties are ignored and will not
affect validation of the bag data.
ISCPersistenceUnit::PropertyBag Arguments (Get Function)
Here is the signature for the PropertyBag (Get) function:
ISCPropertyBag * PropertyBag(VARIANT List, VARIANT AsString)
The following table contains the valid arguments for the PropertyBag (Get)
function:
Parameter Valid Type/Value Description
List [optional] VT_BSTR – Semicolon separated Provides a list of the unit
list of properties properties. If the list is provided,
only listed properties are placed
in the returned property bag.
List [optional] Empty Requests a complete set of
properties.
182 API Reference Guide
Property Bag Reference
Parameter Valid Type/Value Description
AsString [optional] VT_BOOL – TRUE or FALSE If set to TRUE, it requests that
all values in the bag be
presented as strings. The default
is FALSE and all values are in
their native format.
AsString [optional] Empty All values in the property bag
are presented in native format.
ISCPersistenceUnit::PropertyBag Arguments (Set Function)
Here is the signature for the PropertyBag (Set) function:
void PropertyBag(VARIANT List, VARIANT AsString, ISCPropertyBag * propBag)
The following table contains the valid arguments for the PropertyBag (Set)
function:
Parameter Valid Type/Value Description
List [optional] Not used
AsString [optional] Not used
propBag ISCPropertyBag * A pointer on a property bag with
the unit properties to process
Property Bag Contents for Persistence Unit and Persistence Unit Collection
The following table lists the Property Bag properties and datatypes recognized
by CA ERwin DM:
Property Name Type Read- Description
only
Locator BSTR Yes Returns the location of the
persistence unit, such as file name.
Not available for models without a
persistence location, such as new
models that were never saved.
Disposition BSTR Yes Returns the disposition of the
persistence unit, such as read-only.
Appendix A: API Interfaces Reference 183
Property Bag Reference
Property Name Type Read- Description
only
Persistence_Unit_Id SC_MODELTYPEID No Retrieves and sets an identifier for
the persistence unit.
A new identifier can be assigned to
the existing persistence unit. In
this case, the old identifier will be
placed in the persistence unit's
branch log.
Note: For more information, see
the description of the Branch Log
property.
Branch_Log SAFEARRAY After Retrieves and sets the branch log
(SC_MODELTYPEID create of the persistence unit identifiers. A
) persistence unit retains its log of
identifiers.
CA ERwin DM uses the branch logs
of the persistence units for
extended identification match.
The API uses only the most current
identifier for searching in the
Persistence Unit Collection.
Model_Type Long After Retrieves and sets the type of the
create persistence unit, such as logical,
logical/physical, and physical
models. Can be set when a
persistence unit is created; after
that the property becomes read-
only.
Available values are:
■ 1 – Logical, for logical models.
This is the default if no value is
provided.
■ 2 – Physical, for physical
models.
■ 3 – Combined, for a
logical/physical model.
184 API Reference Guide
Property Bag Reference
Property Name Type Read- Description
only
Target_Server Long After Retrieves and sets the target
Target_Server_Version create database properties for physical
Target_Server_Minor_Version and logical-physical models. Can be
set when a persistence unit is
created; after that the property
becomes read-only.
Note: For available values for the
Target_Server property, see the
next table.
Storage_Format Long After Retrieves and sets the storage
create format, which has a value of
Normal for a model and a value of
Template for a model template.
Can be set when a persistence unit
is created; after that the property
becomes read-only.
Available values are:
■ 4012 – Normal, for a regular
model. This is the default if no
value is provided.
■ 4016 – Template, for a
template model.
Active_Model Boolean No TRUE if the persistence unit
represents the current model and is
active in the CA ERwin DM user
interface. Not available when using
the API in standalone mode.
Appendix A: API Interfaces Reference 185
Property Bag Reference
Property Name Type Read- Description
only
Hidden_Model Boolean No TRUE if a model window with the
persistence unit data is not visible
in the CA ERwin DM user interface.
Not available when using the API in
standalone mode.
Active_Subject_Area_and_Sto SAFEARRAY(BSTR) No Reports names of active Subject
red_Display Area and Stored Display model
objects. This indicates the Subject
Area and Stored Display that CA
ERwin DM shows on the screen.
The returned value is a safe array
with two elements. The first
element is a name for the active
Subject Area and the second
element is for the Stored Display.
Providing a new set of Subject Area
and Stored Display names can
change this selection. The change
has an effect immediately if the
model is active in the CA ERwin DM
user interface or in the next model
opened by the CA ERwin DM user
interface.
Optionally, to change a selection,
you need only a BSTR with a name
for a new Subject Area. From the
Subject Area you provide, the API
chooses the first Stored Display as
active.
The Target_Server property is a vector that consists of three members. The
first member of the vector contains a DBMS brand identifier, the second
member is the major version value, and the last member is the minor version
value.
The following table lists DBMS brand identifiers for the Target_Server
property. The table also lists the brand names that are used when the
identifier is presented as a string:
DBMS Brand DBMS Brand Name DBMS Brand ID
Access Access 1075859004
DB2 DB2 1075858978
186 API Reference Guide
Property Bag Reference
DBMS Brand DBMS Brand Name DBMS Brand ID
DB2 UDB DB2 UDB 1075858977
FoxPro FoxPro 1075859029
Informix Informix 1075859006
Ingres Ingres 1075859007
iSeries (AS400) iSeries 1075859019
ODBC ODBC 1075859009
Oracle Oracle 1075858979
Progress Progress 1075859010
Red Brick Red Brick 1075859012
SAS SAS 1075859013
SQL Server SQL Server 1075859016
Sybase Sybase 1075859017
Teradata Teradata 1075859018
Property Bag for Session
This Property Bag provides additional information to the
BeginNamedTransaction function of the ISCSession interface and can be
submitted as the second optional argument of the function. The contents of
the bag can have one of two available forms: native format or as a string. The
client can populate the bag in either of these two forms. Different forms can
be mixed in the same instance of the bag.
Not all properties have to be present in the bag when it is submitted. All
property data as well as property names are validated by the API, and all are
either accepted or rejected. The rejection forces a method call to fail.
The transaction properties are in effect at the initiation of an outer transaction
and are confined to the scope of the transaction.
Appendix A: API Interfaces Reference 187
Location and Disposition in Model Directories and Persistence Units
The following table lists the Property Bag properties and datatypes for the
BeginNamedTransaction:
Property Name Type Read-only Description
History_Tracking Boolean No TRUE – Indicates that all historical
information generated during the transaction
will be marked as the API event. A TRUE
value is assumed if the property is not
provided.
FALSE – Uses the standard CA ERwin DM
mechanism of history tracking.
History_Description BSTR No When the History_Tracking property is TRUE,
it provides the content of the history event
Description field.
Location and Disposition in Model Directories and
Persistence Units
The API describes the location of Persistence Units and their disposition in
persistence storage facilities with the Locator and Disposition properties. This
information is required by some of the API methods and is also accessible
using Property Bags. Examples of persistence storage for CA ERwin DM models
are file system and CA ERwin MM.
188 API Reference Guide
Location and Disposition in Model Directories and Persistence Units
Locator Property
The following table describes the syntax supported by the Locator property:
Syntax Arguments
[provider://]pathinfo[?param=value[;param=value]…n] provider: This is a type of persistence
storage. Use erwin to specify file
system, and use mmart for a CA ERwin
MM repository. If this is skipped, erwin
is the default.
pathinfo: This is the path to the storage
location, which is either a file path or
the CA ERwin MM path.
param: This is either a parameter name
or a keyword.
value: This is a text string.
There are no param keywords defined for the file system persistence storage.
A list of Locator param keywords for use with the mmart type of provider for
models stored in CA ERwin MM is described in the following table.
Note: There is a special arrangement for the CA ERwin MM Locator. Part of the
Locator string with params can be omitted if an application has connections
open with one or more CA ERwin MM repositories. In this case, the params
part of the Locator string can have only partial information or not be present
at all, as long as it is clear to which connection from the available list it refers.
Currently, the CA ERwin DM client for CA ERwin MM allows only one open
connection to a CA ERwin MM repository at any given time. Therefore, it is
possible, after establishing a connection, to omit the params part of the
Locator string completely and to provide the model path information only.
The following table provides a list of Locator param keywords for use with the
mmart type of provider for models stored in CA ERwin MM:
Complete Name Abbreviation Description
Server SRV The CA ERwin MM server.
Server Type SRT Type of server connection.
Appendix A: API Interfaces Reference 189
Location and Disposition in Model Directories and Persistence Units
Complete Name Abbreviation Description
Trusted Connection TRC For SQL Server 2000 or later and Oracle 9.x or later.
When set to YES, it instructs the database driver to use
Windows Authentication Mode for login validation, in
which case the UID and PSW keywords are optional.
When set to NO, it instructs the database driver to use a
database username and password for login validation, in
which case the UID and PSW keywords must be
specified.
User UID Login user name. UID need not be specified when using
Windows Authentication.
Password PSW User login password. You do not need to specify PSW if
the login has a NULL password or if you use Windows
Authentication (Trusted Connection set to YES).
Submodel Name SBN Name of a submodel to access.
Library ID LID Optional library, model, and submodel IDs. When
provided, you reduce the access time required to open a
Model ID MID
model.
Submodel ID SID
Note: More information about SRT (Server Type) is located in the
Application.Persistence.ModelMart (see page 178) section.
The following table describes various scenarios in which you can use the
Locator param keyword along with the mmart type of provider for models
stored in CA ERwin MM:
Scenario Description
CA ERwin MM using SQL Server If you have a model called MyModel located in MyLib, which
is in MyMart in CA ERwin MM, you can use the following:
mmart://MyMart/MyLib/MyModel?SRV=MyServer;SRT=SQL Server
2000/2005 (using db-lib);UID=<mm user id>;PSW=<password>
CA ERwin MM using Oracle If you have a model called MyModel located in MyLib, which
is on OracleHome in CA ERwin MM (the database name is
not indicated, and the additional slash ( / ) is required),
you can use the following:
mmart:///MyLib/MyModel?SRV=OracleHome;SRT=Oracle Vers.
8.xx/9i/10g;UID=<mm user id>;PSW=<password>
Local drive If you have a model called mod.erwin located in the models
directory on the C drive, you can use the following:
C:\models\mod.erwin
190 API Reference Guide
Location and Disposition in Model Directories and Persistence Units
Disposition Property
The Disposition parameter provides optional information for the API to access
model data specified by the Locator parameter.
The following table describes the syntax supported by the Disposition
property:
Syntax Arguments
param=value[;param=value]…n param: This is either a parameter name or a
keyword.
value: Yes/No.
The following table lists Disposition param keywords for use with the erwin
type of provider, such as for models stored in the file system:
Complete Name Abbreviation Description
Read Only RDO Requests read-only access to a file. Available for the
Persistence Unit Collection Add method.
Full access to a persistence unit is possible if the
parameter was not specified.
Override File OVF Overrides an existing file upon Save. Available for the
Persistence Unit Save method. There is no override if
the parameter was not specified.
The following table lists Disposition param keywords for use with the
modelmart type of provider for models stored in CA ERwin MM:
Complete Name Abbreviation Description
Read Only RDO Does not impose any locks on a model in CA ERwin MM
storage. Otherwise a model acquires an exclusive lock.
Override Locks OVL If CA ERwin MM has open sessions associated with a
user, disregard them and continue.
Resume Session RSS If specified, CA ERwin MM tries to resume a session if a
model was opened by a user and never closed.
Override Model OVM Override an existing model in a mart. Available for the
Persistence Unit Save method. There is no override if
the parameter was not specified.
Clear All Connections CLC Clear any open connections to other marts and continue
with a new server.
Appendix A: API Interfaces Reference 191
Location and Disposition in Model Directories and Persistence Units
192 API Reference Guide
Appendix B: CA ERwin DM Metamodel
This appendix lists information regarding the CA ERwin DM metamodel.
Note: For more information, see the document ERwin Metamodel
Reference.PDF, which is in the \Doc folder where this product is installed.
This section contains the following topics:
Metadata Element Renaming (see page 194)
Metadata Organization (see page 195)
XML Schema (see page 200)
Conversion from CA ERwin DM API Version 4.1.4 to r7 (see page 202)
Appendix B: CA ERwin DM Metamodel 193
Metadata Element Renaming
Metadata Element Renaming
For the r7.3 release, much of the metadata in CA ERwin DM was renamed.
This affects object types, property types, and API-specific property types.
These name changes fall into two categories:
■ Consistent naming and better representation of the model data. For
example, the property type For was renamed to For_Character_Type.
■ Replacement of space characters with underscores in all metadata element
names. Prior to CA ERwin DM r7.3, both object type and property type
names accessed using the API contained spaces, but when saving to XML
format, those same names used underscores. To remove this
inconsistency, all space characters within such names have been replaced
by underscores.
Overall this change is transparent and will not affect your day-to-day work.
Awareness of this change, however, is important if you use the API and the
new ODBC interface, and have some familiarity with the pre-r7.3 metadata
names. Existing API applications and scripts must be updated to account for
the new metadata names before use with CA ERwin DM r7.3. To assist you
with this updating process, the following CSV files are provided with the CA
ERwin DM r7.3 installation:
Renamed Metadata (SCAPI).csv
Provides a list of the full set of changed metadata names. It is a two
column CSV file that contains the old name, new name pairs.
Renamed Metadata (XML).csv
Provides the subset of metadata names that appear as changed in XML
files.
Note: Not included in this file are those metadata names where the only
change was the replacement of space characters with underscores, since
CA ERwin DM's XML format already uses underscores in object type names
and property type names.
Renamed SCAPI Properties.csv
Provides a list of the API-only property names that were renamed.
194 API Reference Guide
Metadata Organization
Metadata Organization
The metadata includes object and property classes, object aggregations, and
property associations.
Object classes
Define the type of objects that may occur within a model such as an entity
class, an attribute class, or a relationship class.
Property classes
Define the type of properties an object may have such as the Name
property, Comment property, or Parent_Domain_Ref property.
Object aggregations
Identify an ownership relationship between classes of objects, such as a
model that owns entities, or entities that own attributes, and so on.
Property associations
Define property usage by object classes. For example, the metadata
includes property associations for every object class that has the Name
property.
The following diagram shows the organization of the metadata:
Appendix B: CA ERwin DM Metamodel 195
Metadata Organization
Metamodel Elements
CA ERwin DM organizes data as a group of linked model sets. The model sets
are arranged in a tree-like hierarchy with a single model set at the top.
The top model set contains the bulk of the modeling data. The API uses the
abbreviation EMX to identify the top model set.
The EMX model set owns a secondary model set, abbreviated as EM2, which
contains user interface settings and user options for CA ERwin DM services
such as Forward Engineering, Complete Compare, and so on.
EMX
Model Set
Owns
EMX2
Model Set
The API clients access the model data by constructing a session and
connecting it to a model set using the Session component.
A model set contains several levels of data. It contains the data the application
manipulates, such as entity instances, attribute instances, relationship
instances, and so on.
The model set also contains metadata, a description of the objects and
properties that may occur within the application's data.
Metadata Tags
Each metadata object may include one or more tags. A tag is a metadata
object property that conveys certain descriptive meta information, such as if
an object class is logical, physical, valid for a specific target DBMS, and so on.
Note: A tag on an object aggregation overrides the identical tag set on the
associated owned object class. A tag on a property association overrides the
identical tag set on the associated property class.
196 API Reference Guide
Metadata Organization
The following table lists some of the EMX metadata tags:
Tag Name Datatype Description
tag_Bit_Field_Values String Describes valid values for a bit field property. A
combination of values from the description list
…
can be used as a value for the property.
tag_Bit_Field_Values_2
The descriptions are grouped as follows:
{<value>|<string equivalent>|<internal>}
DBMS_Brands_And_Versions Integer, vector Defines conditions when an object or property
class is available for physical modeling with the
specific DBMS. Assumes that the
tag_Is_Physical has a TRUE value.
Absence of the tag indicates that the class is
available for all DBMS targets, but only if
tag_Is_Physical has a TRUE value.
A NULL value for the tag indicates that the class
is not available for any DBMS.
DBMS brand IDs are described in the next table.
DBMS_Is_Represented Integer, vector Defines conditions when an object or property
class represents a concept in the specific DBMS.
Assumes that the DBMS_Brands_And_Versions
tag is valid for the class.
Absence of the tag indicates that the class is
available for all DBMS targets, but only if the
DBMS_Brands_And_Versions tag is valid for the
class.
A NULL value for the tag indicates that the class
is not available for any DBMS.
DBMS brand IDs are described in the next table.
DBMS_Is_Top_Level_Object Integer, vector Defines conditions when an object class is
considered top level, such as when it has a
CREATE or DROP statement associated with it
for the specific DBMS. Assumes that the
DBMS_Is_Represented tag is valid for the class.
Absence of the tag indicates that the class is
available for all DBMS targets, if the
DBMS_Is_Represented tag is valid for the class.
A NULL value for the tag indicates that the class
is not a top level object for any DBMS.
DBMS brand IDs are described in the next table.
Appendix B: CA ERwin DM Metamodel 197
Metadata Organization
Tag Name Datatype Description
tag_Enum_Values String Describes valid values for an enumerated
property. Only one value from the description
…
list can be used as a value for the property.
tag_Enum_Values_10
The descriptions are grouped as follows:
{<value>|<string equivalent>|<internal>}
tag_Is_Font_Or_Color Boolean TRUE for classes responsible for model data
visualization.
tag_Is_For_Data_Movement Boolean TRUE for an object or property class that is
available for dimensional and data warehouse
modeling.
tag_Is_Graphic_Data Boolean TRUE for classes responsible for model data
visualization.
tag_Is_Logical Boolean TRUE for an object or property class that is
available for logical modeling.
tag_Is_Physical Boolean TRUE for an object or property class that is
available for physical modeling.
tag_Holds_User_Settings Boolean TRUE for classes responsible for storing options
for CA ERwin DM features.
DBMS specific tags, such as DBMS_Brands_And_Versions,
DBMS_Is_Represented, and DBMS_Is_Top_Level_Object, are vectors and
organize data in groups of triplets as described below:
First element
Specifies the DBMS brand ID.
Second element
Specifies the minimum version level for the DBMS, multiplied by 1000.
Third element
Specifies the maximum version level for the DBMS, multiplied by 1000;
999000 indicates the absence of a maximum level.
For example, consider the property Oracle_Index_Partition_Type. It contains a
DBMS-specific tag, DBMS_Brands_And_Versions. This tag contains three
elements specific for this property: 1075858979, 8000, 999000. The first
element, the DBMS brand ID, is for Oracle, which is 1075858979. The second
element, the minimum version level for this DBMS, multiplied by 1000, is
8000. This means the minimum DBMS version level for this DBMS, which is
Oracle, is 8.0. The third element, the maximum version level for this DBMS, is
999000, which means there is no maximum version level for this DBMS.
198 API Reference Guide
Metadata Organization
The following table lists DBMS brand IDs:
DBMS Brand DBMS Brand ID
Access 1075859004
DB2 1075858978
DB2 UDB 1075858977
FoxPro 1075859029
Informix 1075859006
Ingres 1075859007
iSeries (AS400) 1075859019
ODBC 1075859009
Oracle 1075858979
Progress 1075859010
Red Brick 1075859012
SAS 1075859013
SQL Server 1075859016
Sybase 1075859017
Teradata 1075859018
Abstract Metadata Objects
The metadata organization makes use of generalizations with the ability to
derive a specialized object class from an abstract object class using
generalization association. Specialized classes can then be marked as abstract,
and then they can be used as a source for further specializations.
Only instances of the concrete, non-abstract object classes may occur within
the application's data. CA ERwin DM uses the generalization mechanism to
flatten metadata by replicating aggregations, associations, and tags from the
abstract object classes in the concrete object classes.
Appendix B: CA ERwin DM Metamodel 199
XML Schema
Metamodel Classes
A unique metadata class identifies what type of metadata a model set
contains.
EMX Class Model Set
Contains the bulk of model data such as entities and attributes. The class
name is EMX and the class identifier is the value defined in the Application
Environment component, category Application, property
EMX_Metadata_Class.
EM2 Class Model Set
Stores additional data such as user interface settings and user options for
CA ERwin DM services such as Forward Engineering and Complete
Compare. The class name is EM2 and the class identifier is the value
defined in the Application Environment component, category Application,
property EM2_Metadata_Class.
XML Schema
You can use the XML schema provided with this product to view metadata
descriptions.
An XML schema is a document or a set of documents that defines the XML
file's structure and legal elements. XML schemas can be used to ensure that
an XML file is syntactically correct and conforms to the defined schema. CA
ERwin DM provides such a schema and uses the schema to validate XML files
when they are opened in the tool.
The CA ERwin DM installation places the complete set of XML schema files
necessary for an XML file validation into the \Doc directory. The schema files
have .xsd extensions and are described in the following list:
■ ERwinSchema.xsd is the top level schema file.
■ UDP.xsd is the schema file for UDP definitions.
■ EMX.xsd is the schema file for object hierarchy.
■ EM2.xsd is the schema file for non-transactional data.
■ EMXProps.xsd is the schema file for object properties and UDP instances.
XML schemas contain descriptions of model object and property classes and
define property containment by object classes. Schema definitions for EMX and
EM2 classes are provided. XML schemas do not include deprecated classes.
200 API Reference Guide
XML Schema
The following diagram illustrates the five CA ERwin DM XML schema files:
The schema files under the \Doc directory are not database-specific and
represent the entire CA ERwin DM metamodel. The schema contains all
possible objects and properties for all valid database targets. If you need
database-specific schema, those files are located in the Doc\DBMS_schemas
directory. Within the Doc\DBMS_schemas directory, there is a folder for each
supported target database. The database-specific schema files are stored in
that folder and only consist of objects and properties that are valid for the
given database target.
Note: The XML schema that is in the \Doc directory is always used by CA
ERwin DM to validate an XML file; the database-specific schema is not used.
The database-specific schemas are provided for documentation purposes and
to assist third-party tool integrators to determine the valid objects and
properties for a given database target. An external XML validation tool can be
used to validate an XML file against a database-specific schema.
Appendix B: CA ERwin DM Metamodel 201
Conversion from CA ERwin DM API Version 4.1.4 to r7
Conversion from CA ERwin DM API Version 4.1.4 to r7
The following sections describe the changes in the metadata from Version
4.1.4 to r7. The files that are described in these sections are located in the
\Doc directory where this product is installed.
Note: See Metadata Element Renaming (see page 194) for information on
how the CA ERwin DM metadata was renamed beginning with r7.3, and the
files included with this product that provide a cross-reference of old names to
new names. For more information specific to the r7.3 metamodel, see the
document ERwin Metamodel Reference.PDF, which is located in the \Doc
directory where this product is installed.
User-Defined Property (UDP)
r7 does not use the UDP_Definition object type to define UDP properties, UDP
definitions are part of the metadata. To define a new UDP, a new
Property_Type object must be added to the metadata of the EMX model set.
Changes in Type Names
These files contain only object and property types with changed names for r7,
but their role in model data remains the same:
Api Appendix B.LegacyApiNames.csv
Describes changes in object and property type names. The column with
the Legacy_ApiName= items lists the legacy Version 4.1.4 type names
along with their r7 equivalent.
Api Appendix B.EMX Renamed Objects.csv
Lists only the renamed object types.
Api Appendix B.EMX Renamed Properties.csv
Lists only the renamed property types.
Note: The Api Appendix B.EMX Renamed Objects.csv file and the Api Appendix
B.EMX Renamed Properties.csv file are similar, they just break down the
object and property types separately.
202 API Reference Guide
Conversion from CA ERwin DM API Version 4.1.4 to r7
Additions and Deprecations in Metadata
There are a number of objects and properties that were deprecated and
replaced by new object and property types for r7. These files reflect the
changes in the metadata:
Api Appendix B.EMX Object changes.csv
Provides a list of new and deprecated object types for the EMX metamodel.
Api Appendix B.EMX Property changes.csv
Provides a list of new and deprecated property types for the EMX
metamodel.
Api Appendix B.EMX Property usage changes.csv
Tracks changes in property assignments for the EMX metamodel.
Api Appendix B.EM2 Object changes.csv
Provides a list of new and deprecated object types for the EM2 metamodel.
Api Appendix B.EM2 Property changes.csv
Provides a list of new and deprecated property types for the EM2
metamodel.
Datatype Changes
The file Api Appendix B.EMX Property datatype changes.csv provides a list of
properties with changed datatypes. CA ERwin DM uses the properties in a way
similar to Release 4.1.4, however, the datatype of those properties was
changed to accommodate the new, expanded use beginning in r7.
Appendix B: CA ERwin DM Metamodel 203
Index
ISCApplication object • 36
A new model • 47
accessing new persistence units • 48
metamodel information • 91 objects • 81
model data • 41 UDPs • 101
model objects • 55, 56 API, deleting
non-scalar property values • 70, 71 objects • 86
object properties • 64 property values • 87, 89
scalar property values • 23 API, filtering
specific objects • 58 object collections • 60, 61
specific properties • 74 properties • 75
active scripting • 10, 12 API, opening
API existing model • 49
advanced tasks • 100 session • 50
application environment property bag • 171 Application Tier • 13
Begin Transaction • 79 automation
clearing a persistence unit • 96 default properties • 25
closing a session • 95 optional parameter • 25
Commit Transaction • 80
C
converting Version 4.1.4 to r7 • 202
disposition property • 191 Class parameter • 59
environment • 35 Collect method • 60
error handling • 96 CollectProperties method • 75
ERwin Spy application • 27 creating a new model • 47
iterating through open models • 42
iteration of properties • 64 E
Locator property • 189 enumerations • 23, 75
major features • 10 ERwin Spy application • 27
metadata element renaming for r7.3 • 194
model directory property bag • 179, 187 F
model directory unit property bag • 179,
filtering
187
object collections • 60
ModelObjects property • 55
properties • 75
object identifiers • 20
filters • 61
persistence unit collections property bag •
182 I
persistence units property bag • 182
property bag reference • 171 IEnumVARIANT • 23
session transactions • 78 ISCApplication
setting property values • 83, 84, 85 application properties • 37
typical use cases • 10 overview • 109
using • 11, 12, 42, 46 using with API as add-in • 42
XML schema • 200 ISCApplicationEnvironment
API components, values of • 17, 18 application properties • 38, 92, 98
API, creating overview • 110
entry points • 36 ISCModelDirectory • 15, 18, 111
Index 205
ISCModelDirectoryCollection • 123 ISCPropertyValueCollection
ISCModelDirectoryUnit • 15 accessing non-scalar property values • 70
ISCModelObject accessing specific properties • 74
accessing model objects • 56 overview • 160
filtering properties • 76 ISCSession
iteration of properties • 64 accessing metamodel information • 93
model data • 17 accessing model objects • 56
overview • 128 Begin Transaction • 79
ISCModelObjectCollection closing the session • 94
accessing objects • 56, 59 Commit transaction • 80, 105
creating objects • 82 opening a session • 51
deleting objects • 87 overview • 16, 18, 54, 162
filtering object collections • 61 ISCSession instance, establishing for
model data • 17 ISCPersistenceUnit • 50
overview • 130 ISCSessionCollection
ISCModelProperty closing the session • 95
accessing non-scalar property values • 70 opening a session • 50
accessing scalar property values • 68 overview • 166
deleting properties and property values • 88 sessions • 16
iteration of properties • 65 ISCValueCollection • 17
model data • 17 Item method • 58, 74
overview • 135
setting non-scalar property values • 85 L
setting scalar property values • 84 Level parameter • 91
ISCModelPropertyCollection
deleting properties and property values • 88 M
iteration of properties • 64
member
overview • 141
property bag, for a persistence unit • 43
ISCModelSet • 53, 147
PropertyValues • 70
ISCModelSetCollection • 53, 149
Value • 83
ISCPersistenceUnit
ValueId • 70
establishing ISCSession instance for • 50
metamodel
overview • 150
accessing information • 91
saving the model • 90
elements renamed for r7.3 • 194
using with API as add-in • 43
methods
ISCPersistenceUnitCollection
Collect • 60
clearing persistence units • 96
CollectProperties • 75
creating a new model • 47
Item • 58, 74
opening an existing model • 49
Open • 91
overview • 152
Remove • 89
using with API as add-in • 42
RemoveValue • 87, 89
ISCPropertyBag
model
creating a new model • 48
Begin Transaction • 79
overview • 156
clearing a persistence unit • 96
using with API as add-in • 45
closing a session • 95
ISCPropertyValue
Commit Transaction • 80
accessing non-scalar property values • 71
error handling • 96
model data • 17
iteration • 42, 64
overview • 158
setting property values • 83, 84, 85
206 API Reference Guide
Model Data Tier • 17 property bag members, for a persistence unit •
Model Directory Tier • 15 43
model, creating property bag reference • 171
new • 47 property of model object
new persistence unit • 48 flags • 111
objects • 81 multi-valued • 17
model, deleting PropertyValues member • 70
non-scalar property values • 89
objects • 86 R
properties and property values • 87 Remove method • 89
model, filtering RemoveValue method • 87, 89
object collections • 60, 61
properties • 75 S
model, opening
SC_ModelDirectoryFlags, enumerations and
a session • 50
properties • 167
existing • 49
SC_ModelDirectoryType, enumerations and
ModelObjects property • 55
properties • 168
N SC_ModelObjectFlags, enumerations and
properties • 168
nIndex parameter • 59 SC_ModelPropertyFlags, enumerations and
non-scalar properties, accessing specific • 74 properties • 169
SC_SessionFlags, enumerations and properties
O
• 169
Open method • 91 SC_SessionLevel, enumerations and properties
opening a session • 50 • 170
SC_ValueTypes, enumerations and properties •
P 170
parameters script • 12
Class • 59 session transactions
Level • 91 Begin • 79
nIndex • 59 Commit • 80
Unit • 51, 93 Sessions Tier • 16
ValueId • 85, 89
T
persistence unit
new • 47 transactions
property bag members for • 43 Begin • 79
properties Commit • 80
iteration of • 64
ModelObjects • 55 U
PersistenceUnits • 42, 46 Unit parameter • 51, 93
setting values of • 83
Value • 23 V
properties, accessing
Value member • 83
non-scalar values of • 70
ValueId member • 70
scalar values of • 23
ValueId parameter • 85, 89
specific • 74
properties, deleting
non-scalar values of • 89
Index 207