<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rick Hoek</title>
    <description>The latest articles on DEV Community by Rick Hoek (@rick_hoek_c401925e5aec039).</description>
    <link>https://dev.to/rick_hoek_c401925e5aec039</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2760122%2F50dd0233-95e9-4403-940f-f03186abd067.png</url>
      <title>DEV Community: Rick Hoek</title>
      <link>https://dev.to/rick_hoek_c401925e5aec039</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rick_hoek_c401925e5aec039"/>
    <language>en</language>
    <item>
      <title>ℹ️REVOLUTION!ℹ️ T-SQL.APP Framework Podcast🎙️</title>
      <dc:creator>Rick Hoek</dc:creator>
      <pubDate>Fri, 31 Jan 2025 14:49:40 +0000</pubDate>
      <link>https://dev.to/rick_hoek_c401925e5aec039/t-sqlapp-framework-guide-4nm1</link>
      <guid>https://dev.to/rick_hoek_c401925e5aec039/t-sqlapp-framework-guide-4nm1</guid>
      <description>&lt;h1&gt;
  
  
  T-SQL Dot App: Comprehensive Framework Guide and Analysis
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://250.tracy.nu/239/storage/0ckodunzzkuq576bh68y6rxj0infztlo" rel="noopener noreferrer"&gt;Listen to the Podcast&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Think of T-SQL Dot App as a universal toolbox for web development - like having a single tool that can handle nearly every job when building a house. Instead of constantly switching between different tools and approaches, T-SQL Dot App unifies most development work into one environment (SQL Server) while automating much of the heavy lifting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F250.tracy.nu%2F239%2Fstorage%2F2mjfuxlw6uljmqki1lt7zz5igiomywyz" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F250.tracy.nu%2F239%2Fstorage%2F2mjfuxlw6uljmqki1lt7zz5igiomywyz" alt="Editing the SQL right inside your Web App" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;INSTANT RESULTS&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F250.tracy.nu%2F239%2Fstorage%2Fpqes7dqbfjqxtxexl9typvixlkvnsfbw" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F250.tracy.nu%2F239%2Fstorage%2Fpqes7dqbfjqxtxexl9typvixlkvnsfbw" alt="Instant results from your IDE into the live Web App" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The New Paradigm
&lt;/h3&gt;

&lt;p&gt;Traditional web applications treat SQL Server merely as a data store - like a chef who only supplies ingredients. T-SQL Dot App inverts this approach, making SQL Server the primary engine of your application - now the chef also handles plating, presentation, and final touches, reducing the need for multiple "cooks" in different kitchens (front-end, back-end, etc.).&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Validation
&lt;/h2&gt;

&lt;p&gt;T-SQL Dot App has proven itself in demanding enterprise environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Powers operations for large import/export firms (€100M+ turnover)&lt;/li&gt;
&lt;li&gt;Successfully running ERP and WMS solutions for 4+ years&lt;/li&gt;
&lt;li&gt;Handles complex, high-volume transactions in perishable goods industry&lt;/li&gt;
&lt;li&gt;Demonstrates enterprise-grade reliability and scalability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Core Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. SQL-First Development Approach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build complete applications using primarily SQL Server and T-SQL&lt;/li&gt;
&lt;li&gt;Create full-featured applications directly from database&lt;/li&gt;
&lt;li&gt;Eliminate separate frontend/backend codebases&lt;/li&gt;
&lt;li&gt;Centralize business logic and data integrity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Built-in UI Generation
&lt;/h3&gt;

&lt;p&gt;Think of this like a 3D printer for your user interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic conversion of database tables to "cards" (UI views)&lt;/li&gt;
&lt;li&gt;UI elements controlled through stored procedures&lt;/li&gt;
&lt;li&gt;400+ built-in UI stored procedures&lt;/li&gt;
&lt;li&gt;Auto-generated forms, CRUD operations, and modals&lt;/li&gt;
&lt;li&gt;Get a working, modern, mobile-responsive interface instantly&lt;/li&gt;
&lt;li&gt;Save enormous time typically spent on building frontend from scratch&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Enterprise-Ready Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Role-based access control&lt;/li&gt;
&lt;li&gt;Business process management&lt;/li&gt;
&lt;li&gt;Audit trailing&lt;/li&gt;
&lt;li&gt;Data change tracking&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;li&gt;External API integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Modern Architecture
&lt;/h3&gt;

