Hello,
I am searching for an example of how to use the "AddIdField" method to generate new unique IDs when creating a new record.
I am using THIS example. I understand how 'count' method is working, but I cannot handle with AddIdField.
Thanks,
Martin
Hi Martin.
Have you write the code to assign the ClientNum in a CreateTrigger of your table?
/*------------------------------------------------------------------------ File : CreateAnalistas.p Purpose : Syntax : Description : Trigger Create Analistas Author(s) : William Pavei Antero Created : Thu Mar 09 16:13:45 BRT 2017 Notes : ----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ BLOCK-LEVEL ON ERROR UNDO, THROW. /* ******************** Preprocessor Definitions ******************** */ /* *************************** Main Block *************************** */ TRIGGER PROCEDURE FOR CREATE OF Analistas. ASSIGN Analistas.IdAnalista = REPLACE(GUID(GENERATE-UUID), "-", "").
/*------------------------------------------------------------------------
File : Analistas
Syntax :
Author(s) : wantero
Created : Thu Feb 16 12:27:38 BRST 2017
Notes :
----------------------------------------------------------------------*/
@program FILE(name="Analistas.cls", module="AppServer").
@openapi.openedge.export FILE(type="REST", executionMode="singleton", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resource FILE(name="Analistas", URI="/Analistas", schemaName="dsAnalistas", schemaFile="SGASP/src/AppServer/analistas.i").
USING Progress.Lang.*.
USING OpenEdge.BusinessLogic.BusinessEntity.
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS Analistas INHERITS BusinessEntity:
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
{"analistas.i"}
DEFINE DATA-SOURCE srcAnalistas FOR sgasp.Analistas.
DEFINE VARIABLE filterOpenEdge AS FilterOpenEdge NO-UNDO.
DEFINE VARIABLE iSeq AS INTEGER NO-UNDO.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
CONSTRUCTOR PUBLIC Analistas():
DEFINE VAR hDataSourceArray AS HANDLE NO-UNDO EXTENT 1.
DEFINE VAR cSkipListArray AS CHAR NO-UNDO EXTENT 1.
SUPER (DATASET dsAnalistas:HANDLE).
/* Instancia a classe de filtro */
filterOpenEdge = NEW FilterOpenEdge().
/* Data Source for each table in dataset. Should be in table order as defined
in DataSet */
hDataSourceArray[1] = DATA-SOURCE srcAnalistas:HANDLE.
/* Skip-list entry for each table in dataset. Should be in temp-table order
as defined in DataSet */
/* Each skip-list entry is a comma-separated list of field names, to be
ignored in create stmt */
cSkipListArray[1] = "IdAnalista".
THIS-OBJECT:ProDataSource = hDataSourceArray.
THIS-OBJECT:SkipList = cSkipListArray.
END CONSTRUCTOR.
/*------------------------------------------------------------------------------
Purpose: Get one or more records, based on a filter string
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="read", URI="?filter=~{filter~}", alias="", mediaType="application/json").
@openapi.openedge.method.property (name="mappingType", value="JFP").
@openapi.openedge.method.property (name="capabilities", value="ablFilter,top,skip,id,orderBy").
METHOD PUBLIC VOID ReadAnalistas(
INPUT filter AS CHARACTER,
OUTPUT DATASET dsAnalistas):
DEFINE VARIABLE hCP AS HANDLE NO-UNDO.
hCP = SESSION:CURRENT-REQUEST-INFO:GetClientPrincipal().
MESSAGE "Username: " + hCP:QUALIFIED-USER-ID + " - " + hCP:DOMAIN-NAME.
/*IF NOT SET-DB-CLIENT(hCP) THEN
DO:
MESSAGE "User not authorized!".
//QUIT.
END.*/
MESSAGE "USERID: " USERID
VIEW-AS ALERT-BOX.
IF filter BEGINS "~{" THEN
filterOpenEdge:JFPFillMethod(filter,
TEMP-TABLE ttAnalistas:HANDLE:DEFAULT-BUFFER-HANDLE,
BUFFER Analistas:HANDLE,
DATA-SOURCE srcAnalistas:HANDLE,
DATASET dsAnalistas:HANDLE,
"Analistas",
iSeq).
ELSE
DO:
BUFFER ttAnalistas:HANDLE:BATCH-SIZE = 0.
BUFFER ttAnalistas:SET-CALLBACK ("AFTER-ROW-FILL", "AddIdField").
SUPER:ReadData(filter).
END.
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Create one or more new records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="create", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID CreateAnalistas(INPUT-OUTPUT DATASET dsAnalistas):
SUPER:CreateData(DATASET dsAnalistas BY-REFERENCE).
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Update one or more records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="update", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID UpdateAnalistas(INPUT-OUTPUT DATASET dsAnalistas):
SUPER:UpdateData(DATASET dsAnalistas BY-REFERENCE).
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Delete a record
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="delete", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID DeleteAnalistas(INPUT-OUTPUT DATASET dsAnalistas):
SUPER:DeleteData(DATASET dsAnalistas BY-REFERENCE).
IF ERROR-STATUS:ERROR THEN
DO:
UNDO, THROW NEW Progress.Lang.AppError(ERROR-STATUS:GET-MESSAGE(1), ERROR-STATUS:GET-NUMBER(1)).
END.
END METHOD.
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="invoke", URI="/count?filter=~{filter~}", alias="", mediaType="application/json").
METHOD PUBLIC VOID count( INPUT filter AS CHARACTER, OUTPUT numRecs AS INTEGER):
filterOpenEdge:JFPCountMethod( INPUT filter,
INPUT TEMP-TABLE ttAnalistas:HANDLE:DEFAULT-BUFFER-HANDLE,
INPUT "Analistas",
INPUT BUFFER Analistas:HANDLE,
OUTPUT numRecs).
END METHOD.
METHOD PUBLIC VOID AddIdField (INPUT DATASET dsAnalistas):
ASSIGN
ttAnalistas.id = STRING(ROWID(Analistas))
iSeq = iSeq + 1
ttAnalistas.seq = iSeq.
END METHOD.
DESTRUCTOR PUBLIC Analistas ( ):
END DESTRUCTOR.
END CLASS.
Best Regards,
William
Hi Martin.
The "AddIdField" is a method to add values to fields (id and seq) in temp-table when you are doing a server filtering. This method is a callback of Read method. More info: documentation.progress.com/.../index.html
You are trying to create Id for a new record (Create method). To do this you could write you logic at the Create Method or in a Create Trigger of Table.
Best Regards,
William Pavei Antero
Hello,
Please notice that when using a database create trigger, you may want to add the auto generated field to the skip list defined in the Business Entity.
Example:
cSkipListArray[1] = "CustNum".
I hope this helps.
I have some problems maybe with create method. This is the way I made it working, but I am not sure how good it is. But when I use cSkipListArray[1] = "ClientNum". it stop working. The problem is: {"_retVal":"","_errors":[{"_errorMsg":"** Client already exists with ClientNum 0. (132)","_errorNum":0}]}
/*------------------------------------------------------------------------
File : AdvClients
Syntax :
Author(s) : Administrator
Created : Wed Apr 05 15:10:05 EEST 2017
Notes :
----------------------------------------------------------------------*/
@program FILE(name="AdvClients.cls", module="AppServer").
@openapi.openedge.export FILE(type="REST", executionMode="singleton", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resource FILE(name="AdvClients", URI="/AdvClients", schemaName="dsClient", schemaFile="CtcIdea\AppServer\advclients.i").
USING Progress.Lang.*.
USING OpenEdge.BusinessLogic.BusinessEntity FROM PROPATH.
USING Progress.Json.ObjectModel.*.
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS AdvClients INHERITS BusinessEntity:
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
{"advclients.i"}
DEFINE DATA-SOURCE srcClient FOR projects.Client.
DEFINE VARIABLE iSeq AS INTEGER NO-UNDO.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
CONSTRUCTOR PUBLIC AdvClients():
DEFINE VAR hDataSourceArray AS HANDLE NO-UNDO EXTENT 1.
DEFINE VAR cSkipListArray AS CHAR NO-UNDO EXTENT 1.
SUPER (DATASET dsClient:HANDLE).
/* Data Source for each table in dataset. Should be in table order as defined
in DataSet */
hDataSourceArray[1] = DATA-SOURCE srcClient:HANDLE.
/* Skip-list entry for each table in dataset. Should be in temp-table order
as defined in DataSet */
/* Each skip-list entry is a comma-separated list of field names, to be
ignored in create stmt */
cSkipListArray[1] = "".
THIS-OBJECT:ProDataSource = hDataSourceArray.
THIS-OBJECT:SkipList = cSkipListArray.
END CONSTRUCTOR.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
METHOD PRIVATE VOID JFPFillMethod(INPUT filter AS CHARACTER):
DEFINE VARIABLE jsonParser AS ObjectModelParser NO-UNDO.
DEFINE VARIABLE jsonObject AS JsonObject NO-UNDO.
DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
DEFINE VARIABLE lUseReposition AS LOGICAL NO-UNDO.
DEFINE VARIABLE iCount AS INTEGER NO-UNDO.
DEFINE VARIABLE ablFilter AS CHARACTER NO-UNDO.
DEFINE VARIABLE id AS CHARACTER INITIAL ? NO-UNDO.
DEFINE VARIABLE iMaxRows AS INTEGER INITIAL ? NO-UNDO.
DEFINE VARIABLE iSkipRows AS INTEGER INITIAL ? NO-UNDO.
DEFINE VARIABLE cOrderBy AS CHARACTER INITIAL "" NO-UNDO.
/* purge any existing data */
EMPTY TEMP-TABLE ttClient.
jsonParser = NEW ObjectModelParser().
jsonObject = CAST(jsonParser:Parse(filter), jsonObject).
iMaxRows = jsonObject:GetInteger("top") NO-ERROR.
iSkipRows = jsonObject:GetInteger("skip") NO-ERROR.
ablFilter = jsonObject:GetCharacter("ablFilter") NO-ERROR.
id = jsonObject:GetCharacter("id") NO-ERROR.
cOrderBy = jsonObject:GetCharacter("orderBy") NO-ERROR.
cWhere = "WHERE " + ablFilter NO-ERROR.
IF cOrderBy > "" THEN DO:
cOrderBy = REPLACE(cOrderBy, ",", " by ").
cOrderBy = "by " + cOrderBy + " ".
/* NOTE: id and seq fields should be removed from
cWhere and cOrderBy */
cOrderBy = REPLACE(cOrderBy, "by id desc", "").
cOrderBy = REPLACE(cOrderBy, "by id ", "").
cOrderBy = REPLACE(cOrderBy, "by seq desc", "").
cOrderBy = REPLACE(cOrderBy, "by seq ", "").
END.
lUseReposition = iSkipRows <> ?.
IF iMaxRows <> ? AND iMaxRows > 0 THEN DO:
BUFFER ttClient:HANDLE:BATCH-SIZE = iMaxRows.
END.
ELSE DO:
IF id > "" THEN
BUFFER ttClient:HANDLE:BATCH-SIZE = 1.
ELSE
BUFFER ttClient:HANDLE:BATCH-SIZE = 0.
END.
BUFFER ttClient:ATTACH-DATA-SOURCE(DATA-SOURCE srcClient:HANDLE).
IF cOrderBy = ? THEN cOrderBy = "".
cWhere = IF cWhere > "" THEN (cWhere + " " + cOrderBy)
ELSE ("WHERE " + cOrderBy).
DATA-SOURCE srcClient:FILL-WHERE-STRING = cWhere.
IF lUseReposition THEN DO:
hQuery = DATA-SOURCE srcClient:QUERY.
hQuery:QUERY-OPEN.
IF id > "" AND id <> "?" THEN DO:
hQuery:REPOSITION-TO-ROWID(TO-ROWID(id)).
END.
ELSE IF iSkipRows <> ? AND iSkipRows > 0 THEN DO:
hQuery:REPOSITION-TO-ROW(iSkipRows).
IF NOT AVAILABLE Client THEN
hQuery:GET-NEXT() NO-ERROR.
END.
iCount = 0.
REPEAT WHILE NOT hQuery:QUERY-OFF-END AND iCount < iMaxRows:
hQuery:GET-NEXT () NO-ERROR.
IF AVAILABLE Client THEN DO:
CREATE ttClient.
BUFFER-COPY Client TO ttClient.
ASSIGN ttClient.id = STRING(ROWID(Client))
iSeq = iSeq + 1
ttClient.seq = iSeq.
END.
iCount = iCount + 1.
END.
END.
ELSE DO:
IF id > "" THEN DATA-SOURCE srcClient:RESTART-ROWID(1)
= TO-ROWID ((id)).
BUFFER ttClient:SET-CALLBACK ("AFTER-ROW-FILL", "AddIdField").
DATASET dsClient:FILL().
END.
FINALLY:
BUFFER ttClient:DETACH-DATA-SOURCE().
END FINALLY.
END METHOD.
METHOD PUBLIC VOID AddIdField (INPUT DATASET dsClient):
ASSIGN ttClient.id = STRING(ROWID(Client))
iSeq = iSeq + 1
ttClient.seq = iSeq.
END.
/*------------------------------------------------------------------------------
Purpose: Get one or more records, based on a filter string
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="read", URI="?filter=~{filter~}", alias="", mediaType="application/json").
@openapi.openedge.method.property (name="mappingType", value="JFP").
@openapi.openedge.method.property (name="capabilities", value="ablFilter,top,skip,id,orderBy").
METHOD PUBLIC VOID ReadClients(
INPUT filter AS CHARACTER,
OUTPUT DATASET dsClient):
IF filter BEGINS "~{" THEN
THIS-OBJECT:JFPFillMethod (INPUT filter).
ELSE DO:
BUFFER ttClient:HANDLE:BATCH-SIZE = 0.
BUFFER ttClient:SET-CALLBACK ("AFTER-ROW-FILL", "AddIdField").
SUPER:ReadData(filter).
END.
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Create one or more new records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="create", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID CreateClients(INPUT-OUTPUT DATASET dsClient):
define buffer bClient for Client.
define variable itemp as int no-undo.
find last bClient use-index clientnum exclusive-lock no-error.
if not available bclient then itemp = 1.
else itemp = bclient.clientnum + 1.
dataset dsClient::ttClient:FIND-FIRST ().
if DATASET dsClient::ttClient::clientnum = 0 then DATASET dsClient::ttClient::clientnum = itemp.
SUPER:CreateData(DATASET dsClient BY-REFERENCE).
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Update one or more records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="update", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID UpdateClients(INPUT-OUTPUT DATASET dsClient):
SUPER:UpdateData(DATASET dsClient BY-REFERENCE).
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Delete a record
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="delete", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID DeleteClients(INPUT-OUTPUT DATASET dsClient):
SUPER:DeleteData(DATASET dsClient BY-REFERENCE).
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Submit a record
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="submit", URI="/SubmitClients (IN-OUT dataset)", alias="", mediaType="application/json").
METHOD PUBLIC VOID SubmitClients(INPUT-OUTPUT DATASET dsClient):
/* Calling extending class's CUD methods instead of SUPER:Submit() in case
customized functionality was added.
Do deletes first, next modifies, and finally creates */
THIS-OBJECT:DeleteClients(DATASET dsClient).
THIS-OBJECT:UpdateClients(DATASET dsClient).
THIS-OBJECT:CreateClients(DATASET dsClient).
END METHOD.
/* ----------------------------------------- */
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="invoke", URI="/count?filter=~{filter~}", alias="", mediaType="application/json").
METHOD PUBLIC VOID count( INPUT filter AS CHARACTER, OUTPUT numRecs AS INTEGER):
DEFINE VARIABLE jsonParser AS ObjectModelParser NO-UNDO.
DEFINE VARIABLE jsonObject AS JsonObject NO-UNDO.
DEFINE VARIABLE ablFilter AS CHARACTER NO-UNDO.
DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
DEFINE VARIABLE qh AS HANDLE NO-UNDO.
IF filter BEGINS "WHERE " THEN
cWhere = filter.
ELSE IF filter BEGINS "~{" THEN
DO:
jsonParser = NEW ObjectModelParser().
jsonObject = CAST(jsonParser:Parse(filter), jsonObject).
ablFilter = jsonObject:GetCharacter("ablFilter") NO-ERROR.
cWhere = "WHERE " + ablFilter.
END.
ELSE IF filter NE "" THEN
DO:
/* Use filter as WHERE clause */
cWhere = "WHERE " + filter.
END.
CREATE QUERY qh.
qh:SET-BUFFERS(BUFFER Client:HANDLE).
qh:QUERY-PREPARE("PRESELECT EACH Client " + cWhere).
qh:QUERY-OPEN ().
numRecs = qh:NUM-RESULTS.
END METHOD.
END CLASS.
Hi Martin.
Have you write the code to assign the ClientNum in a CreateTrigger of your table?
/*------------------------------------------------------------------------ File : CreateAnalistas.p Purpose : Syntax : Description : Trigger Create Analistas Author(s) : William Pavei Antero Created : Thu Mar 09 16:13:45 BRT 2017 Notes : ----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ BLOCK-LEVEL ON ERROR UNDO, THROW. /* ******************** Preprocessor Definitions ******************** */ /* *************************** Main Block *************************** */ TRIGGER PROCEDURE FOR CREATE OF Analistas. ASSIGN Analistas.IdAnalista = REPLACE(GUID(GENERATE-UUID), "-", "").
/*------------------------------------------------------------------------
File : Analistas
Syntax :
Author(s) : wantero
Created : Thu Feb 16 12:27:38 BRST 2017
Notes :
----------------------------------------------------------------------*/
@program FILE(name="Analistas.cls", module="AppServer").
@openapi.openedge.export FILE(type="REST", executionMode="singleton", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resource FILE(name="Analistas", URI="/Analistas", schemaName="dsAnalistas", schemaFile="SGASP/src/AppServer/analistas.i").
USING Progress.Lang.*.
USING OpenEdge.BusinessLogic.BusinessEntity.
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS Analistas INHERITS BusinessEntity:
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
{"analistas.i"}
DEFINE DATA-SOURCE srcAnalistas FOR sgasp.Analistas.
DEFINE VARIABLE filterOpenEdge AS FilterOpenEdge NO-UNDO.
DEFINE VARIABLE iSeq AS INTEGER NO-UNDO.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
CONSTRUCTOR PUBLIC Analistas():
DEFINE VAR hDataSourceArray AS HANDLE NO-UNDO EXTENT 1.
DEFINE VAR cSkipListArray AS CHAR NO-UNDO EXTENT 1.
SUPER (DATASET dsAnalistas:HANDLE).
/* Instancia a classe de filtro */
filterOpenEdge = NEW FilterOpenEdge().
/* Data Source for each table in dataset. Should be in table order as defined
in DataSet */
hDataSourceArray[1] = DATA-SOURCE srcAnalistas:HANDLE.
/* Skip-list entry for each table in dataset. Should be in temp-table order
as defined in DataSet */
/* Each skip-list entry is a comma-separated list of field names, to be
ignored in create stmt */
cSkipListArray[1] = "IdAnalista".
THIS-OBJECT:ProDataSource = hDataSourceArray.
THIS-OBJECT:SkipList = cSkipListArray.
END CONSTRUCTOR.
/*------------------------------------------------------------------------------
Purpose: Get one or more records, based on a filter string
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="read", URI="?filter=~{filter~}", alias="", mediaType="application/json").
@openapi.openedge.method.property (name="mappingType", value="JFP").
@openapi.openedge.method.property (name="capabilities", value="ablFilter,top,skip,id,orderBy").
METHOD PUBLIC VOID ReadAnalistas(
INPUT filter AS CHARACTER,
OUTPUT DATASET dsAnalistas):
DEFINE VARIABLE hCP AS HANDLE NO-UNDO.
hCP = SESSION:CURRENT-REQUEST-INFO:GetClientPrincipal().
MESSAGE "Username: " + hCP:QUALIFIED-USER-ID + " - " + hCP:DOMAIN-NAME.
/*IF NOT SET-DB-CLIENT(hCP) THEN
DO:
MESSAGE "User not authorized!".
//QUIT.
END.*/
MESSAGE "USERID: " USERID
VIEW-AS ALERT-BOX.
IF filter BEGINS "~{" THEN
filterOpenEdge:JFPFillMethod(filter,
TEMP-TABLE ttAnalistas:HANDLE:DEFAULT-BUFFER-HANDLE,
BUFFER Analistas:HANDLE,
DATA-SOURCE srcAnalistas:HANDLE,
DATASET dsAnalistas:HANDLE,
"Analistas",
iSeq).
ELSE
DO:
BUFFER ttAnalistas:HANDLE:BATCH-SIZE = 0.
BUFFER ttAnalistas:SET-CALLBACK ("AFTER-ROW-FILL", "AddIdField").
SUPER:ReadData(filter).
END.
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Create one or more new records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="create", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID CreateAnalistas(INPUT-OUTPUT DATASET dsAnalistas):
SUPER:CreateData(DATASET dsAnalistas BY-REFERENCE).
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Update one or more records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="update", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID UpdateAnalistas(INPUT-OUTPUT DATASET dsAnalistas):
SUPER:UpdateData(DATASET dsAnalistas BY-REFERENCE).
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Delete a record
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="delete", URI="", alias="", mediaType="application/json").
METHOD PUBLIC VOID DeleteAnalistas(INPUT-OUTPUT DATASET dsAnalistas):
SUPER:DeleteData(DATASET dsAnalistas BY-REFERENCE).
IF ERROR-STATUS:ERROR THEN
DO:
UNDO, THROW NEW Progress.Lang.AppError(ERROR-STATUS:GET-MESSAGE(1), ERROR-STATUS:GET-NUMBER(1)).
END.
END METHOD.
@openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="invoke", URI="/count?filter=~{filter~}", alias="", mediaType="application/json").
METHOD PUBLIC VOID count( INPUT filter AS CHARACTER, OUTPUT numRecs AS INTEGER):
filterOpenEdge:JFPCountMethod( INPUT filter,
INPUT TEMP-TABLE ttAnalistas:HANDLE:DEFAULT-BUFFER-HANDLE,
INPUT "Analistas",
INPUT BUFFER Analistas:HANDLE,
OUTPUT numRecs).
END METHOD.
METHOD PUBLIC VOID AddIdField (INPUT DATASET dsAnalistas):
ASSIGN
ttAnalistas.id = STRING(ROWID(Analistas))
iSeq = iSeq + 1
ttAnalistas.seq = iSeq.
END METHOD.
DESTRUCTOR PUBLIC Analistas ( ):
END DESTRUCTOR.
END CLASS.
Best Regards,
William