servicename := SERVICE [ : defaultkeywords [,TIME[(label)]]]
prototype : keywordlist;
END;
servicename | The name of the service the SERVICE structure provides. |
defaultkeywords | Optional. A comma-delimited list of default keywords and their values shared by all prototypes in the external service. |
TIME | Tracks timing of all function calls in the SERVICE structure and reports them back as metrics to the user. |
label | Optional. A string constant containing the name to associate with the timer. If omitted, the default is used. |
prototype | The ECL name and prototype of a specific function. |
keywordlist | A comma-delimited list of keywords and their values that tell the ECL compiler how to access the external service. |
The SERVICE structure makes it possible to create external services to extend the capabilities of ECL to perform any desired functionality. These external system services are implemented as exported functions in a .SO (Shared Object). An ECL system service .SO can contain one or more services and (possibly) a single .SO initialization routine.
Example:
email := SERVICE :TIME('MyTime') simpleSend( STRING address, STRING template, STRING subject) : LIBRARY='ecl2cw', INITFUNCTION='initEcl2Cw'; END; MyAttr := COUNT(Trades): FAILURE(email.simpleSend('help@ln_risk.com', 'FailTemplate', 'COUNT failure')); //An example of a SERVICE function returning a structured record NameRecord := RECORD STRING5 title; STRING20 fname; STRING20 mname; STRING20 lname; STRING5 name_suffix; STRING3 name_score; END; LocalAddrCleanLib := SERVICE NameRecord dt(CONST STRING name, CONST STRING server = 'x') : c,entrypoint='aclCleanPerson73',pure; END; MyRecord := RECORD UNSIGNED id; STRING uncleanedName; NameRecord Name; END; x := DATASET('x', MyRecord, THOR); myRecord t(myRecord L) := TRANSFORM SELF.Name := LocalAddrCleanLib.dt(L.uncleanedName); SELF := L; END; y := PROJECT(x, t(LEFT)); OUTPUT(y); //The following two examples define the same functions: TestServices1 := SERVICE member(CONST STRING src) : holertl,library='test',entrypoint='member',ctxmethod; takesContext1(CONST STRING src) : holertl,library='test',entrypoint='takesContext1',context; takesContext2() : holertl,library='test',entrypoint='takesContext2',context; STRING takesContext3() : holertl,library='test',entrypoint='takesContext3',context; END; //this form demonstrates the use of default keywords TestServices2 := SERVICE : holert,library='test' member(CONST STRING src) : entrypoint='member',ctxmethod; takesContext1(CONST STRING src) : entrypoint='takesContext1',context; takesContext2() : entrypoint='takesContext2',context; STRING takesContext3() : entrypoint='takesContext3',context; END;
See Also: External Service Implementation, CONST