&lt;p&gt;Think of it as having a classic, reliable engine (SQL Server) under the hood, but with all the modern comforts in the driver's seat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ReactJS frontend for modern UI/UX&lt;/li&gt;
&lt;li&gt;.NET Core backend enabling cross-platform deployment&lt;/li&gt;
&lt;li&gt;Cross-platform support (Windows/Linux)&lt;/li&gt;
&lt;li&gt;Mobile-responsive design out of the box&lt;/li&gt;
&lt;li&gt;REST API support for integration needs&lt;/li&gt;
&lt;li&gt;Best of both worlds: traditional reliability with modern capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Industry-Specific Achievements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Perishable Goods Sector
&lt;/h3&gt;

&lt;p&gt;Successfully manages unique requirements in fruit and vegetable import/export:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Traceability&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Built-in audit trails&lt;/li&gt;
&lt;li&gt;Data change tracking&lt;/li&gt;
&lt;li&gt;Compliance with food safety regulations&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Rapid Adaptation&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Quick response to market changes&lt;/li&gt;
&lt;li&gt;Tariff adjustment handling&lt;/li&gt;
&lt;li&gt;Supply chain disruption management&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Global Operations&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;li&gt;International trade documentation&lt;/li&gt;
&lt;li&gt;Cross-border compliance&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enterprise Resource Planning (ERP) Implementation
&lt;/h3&gt;

&lt;p&gt;Demonstrates capability in complex business systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Robustness&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Complex business rules handling&lt;/li&gt;
&lt;li&gt;Multi-tenant data management&lt;/li&gt;
&lt;li&gt;Real-time updates&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Performance&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Large dataset management&lt;/li&gt;
&lt;li&gt;Perishable goods tracking&lt;/li&gt;
&lt;li&gt;Cross-border compliance&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration Capabilities&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Customs API connectivity&lt;/li&gt;
&lt;li&gt;IoT sensor integration (cold chain)&lt;/li&gt;
&lt;li&gt;Third-party system compatibility&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementation Example: Multi-Step Forms
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Key Implementation Patterns
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON-based state handling&lt;/li&gt;
&lt;li&gt;Use of sp_api_modal_restart procedure&lt;/li&gt;
&lt;li&gt;FOR JSON PATH pattern for state transitions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bidirectional navigation (forward/back)&lt;/li&gt;
&lt;li&gt;State preservation across steps&lt;/li&gt;
&lt;li&gt;Seamless user experience&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modal Components&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sp_api_modal_text for headings/messages&lt;/li&gt;
&lt;li&gt;sp_api_modal_input for form fields&lt;/li&gt;
&lt;li&gt;sp_api_modal_button for navigation&lt;/li&gt;
&lt;li&gt;sp_api_toast for user feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- T-SQL Dot App Multi-Step Forms Implementation&lt;/span&gt;


&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Confirm&lt;/span&gt; &lt;span class="nb"&gt;BIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;NextButton&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;BackButton&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'User Registration'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;StepTitle&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;SubmitButton&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@Step'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@Name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@Email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@Confirm'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Confirm&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;StepTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONCAT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;' - Step 1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;StepTitle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'h3'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_input&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@Name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Enter name'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_button&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@NextButton'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Next'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;valueout&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;NextButton&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;NextButton&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
    &lt;span class="k"&gt;BEGIN&lt;/span&gt;
        &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONCAT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Welcome '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'! 👋'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_toast&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'btn-success'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;step2Json&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; 
                &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; 
            &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt; &lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WITHOUT_ARRAY_WRAPPER&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_restart&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;step2Json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;END&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;

