Inicio rápido de IA
Este recorrido te lleva de una carpeta vacía a un portal en funcionamiento donde los clientes inician sesión y trabajan con sus propios casos de soporte — preguntando a un agente de codificación de IA en lugar de escribirlo a mano. Cada paso te da un prompt para pegar, qué hará el agente con él y qué comprobar antes de continuar. El ejemplo utiliza la tabla de casos (incident) que viene con el Servicio de Atención al Cliente de Dynamics 365; con una tabla propia, cada prompt funciona igual.
Antes de empezar
- El SDK .NET 10, y Node.js si eliges la plantilla React.
- Un entorno Dataverse en el que eres Administrador de Sistemas. Utiliza un entorno de desarrollo o sandbox para esta guía.
- Permiso para crear registros de aplicaciones en el tenant Entra de ese entorno.
- Una dirección para el correo electrónico del portal — confirmaciones de registro y restablecimiento de contraseña — con un buzón compartido para él en Exchange Online, que no necesita licencia. Aprobar la dirección requiere un Administrador Global de Office 365 o un Administrador de Exchange.
- Un agente de codificación de IA que soporta MCP. Los comandos a continuación son para Claude Code; la página del servidor MCP tiene la configuración para Visual Studio, VS Code y Cursor.
Cómo funciona esto
Dos cosas permiten que un agente haga esto bien en lugar de ser solo plausible: el servidor MCP de Power Portals Pro, que lee tu entorno Dataverse real y realiza los cambios de configuración que necesita un portal, y las instrucciones que cada proyecto generado envía para los agentes.
- Cada cambio te lo pide primero. Antes de que se registre una aplicación, se cree el usuario de la aplicación o un rol de seguridad, se concedan privilegios o se instale una solución, el agente te muestra lo que está a punto de ocurrir — la acción, el objetivo, el coste, el efecto y cómo deshacerlo — y luego lo apruebas o rechazas en una sola línea. Lee los detalles: son tu paso de revisión.
- El proyecto aporta el conocimiento necesario. Un proyecto generado incluye una
AGENTS.mdy tres habilidades —set-up-portal,secure-a-tableyadd-table-pages— que indican al agente qué preguntas hacer y en qué orden. No necesitas nombrarlas; las preguntas que aparecen a continuación son suficientes para que el agente elija la adecuada. - Los prompts son un punto de partida. Ponlos con tus propias palabras si quieres. Lo que importa es lo que dicen: para quién es el portal, qué datos deberían ver esas personas y qué pueden hacer con ellos.
1. Instalar el servidor MCP
Instálalo una vez por máquina, en el ámbito de usuario, para que esté disponible en todas las carpetas — incluida la vacía en la que vas a crear el proyecto:
claude mcp add --scope user powerportalspro -- dnx PowerPortalsPro.Mcp --yes
dnxviene con el SDK .NET 10. Reinicia tu agente si ya estaba en marcha, luego comprueba que el servidor está ahí preguntando algo que solo él pueda responder, como "usar get_component_api para listar los parámetros de MainGrid".
2. Crea una carpeta e inicia sesión
Crea la carpeta en la que estará tu portal y inicia sesión desde dentro de ella — una vez en tu entorno Dataverse y otra en Azure, que es a través de donde se crean los registros de aplicaciones en el paso 4:
mkdir C:\Code\Contoso.Portal
cd C:\Code\Contoso.Portal
dnx PowerPortalsPro.Mcp login --environment https://yourorg.crm.dynamics.com
dnx PowerPortalsPro.Mcp azure login
Ambos inicios de sesión pertenecen a esta carpeta, no a la máquina. Escriben .ppp/mcp.json aquí, nombrando el entorno y el tenant, y mantienen tus tokens en tu perfil de usuario, para que un proyecto en otra carpeta pueda apuntar a otro cliente al mismo tiempo. Ambos usan un código de dispositivo, así que puedes terminarlos en tu teléfono. Si tu cuenta ve varias suscripciones a Azure, no necesitas elegir una todavía; eso solo importa una vez que despliegues. Luego inicia tu agente en esta carpeta.
3. Crear el proyecto
Dile al agente qué estás construyendo — qué stack, React o Blazor, y quién iniciará sesión:
Crea un nuevo portal Power Portals Pro en esta carpeta llamada Contoso.Portal, usando la plantilla React. Es para nuestros clientes, que se registrarán e iniciarán sesión con sus propias cuentas.
El agente instala las plantillas del proyecto si faltan, pregunta sobre cualquier cosa que no pueda saber de tu solicitud y ejecuta dotnet new. Cada cliente se convierte en un contacto en Dataverse, y lo que pueden ver se decide por los registros de seguridad en los archivos del Program.csproyecto . Ese es el modelo de seguridad por defecto de la plantilla, y el que utiliza el resto de esta guía. Cualquiera de las dos pilas funciona; cada prompt posterior es igual.
Nota
Reinicia tu agente en la misma carpeta una vez que el proyecto exista. El proyecto trae su propio
.mcp.json, que fija el servidor MCP a la versión que coincide con sus paquetes, junto con sus habilidades yAGENTS.md— y la mayoría de los agentes solo las leen cuando empiezan. Aprueba el servidor MCP del proyecto si tu agente lo pide.
4. Conéctalo a Dataverse
Un nuevo proyecto no comenzará hasta que pueda llegar a Dataverse. Pide al agente que lo configure:
Configura este portal contra mi entorno Dataverse para que funcione localmente. No le des al usuario de la aplicación Administrador de Sistema: usa el rol Power Portals Pro, además de uno propio para nuestras tablas. Envía el correo del portal desde noreply@contoso.com.
El agente sigue la habilidad del set-up-portal proyecto, empezando por check_setup ver qué falta. Espera aprobar cada una de estas cosas:
- La solución gestionada — las tablas Power Portals Pro, la comprobación de licencias y el rol de seguridad de usuario de Power Portals Pro Application .
- Un registro en la app de Entra que el portal conecta a Dataverse como tal. Su secreto de cliente va directamente a los secretos de usuario del proyecto, nunca a la conversación.
- El usuario de la aplicación Dataverse para ese registro, con el rol de usuario de la aplicación Power Portals Pro y el perfil de seguridad de columna que necesita el framework, además de un rol de seguridad vacío propio. El rol de Power Portals Pro cubre solo las tablas propias del framework; tus tablas van en tu rol, en el paso 6.
- Un segundo registro de aplicación para "Iniciar sesión con Microsoft" — solo si quieres ese botón. Los clientes con sus propias cuentas no lo necesitan.
- Una cola de correo electrónico desde la que se envía el correo de registro y restablecimiento de contraseña. El agente aprueba su dirección y ejecuta Test & Enable en su buzón. Dos cosas pueden quedarte en manos: la dirección necesita un buzón en Exchange Online — un buzón compartido, que no necesita licencia — y aprobarla necesita un Administrador Global de Office 365 o un Administrador de Exchange. Si falta alguno de los dos, el agente dice cuál; arréglalo y pide al agente que ejecute el paso de nuevo.
La configuración de conexión aparece en los secretos de usuario del proyecto a medida que se completa cada paso. El agente termina ejecutándose check_setup de nuevo; una vez limpio, ejecuta el proyecto — F5, o dotnet run en el proyecto servidor — y verás la página principal y las páginas de muestra de la plantilla.
5. Decidir qué deben ver los clientes
Describe el resultado que quieres en términos empresariales y deja que el agente encuentre la tabla. Preguntar antes de que se escriba algo merece la pena: el agente lee tu entorno, así que sugiere lo que realmente hay ahí, incluyendo tus propias tablas y columnas personalizadas.
Los clientes que inicien sesión deben ver los casos de soporte que han planteado, abrir uno para ver sus detalles y registrar un nuevo caso. ¿Qué tabla y columnas deberíamos usar? No cambies nada todavía.
Espera que busque la tabla con list_tables y describe_table, lea sus vistas con list_views, y vuelva con la tabla de casos (incident), la consulta que vincula un caso con su cliente (customerid), y las columnas que mostrar y editar. Ajusta esa lista ahora: decide qué publica el portal.
6. Asegura la mesa
Un portal no muestra nada que no se le haya dicho que muestre: hasta que se registre una tabla, sus páginas devolven 403 o una cuadrícula vacía. Pide al agente que abra la tabla — solo en la medida en que pretendas:
Asegurar la tabla de casos: los clientes con inicio de sesión solo pueden leer, crear y editar sus propios casos, con las columnas que acordamos. Eligen la prioridad al registrar un caso pero no pueden cambiarla después. Dar a nuestro propio rol de seguridad los privilegios que el usuario de la aplicación necesita en los casos.
El agente trabaja a través de la habilidad del secure-a-table proyecto, confirmando para quién es el acceso, qué filas, qué operaciones y qué columnas. No te saltes ninguna: cada respuesta cambia lo que se publica.
Luego escribe el registro en el archivo del proyecto Program.csdel servidor. Para este ejemplo, espera algo como:
builder.Services.AddTableAccess("incident", t => t
.ForSignedInUsers()
.RowsOwnedByContact("customerid")
.Allow(TableSecurityPermission.Read | TableSecurityPermission.Create | TableSecurityPermission.Write)
.Reading("title", "ticketnumber", "prioritycode", "statuscode", "createdon", "description")
.Writing("title", "description")
.WritingOnCreate("prioritycode"));
RowsOwnedByContact("customerid") limita cada consulta a los propios casos del contacto iniciado sesión y lo convierte en el cliente de un caso que crea. Las columnas son opt-in: cualquier cosa que no esté nombrada Reading se retiene, y solo se pueden cambiar las columnas Writing . WritingOnCreate Cubre la prioridad — establecida cuando se registra el caso, y a partir de entonces solo lectura. La seguridad cubre todas las opciones.
El propio papel del usuario de la aplicación
El registro decide lo que puede hacer cada cliente, pero el portal sigue comunicándose con Dataverse como su usuario de la aplicación, y ese usuario necesita privilegios en la mesa en sí. Ellos van en el rol de seguridad tuyo desde el paso 4, nunca en el rol Power Portals Pro. El agente:
- Encuentra tu rol en el usuario de la aplicación con
get_application_user— y si el paso 4 no creó uno, lo crea concreate_security_roley lo asigna conassign_application_user_role. - Le otorga lo que el registro necesita con
add_table_privileges_to_role: Leer, Crear, Escribir y Añadir enincident, y Añadir acontacten , porque cada caso nuevo está vinculado a un contacto. Luego ejecutacheck_setup, que compara las tablas que usan tus páginas con las tablas que registra tu código.
¿Por qué un papel propio?
El rol Power Portals Pro viene incluido en una solución gestionada. Dataverse te permitiría añadir privilegios, pero la siguiente actualización de esa solución puede devolverla a la forma en que se envió, llevándose tus subvenciones — así que el servidor MCP se niega a añadir privilegios a cualquier rol gestionado. Un rol propio también muestra a quien revise el entorno después exactamente a qué puede llegar el portal.
7. Añadir las páginas
Con la tabla asegurada, pide ambas páginas de una sola vez: la lista en el menú y la página en la que se abre un caso:
Añade una página de Casos al menú principal con una cuadrícula de los casos del cliente iniciado sesión, y la página en la que se abre un caso: título, número de caso, prioridad y estado en una sección, la descripción en otra. Los clientes pueden cambiar el título y la descripción, establecer la prioridad solo al registrar un nuevo caso y nada más.
El agente sigue la habilidad del add-table-pages proyecto. Añade las rutas, una página de lista con una MainGrid, la entrada del menú y una RecordContext página que también se abre vacía para registrar un nuevo caso. Lee identificadores de vistas reales con list_views en lugar de escribir marcadores de posición, y mantiene cada columna dentro de lo que el registro permite leer a los clientes — las vistas estándar de Dynamics incluyen columnas solo para agentes, así que espera que ofrezca vistas propias. Si pides una columna que el registro omita, debería detenerse y preguntar en lugar de ampliar el acceso discretamente. Los registros relacionados pueden ir en la página del caso como subrejillas; nómbralos y asegurará esa tabla también.
8. Pruébalo como dos clientes
El agente no puede iniciar sesión como cliente, así que esta parte es tuya. También es la prueba que más importa: el objetivo del registro es lo que un cliente no puede ver.
- Ejecuta el portal y registra a un cliente. El correo de confirmación llega una vez que el buzón de la cola de correo ha pasado Probar y Habilitar en el paso 4.
- Abrir casos, registrar un nuevo caso y luego volver a abrirlo desde la cuadrícula. Cambiar su título y guardar.
- Cerrar sesión, registrar a un segundo cliente y abrir Casos. La cuadrícula debería estar vacía: el caso del primer cliente es solo suyo. Pegar la dirección de ese caso en esta sesión tampoco debería mostrarla.
Si alguno de los clientes ve algo que no debería, no lo ajustes a mano. Dile al agente lo que viste y lo que esperabas, y deja que siga funcionando secure-a-table .
Si algo no parece bien
- La cuadrícula está vacía o la página devuelve 403. Pide al agente que ejecute
check_setup: una tabla que usan tus páginas sin registro que la cubra está listada allí. De lo contrario, el cliente puede simplemente no tener casos todavía. - Una columna siempre está en blanco. No está en la lista del
Readingregistro. Las columnas se retienen a menos que se mencionen, a propósito. - Cada solicitud de datos devuelve 402. La comprobación de licencia falló — normalmente porque la solución gestionada aún no está instalada.
check_setupLo dice. - El portal no se inicia, o muestra "Algún contenido no está disponible". No puede iniciar sesión en Dataverse. La línea de registro que empieza
Could not connect to Dataversenombra la configuración a corregir ycheck_setuptambién la informa.
¿A dónde ir ahora
- Añade más tablas de la misma manera: paso 5 para elegir, paso 6 para asegurar, paso 7 para las páginas.
- Da a algunos clientes más acceso que a otros con roles en portales — pide al agente un puesto como el de gestor de casos que vea todos los casos de la empresa del cliente. La seguridad explica cómo los roles se suman a los registros en todo el portal.
- Desplegarlo. "Desplegar este portal en Azure" inicia el despliegue de Azure, con su propio inicio de sesión y un precio por cada recurso antes de que se cree.
- ¿Prefieres los roles web y permisos de tabla de Power Pages? Crea el proyecto con
--EnableEnhancedAuthorization true. El acceso entonces proviene de roles de seguridad de Dataverse en lugar deProgram.cs— véase Seguridad de Dataverse.
