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


TypeNameComment
SdaiServerContext

serverContextId

Context identification, from edmiDefineServerContext

SdaiString

methodType

"XPX" if the method is an Express-X Schema Map.
"QEX" if the method is a query function.

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.
If the method is a query function, the method name shall be the name of the query function it self.

SdaiString

schemaName

If the method is an Express-X Schema Map, this variable shall be the name of the mapping schema. E.g "MySchemaMap".
If the method is a query function, this variable shall be 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

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


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;
 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.