&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;StepTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONCAT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;' - Step 2'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;StepTitle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'h3'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_input&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@Email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Enter email'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_button&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@BackButton'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Back'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;valueout&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;BackButton&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_button&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@NextButton'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Next'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;valueout&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;NextButton&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;BackButton&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
    &lt;span class="k"&gt;BEGIN&lt;/span&gt;
        &lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;backToStep1Json&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; 
                &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; 
            &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt; &lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WITHOUT_ARRAY_WRAPPER&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_restart&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;backToStep1Json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;END&lt;/span&gt;

    &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;NextButton&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
    &lt;span class="k"&gt;BEGIN&lt;/span&gt;
        &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Email saved! 📧'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_toast&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'btn-success'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;step3Json&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; 
            &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt; &lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WITHOUT_ARRAY_WRAPPER&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_restart&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;step3Json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;END&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;

&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;StepTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONCAT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;' - Review'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;StepTitle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'h3'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONCAT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Name: '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONCAT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Email: '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_button&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@BackButton'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Back'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;valueout&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;BackButton&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_button&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@SubmitButton'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Submit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;valueout&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;SubmitButton&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;BackButton&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
    &lt;span class="k"&gt;BEGIN&lt;/span&gt;
        &lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;backToStep2Json&lt;/span&gt; &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Step&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt; 
            &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt; &lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WITHOUT_ARRAY_WRAPPER&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_restart&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;backToStep2Json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;END&lt;/span&gt;

    &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;SubmitButton&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
    &lt;span class="k"&gt;BEGIN&lt;/span&gt;
        &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Registration complete! ✨'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_toast&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'btn-success'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_clear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;END&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;


&lt;span class="c1"&gt;--Looking at this code, there are a few interesting patterns to note:&lt;/span&gt;

&lt;span class="c1"&gt;--State Management: The code demonstrates proper multi-step form handling in T-SQL Dot App using JSON state management. It maintains state between steps using the sp_api_modal_restart procedure with JSON values, following the required FOR JSON PATH pattern.&lt;/span&gt;
&lt;span class="c1"&gt;--Step Navigation: It implements bidirectional navigation (forward/back) while preserving form values, which is a good practice for user experience. Each step transition carries forward all relevant state data.&lt;/span&gt;
&lt;span class="c1"&gt;--Modal Dialog Components: The code uses several T-SQL Dot App modal components:&lt;/span&gt;


&lt;span class="c1"&gt;--sp_api_modal_text for headings and messages&lt;/span&gt;
&lt;span class="c1"&gt;--sp_api_modal_input for form fields&lt;/span&gt;
&lt;span class="c1"&gt;--sp_api_modal_button for navigation&lt;/span&gt;
&lt;span class="c1"&gt;--sp_api_toast for feedback messages&lt;/span&gt;


&lt;span class="c1"&gt;--Code Organization: It follows T-SQL Dot App mandated practices well:&lt;/span&gt;


&lt;span class="c1"&gt;--All variables declared at the start&lt;/span&gt;
&lt;span class="c1"&gt;--Clear step-based logical structure&lt;/span&gt;
&lt;span class="c1"&gt;--Proper state synchronization after declarations&lt;/span&gt;
&lt;span class="c1"&gt;--Consistent use of Unicode (N prefix)&lt;/span&gt;

&lt;span class="c1"&gt;--One notable pattern is how it handles the email value preservation during back navigation:&lt;/span&gt;
&lt;span class="c1"&gt;--sqlCopy[@Email]=@Email --bewaar de email waarde ook bij back&lt;/span&gt;
&lt;span class="c1"&gt;--This ensures the email field state persists even when going backwards, which is a thoughtful user experience detail.&lt;/span&gt;
&lt;span class="c1"&gt;--The code is a good example of proper T-SQL Dot App implementation, adhering to the framework's core principles while creating an interactive multi-step form interface.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Strategic Benefits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cost Efficiency for Enterprises
&lt;/h3&gt;

&lt;p&gt;Provides advantages over traditional ERP/WMS systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lower licensing costs compared to proprietary platforms&lt;/li&gt;
&lt;li&gt;Reduced development time through automation&lt;/li&gt;
&lt;li&gt;Decreased maintenance overhead&lt;/li&gt;
&lt;li&gt;Single-stack simplicity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Debt Reduction
&lt;/h3&gt;

