<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-31037698</id><updated>2011-04-21T22:06:31.704-06:00</updated><category term='1.  General'/><category term='2. Tutorials'/><title type='text'>Snapp MX Zone</title><subtitle type='html'>This Blog is dedicated to spreading the word on Snapp MX, the premier Rapid Web Application Development system for JAVA, .NET, PHP &amp; ColdFusion.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://snappmx.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://snappmx.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>The Snappster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-31037698.post-2849667726818310010</id><published>2007-11-23T12:55:00.000-07:00</published><updated>2007-11-23T13:25:27.019-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2. Tutorials'/><title type='text'>An Introduction to Login and Screen Variables</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;There are two types of variables that are typically used within a Snapp MX application.  They are called Login and Screen variables.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Login variables are global in scope, available for use in all application screens.  They are initialized when a user is authenticated, hence the name.  This authentication can take place through a Login screen or via a Pass-through function. You would use Login variables to store data that's required across many screens.  An example might be a user's role, security level, or location.  Login variables can be used within a Trigger condition statement to control screen access and/or to reconfigure screens.  They can also be used to constrain the data presented within a component or list.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Screen variables, on the other hand, are local to the screen that they were defined for.  They are either passed in from the previous screen or defined through a special Screen Variables function which is called prior to the screens displayed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The variables passed in from the previous screen are called the Unique Id., Parent Id., and Other Info.  These variables maintain the system's state, ensuring that the proper data is being presented.  For example, when a user clicks on a List row, the next screen usually contains a form displaying the details of the selected record.  This happens because the Unique Id. of the record is automatically passed to the form.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;When data is not directly accessible by a screen, then a Screen Variables function must be created to retrieve it. In support, a Screen Variables function automatically receives the Unique Id., Parent Id., Other Info, as well as, Login variables.  It is then a simple matter to create a SQL statement to grab the information required and then assign it to any newly defined Screen variables.  An example, an employee's personal details probably would not contain information about how much they expensed that month. If this is the case then a Screen Variables function could be used to retrieve this information, making it also available for display.&lt;br /&gt;&lt;br /&gt;For detailed instructions on how to create Login and Screen Variables go to Advanced Tutorials &gt; Variables section within the &lt;a href="http://www.snappmx.com/SnappMX/tutorial2/index.htm"&gt;Snapp MX Tutorials&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31037698-2849667726818310010?l=snappmx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/2849667726818310010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/2849667726818310010'/><link rel='alternate' type='text/html' href='http://snappmx.blogspot.com/2007/11/introduction-to-login-and-screen.html' title='An Introduction to Login and Screen Variables'/><author><name>The Snappster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31037698.post-8839218867344012430</id><published>2007-11-14T13:54:00.000-07:00</published><updated>2008-11-12T19:13:37.223-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2. Tutorials'/><title type='text'>An Introduction to Snapp MX Web Services</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;Snapp MX interacts with back office resources through two types of Web Services (i.e. Dynamic and Custom).  Each has its advantages in certain situations.  &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(255, 255, 0);font-family:verdana;" &gt;Please note that as of version 2.5 of Snapp MX "Default Web Services" will be renamed to "Dynamic Web Services".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A Dynamic Web Service automatically generates the query necessary to interact with a target table or view.  Dynamic Web Services have always been used by Snapp MX to retrieve the data displayed in Lists and Detail screens.  With the release of version 2, they can now be used to insert, update and delete records within Tables.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;To perform a database update using a Dynamic Web Service, you simply select the component that the End-User will click on to initiate the web service call (e.g. a button, label, image, tree node, or menu node).  You then set the component's "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Action&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" attribute to "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Call a Dynamic Web Service&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;".   Next, the "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;DB Interaction&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" attribute is set to "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;I&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;nsert Record&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;", "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Insert/Update Record&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;", or "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Delete Record&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;".  Finally, the "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Action Upon Web Service Completion&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" is set appropriately if a follow-up screen related action is required.  Thats all there is to it.  The Dynamic Web Service takes care of the rest.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_UoDJLXHr6Jw/RytuHarD54I/AAAAAAAAABI/xXB0jVc3Ckc/s1600-h/Dynamic.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_UoDJLXHr6Jw/RytuHarD54I/AAAAAAAAABI/xXB0jVc3Ckc/s320/Dynamic.jpg" alt="" id="BLOGGER_PHOTO_ID_5128313674389514114" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;For more complex situations, Snapp MX also supports Custom Web Services.    A Custom Web Service must be used to:&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;perform a database update when a screen is connected to a View;&lt;/li&gt;&lt;li&gt;validate login credentials;&lt;/li&gt;&lt;li&gt;set login or screen variables;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;perform additional processing tasks (i.e. multi-table updates, conditional logic, etc.); or&lt;br /&gt;&lt;/li&gt;&lt;li&gt;interact with an external (non-Snapp MX) web service.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:verdana;"&gt;To help, Snapp MX has a built-in multi-dialect Code Generator that creates a basic Custom Web Service in the development language supported by the application server in use (i.e. JAVA, C#, VB.NET, PHP or CFML).     Here are the steps involved:&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;The component initiating the Web Service call (e.g. a button, label, image, tree node, or menu node) is selected.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The "&lt;span style="font-style: italic;"&gt;Action&lt;/span&gt;" attribute of this component is set to "&lt;span style="font-style: italic;"&gt;Call a Web Service&lt;/span&gt;".    The "&lt;span style="font-style: italic;"&gt;Web Service Name&lt;/span&gt;" and "&lt;span style="font-style: italic;"&gt;Function Name&lt;/span&gt;" are then auto-filled (these can be changed if need be).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If a database a table/view needs to be updated, then the type of  "&lt;span style="font-style: italic;"&gt;DB Interaction&lt;/span&gt;" (i.e. "&lt;span style="font-style: italic;"&gt;Insert Record&lt;/span&gt;", "&lt;span style="font-style: italic;"&gt;Insert/Update Record&lt;/span&gt;", or "&lt;span style="font-style: italic;"&gt;Delete Record&lt;/span&gt;") is set. This action tells the Web Service Generator to add in the necessary SQL statements.  Snapp MX will also add default "&lt;span style="font-style: italic;"&gt;Web Service Arguments&lt;/span&gt;" (i.e. information that is passed to the Web Service).  Additional, arguments can also be added should they be required.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The "&lt;span style="font-style: italic;"&gt;Template&lt;/span&gt;" button is clicked to generate the Custom Web Service code which then appears in a pop up window.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_UoDJLXHr6Jw/Ry-XyarD55I/AAAAAAAAABQ/N3dv7ZkTNfM/s1600-h/Custom1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_UoDJLXHr6Jw/Ry-XyarD55I/AAAAAAAAABQ/N3dv7ZkTNfM/s320/Custom1.jpg" alt="" id="BLOGGER_PHOTO_ID_5129485393007470482" border="0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UoDJLXHr6Jw/Ry-ckKrD57I/AAAAAAAAABg/6i1fiDroz9E/s1600-h/Template.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_UoDJLXHr6Jw/Ry-ckKrD57I/AAAAAAAAABg/6i1fiDroz9E/s320/Template.jpg" alt="" id="BLOGGER_PHOTO_ID_5129490645752473522" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;The code in this window must then be transfered to a text/code editor so that it can be updated to fit the final processing requirements.  Once edited, save the code with the filename identified at the top of the code (e.g. &lt;span style="font-style: italic;"&gt;UserDetails_9_3.cfc&lt;/span&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If a Java or .NET application server is being used then the code must be compiled before it is ready to use.  For more information on compiling go to &lt;a style="font-style: italic;" href="http://www.snappmx.com/SnappMX/tutorial2/index.htm"&gt;Snapp MX Tutorials&lt;/a&gt;&lt;span style="font-size:100%;"&gt; and review &lt;span style="font-style: italic;"&gt;Basic Tutorials &gt; Creating a Login Screen &gt; Step 8: Creating a Web Service&lt;/span&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Finally, move the Web Service file to the directory also identified at the top of the code (e.g. f:\www\MyCList\site\1\com).&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:verdana;"&gt;A Custom Web Service has four distinct sections (i.e. Documentation, Header, Processing, and Footer).  The "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Documentation&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" section identifies the file name, as well as, the directory for its deployment.  It also contains information about the arguments passed to the web service and various return options.  The "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Header&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" is defined by the start of the actual function.  This is where arguments are defined and variables are set to their default values.  The "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Processing&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" section begins at the "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Do Any Processing Here&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" comment.   This is where additional processing logic is added by the Developer.   If the "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;DB Interaction&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" attribute was set, when the Custom Web Service was defined, then supporting SQL statements ("&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Insert&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;", "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Insert/Update&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" or "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Delete&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;") are also presented within this section.  Finally, the "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Footer&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" is where data is structured and then returned to the calling application.&lt;br /&gt;&lt;br /&gt;For more information about Web Services, review the &lt;a style="font-style: italic;" href="http://www.snappmx.com/SnappMX/tutorial2/index.htm"&gt;Snapp MX Tutorials&lt;/a&gt; and/or the &lt;a style="font-style: italic;" href="http://www.snappmx.com/SnappMX/help2/index.htm"&gt;Snapp MX Help&lt;/a&gt; documentation.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31037698-8839218867344012430?l=snappmx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/8839218867344012430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/8839218867344012430'/><link rel='alternate' type='text/html' href='http://snappmx.blogspot.com/2007/11/introduction-to-snapp-mx-web-services.html' title='An Introduction to Snapp MX Web Services'/><author><name>The Snappster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UoDJLXHr6Jw/RytuHarD54I/AAAAAAAAABI/xXB0jVc3Ckc/s72-c/Dynamic.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-31037698.post-8227310496298652025</id><published>2007-11-09T10:49:00.000-07:00</published><updated>2008-11-12T19:13:37.515-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='1.  General'/><title type='text'>Getting Pushy with Snapp MX</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;Want to get "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Pushy&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" with Snapp MX?   Well in version 2.5 you'll be able to do just that. We're adding three new Media components that will push data out to your system's End Users.  They include a "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;User List&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;", "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Text Chat&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" and "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Video Chat&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;".&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;To take advantage of these components you'll need to install a free Open Source Communication Server called Red5 (&lt;/span&gt;&lt;a style="font-family: verdana;" href="http://osflash.org/red5"&gt;http://osflash.org/red5&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;) and enter its I.P. Address within the Snapp MX configuration file.   Upon completion, your Developers will be able to add these social elements into their applications in minutes without any coding.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;The User List component identifies all authenticated individuals that have opened the screen that it was placed on.  When someone closes this screen, their name is automatically removed from everyone else's list.&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UoDJLXHr6Jw/RzDBBqrD59I/AAAAAAAAABw/tcuhgSN8MPc/s1600-h/UserList.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_UoDJLXHr6Jw/RzDBBqrD59I/AAAAAAAAABw/tcuhgSN8MPc/s320/UserList.jpg" alt="" id="BLOGGER_PHOTO_ID_5129812209953925074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The Text Chat component allows people to type messages that can be seen by all others viewing the current screen.  A new message is typed into the smaller window (below).  When the "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Enter&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" key is pressed, it is then moved to the larger window for everyone to see.  To keep things organized each message is labeled to identify its source.  The messages can also be time stamped if required.&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UoDJLXHr6Jw/RzDG16rD5-I/AAAAAAAAAB4/3YW54dVkk3Q/s1600-h/Chat.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_UoDJLXHr6Jw/RzDG16rD5-I/AAAAAAAAAB4/3YW54dVkk3Q/s320/Chat.jpg" alt="" id="BLOGGER_PHOTO_ID_5129818605160228834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The Video Chat component is different than the User List and Text Chat, in that you can add multiple Video Chat windows on one screen.   One of these windows would typically display what the local camera sees.  The others would display video being transmitted by selected peers.  Of course, those taking part in a video conference would need a video camera and microphone to transmit, as well as, speakers or headphones to receive.&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_UoDJLXHr6Jw/RzDX9KrD5_I/AAAAAAAAACA/WoUaPK3AxNw/s1600-h/Video.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_UoDJLXHr6Jw/RzDX9KrD5_I/AAAAAAAAACA/WoUaPK3AxNw/s320/Video.jpg" alt="" id="BLOGGER_PHOTO_ID_5129837421411952626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Adjacent to the Video window there are two icons and a drop-down list.  The first icon is that of a camera.  If it's grayed out then the video transmission for that window is halted. The second icon is for Audio.  No audio is transmitted when it's inactive. Clicking on these icons toggles their state from active to inactive and then back again.  Finally, the drop-down list identifies everyone that has the current screen open (similar to the User List component).   To engage in a video conference with someone, you simply select their name from this list.  It should be noted, that many people can connect to one individual which is useful for seminars.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Adding Red5 support will allow us to incorporate many new functions into Snapp MX that will add tremendous value to all applications.  Future functional possibilities for Snapp MX include:&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;a whiteboard to share ideas;&lt;/li&gt;&lt;li&gt;desktop sharing to aid in system support efforts;&lt;/li&gt;&lt;li&gt;a slideshow for presentations;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;video-on-demand (streaming not progressive);&lt;/li&gt;&lt;li&gt;voice-over-ip telephone connections;&lt;/li&gt;&lt;li&gt;voice and video recording capabilities; and&lt;br /&gt;&lt;/li&gt;&lt;li&gt;lists and calendars that automatically update.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31037698-8227310496298652025?l=snappmx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/8227310496298652025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/8227310496298652025'/><link rel='alternate' type='text/html' href='http://snappmx.blogspot.com/2007/11/getting-pushy-with-snapp-mx.html' title='Getting Pushy with Snapp MX'/><author><name>The Snappster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_UoDJLXHr6Jw/RzDBBqrD59I/AAAAAAAAABw/tcuhgSN8MPc/s72-c/UserList.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-31037698.post-2253142171773776727</id><published>2007-11-01T10:03:00.001-06:00</published><updated>2008-11-12T19:13:37.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2. Tutorials'/><title type='text'>Adding an Image Column in your Lists</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;When an Image component, placed within a Snapp MX screen, is set to be "&lt;span style="font-style: italic;"&gt;Dynamic&lt;/span&gt;", a connection is automatically made between an uploaded image and the data record being displayed at the time of the upload.  Look at a different record and the image changes correspondingly.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UoDJLXHr6Jw/RyehlKrD51I/AAAAAAAAAAw/sWbIzFqB7_Q/s1600-h/Details.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_UoDJLXHr6Jw/RyehlKrD51I/AAAAAAAAAAw/sWbIzFqB7_Q/s320/Details.jpg" alt="" id="BLOGGER_PHOTO_ID_5127244360676796242" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;No coding or database updates are needed to make this happen. Snapp MX takes care of all the logistics.  To support this function, there's a table within the Snapp MX Repository called "&lt;span style="font-style: italic;"&gt;TBL_DYNAMICIMAGES&lt;/span&gt;".  A record is automatically created in this table whenever a new image is uploaded.  This record identifies the Application, Screen, Table and Unique Id. of the data record that the image is associated with as well as its file name.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;To display uploaded images in a list located on a different screen you'll need to create a database View that connects &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;"&lt;span style="font-style: italic;"&gt;TBL_DYNAMICIMAGES&lt;/span&gt;" records with their corresponding application data records.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UoDJLXHr6Jw/Ryehy6rD52I/AAAAAAAAAA4/P3rZh6GdSog/s1600-h/List.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_UoDJLXHr6Jw/Ryehy6rD52I/AAAAAAAAAA4/P3rZh6GdSog/s320/List.jpg" alt="" id="BLOGGER_PHOTO_ID_5127244596899997538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;If your application data is stored in a different Database (not in the Snapp MX Repository), then you'll also need to make sure that the Database Server you're using supports queries to external tables.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Here are the steps:&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;In your detail screen (i.e. the data entry screen for your list):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Add an Image component.&lt;/li&gt;&lt;li&gt;Size it appropriately to ensure that it will display nicely in the list.&lt;br /&gt;&lt;/li&gt;     &lt;li&gt;Click on the Dynamic Image attribute tab.&lt;/li&gt;     &lt;li&gt;Set the &lt;span style="font-style: italic;"&gt;Data Source&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;Table/View&lt;/span&gt; attributes to match the input form values.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;    &lt;/li&gt;    &lt;li&gt;Retrieve the following information from the Snapp MX Repository using your database administrator:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Open &lt;span style="font-style: italic;"&gt;TBL_APPLICATIONS&lt;/span&gt; and get the &lt;span style="font-style: italic;"&gt;APPLICATIONID&lt;/span&gt; (e.g. 5 = the Id. of the application that the images are connected to)&lt;/li&gt;     &lt;li&gt;Open &lt;span style="font-style: italic;"&gt;TBL_SCREENS&lt;/span&gt;      and get the &lt;span style="font-style: italic;"&gt;SCREENID&lt;/span&gt;      (e.g. 9 = the Id. of the screen that is used to upload the images)&lt;/li&gt;     &lt;li&gt;Open &lt;span style="font-style: italic;"&gt;TBL_TABLEHEADER&lt;/span&gt;  and get the &lt;span style="font-style: italic;"&gt;TABLEID&lt;/span&gt;       (e.g. 3 = the Id. of table that the images are associated with (i.e. dbo.tbl_YourData))&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;    &lt;/li&gt;    &lt;li&gt;In your Application database, create the following view (e.g. &lt;span style="font-style: italic;"&gt;vw_YourData&lt;/span&gt;). This view adds an &lt;span style="font-style: italic;"&gt;ImageURL&lt;/span&gt; field to the data fields presented in your existing list. &lt;span style="font-style: italic; color: rgb(255, 255, 0);"&gt;This query was designed for MS SQL Server.  It's syntax would need to be altered for an alternate database.&lt;/span&gt;  (Change the URL portion to suit your setup).&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;SELECT 'http://www.yoursite.com/SnappMX/site/5/images/'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;+ SnappMX.dbo.TBL_DYNAMICIMAGES.FILENAME AS ImageURL,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;dbo.tbl_YourData.Id,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;dbo.tbl_YourData.Field_1,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;dbo.tbl_YourData.Field_2,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;dbo.tbl_YourData.Field_3, ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;FROM   dbo.YourData&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;LEFT OUTER JOIN SnappMX.dbo.TBL_DYNAMICIMAGES&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ON SnappMX.dbo.TBL_DYNAMICIMAGES.UNIQUEID = dbo.tbl_YourData.Id&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;AND SnappMX.dbo.TBL_DYNAMICIMAGES.APPLICATIONID = 5&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;AND SnappMX.dbo.TBL_DYNAMICIMAGES.SCREENID      = 9&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;AND SnappMX.dbo.TBL_DYNAMICIMAGES.TABLEID       = 3&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;    &lt;/li&gt;    &lt;li&gt;Make the new view accessible to the application (i.e. &lt;span style="font-style: italic;"&gt;File&lt;/span&gt; &gt; &lt;span style="font-style: italic;"&gt;Administration&lt;/span&gt; &gt; &lt;span style="font-style: italic;"&gt;Data Sources&lt;/span&gt;).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On the list screen:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Select the list&lt;/li&gt;     &lt;li&gt;Connect the new view to it (e.g. &lt;span style="font-style: italic;"&gt;vw_YourData&lt;/span&gt;)&lt;/li&gt;     &lt;li&gt;Add a column for the &lt;span style="font-style: italic;"&gt;ImageURL&lt;/span&gt;.&lt;/li&gt;     &lt;li&gt;Set, the attributes, &lt;span style="font-style: italic;"&gt;Table Field (Display)&lt;/span&gt; to "&lt;span style="font-style: italic;"&gt;ImageURL&lt;/span&gt;" and the &lt;span style="font-style: italic;"&gt;Field Type&lt;/span&gt; to "&lt;span style="font-style: italic;"&gt;Image&lt;/span&gt;".&lt;/li&gt; &lt;/ul&gt;    &lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:verdana;"&gt;That's all there is to it.  The record images should now appear in the new column added to the list.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Additional Tips:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;If your Database Server doesn't support JOINS to external tables and you really need this functionality just place your application data tables in the Snapp MX Repository.&lt;/li&gt;&lt;li&gt;For DB2 replace the "&lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;+&lt;/span&gt;" with "&lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;concat&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;For Firebird and SQLite replace "&lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;+&lt;/span&gt;" with "&lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;||&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;For MySQL and Oracle replace&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;http://www.yoursite.com/SnappMX/site/5/images/&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;+ SnappMX.dbo.TBL_DYNAMICIMAGES.FILENAME AS ImageURL&lt;/span&gt;&lt;br /&gt;with&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;CONCAT('&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;http://www.yoursite.com/SnappMX/site/5/images/&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;',&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;SnappMX.dbo.TBL_DYNAMICIMAGES.FILENAME) AS ImageURL&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31037698-2253142171773776727?l=snappmx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/2253142171773776727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/2253142171773776727'/><link rel='alternate' type='text/html' href='http://snappmx.blogspot.com/2007/11/adding-image-column-in-your-lists.html' title='Adding an Image Column in your Lists'/><author><name>The Snappster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_UoDJLXHr6Jw/RyehlKrD51I/AAAAAAAAAAw/sWbIzFqB7_Q/s72-c/Details.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-31037698.post-7040347071891617485</id><published>2007-10-15T10:45:00.000-06:00</published><updated>2007-11-01T10:51:18.133-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2. Tutorials'/><title type='text'>An Introduction to Triggers</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;Snapp MX Triggers are one of the most powerful tools one has when creating a screen. Basically triggers are a set of actions you would like to do on a screen based on a condition.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;There are a ton of actions available to you including (but not limited to): Enabling and Disabling Form Fields and Buttons Showing and Hiding Form Fields, Buttons, Images, Lists, Trees, Charts Clearing, Setting and Copying Form Field Values Refreshing Lists, Trees, Charts Moving (Animation) Objects Renaming Labels &lt;/span&gt;&lt;i style="font-family: verdana;"&gt;and much more!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;As you can see, there are many trigger actions that can change not only how your screen will look, but how it will work.There are 3 main types of triggers available for you to use:&lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;On Load Triggers (triggers that run when a screen is first loaded)&lt;/li&gt;&lt;li&gt;On Change Triggers (triggers that run when a form field value has been changed by the end user)&lt;/li&gt;&lt;li&gt;On Click Triggers (triggers that run when a button, image or label has been clicked)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:verdana;"&gt;To set up a trigger, first create a screen, then go to Options &gt; Triggers in the Main Menu bar.&lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;Click on the "Add" button corresponding to the type of trigger you wish to create.&lt;/li&gt;&lt;li&gt;Create a Trigger Condition using the Condition generator, and &lt;/li&gt;&lt;li&gt;Add actions based on the Condition being Met or Not Met&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:verdana;"&gt;Real life examples of what we have used triggers for in the past:&lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;Enabling / Disabling Form Fields (or Buttons) based on who is logged in (or type of user)&lt;ul&gt;&lt;li&gt;On Load Trigger&lt;/li&gt;&lt;li&gt;Example: Only the Admin users can click on the "Save" Button&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Showing / Hiding Form Fields based on other Form Fields&lt;ul&gt;&lt;li&gt;On Change Trigger&lt;/li&gt;&lt;li&gt;Example: Clicking on a Complete checkbox shows the Completed Date Form Field&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Refreshing a Chart based on a Button press&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;On Click Trigger&lt;/li&gt;&lt;li&gt;Example: Chart data based on a Date Form Field, User can change Date, and click a Button to Refresh the chart.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;a href="http://www.netcentrics.net/BlogDemos/?screenId=3" target="_blank"&gt;Click here to see some triggers in action!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;We hope you enjoyed this introduction, and am sure you are well on your way to understanding and using triggers&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31037698-7040347071891617485?l=snappmx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/7040347071891617485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31037698/posts/default/7040347071891617485'/><link rel='alternate' type='text/html' href='http://snappmx.blogspot.com/2007/10/introduction-to-triggers_15.html' title='An Introduction to Triggers'/><author><name>The Snappster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
