edmiRemoteModifyMethodSignature
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
Â
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; } } /* 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
There are no items with the selected labels at this time.
Â