--- title: "Configurar el directorio de funciones" url: https://docs.catalyst.zoho.com/es/tutorials/todo-list/java/configure-function/ description: "Construya una aplicación web de lista de tareas básica, React o Angular con Catalyst Advanced I/O Function y Data Store para anotar y eliminar tareas." last_updated: 2026-11-04T10:10:44Z service: All Services type: tutorial related_links: - name: "Advanced I/O Functions" url: /es/serverless/help/functions/advanced-io/ - name: "Estructura de directorio de funciones" url: /es/cli/v1/project-directory-structure/functions-directory --- # Configurar la función Advanced I/O A continuación, comenzaremos a codificar la aplicación de lista de tareas configurando el componente de función. El [directorio de funciones](https://docs.catalyst.zoho.com/es/cli/v1/project-directory-structure/functions-directory), `functions/ToDoList` contiene: * El archivo principal de función `ToDoList.java` * El archivo de configuración `catalyst-config.json` * Archivos de biblioteca Java en el directorio `lib` * Archivos de dependencias `.classpath` y `.project` Agregará código en el archivo `ToDoList.java`. Las tres APIs en la función Advanced I/O que gestionan el enrutamiento entre el servidor y el Data Store son: * **GET /todo:** Para obtener los elementos de la lista de tareas de la tabla _TodoItems_ en el Data Store * **POST /todo:** Para crear y guardar un nuevo elemento de la lista en el Data Store * **DELETE /todo:** Para eliminar un elemento de la lista del Data Store A continuación, agreguemos el código en el archivo de función. Copie el código Java y péguelo en `ToDoList.java` en el directorio `functions/TodoList` de su proyecto, y guarde el archivo. Puede usar cualquier IDE de su preferencia para trabajar con los archivos de la aplicación. > **Nota**: Revise el código proporcionado en esta sección para asegurarse de que lo comprende completamente. Discutiremos la arquitectura de la función y el cliente en la siguiente sección. **ToDoList.java** ```java import java.util.ArrayList; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import java.io.InputStreamReader; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import com.catalyst.advanced.CatalystAdvancedIOHandler; import com.fasterxml.jackson.databind.ObjectMapper; import com.zc.component.object.ZCObject; import com.zc.component.object.ZCRowObject; import com.zc.component.object.ZCTable; import com.zc.component.zcql.ZCQL; public class ToDoList implements CatalystAdvancedIOHandler { private static final String GET = "GET"; private static final String POST = "POST"; private static final String DELETE = "DELETE"; private JSONObject responseData = new JSONObject(); private static final Logger LOGGER = Logger.getLogger(ToDoList.class.getName()); @SuppressWarnings("unchecked") @Override public void runner(HttpServletRequest request, HttpServletResponse response) throws Exception { try { String uri = request.getRequestURI(); String method = request.getMethod(); // El método GET obtiene datos de la tabla TodoItems en el Data Store. if (method.equals(GET) && uri.equals("/all")) { Integer page = Integer.parseInt(request.getParameter("page")); Integer perPage = Integer.parseInt(request.getParameter("perPage")); ArrayList<ZCRowObject> rowList = ZCQL.getInstance().executeQuery("SELECT COUNT(ROWID) FROM TodoItems"); Integer totalTodos = Integer.parseInt(new ObjectMapper().writeValueAsString(rowList.get(0).get("TodoItems", "COUNT(ROWID)"))); Boolean hasMore = totalTodos > page * perPage; ArrayList<HashMap<String, String>> todoItems = new ArrayList<>(); ZCQL.getInstance().executeQuery(String.format("SELECT ROWID, Notes FROM TodoItems LIMIT %d, %d", (page - 1) * perPage, perPage)).forEach(row -> { HashMap<String, String> item = new HashMap<>(); item.put("id", row.get("TodoItems", "ROWID").toString()); item.put("notes", row.get("TodoItems", "Notes").toString()); todoItems.add(item); }); response.setStatus(200); responseData.put("status", "success"); responseData.put("data", new JSONObject() { { put("hasMore", hasMore); put("todoItems", todoItems); } }); // El método POST agrega un nuevo elemento de tarea a la tabla TodoItems en el Data Store. } else if (method.equals(POST) && uri.equals("/add")) { JSONParser jsonParser = new JSONParser(); ServletInputStream requestBody = request.getInputStream(); JSONObject jsonObject = (JSONObject) jsonParser.parse(new InputStreamReader(requestBody, "UTF-8")); String notes = jsonObject.get("notes").toString(); ZCRowObject row = ZCRowObject.getInstance(); row.set("Notes", notes); ZCRowObject todoItem = ZCObject.getInstance().getTable("TodoItems").insertRow(row); response.setStatus(200); responseData.put("status", "success"); responseData.put("data", new JSONObject() { { put("todoItem", new JSONObject() { { put("id", todoItem.get("ROWID").toString()); put("notes", todoItem.get("Notes").toString()); } }); } }); // El método DELETE elimina un elemento de tarea del Data Store por su ID. } else if (method.equals(DELETE) && uri.matches("/\\d+")) { ZCTable table = ZCObject.getInstance().getTable("TodoItems"); table.deleteRow(Long.parseLong(uri.substring(1))); response.setStatus(200); responseData.put("status", "success"); responseData.put("data", new JSONObject() { { put("todoItem", new JSONObject() { { put("id", uri.substring(1)); } }); } }); } else { response.setStatus(404); responseData.put("status", "failure"); responseData.put("message", "Please check if the URL trying to access is a correct one"); } } catch (Exception e) { LOGGER.log(Level.SEVERE, "Exception in Main", e); responseData.put("status", "failure"); responseData.put("message", "We're unable to process the request."); } response.setContentType("application/json"); response.getWriter().write(responseData.toString()); } } ``` El directorio de funciones está ahora configurado.