edmiRemoteGetMethodSignatureBN
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.
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 | Variable that will receive the name that was assigned to the method when it was defined with edmiRemoteDefineMethodSignature. If the method is a Query Function, the method name will be the name of the query function it self. |
SdaiString | schemaName | If the method is an Express-X Schema Map, this variable will receive the name of the mapping schema. If the method is a query function, the variable will receive the name of the query schema containing the query in question, qualified with the name of the parent Express schema. E.g: "MySchema.MyQuerySchema" |
SdaiString | methodClass | Variable that will receive the optional and user defined method class. Method classification may be used to organize methods in the 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 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
Options
Example
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
There are no items with the selected labels at this time.