edmiDefineMethodSignature
EdmiError edmiDefineMethodSignature(SdaiString methodType, SdaiString methodName, SdaiString schemaName, SdaiString methodClass, SdaiPrimitiveType returnValueDatatype, SdaiInstance returnValueDomainId, SdaiString parameterNames[], SdaiPrimitiveType parameterDatatype[], SdaiInstance parameterDomainIds[], SdaiString description);
Provides additional information / documentation of methods 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. Query functions already have their input parameters stored in the dictionary model. Therefore, this function si not applicable for query function methods. However, there is no accompanying information that describes each input parameter nor the purpose of the method it self. Use edmiModifyMethodSignature to add this information. For mapping schemas, there is no information about the required input parameters in the dictionary model at all. By manually adding this information, users may find the required documentation of the methods within the EDMdatabase. One mapping schema may be used for many methods. I.e, they may all be based on the same piece of Express-X code, but the behaviour may depend on the input parameter signature given.
Arguments
1 | Type | Name | Comment |
2 | SdaiString | methodType | Specify type of method. Currently the only applicable method type is XPX. |
3 | SdaiString | methodName | The name to be assigned to the Express-X Mapping Schema method. |
4 | SdaiString | schemaName | The name of the Express-X Mapping Schema. |
5 | SdaiString | methodClass | User defined classification of the method. This parameter is optional |
6 | SdaiPrimitiveType | returnValueDatatype |
|
7 | SdaiInstance | returnValueDomainId |
|
8 | SdaiString | parameterNames | NULL terminated list of parameter names |
9 | SdaiPrimitiveType | parameterDatatype | list of parameter data types. |
10 | SdaiInstance | parameterDomainIds | Optional, zero terminated buffer of parameter domainIds |
11 | SdaiString | description | Optional. User added information/documentation, explaining the purpose of the method. |
Return Value
Options
Example
EdmiError rstat; SdaiInteger nErr, nWrn; SdaiInstance xpxMethodId, qexMethodId; SdaiString parNamesXpx[4] = {"Name", "Sex", "Weight", NULL}; SdaiPrimitiveType parTypesXpx[3] = {sdaiSTRING, sdaiINTEGER, sdaiREAL}; /* Define Schemas */ rstat = edmiDefineSchema("c:/data/person.exp", "c:/temp/person.dia", "Person", 0, &nWrn, &nErr); rstat = edmiDefineSchemaMap("c:/data/person_maps.xpx", "c:/temp/person_maps.dia", 0, &nWrn, &nErr); rstat = edmiDefineQuerySchema("c:/data/person_queries.qex", "c:/data/person_queries.dia", 0, &nWrn, &nErr); /* Define Method Signatures */ /* Only applicable for "XPX" */ rstat = edmiDefineMethodSignature( "XPX", "Insert a Person", "InsertPerson", "CLASS_INPUT", parNamesXpx, parTypesXpx, "Inserts a new person"); /* Get Signature Ids */ rstat = edmiGetMethodSignatureId("XPX", "Insert a Person", "InsertPerson", &xpxMethodId); rstat = edmiGetMethodSignatureId("QEX", "SexHeavierThan", "Person.Queries", &qexMethodId); /* Modify Signatures */ if (qexMethodId) { SdaiString type, name, schema, class, desc, *argNames; SdaiPrimitiveType returnType, *argTypes; SdaiInteger nArg; rstat = edmiGetMethodSignature(qexMethodId, &type, &name, &schema, &class, &nArg, &returnType, &argNames, &argTypes, &desc); rstat = edmiModifyMethodSignature(qexMethodId, "CLASS_OUTPUT", NULL, NULL, "Returns all persons of a \ given sex exceeding a given \ threshold weight"); } /* List Query Method Signatures */ if (qexMethodId) { SdaiString *s; rstat = edmiListMethodSignatures("method_type = QEX", "name LIKE 'SEX*'", "name = 'PERSON'", "xpxLike(classification,_'*_OUTPUT')", NULL, NULL, 0, &s); while(*s) { printf("\nMethod %s", *s); s++; } } /* Delete Signature. */ /* Not applicable for "QEX" */ rstat = edmiDeleteMethodSignature(xpxMethodId); 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.