<?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: Kasun Nanayakkara</title>
    <description>The latest articles on DEV Community by Kasun Nanayakkara (@kasunpro85).</description>
    <link>https://dev.to/kasunpro85</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%2F1866591%2F1327534f-9f88-4b81-b7d6-9312503bfbaf.jpg</url>
      <title>DEV Community: Kasun Nanayakkara</title>
      <link>https://dev.to/kasunpro85</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kasunpro85"/>
    <language>en</language>
    <item>
      <title>Loan Settlement Letter</title>
      <dc:creator>Kasun Nanayakkara</dc:creator>
      <pubDate>Wed, 26 Mar 2025 09:17:35 +0000</pubDate>
      <link>https://dev.to/kasunpro85/loan-settelment-letter-354n</link>
      <guid>https://dev.to/kasunpro85/loan-settelment-letter-354n</guid>
      <description>&lt;p&gt;(Date)&lt;br&gt;
The Manager &lt;br&gt;
Bank Address&lt;/p&gt;

&lt;p&gt;Personal loan settlement &lt;/p&gt;

&lt;p&gt;I'm writing this letter to inform you of my desire to settle my loan (number ) earlier than the due date.I hope to settle in 2025/March(date or month) month.I am eager to conclude this process at the earliest, hence I would appreciate it if you could facilitate the prompt processing of my request. &lt;/p&gt;

&lt;p&gt;Name: &lt;br&gt;
Personal Loan: (Loan number)&lt;/p&gt;

&lt;p&gt;Loan amount: ($ Amount)&lt;/p&gt;

&lt;p&gt;ID:  (ID number) &lt;/p&gt;

&lt;p&gt;Address:  &lt;/p&gt;

&lt;p&gt;Your faithful &lt;/p&gt;

&lt;p&gt;(Name &amp;amp; Sign)&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>On-line compilers</title>
      <dc:creator>Kasun Nanayakkara</dc:creator>
      <pubDate>Thu, 27 Feb 2025 15:29:54 +0000</pubDate>
      <link>https://dev.to/kasunpro85/on-line-compilers-3g7i</link>
      <guid>https://dev.to/kasunpro85/on-line-compilers-3g7i</guid>
      <description>&lt;ol&gt;
&lt;li&gt;SQL server Online compiler 
&lt;a href="https://sqlfiddle.com/sql-server/online-compiler?&amp;amp;id=b1b65436-844d-4577-bd10-6c59de4da204" rel="noopener noreferrer"&gt;sql-server/online-compiler&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>sqlserver</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>MSSQL-Change Identity seed, table records using cursors and verify records.</title>
      <dc:creator>Kasun Nanayakkara</dc:creator>
      <pubDate>Thu, 27 Feb 2025 08:16:31 +0000</pubDate>
      <link>https://dev.to/kasunpro85/change-the-table-data-using-cursors-and-verify-the-records-382f</link>
      <guid>https://dev.to/kasunpro85/change-the-table-data-using-cursors-and-verify-the-records-382f</guid>
      <description>&lt;p&gt;Find the tables that belong to the column name. Show the primary tables and foreign key tables as a list here.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT      c.name  AS 'ColumnName'
            ,(SCHEMA_NAME(t.schema_id) + '.' + t.name) AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%MyColumnName%'
ORDER BY    TableName
            ,ColumnName;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ColumnName         TableName
MyColumnName       dbo.FkTable1
MyColumnName       dbo.FkTable2
MyColumnName       dbo.MyTable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The task here is to update data in MyTable. In this table, I need to change the records code with primary keys 1, 2, and 3, and update other records primary keys as well. Additionally, I need to verify the current primary keys of the records and correct them if necessary.I will also need to check the current structure of MyTable and update the structure accordingly. After making the updates, the identity seed should be reset.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current Mytable 
id     code     name
1      abc      abc-disc 
2      efg      efg-disc 
3      ijh      ijh-disc 
20     kmn      kmn-disc 
30     qrs      qrs-disc 