&lt;p&gt;Eliminates common enterprise challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No fragmented microservices&lt;/li&gt;
&lt;li&gt;No frontend/backend sync issues&lt;/li&gt;
&lt;li&gt;No ORM bottlenecks&lt;/li&gt;
&lt;li&gt;Simplified architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Risk Mitigation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compliance&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Built-in auditing for regulatory requirements&lt;/li&gt;
&lt;li&gt;Comprehensive data tracking&lt;/li&gt;
&lt;li&gt;Security controls&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Business Continuity&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;SQL Server reliability&lt;/li&gt;
&lt;li&gt;Modern frontend durability (React)&lt;/li&gt;
&lt;li&gt;Maintainable architecture&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best-Fit Scenarios
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. SQL Server-Dependent Organizations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ideal for modernizing existing SQL Server investments&lt;/li&gt;
&lt;li&gt;Leverages current team expertise&lt;/li&gt;
&lt;li&gt;Minimizes retraining needs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Rapid Application Development (RAD)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Perfect for MVP creation&lt;/li&gt;
&lt;li&gt;Efficient for internal tool development&lt;/li&gt;
&lt;li&gt;Supports quick iteration cycles&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Compliance-Driven Industries
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Healthcare sector applications&lt;/li&gt;
&lt;li&gt;Financial services systems&lt;/li&gt;
&lt;li&gt;Government agency solutions&lt;/li&gt;
&lt;li&gt;Import/export operations&lt;/li&gt;
&lt;li&gt;Any compliance-heavy environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Infrastructure Benefits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Runs efficiently on SQL Server Express&lt;/li&gt;
&lt;li&gt;Tiny house approach - all necessities built in&lt;/li&gt;
&lt;li&gt;No sprawling infrastructure needed&lt;/li&gt;
&lt;li&gt;Simpler deployments and lower hosting costs&lt;/li&gt;
&lt;li&gt;Fewer moving parts to maintain&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;T-SQL Dot App represents a paradigm shift in web application development, proven through real-world implementations in demanding enterprise environments. Its success in complex industries like perishable goods import/export validates its capability to handle mission-critical operations while maintaining compliance and performance requirements.&lt;/p&gt;

&lt;p&gt;The framework's unique approach offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proven enterprise capability&lt;/li&gt;
&lt;li&gt;Operational efficiency&lt;/li&gt;
&lt;li&gt;Cost effectiveness&lt;/li&gt;
&lt;li&gt;Technical simplicity&lt;/li&gt;
&lt;li&gt;Rapid development&lt;/li&gt;
&lt;li&gt;Regulatory compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For organizations looking to modernize their operations while leveraging existing SQL Server expertise, T-SQL Dot App provides a compelling alternative to traditional multi-tier architectures and expensive ERP systems. Its track record in handling complex, high-volume operations in regulated industries demonstrates its maturity and reliability as an enterprise-grade platform.&lt;/p&gt;

</description>
      <category>sqlserver</category>
      <category>sql</category>
    </item>
    <item>
      <title>Turn SQL Server into an Application Server with "TSQL.APP"(hot🌡️)</title>
      <dc:creator>Rick Hoek</dc:creator>
      <pubDate>Fri, 24 Jan 2025 22:08:34 +0000</pubDate>
      <link>https://dev.to/rick_hoek_c401925e5aec039/change-sql-server-into-an-application-server-with-tsqlapp-o14</link>
      <guid>https://dev.to/rick_hoek_c401925e5aec039/change-sql-server-into-an-application-server-with-tsqlapp-o14</guid>
      <description>&lt;h1&gt;
  
  
  T-SQL dot app: A Revolutionary Approach to Web Application Development
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;T-SQL dot app is an innovative skeleton web application with a built-in Integrated Development Environment (IDE), designed to work entirely data-driven based on T-SQL, Microsoft SQL Server's programming language. The platform enables developers to build complete web applications by writing T-SQL code exclusively, eliminating the need to master multiple programming languages and frameworks.&lt;/p&gt;

