The Artima Developer Community
Sponsored Link

.NET Buzz Forum
And now for the last...

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
Duncan Mackenzie

Posts: 689
Nickname: duncanma
Registered: Aug, 2003

Duncan Mackenzie is the Visual Basic Content Strategist at msdn.microsoft.com
And now for the last... Posted: Aug 12, 2003 2:06 PM
Reply to this message Reply

This post originated from an RSS feed registered with .NET Buzz by Duncan Mackenzie.
Original Post: And now for the last...
Feed Title: Code/Tea/Etc...
Feed URL: /msdnerror.htm?aspxerrorpath=/duncanma/rss.aspx
Feed Description: Duncan is the Visual Basic Content Strategist at MSDN, the editor of the Visual Basic Developer Center (http://msdn.microsoft.com/vbasic), and the author of the "Coding 4 Fun" column on MSDN (http://msdn.microsoft.com/vbasic/using/columns/code4fun/default.aspx). While typically Visual Basic focused, his blogs sometimes wanders off of the technical path and into various musing of his troubled mind.
Latest .NET Buzz Posts
Latest .NET Buzz Posts by Duncan Mackenzie
Latest Posts From Code/Tea/Etc...

Advertisement
With this final bit of text, this is the whole article... before any of your comments... and before my wonderful editor (Henry Borys) has attacked it. If you were to take the content from these blog entries and diff it with the published article... you'll see the amazing impact that a good editor can have on your writing.

    Storing and Retrieving the Feed Lists

    Once I had the RSS feeds displaying, and I had tested the system with enough sample data (translation: it worked against my blog's feed) to ensure it was working correctly, it was time to move onto creating code to support retrieving and editing the personal and master feed lists. For now, I only implemented two classes that used the IFeedList interface, one for accessing SQL and one that works with an xml settings file that is unique to the current user. See the code download for the source to the IFeedList interface and to the two implementations.
    
    Public Interface IFeedList
    
        Function GetList() As Feeds
        Function AddFeed( _
                 ByVal newFeed As Feed) As Boolean
        Function DeleteFeed( _
                 ByVal feedToToast As Feed) As Boolean
        Function CanAdd() As Boolean
        Function CanDelete() As Boolean
    
    End Interface
    

    For the personal file based version, I assume that you can add and remove items freely, but for the SQL Server version (which is supposed to be used for accessing a master list shared across multiple users) I needed a bit more security. I use integrated authentication, so you could potentially handle all of your security issues by restricting user permissions in SQL Server, but I decided to use a server role and to check the user's rights by looking at their role membership. Of course, any underlying table or database object security restrictions will also be in affect, providing a second layer of security. The implementation of "CanAdd" is shown below, including the call to a StoredProc that checks for role membership.

    Public Function CanAdd() As Boolean _
           Implements IFeedList.CanAdd
        'does the currently logged on user 
        'have rights to add to a table?
        'check if is in the 
        '"FeedAdministrator" role in SQL Server
        Return IsInRole("FeedAdministrator")
    End Function
    
    Private Function IsInRole( _
              ByVal Role As String) As Boolean
        Try
            Dim conn As New _
                SqlClient.SqlConnection( _
                    Me.m_connectionString)
            conn.Open()
            Dim cmdIsInRole As New _
                SqlClient.SqlCommand( _
                    "IsInRole", conn)
            cmdIsInRole.Parameters.Add( _
                "@Role", SqlDbType.NVarChar, _
                128).Value = Role
            cmdIsInRole.Parameters.Add( _
                "@RC", SqlDbType.Int)
            cmdIsInRole.Parameters( _
                "@RC").Direction = _
                ParameterDirection.ReturnValue
            cmdIsInRole.Parameters.Add( _
                "@Result", SqlDbType.Bit)
            cmdIsInRole.Parameters( _
                "@Result").Direction = _
                ParameterDirection.InputOutput
            cmdIsInRole.Parameters( _
                "@Result").Value = 0
            cmdIsInRole.ExecuteNonQuery()
    
            Return CBool( _
                cmdIsInRole.Parameters( _
                "@Result").Value())
        Catch ex As Exception
            Return False
        End Try
    End Function
    
    

    I also updated the UI a bit, to support picking a feed from a list of available ones, and to allow you to add any loaded feed into your personal (local) list. Figure 4 shows the completed interface, complete with the new "Save" button and a combo box that you can either use to pick from one of the saved feeds or directly enter the URL of a RSS feed.


    Figure 4

    As I developed the system, I decided to break it up for easier reuse in the future, so the embedded browser is now combined with the XSL and RSS code into a custom control, which has been placed onto the form shown in Figure 4. To use this code in my actual application I will likely make a few additional changes to allow me to pass a SQL connection in and place the entire form and all of its associated code into a library project. In the end, I will have something that I can very easily launch from a button on my existing Windows Forms application, but I have built this sample as a standalone application so that you can run it all on its own.

    Resources

    As always, I need to use some resources from various places on the web to build my finished application. I didn't use any GotDotNet user samples in this particular sample, but I did use:
    • Eric J. Smith's excellent "CodeSmith" utility to generate my strongly-typed Feeds collection,
    • Some starter XSL stolen from the template folder of RSS Bandit (check out the workspace!), and
    • Various bits of XSL and "help desk support" from Kent Sharkey.

    I will also point you to some good sources of RSS data, great material to display using the code from this article, as well as being great reading.

    Of course, there are a great many other RSS feeds out there, but the feeds from those sites should be enough to keep you going for quite awhile.

Of course, I usually tack on some other material at the end of the article.... asking readers to submit their samples, etc... but I won't be sticking that into the blog...

Read: And now for the last...

Topic: The daVinci Diagram Surface Could Not Be Found - A Lesson in Stress Management Previous Topic   Next Topic Topic: New Mailing List (Again)

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use