Invokes the EDMmodelConverter to convert one or more existing data models (source models) in the EDMdatabase. The result of the conversion will normally be a new data model (target model) in the EDMdatabase. Optionally the result of this operation can be added to an existing data model.
This operation can be used for model merging, i.e., merge more models to a new model or add the merge result to an existing model.
This function is similar to the edmiConvertModelsBN function, except that a possibility exists for the client application to supply a certain number of parameters to the conversion process to make the Express-X schema parameterized. From the conversion process the number of parameters is obtained by a call to the xpxGetNumberOfUserParameters function, and each of the parameters is obtained by a call to the xpxGetUserParameter function.
The underlying schema of the target model (target schema) must exist as a dictionary model in the EDMdatabase before the EDMmodelConverter is invoked by this function. Likewise the Express-X schema that defines the conversion process must exist as an Express-X dictionary model before this function can be successfully executed.
The function edmiDefineSchema can be used to create a dictionary model of an Express schema in the EDMdatabase and the function edmiDefineSchemaMap can be used to create an Express-X dictionary model in the EDMdatabase.
The source model will be unchanged when the conversion process is terminated.
The EDMmodelConverter is utilizing the EDMexpressVM to perform the conversion process. To facilitate debugging of the conversion process, many options to trace the conversion process and to log events during the conversion process have been included.
Express-X can be used as a programming language for creating, manipulating, and deleting data in any data model in the EDMdatabase that can be accessed by the caller, hence the specified Express-X schema can be successfully interpreted without creating in a new data model.
An optional filter controls the logging of the conversion process. This filter is defined by the <declarationsToLog>, <sourceLinesToLog> and <options> arguments. The filter defines the following:
- What should be logged
- Which part of the Express-X schema should be logged
It is normally important to specify an appropriate logging filter to avoid the log output to fill up your disk.
Related functions: edmiDefineSchema ,edmiDefineSchemaMap, edmiConvertModelBN, edmiConvertModelsBN
Header:
#include "sdai.h"
Prototype:
EdmiError edmiConvertModelsWithParametersBN(SdaiString sourceModelNames,
SdaiString schemaMapName,
SdaiString targetModelName,
SdaiString declarationsToLog,
SdaiString sourceLinesToLog,
SdaiString logFile,
SdaiInteger maxLogFileSize,
SdaiString userOutputFile,
SdaiInteger options,
SdaiModel *targetModelId,
SdaiInteger *userDefinedStatus,
SdaiInteger *nbWarnings,
SdaiInteger *nbErrors,
SdaiInteger numberOfParameters,
/* One pair of primitive type and value for each of the parameters.
SdaiPrimitiveType parameterDataType,
parameterValue,
*/
...);
Arguments:
sourceModelNames |
Specifies the names of the source models in the following format: repositoryName.modelName. Such names are case sensitive. When more than one model names are specified, comma or white space should be used as delimiter between each model name. |
schemaMapName |
Specifies the name of EXPRESS-X schema of interest. This EXPRESS-X schema must exist as an EXPRESS-X dictionary_model in the EDMdatabase. EXPRESS-X schema names are case insensitive. EXPRESS-X schema names are unique in an EDMdatabase. |
targetModelName |
Specifies the name of the target model to populate with the result from the conversion in the following format: repositoryName.modelName. Such model names are case sensitive.
|
declarationsToLog |
Specifies the Express-X declarations that should be executed when logging should be performed, I.e., the part of the schema defined in the <sourceLinesToLog> argument will only be logged when those parts are executed on behalf of the declarations specified in the <declarationsToLog> argument. |
sourceLinesToLog |
Specifies the Express-X source line intervals that should be logged during the conversion process. A source line interval is specified either as the name of a declaration of type: map, compose, statements, function and procedure, or by a single line number or by the first line number and the last line number separated by the hyphen '-' character. Any number of intervals can be specified, the intervals are separated by a comma. The order of the intervals is not significant. |
logFile |
Specifies the name of the file that will hold the log information. This file can be an existing file or the name of a file that will be created by the conversion process. Default file extension is ".log". |
maxLogFileSize |
Specifies an integer value that is the maximum number of bytes the specified <logFile> can hold before the <logFile> is closed. Specifying the value 0 (zero) means that no size limit for the <logFile> is defined. This argument is only effective when the <logFile> argument is specified and the [LOG_TO_FILE] option is set. |
userOutputFile |
Specifies the name of a file that will be used to receive the result of executing the xpxPrintf and xpxOutputValue function in the actual Express-X schema. The specified file can be an existing file or the name of a file that will be created by the EDMmodelConverter. The default file extension is ".txt". |
options |
Specifies the EDMmodelConverter options enabled in the current invocation of the EDMmodelConverter. The <options> value should be defined as a bitwise OR between the options to enable. All the options names are defined in the header file sdai.h . |
targetModelId |
The address of a variable that will receive the numeric instanceID that uniquely identifies the model (target model) in the EDMdatabase populated by the edmiConvertModelsBN operation. |
userDefinedStatus |
The address of a variable that will receive a "termination reason" from the actual conversion process. This "termination reason" can be used to communicate the "termination reason" of the actual conversion process to the calling application. |
nbWarnings |
Address of a variable that will receive the number of warnings detected during the conversion/merging of the specified model(s). |
nbErrors |
Address of a variable that will receive the number of errors detected during the conversion/merging of the specified model(s). |
numberOfParameters |
Specifies the number of parameters the function supplies to the actual conversion process. |
parameterDataType |
The data type of the corresponding parameter value. The value of this argument must be one of the following legal data types: sdaiINTEGER, sdaiREAL, sdaiBOOLEAN, sdaiLOGICAL, sdaiSTRING, sdaiBINARY, sdaiENUMERATION, sdaiAGGR, sdaiINSTANCE or sdaiSELECT. |
parameterValue |
The actual value of the parameter. |
Option Description
USER_OUTPUT_TO_FILE |
Specifies that the result from the Express-X functions xpxPrintf and xpxOutputValue will be written to the file specified in the <userOutputFile> argument. |
USER_OUTPUT_TO_STDOUT |
Specifies that the result from the Express-X functions xpxPrintf and xpxOutputValue will be written to the EDMinterface current output device. |
USE_EXISTING_TARGET_MODEL |
The created target instances will be added to a model that exists already. |
DELETING_EXISTING_MODEL |
Delete the target model before operation, if it already exists. |
FULL_LOG |
Specifies that all logging options except [LOG_AGGREGATE_CONTENTS] should be activated during the conversion process. |
LOG_CONDITIONS |
Specifies that the evaluation of all logical conditions in the actual Express-X schema should be logged. |
LOG_EXPRESSIONS |
Specifies that the evaluation of all Express-X expressions should be logged. |
LOG_PREDEF_FUNCTIONS |
Specifies that the execution of all built-in Express-X functions and procedures should be logged. |
LOG_FUNCTIONS |
Specifies that the execution of all user defined functions and procedures should be logged. |
LOG_ITERATIONS |
Specifies that all iterations should be logged. |
LOG_INSTANCE_CREATION |
Specifies that all instance creation in the conversion process should be logged. |
LOG_ASSIGNMENTS |
Specifies that the execution of all assignment statements should be logged. |
LOG_AGGREGATE_CONTENTS |
Specifies that when the actual data type to be recorded is an aggregate, the value of all aggregate elements will be written in the log record, otherwise only the aggregateID would be written to the actual log record. |
LOG_MAPPING_SCHEMA_ONLY |
Log declarations in the mapping schema only, i.e. do not log evaluation of derived attributes in the source and target schemas. |
LOG_ERRORS |
Specifies that all error events detected in the actual conversion process should be logged. |
LOG_WARNINGS |
Specifies that all warning events detected in the actual conversion process should be logged. |
LOG_TO_FILE |
Specifies that the log records should be written to the file specified in the <logFile> argument. |
LOG_TO_STDOUT |
Specifies that the log records should be written to the EDMinterface current output device. |
Returns:
A completion code of datatype EdmiError is the returned function value. The completion code has the following values:
Completion code = 0: Operation successfully performed.
Completion code != 0: Error in operation. Completion code is an EDMinterface error code. Use edmiGetErrorText to get the error text corresponding to the error code.
EXAMPLE
EdmiError rstat;
SdaiModel targetModelId;
SdaiInteger userDefinedStatus;
SdaiInteger nbWarnings, nbErrors;
...
if (rstat = edmiConvertModelsWithParametersBN (
"ModelRepository.PDM_AABH9, PDMrepository.PDM_AXX98",
"PDM2MetaPhase",
"MetaPhase.MBCF91AH",
NULL,
NULL,
"/usr/hkd/converter/xpx.log",
0,
"/usr/ hkd/converter/user_output.txt",
LOG_TO_FILE | USER_OUTPUT_TO_FILE | LOG_ERRORS | LOG_WARNINGS,
&targetModelId,
&userDefinedStatus,
&nbWarnings,
&nbErrors,
2,
sdaiBOOLEAN,
sdaiTRUE,
sdaiSTRING,
"/usr/hkd/mapping_data.text")) {
/* Error in operation */
printf("\nError in edmiConvertModelsWithParametersBN: %s",
edmiGetErrorText(rstat));
goto error;
}
...