Paso 1: establecer un entorno de desarrollo local
Antes de comenzar, asegúrese de haber completado los requisitos previos.
Abra una ventana de línea de comando e instale el
cds
equipos desarrollados en todo el mundo ejecutando el siguiente comando:npm i -g @sap/cds-dk
Este proceso tarda varios minutos en instalar el
cds
comando, que utilizará en los siguientes pasos.En MacOS / Linux, debe seguir los pasos descritos aquí.
Si una persona es mayor
@sap/cds
paquete ya instalado en su máquina, primero debe eliminarlo; si es así, se le indicará que lo haga.Si tiene problemas, consulte el Guía para resolver problemas en la documentación de CAP para más detalles.
Para verificar que la instalación fue exitosa, ejecute
cds
sin argumentos:cds
Esto enumera lo que está disponible
cds
pedidos. Por ejemplo, usecds version
para comprobar la versión que ha instalado. Para conocer la última versión, consulte la Notas de lanzamiento para la PAC.
Hecho
Inicie sesión para responder la pregunta
Paso 2: Instale la extensión de código de Visual Studio
Vamos Mercado de Visual Studio.
Escoger Instalación.
Visual Studio Code abre la página de datos de extensiones.
- En VS Code seleccione Instalación para habilitar la extensión para SAP CDS Language Support.
Si la extensión ya está instalada y habilitada en VS Code, se actualizará automáticamente.
Obtenga más información sobre las funciones de esta breve historia. manifestación y ver el funciones y comandos en la documentación CAP.
Hecho
Inicie sesión para responder la pregunta
Paso 3: iniciar el proyecto
Con su herramienta de línea de comandos CDS instalada, ahora puede crear un nuevo proyecto basado en CBT, en forma de un nuevo directorio con varios ajustes preestablecidos.
Abra una ventana de línea de comando y ejecute el siguiente comando en una carpeta de su elección para crear el proyecto:
cds init my-bookshop
Esto crea una carpeta
my-bookshop
en el directorio actual.Abra Visual Studio Code, vaya a Archivo → Carpeta abierta y seleccione el
my-bookshop
carpeta.Vamos Terminal → Nueva terminal para abrir una ventana de línea de comandos dentro de Visual Studio Code y ejecutar el siguiente comando en el nivel raíz de su proyecto:
npm install
En la ventana de la línea de comandos, ejecute lo siguiente:
cds watch
Este comando intenta
cds
servidor. Siempre que alimente su proyecto con contenido nuevo, por ejemplo, agregando o modificando.cds
,.json
, o.js
archivos, el servidor se reinicia automáticamente para servir el nuevo contenido.Como no hay contenido en el proyecto hasta ahora, permanece esperando contenido con un mensaje como se muestra:
cds serve all --with-mocks --in-memory? ( watching: cds,csn,csv,ts,mjs,cjs,js,json,properties,edmx,xml,env... ) No models found in db/,srv/,app/,schema,services. Waiting for some to arrive...
Abra una ventana de línea de comando y ejecute el siguiente comando en una carpeta de su elección para crear el proyecto:
cds init my-bookshop
Esto crea una carpeta
my-bookshop
en el directorio actual.Abra Visual Studio Code, vaya a Archivo → Abierto y seleccione el
my-bookshop
carpeta.Vamos Mirar → Paleta de pedidos → Terminal: cree una nueva terminal integrada para abrir una ventana de línea de comandos dentro de Visual Studio Code y ejecutar el siguiente comando en el nivel raíz de su proyecto:
npm install
- En la ventana de la línea de comandos, ejecute lo siguiente:
cds watch
Este comando intenta
cds
servidor. Siempre que alimente su proyecto con contenido nuevo, por ejemplo, agregando o modificando.cds
,.json
, o.js
archivos, el servidor se reinicia automáticamente para servir el nuevo contenido.Como no hay contenido en el proyecto hasta ahora, permanece esperando contenido con un mensaje como se muestra:
cds serve all --with-mocks --in-memory? ( watching: cds,csn,csv,ts,mjs,cjs,js,json,properties,edmx,xml,env... ) No models found in db/,srv/,app/,schema,services. Waiting for some to arrive...
Hecho
Inicie sesión para responder la pregunta
Paso 4: Defina su primer servicio
Después de iniciar el proyecto, debería ver las siguientes carpetas vacías:
app
: para artefactos de la interfaz de usuariodb
: para el modelo de esquema de nivel de base de datossrv
: para la capa de servicio definida
Vamos a alimentarlo agregando un modelo de dominio simple. Sa
srv
seleccione la carpeta Archivo nuevo en Visual Studio Code y cree un nuevo archivo llamadocat-service.cds
.Agregue el siguiente código al archivo
cat-service.cds
:using { Country, managed } from '@sap/cds/common'; service CatalogService { entity Books { key ID : Integer; title : localized String; author : Association to Authors; stock : Integer; } entity Authors { key ID : Integer; name : String; books : Association to many Books on books.author = $self; } entity Orders : managed { key ID : UUID; book : Association to Books; country : Country; amount : Integer; } }
Recuerde guardar sus archivos (atajo de teclado CTRL + S.).
Una vez que haya guardado su archivo, seguirá ejecutándose
cds watch
reacciona inmediatamente a algunas salidas nuevas como se muestra a continuación:[cds] - using bindings from: { registry: '~/.cds-services.json' } [cds] - connect to db > sqlite { database: ':memory:' } /> successfully deployed to sqlite in-memory db [cds] - serving CatalogService { at: '/catalog' } [cds] - launched in: 1557.190ms [cds] - server listening on { url: 'http://localhost:4004' } [ terminate with ^C ]
Esto significa,
cds watch
detectar los cambios isrv/cat-service.cds
y recordó automáticamente la base de datos SQLite al reiniciar el proceso del servidor.Para probar su servicio, vaya a: http: // localhost: 4004
No verá datos porque aún no ha agregado un modelo de datos. Haga clic en los enlaces proporcionados para ver si el servicio se está ejecutando.
Hecho
Inicie sesión para responder la pregunta
Paso 5: proporcione datos falsos
Agregue la lógica del proveedor de servicios para restaurar datos falsos.
Sa
srv
carpeta, cree un nuevo archivo llamadocat-service.js
.Agregue el siguiente código al archivo
cat-service.js
:module.exports = (srv) => { // Reply mock data for Books... srv.on ('READ', 'Books', ()=>[ { ID:201, title:'Wuthering Heights', author_ID:101, stock:12 }, { ID:251, title:'The Raven', author_ID:150, stock:333 }, { ID:252, title:'Eleonora', author_ID:150, stock:555 }, { ID:271, title:'Catweazle', author_ID:170, stock:222 }, ]) // Reply mock data for Authors... srv.on ('READ', 'Authors', ()=>[ { ID:101, name:'Emily Brontë' }, { ID:150, name:'Edgar Allen Poe' }, { ID:170, name:'Richard Carpenter' }, ]) }
Recuerde guardar sus archivos (atajo de teclado CTRL + S.).
Para probar su servicio, haga clic en estos enlaces:
Debe agregar los datos falsos que agregó al
Books
yAuthors
entidades.
Hecho
Inicie sesión para responder la pregunta
Paso 6: agregue un modelo de datos y especifique el servicio de personalización
Para comenzar rápidamente, ya ha agregado una definición de servicio todo en uno simple. Sin embargo, normalmente colocaría las definiciones de una entidad normalizada en un modelo de datos separado y sus servicios revelarían vistas potencialmente desnormalizadas de esas entidades.
Sa
db
seleccione la carpeta Archivo nuevo en Visual Studio Code y cree un nuevo archivo llamadodata-model.cds
.Agregue el siguiente código al archivo
data-model.cds
:namespace my.bookshop; using { Country, managed } from '@sap/cds/common'; entity Books { key ID : Integer; title : localized String; author : Association to Authors; stock : Integer; } entity Authors { key ID : Integer; name : String; books : Association to many Books on books.author = $self; } entity Orders : managed { key ID : UUID; book : Association to Books; country : Country; amount : Integer; }
Abre el archivo
cat-service.cds
y reemplace el código existente:using my.bookshop as my from '../db/data-model'; service CatalogService { entity Books @readonly as projection on my.Books; entity Authors @readonly as projection on my.Authors; entity Orders @insertonly as projection on my.Orders; }
Recuerde guardar sus archivos (atajo de teclado CTRL + S.).
Hecho
Inicie sesión para responder la pregunta
Paso 7: agregue los detalles iniciales
En Visual Studio Code, colocará archivos CSV estándar en la carpeta db/csv
para llenar las tablas de su base de datos con datos iniciales.
Sa
db
carpeta, seleccione Archivo nuevo y encsv/my.bookshop-Authors.csv
para crear una nueva carpetacsv
con el archivo nombradomy.bookshop-Authors.csv
. Agregue lo siguiente al archivo:ID;name 101;Emily Brontë 107;Charlote Brontë 150;Edgar Allen Poe 170;Richard Carpenter
En el recién creado
csv
carpeta, seleccione Archivo nuevo y crea un archivo llamadomy.bookshop-Books.csv
. Agregue lo siguiente al archivo:ID;title;author_ID;stock 201;Wuthering Heights;101;12 207;Jane Eyre;107;11 251;The Raven;150;333 252;Eleonora;150;555 271;Catweazle;170;22
Recuerde guardar sus archivos (atajo de teclado CTRL + S.).
Asegúrese de tener una jerarquía de carpetas ahora
db/csv/...
. Recuerda que elcsv
Los archivos deben tener un nombre similar a las entidades en su modelo de datos y deben estar ubicados dentro deldb/csv
carpeta.Después de agregar estos archivos,
cds watch
el servidor se reinicia con la salida, indicando que los archivos se encontraron y su contenido se cargó automáticamente en la base de datos:[cds] - using bindings from: { registry: '~/.cds-services.json' } [cds] - connect to db > sqlite { database: ':memory:' } > filling my.bookshop.Authors from db/csv/my.bookshop-Authors.csv > filling my.bookshop.Books from db/csv/my.bookshop-Books.csv /> successfully deployed to sqlite in-memory db [cds] - serving CatalogService { at: '/catalog', impl: 'srv/cat-service.js' } [cds] - launched in: 1009.187ms [cds] - server listening on { url: 'http://localhost:4004' } [ terminate with ^C ]
Eliminar el código con datos falsos
cat-service.js
, porque desea cargar los datos desdecsv
archivos.Para probar su servicio, abra un navegador web y vaya a:
http: // localhost: 4004 / catalog / Books
http: // localhost: 4004 / catálogo / Autores
Debido a que ahora tiene una base de datos SQL totalmente capaz con algunos datos iniciales, puede enviar consultas OData complejas, que atienden los proveedores de tipos integrados.
http: // localhost: 4004 / catalog / Authors? $ expansión = libros ($ select = ID, título)
Debería ver un libro llamado Jane Eyre. Si no es así, asegúrese de haber eliminado los datos falsos.
cat-service.js
.
Hecho
Inicie sesión para responder la pregunta
Paso 8: agregue una base de datos continua
Antes de continuar, asegúrese de haber completado los requisitos previos y de tener instalado SQLite (solo para usuarios de Windows).
En lugar de usar memoria, también puede usar bases de datos duraderas.
Ambos
cds watch
correr, presionar CTRL + C. en la línea de comando para detener el servicio.Instalación
SQLite3
paquetes.npm i sqlite3 -D
Implementar el modelo de datos para
SQLite
base de datos:cds deploy --to sqlite:db/my-bookshop.db
Ahora estas creado
SQLite
archivo de base de datos sobredb/my-bookshop.db
.Esta configuración se guarda en su
package.json
como fuente de datos predeterminada. Para una implementación posterior con la configuración predeterminada, todo lo que tiene que hacer es ejecutarcds deploy
.La diferencia con la base de datos de memoria proporcionada automáticamente es que ahora obtiene una base de datos continua almacenada en el archivo local.
Abierto
SQLite
y ver la base de datos recién creada:sqlite3 db/my-bookshop.db -cmd .dump
Si esto no funciona, compruebe si SQLite instalado. En Windows, es posible que deba ingresar la ruta completa a SQLite, por ejemplo:
C:sqlitesqlite3 db/my-bookshop.db -cmd .dump
. Encuentre los pasos sobre cómo instalarlo en la guía de solución de problemas en la sección ¿Cómo puedo instalar SQLite? en la documentación de CAP para más detalles.Interrumpido
SQLite
y vuelva al directorio de su proyecto, presione CTRL + C..Ejecute su servicio.
cds watch
[cds] - using bindings from: { registry: '~/.cds-services.json' } [cds] - connect to db > sqlite { database: 'db/my-bookshop.db' } [cds] - serving CatalogService { at: '/catalog', impl: 'srv/cat-service.js' } [cds] - launched in: 871.970ms [cds] - server listening on { url: 'http://localhost:4004' } [ terminate with ^C ]
Hecho
Inicie sesión para responder la pregunta
Paso 9: Pruebe los controladores de tipo con Postman
Ahora puede ver los controladores genéricos lanzados con CBT en acción.
Abra la aplicación Postman.
Puede utilizar cualquier otro cliente HTTP que no sea Postman.
Haga clic en el siguiente enlace y guarde el archivo en una carpeta de su elección: cartero.json.
En la aplicación Postman, use el Importar botón de la barra de herramientas:
Escoger Importar archivo en el asistente. Haga clic en Selecciona archivos y seleccione el archivo que guardó anteriormente o agréguelo directamente mediante arrastrar y soltar.
En la colección importada, realice las diversas solicitudes en el
metadata
yCRUD
grupos. Todos deben devolver las respuestas correctas.Con la implementación de su servicio actual, simplemente no puede obtenerlo
POST
pedidos. AonGET
oDELETE
si un pedido falla, ya que especificó elOrders
entidad a ser@insertonly
ensrv/cat-service.cds
.
Paso 10: agregar lógica personalizada
En Visual Studio Code, abra el archivo
cat-service.js
y reemplace el código existente:module.exports = (srv) => { const {Books} = cds.entities ('my.bookshop') // Reduce stock of ordered books srv.before ('CREATE', 'Orders', async (req) => { const order = req.data if (!order.amount || order.amount <= 0) return req.error (400, 'Order at least 1 book') const tx = cds.transaction(req) const affectedRows = await tx.run ( UPDATE (Books) .set ({ stock: {'-=': order.amount}}) .where ({ stock: {'>=': order.amount},/*and*/ ID: order.book_ID}) ) if (affectedRows === 0) req.error (409, "Sold out, sorry") }) // Add some discount for overstocked books srv.after ('READ', 'Books', each => { if (each.stock > 111) each.title += ' -- 11% discount!' }) }
Recuerde guardar sus archivos (atajo de teclado CTRL + S.).
Siempre que se crean comandos, se solicita este código. Actualiza el stock de libros en una cierta cantidad, si no quedan suficientes libros.
En Postman, haz el
GET Books
solicitud.Mira el stock de libros
201
.Ejecución de uno de los
POST Orders
solicitud.Esto estimula la lógica anterior y reduce el stock.
Un
GET Books
intentar otra vez.El stock de libros
201
más bajo que nunca.
Hecho
Inicie sesión para responder la pregunta
Danos 55 segundos de tu tiempo para ayudarnos a mejorar