&lt;p&gt;Here you can listen to the podcast that will give you a complete picture of the unique power of our TSQL.APP framework in just 10 minutes.&lt;/p&gt;




&lt;blockquote&gt;
&lt;h2&gt;
  
  
  &lt;a href="https://250.tracy.nu/239/storage/hgyw6119ymksmjwiz2aqd1kfxzb5bhrg" rel="noopener noreferrer"&gt;Listen to the Podcast here&lt;/a&gt;
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is T-SQL dot app?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Core Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fully Data-driven Development&lt;/strong&gt;: All application logic and user interfaces are defined within the database, enabling direct and efficient data access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in IDE with Monaco Editor&lt;/strong&gt;: Write, test, and debug T-SQL code directly in the browser with advanced coding features like syntax highlighting and code auto-completion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-driven React Client&lt;/strong&gt;: A fully functional frontend built with React, automatically generated based on data and T-SQL code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive Functionality&lt;/strong&gt;: Built-in support for authentication, authorization, role management, server-side processing, task processing, mail server, FTP, and file management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich Set of Stored Procedures and Functions&lt;/strong&gt;: Over 400 built-in procedures and functions capable of fulfilling virtually any business need via action code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom GPT Support&lt;/strong&gt;: A custom-trained GPT model helps developers generate action code and provides support within the platform, accessible via &lt;a href="https://t-sql.app" rel="noopener noreferrer"&gt;https://t-sql.app&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What can T-SQL dot app be used for?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Business Applications
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Resource Planning (ERP)&lt;/strong&gt;: Manage business processes such as purchasing, sales, inventory management, and finance within one integrated system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer Relationship Management (CRM)&lt;/strong&gt;: Manage customer data, interactions, and sales opportunities to improve customer relationships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inventory Management&lt;/strong&gt;: Real-time tracking of inventory levels, orders, and deliveries for efficient supply chain management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Data Analysis and Reporting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Internal Dashboards&lt;/strong&gt;: Create interactive dashboards for real-time monitoring of business performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reporting Tools&lt;/strong&gt;: Generate custom reports and visualizations directly from the database without additional BI tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Automation and Workflow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Task Automation&lt;/strong&gt;: Automate repetitive tasks and processes with the built-in task server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow Management&lt;/strong&gt;: Define and manage business processes to promote efficiency and consistency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Industry-Specific Solutions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Produce Trading Sector&lt;/strong&gt;: Proven applications in the potato, vegetable, and fruit sector, with successful implementations at large companies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logistics and Transport&lt;/strong&gt;: Management of complex logistic processes, including route planning and tracking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Internal Tools and Utilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File Management&lt;/strong&gt;: Manage documents and files with built-in FTP and file manager functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User and Role Management&lt;/strong&gt;: Manage user accounts, roles, and access rights for enhanced security.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why is T-SQL dot app a Game Changer?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Simplicity and Efficiency
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single Language Development&lt;/strong&gt;: Both frontend and backend can be developed using only T-SQL, reducing the learning curve and development time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster Implementation&lt;/strong&gt;: By eliminating the need for multiple technologies, applications can be developed and deployed more quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Cost Savings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lower Development and Maintenance Costs&lt;/strong&gt;: Less dependency on different technologies leads to reduced overhead and lower costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: Centralization of development within the database reduces the need for additional infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Complete Data Control
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct Data Access&lt;/strong&gt;: All logic is executed within the database, ensuring fast and efficient data and transaction processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Managing data and application logic within one environment strengthens security and simplifies regulatory compliance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Extensive Out-of-the-Box Functionality
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Business Functions&lt;/strong&gt;: Features such as authentication, authorization, mail server, and task processing are available by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-driven UI Generation&lt;/strong&gt;: User interfaces are automatically generated based on data and T-SQL code, promoting consistency and efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Proven Success in Practice
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large Enterprise Implementations&lt;/strong&gt;: Multiple large companies in the Dutch produce trading sector use T-SQL dot app, processing hundreds of thousands of transactions and realizing annual revenue exceeding 200 million euros.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability and Reliability&lt;/strong&gt;: The platform has proven capable of handling large volumes and critical business processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Innovative Approach to Application Development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom GPT Support&lt;/strong&gt;: The custom-trained GPT model assists developers in writing code, increasing productivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development Centralization&lt;/strong&gt;: Managing both frontend and backend within the database significantly reduces development process complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Looking for Collaboration and Further Development
&lt;/h2&gt;

