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


1TypeNameComment
2SdaiString

methodType

Specify type of method. Currently the only applicable method type is XPX.

3SdaiString

methodName

The name to be assigned to the Express-X Mapping Schema method.

4SdaiString

schemaName

The name of the Express-X Mapping Schema.

5SdaiString

methodClass

User defined classification of the method. This parameter is optional

6SdaiPrimitiveType

returnValueDatatype

 

7SdaiInstance

returnValueDomainId

 

8SdaiString

parameterNames

NULL terminated list of parameter names

9SdaiPrimitiveType

parameterDatatype

list of parameter data types.

10SdaiInstance

parameterDomainIds

Optional, zero terminated buffer of parameter domainIds

11SdaiString

description

Optional. User added information/documentation, explaining the purpose of the method.

Return Value


Error rendering macro 'excerpt-include' : User 'null' does not have permission to view the page 'US:_r_EDMInterface'.

 

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.