Code Block | ||||
---|---|---|---|---|
| ||||
EdmiError edmiRemoteSelectInstances(SdaiServerContext serverContextId,
SdaiString remoteRepositoryName,
SdaiString remoteModelName,
SdaiString entityName,
SdaiString condition,
SdaiInteger options,
SdaiString attributes,
SdaiVoid include_exclude_filter,
SdaiString orderBy,
SdaiInteger *index,
SdaiInteger *numberOfHits,
SdaiQueryResult *queryResult
SdaiString xmlConfigurationName,
SdaiString *resultString,
SdaiString resultFileName,
SdaiInvocationId *edmiInvocationId);
|
Search in the specified remote edmModel with a given server context for instances of a specified type that match a given condition. Optionally all subtype instances of the specified type will be searched as well.
The condition may be any legal symbolic Express-X logical expression. A NULL or empty string condition will match all instances of the specified type.
Each matching instance is identified by its unique numeric instanceID. All possible matching instances will be collected in a temporary instance aggregate. This aggregate will be searched for matching instances. The index of the first aggregate element to check, and the maximum number of matching instances to return, are specified as input arguments to the function. The actual number of matching instances returned and the "index of the last returned matching instance in the instance aggregate" will be returned from the function. This makes it possible to query through huge amounts of by means of a loop where each iteration handles a small subset of the total instance aggregate. See the example below.
The <condition> argument will be compiled by the EDMexpressXCompiler. The specified query will be executed by the EDMexpressVM.
The <attributes> argument may contain a "dot expression" including Express built-in functions and EDMexpressX xpf bult-in functions.
Attributes argument syntax example: "Name sizeof(sdai_model.underlying_schema.entities)"
. This example is from an edmiRemoteSelectInstances operation on the EDM_MODEL objects in the SystemRepository.ExpressDataManager model. There will be 2 columns
- The Name attribute of the EDM_MODEL
- The number of entities in the "underlying schema" of the model.
...
- the model.
The column names in the resulting "query table" will be "name" and "sizeof(sdai_model.underlying_schema.entities)
...
" respectively. By using the "->" characters, a new column name can be specified. Example: if we want the 2nd column to be given the name "entities", we may write the 2nd attribute like this: "sizeof(sdai_model.underlying_schema.entities)->Entities"
Note that the characters white space, comma, and semicolon are all used as delimiters between the attribute "names" in the attributes argument, hence none of these characters can be used in the attribute name/attribute expression. The total number of hits will be returned in the <numberOfHits> argument.
Arguments
...
1 | Type | Name | Comment |
2 | SdaiServerContext | serverContextId | Context identification, from edmiDefineServerContext |
3 | SdaiString | remoteRepositoryName | Specifies the name of the remote edmRepository that contains the edmModel. Repository names are case sensitive. |
4 | SdaiString | remoteModelName | Specifies the name of the remote edmModel that contains the instances to query. Model names are case sensitive. |
5 | SdaiString | entityName | Specifies the name of the entity. Entity names are case insensitive. Use the option SUBTYPES to include all subtypes of this entity. |
6 | SdaiString | condition | The condition that the instances in the instance aggregate shall match. A NULL or empty string condition will match all the instances in the aggregate. |
7 | SdaiInteger | options | See description of available options below. |
8 | SdaiString | attributes | Specification of the title and contents of each column of the returned query result table. The following examples illustrate the syntax. |
9 | SdaiVoid | include_exclude_filter | A zero-terminated buffer of entityIds or a NULL-terminated buffer of string pointers to entity names. This argument is only applicable when the option SUBTYPES is used.
|
10 | SdaiString | orderBy | Name of the query result column to use for sorting. The column may be specified with its constructor or by the column title. |
11 | SdaiInteger | index |
|
12 | SdaiInteger | numberOfHits |
|
13 | SdaiQueryResult | queryResult | A variable that will receive the result of the query. Use edmiFreeQueryResult to release allocated memory. |
14 | SdaiString | xmlConfigurationName | The name of the XML configuration to apply to the resulting XML formatted query result when the option XML_FORMAT is used. |
15 | SdaiString | resultString | Variable that will receive the returned XML, HTML or ASCII formatted query result when the option RESULT_IN_STRING is used with one of the options HTML_FORMAT, ASCII_FORMAT or XML_FORMAT. |
16 | SdaiString | resultFileName | The name of the file that will contain the returned XML, HTML or ASCII formatted query result. Only applicable when using the RESULT_IN_FILE option in combination with one of the options HTML_FORMAT, ASCII_FORMAT or XML_FORMAT. |
17 | SdaiInvocationId | edmiInvocationId | Currently not used. |
...
Return Value
...
Insert excerpt | ||||||
---|---|---|---|---|---|---|
|
Options
...
1 | Option | Comment | ||
2 | ALL_ATTRIBUTES | When the argument <attributes> is NULL or an empty string, all attributes of the instances will be included in the query result. However, if the <attributes> argument is used to add one or more additional constructed columns or to rename a column in the query result, the return of all the instance attributes will be hindered due to an <attributes> argument that is no longer NULL or an empty string. Use this option to force the including of all instance attributes even when the <attributes> argument is not NULL or an empty string. | ||
3 | INCLUDE_CONFIGURATION | Includes the XML Configuration in the generated ISO10303-28 compliant XML formatted query result. This option has no effect unless combined with the option XML_FORMAT. | ||
4 | INCLUDE_SCHEMA | Includes the underlying meta data in the generated ISO10303-28 compliant XML formatted query result. This option has no effect unless combined with the option XML_FORMAT. | ||
5 | RESULT_IN_STRING | The resulting table will be returned in a string allocated in heap-memory of the calling application. Use the option RESULT_IN_FILE to write the table to a file. | ||
6 | EXTRACT_SHALLOW | Use this option to force a shallow XML formatted query result. ISO10303-28 compliant XML Query results are deep by default. No other query result format supported by this function is deep. Hence, this option has no effect unless combined with the option XML_FORMAT. | ||
7 | TRANSFER_NO_DATA | No query result will be returned from the remote EDMdatabase. Use this option when the number of matching instances is the only information needed or for testing the query syntax before actually performing it. | ||
8 | ASCENDING | Arrange the query result instances in ascending order. This option is only applicable when the <orderBy> argument is used. | ||
9 | DESCENDING | Arrange the query result instances in descending order. This option is only applicable when the <orderBy> argument is used. | ||
10 | SUBTYPES | Search for matching instances of the entity specified by the <entityName> argument and all instances of any of its subtypes. | ||
11 | ONLY_INSTANCE_IDS | Return only a single column with the instanceIds of the matching instances. | ||
12 | INCLUDE_INSTANCE_IDS | Prepend all attribute columns in the query result with an instanceId column. | ||
13 | INCLUDE_FILTER | Only the subtypes of the entity given by the <entityName> argument that are listed in the <include_exclude_filter> argument will be queried for matching instances. Only applicable when combined with the SUBTYPES option. | ||
14 | EXCLUDE_FILTER | All subtypes of the entity given by the <entityName> argument except those listed in the <include_exclude_filter> argument will be queried for matching instances. Only applicable when combined with the SUBTYPES option. | ||
15 | RESULT_IN_FILE | The resulting table will be written to a file on the local file system of the calling application. The name of the file must be specified in the <resultFileName> argument. | ||
16 | EDM_IDENTIFIERS | The instanceIds that uniquely identify the instances in the remote EDMdatabase will be used as xmlIds for identification of the instances within the ISO10303-28 compliant XML formatted query result. | ||
17 | FILTER_AS_ENTITY_NAMES | The <include_exclude_filter> argument will be interpreted as a NULL-terminated buffer of string pointers. Each string pointer must give the name of a subtype of the entity given by the argument <entityName>. This option is only applicable when combined with the SUBTYPES option. | ||
18 | FILTER_AS_ENTITY_IDS | The <include_exclude_filter> argument will be interpreted as a zero-terminated buffer of entityIds. Each entityId must identify a subtype of the entity given by the argument <entityName>. This option is only applicable when combined with the SUBTYPES option. | ||
19 | HTML_FORMAT | The query result table will be presented in HTML format in a locally allocated string or in a file on the local file system. See the options RESULT_IN_FILE and RESULT_IN_STRING. | ||
20 | ASCII_FORMAT | The query result table will be presented in plain ASCII format in a locally allocated string or in a file on the local file system. See the options RESULT_IN_FILE and RESULT_IN_STRING. | ||
21 | OLD_XML_FORMAT | The result of the query will be returned in a simple well formed XML formatted file on the local file system. | XML_FORMAT | The result of the query will be returned in an ISO10303-28 compliant a simple well formed XML formatted string or in a file on the local file system. |
ZIPPED_FILE | The file given by the argument <resultFileName> will be compressed with gzip. This option has no effect unless combined with the option RESULT_IN_FILE. | |||
IGNORE_EMPTY_COLUMNS | Columns for attributes that do not have defined values for any of the returned instances will be left out of the query result table. |
...
22 | XML_FORMAT | The result of the query will be returned in an ISO10303-28 compliant XML formatted string or in a file on the local file system. |
23 | ZIPPED_FILE | The file given by the argument <resultFileName> will be compressed with gzip. This option has no effect unless combined with the option RESULT_IN_FILE. |
24 | IGNORE_EMPTY_COLUMNS | Columns for attributes that do not have defined values for any of the returned instances will be left out of the query result table. |
Example
...
Code Block | ||
---|---|---|
| ||
EdmiError rstat; SdaiServerContext myContext; SdaiInteger index, nHits, nTot; SdaiQueryResult qexRes; char condition[1024]; char attrs[1024], *pAttrs = &attrs[0]; SdaiOptions options; /* Create Server Context */ rstat = edmiDefineServerContext("MyContext", "Johnny", "Supervisor", "cf37ftr", "TCP", "9090", "MyServerHost", NULL, NULL, NULL, NULL, NULL, &myContext); /* Do I have any carpenters among my friends */ strcpy(condition, "PROFESSION.NAME = 'Carpenter'"); options = TRANSFER_NO_DATA; index = 0; nHits = 1; /* One is enough. */ rstat = edmiRemoteSelectInstances(myContext, "MyRepository", "MySocialRelations", "MyFriends", condition, options, NULL, NULL, NULL, &index, &nHits, &qexRes, NULL, NULL, NULL, NULL); if (nHits) { /* List all carpenters among my friends. Read them in batches of 10. Note that index now already points at the first carpenter element */ nTot = 0; nHits = S_BATCHSIZE; options = RESULT_IN_STRING | ASCENDING; pAttrs += sprintf(pAttrs, "LAST_NAME->FamilyName"); |
...
pAttrs += sprintf(pAttrs, " FIRST_NAME->Name"); |
...
pAttrs += sprintf(pAttrs, " PHONE_NO->Phone"); |
...
pAttrs += sprintf(pAttrs, " (EMPLOYER.BOSS.LAST_NAME)->Boss"); |
...
pAttrs += sprintf(pAttrs, " (EMPLOYER.BOSS.PHONE_NO)->PhoneBoss"); |
...
while (nHits = S_BATCHSIZE) { |
...
SdaiString _resString; |
...
rstat = edmiRemoteSelectInstances(myContext, "MyRepository", |
...
"MySocialRelations", "MyFriends", |
...
condition, options, attrs, NULL, "LAST_NAME", |
...
&index, &nHits, &qexRes, NULL, |
...
&_resString, NULL, NULL); |
...
printf("\n\n%s", _resString); |
...
edmiFree(_resString); |
...
nTot += nHits; |
...
++index; |
...
} printf("\n\n%d carpenters found among my friends!", nTot); |
...
} else { |
...
printf("\nSorry, you do not know any carpenters"); |
...
}
. . . |
See also
Filter by label (Content by label) | ||||||
---|---|---|---|---|---|---|
|