Udated Mytable
id        code     name
1         cba      abc-disc 
2         gfe      efg-disc 
3         hji      ijh-disc 
100000000 kmn      kmn-disc 
100000001 qrs      qrs-disc 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stop the current identity check&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SET IDENTITY_INSERT Mytable ON
GO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Declare a table parameter to capture the current data before making any changes to the MyTable, so that you can keep the original data intact and then modify it accordingly. This is a common approach to ensure data integrity during updates. You can create a table variable or temporary table to store the original data before making any changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DECLARE @TempMytable TABLE (ID INT, Code VARCHAR(MAX), Name VARCHAR(MAX), NewRecordID INT);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Insert Mytable record to tmp table call TempMytable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO @TempMytable(ID, Code, Name)
SELECT ID, Code, Name
FROM Mytable;

DECLARE @ID INT, @Code VARCHAR(MAX), @Name VARCHAR(MAX)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the default identity seed value and other related parameter values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DECLARE @Seed INT= 10000000, @NewRecordID INT = 1, @NewCode VARCHAR(MAX) = '';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Disable the check constraint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE MPP NOCHECK CONSTRAINT [FK_MPP_Mytable];
ALTER TABLE Mytable NOCHECK CONSTRAINT ALL;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove the unique constraint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE Mytable
DROP CONSTRAINT U1_Mytable, UK_Mytable_Name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Disable the trigers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE MyTable DISABLE TRIGGER Mytable_InsteadOfDTrig
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Declare the cursor and refer to the records available in MyTable because I created a temporary table. When the cursor runs, it gets the current table information. If the table is updated, the record will also be fetched and processed. So, I want to avoid that behavior and run based on the previous (old) state of the table and data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DECLARE db_cursor CURSOR FOR
SELECT ID, Code, Name
FROM @TempMytable

BEGIN
    OPEN db_cursor  
    FETCH NEXT FROM db_cursor INTO @ID, @Code, @Name
    WHILE @@FETCH_STATUS = 0  
    BEGIN

        IF @Name = 'abc-disc' OR @Name = 'efg-disc' OR  @Name = 'ijh-disc'
        BEGIN
            /* Insert / Update system code */

            IF @Name = 'abc-disc' 
                SELECT @NewRecordID = 1, @NewCode = 'cba';
            ELSE IF @Name = 'efg-disc' 
                SELECT @NewRecordID = 2, @NewCode = 'gfe';
            ELSE IF @Name = 'ijh-disc'
                SELECT @NewRecordID = 3, @NewCode = 'hji';

            IF @ID = @NewRecordID
            BEGIN
                UPDATE Mytable SET Code = @NewCode WHERE ID = @NewRecordID
            END
            ELSE IF EXISTS(SELECT * FROM Mytable WHERE ID = @NewRecordID)
            BEGIN 
                UPDATE Mytable SET Code = @NewCode,
                Name = @Name
                WHERE ID = @NewRecordID
            END 
            ELSE
            BEGIN
                INSERT INTO Mytable(ID, Code, Name)
                VALUES(@NewRecordID, @NewCode, @Name)
            END

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

&lt;/div&gt;



&lt;p&gt;In here, I want to check whether records already exist in your table before inserting new ones, so you can avoid inserting duplicate records that would violate a unique constraint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; ELSE IF(@ID &amp;lt; 10000000)
/* Check table id morethan the 10,000,000 */  
        BEGIN
            /* Insert record as a new record Mytable */

            INSERT INTO Mytable(ID, Code, Name)
            VALUES(@Seed, @Code, @Name)

            SELECT @NewRecordID = @Seed;

            SELECT @Seed = @Seed + 1;

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

&lt;/div&gt;



&lt;p&gt;In this case, I need to get the new record ID into a temporary table called @TempMyTable to check if the records have new IDs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; /* Update @TempMytable tables with new ID */ 

        UPDATE @TempMytable 
            SET NewRecordID = CASE WHEN @ID &amp;gt; @NewRecordID THEN @ID
                ELSE @NewRecordID
            END
            WHERE ID = @ID;

        PRINT  CAST(@ID AS VARCHAR) +' - ' + @Code +' - ' + @Name +' - ' + CAST(@NewRecordID AS VARCHAR) + ' - ' + @NewCode

        FETCH NEXT FROM db_cursor
        INTO @ID, @Code, @Name

    END 
    CLOSE db_cursor
    DEALLOCATE db_cursor
