...
Code Block | ||||
---|---|---|---|---|
| ||||
EdmiError edmiRemoteModifyMethodSignature(SdaiServerContext serverContextId,
SdaiString methodType,
SdaiString methodName,
SdaiString schemaName,
SdaiString methodClass,
SdaiPrimitiveType returnValueDataType,
SdaiInstance returnValueDomainId,
SdaiString parameterNames[],
SdaiPrimitiveType parameterDatatype[],
SdaiInstance parameterDomainIds[],
SdaiString description,
SdaiInvocationId *edmiInvocationId);
|
Changes additional information / documentation of a method in the EDMdatabase
...
.
...
The purpose of the user defined method signatures is to provide information about the methods and their input parameters to the users. The methods in question are Express-X mapping schemas and query functions.
...
This is the only way to add classification and description to a query function method. For Express-X schema maps, this information may also be given by edmiRemoteDefineMethodsignature.
Arguments
...
Type | Name | Comment |
SdaiServerContext | serverContextId | Context identification, from edmiDefineServerContext |
SdaiString | methodType | "XPX" if the method is an Express-X Schema Map. |
SdaiString | methodName | If the method is an Express-X Schema Map, this shall be the method name that was assigned to the method when it was defined with edmiDefineMethodSignature. |
SdaiString | schemaName | If the method is an Express-X Schema Map, this variable shall be the name of the mapping schema. E.g "MySchemaMap". |
SdaiString | methodClass | User defined classification of the method. This parameter is optional: Examples: ifc_checkin, ifc_checkout, ifc_heal. |
SdaiPrimitiveType | returnValueDataType |
|
SdaiInstance | returnValueDomainId |
|
SdaiString | parameterNames[] | NULL terminated list of parameter names |
SdaiPrimitiveType | parameterDatatype[] | list of parameter data types |
SdaiInstance | parameterDomainIds[] | Optional, zero terminated buffer of parameter domainIds. |
SdaiString | description | User added information/documentation, explaining the purpose of the method. |
SdaiInvocationId | edmiInvocationId | Currently not used. |
...
Return Value
...
Insert excerpt | ||||||
---|---|---|---|---|---|---|
|
Options
...
Example
...
Code Block | ||
---|---|---|
| ||
EdmiError rstat; SdaiInteger nErr, nWrn; SdaiServerContext myContext; /* Define Remote Server Context */ rstat = edmiDefineServerContext("MyRemoteServerContext", |
...
"Johnny", "Supervisor", "cf37ftr", |
...
"TCP", "9090", "MyServerHost", |
...
NULL, NULL, NULL, NULL, NULL, &myContext); |
...
/* Define Schemas */ |
...
rstat = edmiRemoteDefineSchema(myContext, EXPRESS_SCHEMA_TYPE, |
...
"c:/data/person.exp", "c:/temp/person.dia", "Person", |
...
DELETING_EXISTING_SCHEMAS | STORING_SOURCE, |
...
&nWrn, &nErr, NULL); |
...
rstat = edmiRemoteDefineSchema(myContext, EXPRESS_X_SCHEMA_TYPE, |
...
"c:/data/person_maps.xpx", "c:/temp/person_maps.dia", |
...
"InsertPerson", DELETING_EXISTING_SCHEMAS | STORING_SOURCE, |
...
&nWrn, &nErr, NULL); |
...
rstat = edmiRemoteDefineSchema(myContext, QUERY_SCHEMA_TYPE, |
...
"c:/data/person_queries.xpx", "c:/temp/person_queries.dia", |
...
"queries", DELETING_EXISTING_SCHEMAS | STORING_SOURCE, |
...
&nWrn, &nErr, NULL); |
...
/* Define XPX Method Signature */ |
...
{ |
...
SdaiString _parNamesXpx[4] = {"Name", "Sex", "Weight", NULL}; |
...
SdaiPrimitiveType _parTypesXpx[3] = {sdaiSTRING, sdaiINTEGER, sdaiREAL}; |
...
rstat = edmiRemoteDefineMethodSignature(myContext, "XPX", |
...
"Insert a Person", "InsertPerson", |
...
"CLASS_INPUT", _parNamesXpx, _parTypesXpx, |
...
"Inserts a new person", NULL); |
...
} /* Get QEX Method Signature */ |
...
{ |
...
SdaiInstance _qexMethodId; |
...
SdaiString _qexMethodClass, _qexDesc, *_qexArgNames; |
...
SdaiPrimitiveType _qexReturnType, *_qexArgTypes; |
...
SdaiInteger _nArgs; |
...
rstat = edmiRemoteGetMethodSignatureBN(myContext, "QEX", |
...
"SexHeavierThan", "Person.Queries", |
...
&_qexMethodId, &_qexMethodClass, |
...
&_nArgs, &_qexReturnType, &_qexArgNames, |
...
&_qexArgTypes, &_qexDesc, NULL); |
...
} /* Modify QEX Method Signature */ |
...
rstat = edmiRemoteModifyMethodSignature(myContext, "QEX", |
...
"SexHeavierThan", "Person.Queries", "CLASS_OUTPUT", |
...
NULL, NULL, "Returns all persons of a given sex \ |
...
exceeding a given threshold weight", NULL); |
...
/* List Query Method Signatures */ |
...
{ |
...
SdaiString _typeFilter = "method_type = QEX"; |
...
SdaiString _nameFilter = "name LIKE 'SEX*'"; |
...
SdaiString _schemaFilter = "name = 'PERSON'"; |
...
SdaiString _extraSchemaFilter = "name = 'QUERIES'"; |
...
SdaiString _classFilter = "class = 'CLASS_OUTPUT'"; |
...
SdaiString _ownerFilter = NULL; |
...
SdaiString _groupFilter = NULL; |
...
SdaiString *_methodNames = NULL; |
...
rstat = edmiRemoteListMethodSignatures(myContext, _typeFilter, |
...
_nameFilter, _schemaFilter, _extraSchemaFilter, |
...
_classFilter, _ownerFilter, _groupFilter, 0, |
...
&_methodNames, NULL); |
...
while(*_methodNames) { |
...
printf("\nMethod %s", *_methodNames); |
...
++_methodNames; |
...
} } /* Delete the XPX Method Signature */ edmiRemoteDeleteMethodSignature(myContext, "XPX", |
...
"INSERT A PERSON", "InsertPerson", NULL); |
...
. . . |
...
Express |
...
Schema - -------------------------------------------------------------- |
...
- File : c:/data/person.exp |
...
- -------------------------------------------------------------- |
...
SCHEMA person; |
...
ENTITY aperson; |
...
name : STRING; |
...
sex : STRING; |
...
weight : REAL; |
...
END_ENTITY; |
...
END_SCHEMA; |
...
Express-X |
...
Schema - -------------------------------------------------------------- |
...
- File : c:/data/person_maps.xpx |
...
- -------------------------------------------------------------- |
...
SCHEMA_MAP InsertPerson; |
...
GLOBAL |
...
DECLARE src INSTANCE OF SOURCE_SCHEMA person; |
...
DECLARE tar INSTANCE OF TARGET_SCHEMA person; |
...
END_GLOBAL; |
...
STATEMENTS; |
...
LOCAL |
...
npar : INTEGER; |
...
fail : BOOLEAN := FALSE; |
...
name : STRING; |
...
sex : INTEGER; |
...
weight : REAL; |
...
parType : INTEGER; |
...
END_LOCAL; |
...
IF (xpxGetNumberOfUserParameters() = 3) THEN |
...
xpxGetUserParameter(1, name); |
...
xpxGetUserParameter(2, sex); |
...
xpxGetUserParameter(3, weight); |
...
xpxCreateInstanceAndPutAttrsBN(XPXTARGETMODELID, "aperson", 3, |
...
xpxSTRING, name, xpxINTEGER, sex, xpxREAL, weight); |
...
} |
...
END_STATEMENTS; |
...
END_SCHEMA_MAP; |
...
Query Schema. - -------------------------------------------------------------- - |
...
File : c:/data/person_queries.qex |
...
- -------------------------------------------------------------- |
...
QUERY_SCHEMA queries FOR person; |
...
GLOBAL |
...
DECLARE src INSTANCE OF person; |
...
END_GLOBAL; |
...
VIEW_ENTITY PersonView; |
...
name : STRING; |
...
sex : INTEGER; |
...
weight : REAL; |
...
END_VIEW_ENTITY; |
...
QUERY_FUNCTION SexHeavierThan ( p_sex:INTEGER; p_weight:REAL) |
...
: SET OF PersonView; |
...
LOCAL |
...
result : SET of PersonView; |
...
currView : PersonView; |
...
END_LOCAL; |
...
FROM(s:src::aperson) |
...
WHEN TRUE; |
...
BEGIN |
...
IF((s.sex = p_sex) AND (s.weight > p_weight)) THEN |
...
NEW currView; |
...
currView.name := s.name; |
...
currView.sex := s.sex; |
...
currView.weight := s.weight; |
...
result ++ currView; |
...
END_IF; |
...
END; |
...
RETURN(result); |
...
END_QUERY_FUNCTION; |
...
END_QUERY_SCHEMA; |
See also
Filter by label (Content by label) | ||||||
---|---|---|---|---|---|---|
|