&lt;p&gt;T-SQL dot app has proven its value and is now poised to grow further and transform the market. To achieve this, we are looking for interested parties who want to contribute to the further development and commercialization of this groundbreaking technology.&lt;/p&gt;

&lt;h3&gt;
  
  
  Potential Collaboration Areas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Technical Development&lt;/strong&gt;: Contribute to expanding functionality, optimizing performance, and improving user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial Exploitation&lt;/strong&gt;: Develop business models for offering T-SQL dot app as a commercial product or service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementation Partners&lt;/strong&gt;: Companies wanting to integrate T-SQL dot app into their own infrastructure or provide solutions to their customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support and Training&lt;/strong&gt;: Provide services such as technical support, training, and consultancy to stimulate the use and adoption of T-SQL dot app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Join?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Innovation Leadership Role&lt;/strong&gt;: Participate in the forefront of technological innovation in web application development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market Potential&lt;/strong&gt;: Benefit from a growing need for efficient and cost-effective development solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration with Experienced Teams&lt;/strong&gt;: Work with experts who have already achieved success with T-SQL dot app in critical business environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Industry Impact&lt;/strong&gt;: Help redefine industry standards and best practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;T-SQL dot app is more than a tool; it's a revolution in how web applications are developed and deployed. By harnessing the power of T-SQL and centralizing development within the database, the platform offers unparalleled efficiency, scalability, and cost savings.&lt;/p&gt;

&lt;p&gt;With proven successes at large companies and a wide range of applications, T-SQL dot app is ready to transform the market. We invite you to be part of this exciting journey and help shape the future of application development together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interested?
&lt;/h3&gt;

&lt;p&gt;Contact us today to discover how you can contribute to and benefit from the growth and opportunities that T-SQL dot app has to offer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contact Details:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://t-sql.app" rel="noopener noreferrer"&gt;https://t-sql.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Email: &lt;a href="mailto:info@t-sql.app"&gt;info@t-sql.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Address: [Add physical address if desired]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together we can redefine the future of web application development with T-SQL dot app as a catalyst for change.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
We have built it. Technically it is a data-driven stack containing MICROSOFT SQL SERVER, .NET, NODE AND REACT, But we have made it completely data-driven, so the ONLY language you have to use is T-SQL. For everything, UI Modal Dialogs CRUD apps, functions, actions, reports. like so:
*/&lt;/span&gt;

&lt;span class="c1"&gt;-- learn from the TSQL.APP Assistent at https://tsql.app&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'TSQL.APP Choose Example'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'h2'&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;var01&lt;/span&gt; 
        &lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@var01'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;var01&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;selected_ids&lt;/span&gt; &lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_1&lt;/span&gt; &lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@switch_1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_1&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt; 
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_switch&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'@switch_1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_1&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'Single / Multi'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;direct_post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;multi&lt;/span&gt; &lt;span class="nb"&gt;bit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="k"&gt;isnull&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'false'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'false'&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_2&lt;/span&gt; &lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@switch_2'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_2&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt; 
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_switch&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'@switch_2'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_2&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'List / Table'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;direct_post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;use_table&lt;/span&gt; &lt;span class="nb"&gt;bit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="k"&gt;isnull&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;switch_2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'false'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'false'&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;--exit button (action ends)&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt; &lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@exit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt; 
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_button&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@exit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Exit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;valueout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'btn-danger'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Esc'&lt;/span&gt;
&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_clear&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; 
&lt;span class="c1"&gt;--prepare table and list&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;selected&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;  &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="n"&gt;tmptable&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;api_card&lt;/span&gt; &lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'A,B,C,D'&lt;/span&gt;