END

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

&lt;/div&gt;



&lt;p&gt;Reset &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; , @NewRecordsID values&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT @ID = 0, @NewRecordID = 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;/* Verify date at @TempMytable table and foreign key tables */&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM @TempMytable
id     code     name        newRecordid
1      abc      abc-disc    1
2      efg      efg-disc    2
3      ijh      ijh-disc    3
20     kmn      kmn-disc    100000000
30     qrs      qrs-disc    100000002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check if foreign key tables have records.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT m.ID,Count(m.pkid) FkTable1_Count FROM FkTable1 m GROUP BY m.ID
SELECT m.ID,Count(m.pkid) FkTable2_Count FROM FkTable2 m GROUP BY m.ID
FkTable1
id          FkTable1_Count 
1           1170
2           5522

FkTable2
id          FkTable2_Count 
1           15877
2           155895
3           187958
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Declare another cursor and refer to the records available in the temporary table called @TempMyTable to update the new record ID.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DECLARE db_newCursor CURSOR FOR
SELECT ID, NewRecordID
FROM @TempMytable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BEGIN
    OPEN db_newCursor  
    FETCH NEXT FROM db_newCursor INTO @ID, @NewRecordID
    WHILE @@FETCH_STATUS = 0  
    BEGIN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the foreign key value as per the newly generated record ID.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; /* Update foreign key tables*/
        IF @ID = @NewRecordID
             If record id s is same no need to change. 
             PRINT 'IDs are same. '+ CAST(@ID AS VARCHAR) + ' -&amp;gt; ' + CAST(@NewRecordID AS VARCHAR);
        ELSE 
        BEGIN
            PRINT 'FkTable1 # ' + CAST(@ID AS VARCHAR) + ' -&amp;gt; ' + CAST(@NewRecordID AS VARCHAR);
            UPDATE FkTable1 SET ID = @NewRecordID
            WHERE ID = @ID;

            PRINT 'FkTable2 # ' + CAST(@ID AS VARCHAR) + ' -&amp;gt; ' + CAST(@NewRecordID AS VARCHAR);
            UPDATE FkTable2 SET ID = @NewRecordID
            WHERE ID = @ID;

        END

        FETCH NEXT FROM db_newCursor INTO @ID, @NewRecordID

    END 
    CLOSE db_newCursor
    DEALLOCATE db_newCursor
END

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

&lt;/div&gt;



&lt;p&gt;start the current identity check&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SET IDENTITY_INSERT Mytable OFF
GO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why does the previous state not delete the record? Because it has a foreign key value, and it will be affected when I delete the record. I know the old records have a range from 4 to 99999999, and those records should be deleted in the delete query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Delete old Mytable */
DELETE FROM Mytable WHERE ID BETWEEN 4 AND 9999999
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set up the identity seed value to match the maximum record value.&lt;br&gt;
Generally, users reset the identity seed using this snippet:&lt;br&gt;
&lt;code&gt;DBCC CHECKIDENT ('MyTable', RESEED, @IdentSeed)&lt;/code&gt;.&lt;br&gt;
However, when I use it, I get the following error:&lt;br&gt;
&lt;code&gt;Checking identity information: current identity value '52228', current column value '52228'. DBCC execution completed. If DBCC printed error messages, contact your system administrator&lt;/code&gt;.&lt;br&gt;
I used the keyword &lt;code&gt;WITH NO_INFOMSGS;&lt;/code&gt; to overcome the issue.&lt;br&gt;
This problem is described in the following link: &lt;a href="https://dba.stackexchange.com/questions/107360/identity-column-value-falling-behind-randomly" rel="noopener noreferrer"&gt;identity-column-value-falling-behind-randomly&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Set new identity seed */
DECLARE @IdentSeed INT = 10000000;
SELECT @IdentSeed = Max(ID) FROM Mytable;

PRINT 'New identity seed # ' + CAST(@IdentSeed AS VARCHAR);
DBCC CHECKIDENT ('Mytable', RESEED, @IdentSeed)  WITH NO_INFOMSGS;
GO

