Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagecpp
themeConfluence
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

...

Insert excerpt
US:_r_EDMInterface
US:_r_EDMInterface
nopaneltrue

 

Options

...

  

 

Example

...

 

Code Block
languagecpp
 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 (Content by label)
showLabelsfalse
showSpacefalse
cqllabel = "model" and parent = "6062220"