&lt;span class="n"&gt;if&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;use_table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;-- gebruik dan de list !&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_choose&lt;/span&gt; 
        &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;var01&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt; 
        &lt;span class="c1"&gt;--,@name = '@button_choose'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@class = 'btn-outline-danger'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@class_updated = 'btn-danger'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@startkey = 1 -- 0 = no keys or NULL = first character of text&lt;/span&gt;
        &lt;span class="c1"&gt;--,@keyprefix = 'F'&lt;/span&gt;
        &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;multi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;multi&lt;/span&gt; &lt;span class="c1"&gt;--1 --allow multiple values&lt;/span&gt;
        &lt;span class="c1"&gt;--,@tmptable = '#tmptable'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@ids =@selected_ids OUT&lt;/span&gt;
        &lt;span class="c1"&gt;--,@orderby = 'ORDER BY name'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@inline = 1&lt;/span&gt;
        &lt;span class="c1"&gt;--,@reducer = NULL&lt;/span&gt;
        &lt;span class="c1"&gt;--,@reset_values = N'@button,lastname,etc' -- onchange, reset other values&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'selected: '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;var01&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;

&lt;span class="n"&gt;if&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;use_table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;-- gebruik dan de table&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_choose&lt;/span&gt; 
        &lt;span class="c1"&gt;--@list = @list,&lt;/span&gt;
        &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;var01&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt; 
        &lt;span class="c1"&gt;--,@name = '@button_choose'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@class = 'btn-outline-danger'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@class_updated = 'btn-danger'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@startkey = 1 -- 0 = no keys or NULL = first character of text&lt;/span&gt;
        &lt;span class="c1"&gt;--,@keyprefix = 'F'&lt;/span&gt;
        &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;multi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;multi&lt;/span&gt; &lt;span class="c1"&gt;--1 --allow multiple values&lt;/span&gt;
        &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;tmptable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'#tmptable'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@ids =@selected_ids OUT&lt;/span&gt;
        &lt;span class="c1"&gt;--,@orderby = 'ORDER BY name'&lt;/span&gt;
        &lt;span class="c1"&gt;--,@inline = 1&lt;/span&gt;
        &lt;span class="c1"&gt;--,@reducer = NULL&lt;/span&gt;
        &lt;span class="c1"&gt;--,@reset_values = N'@button,lastname,etc' -- onchange, reset other values&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'selected: '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;var01&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;   
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_table&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;tmptable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'#tmptable'&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;

&lt;span class="c1"&gt;-- Add 'Quit' button&lt;/span&gt;
&lt;span class="k"&gt;exec&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_text&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;'click Quit/Exit button to end the action.'&lt;/span&gt;
&lt;span class="k"&gt;DECLARE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;ButtonQuit&lt;/span&gt; &lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_get_value&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'@ButtonQuit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;ButtonQuit&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_button&lt;/span&gt; 
    &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'quit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Quit this Action'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'btn-secondary'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;valueout&lt;/span&gt;&lt;span class="o"&gt;=@&lt;/span&gt;&lt;span class="n"&gt;ButtonQuit&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;ButtonQuit&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="c1"&gt;--SET @Quit = 1;&lt;/span&gt;
    &lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_api_modal_clear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>news</category>
      <category>ui</category>
      <category>sql</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Teaching my AI all about using our TSQL.APP Framework that turns SQL Server into an Application Server</title>
      <dc:creator>Rick Hoek</dc:creator>
      <pubDate>Fri, 24 Jan 2025 21:09:55 +0000</pubDate>
      <link>https://dev.to/rick_hoek_c401925e5aec039/teaching-my-ai-all-about-using-our-tsqlapp-framework-that-turns-sql-server-into-an-application-5ha3</link>
      <guid>https://dev.to/rick_hoek_c401925e5aec039/teaching-my-ai-all-about-using-our-tsqlapp-framework-that-turns-sql-server-into-an-application-5ha3</guid>
      <description></description>
    </item>
  </channel>
</rss>