/* Add uniqe constraint */
SET ANSI_PADDING ON
GO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a unique key constraints for table records.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/****** Object:  Index [Mytable] */
ALTER TABLE [dbo].[Mytable] ADD  CONSTRAINT [U1_Mytable] UNIQUE NONCLUSTERED 
(
    [Code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
GO

ALTER INDEX [U1_Mytable] ON [dbo].[Mytable] DISABLE
GO
PRINT 'Added constrant - U1_Mytable';

/****** Object:  Index [UK_Mytable_Name] */
ALTER TABLE [dbo].[Mytable] ADD  CONSTRAINT [UK_Mytable_Name] UNIQUE NONCLUSTERED 
(
    [Name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
GO
PRINT 'Added constrant - UK_Mytable_Name';

ALTER TABLE MPP CHECK CONSTRAINT [FK_MPP_Mytable]
GO
ALTER INDEX ALL ON Mytable REBUILD

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

&lt;/div&gt;



&lt;p&gt;Enable the trigers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE MyTable ENABLE TRIGGER MyTable_InsteadOfDTrig
GO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>.NET MVC Architecture</title>
      <dc:creator>Kasun Nanayakkara</dc:creator>
      <pubDate>Sat, 15 Feb 2025 15:31:28 +0000</pubDate>
      <link>https://dev.to/kasunpro85/net-mvc-architecture-43o7</link>
      <guid>https://dev.to/kasunpro85/net-mvc-architecture-43o7</guid>
      <description>&lt;p&gt;MVC describes the Model-View-Controller architecture.&lt;/p&gt;

&lt;p&gt;Model describes the data layer. The data layer contains data attributes, as well as getter and setter methods. The data can be defined using specific behaviors, such as DisplayName, Range, Required, etc.&lt;br&gt;
The data model can also describe the functionality related to the data structure, such as data retrieval, updates, and deletion functions. Some models manipulate data into another format.&lt;/p&gt;

&lt;p&gt;View describes the user interface that presents the data to the user. It can include elements like textboxes, dropdowns, buttons, tables, and other UI components.&lt;/p&gt;

&lt;p&gt;Controller describes the API and control methods for retrieving the data. It communicates using routing methods. There are several methods to route to the API. The default route is &lt;code&gt;‘Api/Controller/Action/id’&lt;/code&gt;, but the user can define their preferred routing method. For example,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• /api/contacts
• /api/contacts/21
• /api/products/apple
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Can an API use HTTP verbs?&lt;/p&gt;

&lt;p&gt;Yes, an API can use HTTP verbs such as [HttpGet], [HttpPost], [HttpPut], [HttpDelete], etc.&lt;br&gt;
Additionally, the user can define the action name using the [ActionName("name")] attribute. This allows the user to hide the mechanism of the action. For example, the user can define an API route as &lt;code&gt;Api/enroll/enrollment/1&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[RoutePrefix("enroll")] 
public class EnrollmentConroller: APIController(
[HttpPost]
[ActionName("enrollment")]
public void getEnrollment(int id){}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Router attributes can be added to manipulate the data directly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Route("patient /{EnrollmentID}/enrollment")]
[HttpGet]
public IEnumerable&amp;lt;Enrollment&amp;gt; get enrollment (int EnrollmentID) { }
[Route("patient / enrollment ")]
[HttpPost]
 public HttpResponseMessage updateEnrollment(Enrollment obj) { }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lifecycle of the MVC &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User request -&amp;gt; &lt;/li&gt;
&lt;li&gt;Fetch the routing table -&amp;gt; &lt;/li&gt;
&lt;li&gt;Execute router -&amp;gt; &lt;/li&gt;
&lt;li&gt;Controller initiate -&amp;gt; &lt;/li&gt;
&lt;li&gt;Execute action -&amp;gt;&lt;/li&gt;
&lt;li&gt;Execute/Map result -&amp;gt; &lt;/li&gt;
&lt;li&gt;view engine maps the result to UI -&amp;gt; &lt;/li&gt;
&lt;li&gt;Retrieve data / request&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
