...
Code Block | ||||
---|---|---|---|---|
| ||||
EdmiError edmiRemoteGetMethodSignatureBN(SdaiServerContext serverContextId,
SdaiString methodType,
SdaiString methodName,
SdaiString schemaName,
SdaiInstance *methodId,
SdaiString *methodClass,
SdaiInteger *arguments,
SdaiPrimitiveType *returnValueDatatype,
SdaiInstance *returnValueDomainId,
SdaiString **argumentNames,
SdaiPrimitiveType **argumentDatatypes,
SdaiInstance **argumentDomainIds,
SdaiString *description,
SdaiString *textualSignature,
SdaiInvocationId *edmiInvocationId);
|
Reads the additional information / documentation of a method, identified by its
...
methodId, in a remote 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.
...
serverContextId
...
Context identification, from edmiDefineServerContext
...
methodType
Arguments
...
Type | Name | Comment | |
SdaiServerContext | serverContextId | Context identification, from edmiDefineServerContext | |
SdaiInstance | methodId | The instance Id of that uniquely identifies the method in the remote EDMdatabase. This Id is an instance of the EDM_METHOD entity in the ExpressDataManager model. | |
SdaiString | methodType | Variable that will receive the type of method. Values are:
| |
SdaiString | methodName | If the method is an Express-X Schema Map, this shall be the method Variable that will receive the name that was assigned to the method when it was defined with edmiDefineMethodSignatureedmiRemoteDefineMethodSignature. | |
SdaiString | schemaName | If the method is an Express-X Schema Map, this variable shall be will receive the name of the mapping schema. E.g "MySchemaMap". | |
methodId | Variable that will receive the instance Id that uniquely identifies the method in the remote _EDMdatabase_ . This is an instance of the EDM_METHOD entity in the ExpressDataManager modelSdaiString | methodClass | Variable that will receive the optional and user defined method class. Method classification may be used to organize methods in the remote EDMdatabase |
SdaiInteger | arguments | This variable will receive the number of input parameters for the given method. | |
SdaiPrimitiveType | returnValueDatatype | Variable that will receive the type of the return value from the method. This parameter is only applicable for query function methods. | |
SdaiInstance | returnValueDomainId |
| |
SdaiString | argumentNames | A buffer that will receive a null terminated list of the input parameter names. | |
SdaiPrimitiveType | argumentDatatypes | A buffer that will receive a list of the input parameter types that correspond to the argument names in <argumentNames> | |
SdaiInstance | argumentDomainIds |
| |
SdaiString | description | Variable that will receive the user defined description of the method. | |
SdaiString | textualSignature | Optional, method signature in text. | |
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; |
...
} } . . . 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) | ||||||
---|---|---|---|---|---|---|
|