Alpha Software Mobile Development Tools:   Alpha Anywhere    |   Alpha TransForm subscribe to our YouTube Channel  Follow Us on LinkedIn  Follow Us on Twitter  Follow Us on Facebook

Announcement

Collapse

The Alpha Software Forum Participation Guidelines

The Alpha Software Forum is a free forum created for Alpha Software Developer Community to ask for help, exchange ideas, and share solutions. Alpha Software strives to create an environment where all members of the community can feel safe to participate. In order to ensure the Alpha Software Forum is a place where all feel welcome, forum participants are expected to behave as follows:
  • Be professional in your conduct
  • Be kind to others
  • Be constructive when giving feedback
  • Be open to new ideas and suggestions
  • Stay on topic


Be sure all comments and threads you post are respectful. Posts that contain any of the following content will be considered a violation of your agreement as a member of the Alpha Software Forum Community and will be moderated:
  • Spam.
  • Vulgar language.
  • Quotes from private conversations without permission, including pricing and other sales related discussions.
  • Personal attacks, insults, or subtle put-downs.
  • Harassment, bullying, threatening, mocking, shaming, or deriding anyone.
  • Sexist, racist, homophobic, transphobic, ableist, or otherwise discriminatory jokes and language.
  • Sexually explicit or violent material, links, or language.
  • Pirated, hacked, or copyright-infringing material.
  • Encouraging of others to engage in the above behaviors.


If a thread or post is found to contain any of the content outlined above, a moderator may choose to take one of the following actions:
  • Remove the Post or Thread - the content is removed from the forum.
  • Place the User in Moderation - all posts and new threads must be approved by a moderator before they are posted.
  • Temporarily Ban the User - user is banned from forum for a period of time.
  • Permanently Ban the User - user is permanently banned from the forum.


Moderators may also rename posts and threads if they are too generic or do not property reflect the content.

Moderators may move threads if they have been posted in the incorrect forum.

Threads/Posts questioning specific moderator decisions or actions (such as "why was a user banned?") are not allowed and will be removed.

The owners of Alpha Software Corporation (Forum Owner) reserve the right to remove, edit, move, or close any thread for any reason; or ban any forum member without notice, reason, or explanation.

Community members are encouraged to click the "Report Post" icon in the lower left of a given post if they feel the post is in violation of the rules. This will alert the Moderators to take a look.

Alpha Software Corporation may amend the guidelines from time to time and may also vary the procedures it sets out where appropriate in a particular case. Your agreement to comply with the guidelines will be deemed agreement to any changes to it.



Bonus TIPS for Successful Posting

Try a Search First
It is highly recommended that a Search be done on your topic before posting, as many questions have been answered in prior posts. As with any search engine, the shorter the search term, the more "hits" will be returned, but the more specific the search term is, the greater the relevance of those "hits". Searching for "table" might well return every message on the board while "tablesum" would greatly restrict the number of messages returned.

When you do post
First, make sure you are posting your question in the correct forum. For example, if you post an issue regarding Desktop applications on the Mobile & Browser Applications board , not only will your question not be seen by the appropriate audience, it may also be removed or relocated.

The more detail you provide about your problem or question, the more likely someone is to understand your request and be able to help. A sample database with a minimum of records (and its support files, zipped together) will make it much easier to diagnose issues with your application. Screen shots of error messages are especially helpful.

When explaining how to reproduce your problem, please be as detailed as possible. Describe every step, click-by-click and keypress-by-keypress. Otherwise when others try to duplicate your problem, they may do something slightly different and end up with different results.

A note about attachments
You may only attach one file to each message. Attachment file size is limited to 2MB. If you need to include several files, you may do so by zipping them into a single archive.

If you forgot to attach your files to your post, please do NOT create a new thread. Instead, reply to your original message and attach the file there.

When attaching screen shots, it is best to attach an image file (.BMP, .JPG, .GIF, .PNG, etc.) or a zip file of several images, as opposed to a Word document containing the screen shots. Because Word documents are prone to viruses, many message board users will not open your Word file, therefore limiting their ability to help you.

Similarly, if you are uploading a zipped archive, you should simply create a .ZIP file and not a self-extracting .EXE as many users will not run your EXE file.
See more
See less

Something needs to be done about the help system...

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Something needs to be done about the help system...

    Has anyone ever stumbled upon a documented procedure that seems like it should have been simpler than the documentation suggests by its content? One that appears to have been written to purposely over-complicate the simplest issue, and seems to be designed to sap your confidence my making you feel incompetent in understanding these simple concepts? How about an entire system of "help", requiring endless, round-robin trips to nail down an answer, and after turning back from many dead-ends, taking several hours to answer a 10 second question? And how did you feel when you finally discovered that it wasn't your fault, but was caused by vague, poorly written, or generally incomplete instructions presented by an otherwise flawless software package?

    Welcome to the Alpha Anywhere help documentation and tutorials!

    Alpha Anywhere is absolutely BEST development software EVER created, but has a few serious flaws related to the initial presentation of the software on the Alpha Software website, its documentation, and its learning path.

    The situation that triggered this post and subsequent rant was when I was browsing Alpha's YouTube videos, and I came across an exceptionally valuable video tutorial describing the use of Web Sockets. I was very excited about this, watched the video twice, and then ran off to the boss to present the great news.

    But when I fired up the development environment, the settings on the properties screen which enable the use of web sockets were nowhere to be found. Despite the embarrassment of looking like an idiot who failed to do his homework, I spent more time than I should have had to finding out why this feature was not in my package. Being new to the software, I attributed my difficulties to my unfamiliarity with it, but as time went on, I kept running into obstacles that should not exist in an otherwise perfect product. Now I want to find out why I keep running across features that aren't relevant to the build of Alpha that we purchased, tutorials that won't work due to the same reasons, and why the help system is so incomplete and incomprehensibly "organized".

    <rant>

    My first foray into Alpha Software's poor communications in general began when I was evaluating the Alpha Anywhere software for purchase.

    Forgetting for just a minute about the imperfect presentation on Alpha Software's home page about what Alpha Anywhere is and what it does, a great example of potentially sales-damaging ambiguity can still be found on the 'pricing" page, which remains ambiguous as it fails to convey whether or not the software becomes unusable after a "license term" expires. Sure, most of the information is present on the page, but at face value, it appears to me that a $1,499.00 subscription fee must be paid yearly to use the software.

    At the time I was evaluating development software of this type, companies like IronSpeed were hammering on me daily, and if I had assumed that Alpha actually required the yearly fee, I likely would have selected another platform. The only reason I took the time to contact Alpha to clear up the confusion (and I HAD to contact them via voice, since I had no clear Idea what was being offered from the website) was the fact that Alpha is the only package that provides robust "off-line" features.

    If not for these features, I would have passed-up Alpha and would certainly be developing on a different platform, never knowing what I missed, because I made a bad assumption due to poorly-presented information. I am convinced that Alpha has lost sales due to this very fact.

    In my opinion, Alpha Anywhere is without a doubt the best around for creating and managing the applications for which it was designed, and there is an enormous volume of help and tutorial information regarding its features, controls, and their use. Unfortunately, this large volume of information is useless when it is wrong, irrelevant, outdated, unsearchable, poorly presented, or ambiguously worded.

    The introduction of the Alpha Anywhere package on the Alpha Software website is not the only culprit in its lineup of ambiguous or incomplete information. Whoever is in charge of compiling this information really should take a more objective look at exactly what is being presented, how it is worded, and how complete the information is, and must cease assuming that the reader has knowledge that he or she may not actually posses.

    I say this because Alpha Anywhere's help and reference information is among the worst ever in terms of its organization, not to mention the ambiguous information that I had to filter through on the Alpha Software website when I was evaluating Alpha Anywhere in the first place..

    Citing some of the top examples of unexpectedly bad help documentation, let's take a look at the top of the list in the help system Table of Contents:

    My very first experience was naturally in the "Read me first" section, where I was met with its huge, bold heading that states "Welcome to Alpha Five!"

    Alpha Five? What the hell is "Alpha Five?" I thought I had bought "Alpha Anywhere?" I was fairly certain, although less, now, that I had bought "version 12"? This was a huge put-off, right out of the box, which had me wondering if I had installed the package incorrectly.

    I wondered this because even the installation was complicated by lack of OBVIOUS information concerning which of the installer files vs. the accompanying "patches" should be installed, and where to install them. Once again, all of the information necessary to complete the installation WAS available on the website, but finding out exactly which file did what was not as simple as glancing at some installation instructions laid-out in an intuitive manner. Of the thousands of packages I have installed in my career, this one was one of the most halting because I refuse to install software purely based on my "assumption" of where to install it, and how to set it up. In hindsight, the product was as easy to install as any of the best, so why did I have to go to the trouble of contacting Alpha to get a clear picture about what to do?

    Other entries under the "Read me first" section quickly began to erode my confidence, because here began the journey to discover the actual difference between a "desktop" application vs a "web" application; but I guess any idiot should know that.

    Well, I didn't, and I'm still not entirely sure, at least from the context of the Alpha development environment..

    But the sections I was reading started to create many more questions than they answered...

    - Why is the first entry under "What's New" an entry titled, "What's New in Version 11?" I was under the assumption that I bought version 12...

    - Why can't I find information about "Alpha Anywhere, V11"; it should be there if the help section has an entry about "What's new in Version 11"...

    - Is version 12 too new to have relevant entries describing what's new in the new version? I didn't recall purchasing a "beta" version after all...

    - And if I am running version 12, why are there no entries in the built-in documentation for this version?

    - Why is the top entry under "References" labeled for A5? I didn't know I was developing in Alpha 5; Isn't this package called Alpha Anywhere?

    - Oh I get it now; "Alpha Anywhere" is a derivative product "powered by" Alpha 5, which, I guess, is not a version, but a product name, because there was no "Alpha 4"?

    - Why is there an entry for "Action Scripting Reference (Desktop)", and none for "Action Scripting Reference (Web Applications)?"

    ...And my list of questions concerning "why, where, how, what version, what's actually compatible, etc, goes on, and on, and on....

    I had to learn about the naming and versioning of Alpha 5 and its various incarnations mainly by osmosis and extrapolation, because unless I wanted to study the revision history of Alpha products through the years, there was no OBVIOUS place to find any verbiage stating simply:

    "Alpha Anywhere is the new name for the Alpha 5 application development package, evolving through its various versions through the years until Alpha 5, V11. When version 12 was conceived, Alpha Software created its new title: "Alpha Anywhere," a derivative product "powered" by "Alpha 5 Version 12. Throughout the documentation, be aware that an extensive number of entries will be found titled for older versions, but due to Alpha's unprecedented maintenance of backward-compatibility throughout its history, all documentation and examples will function in the latest versions, without modification, unless otherwise noted."

    ...Or something to that effect, but with greater accuracy.

    How hard would that have been to include at the top of the "Read me first" section?

    Now, inside the package itself, among the other minor annoyances, there is a commonly repeating situation where I require help on a feature, function, or control, and a dialog box related to the control may have a "help" button.

    But when clicked, Alpha un-helpfully informs me that "There is no help information related to this topic." Really, Alpha? Some of these "missing topics" concern some fairly critical information...

    I absolutely abhor help systems which are loaded with all kinds of verbiage touting what a "feature" can do, but contain no syntactical examples which leaves me no option but to search forums or browse loosely-organized help files for more information, and then, upon finding it, having to struggle through experimentation because the help section is too terse or too ambiguously worded to provide direct, comprehensive help. Yes, the "references" sections in Alpha Anywhere are very extensive. And also practically useless, most of the time, presenting few useful syntactical examples, or links to the same.

    It is becoming exceptionally tiresome gleaning information relevant to my build out of Alpha's poorly-organized help and tutorial system. On too many occasions I have wasted significant amounts of time studying and then trying to apply lessons which turn out to be irrelevant to my particular version because they were created for earlier versions, or some that apply only to pre-release versions having features that I cannot employ, and I don't feel it should be necessary exerting the kind of time and energy required to research whether a given control, feature, or function will actually work with my project, even though I find that better than 90% do work as expected. It's that other 10% that give me headaches.

    There is also no obvious guide illuminating features that do or do not work with my version, and the conceptual presentations on many specific major feature differences are so poor that they fail to provide answers to very basic, yet critical questions, like, "what, exactly, is the difference between a "desktop" vs a "web" application in the context of the Alpha RAD environment?" It has taken me SIX months to get this worked out, and I am still running across surprises, like the necessity for a license to run the "Alpha Desktop Run-time," or why the run-time was necessary, or that it even existed in the first place. Why didn't I know about these requirements when I purchased the package? I would have paid for the additional license, no problem, but I wonder how I missed it?

    I realize that many of the textual examples present in the help documentation have lines that specify whether a particular control can be used within desktop or web applications, and occasionally which builds can be expected to contain controls and features, but this information is not clearly provided when browsing tutorial videos piecemeal.

    For example, somehow, from the help documentation within the development environment, I ended up on the AlphaPedia documentation site, and then on to YouTube, and found myself studying the 'websockets" tutorial series. Never once did the presenter mention that the feature was only available in pre-release versions, so I deemed the feature to be useful for my project, then went about studying the tutorial, downloading the component, and preparing a test project only to find that the properties were missing, but only after I blabbered to the boss that "The Alpha package can also do messaging via web sockets!
    It took an additional hour to find out exactly why this feature wasn't present in my package.

    You know, a lot of this stuff is conceptually simple, and easy enough to get a handle on once a user becomes comfortable with the package. But I find myself in a bad place when intuition fails to provide a solution to a problem which, in the end, turns out to be very easy to solve. But it is easy to obfuscate even the simplest instruction when it is poorly presented and demonstrated.

    My suggestion is this:

    Have the members of the Alpha staff who are responsible for presenting information to other human beings become intimately familiar with the concept of "intuitive information presentation," and then have them review the Alpha website, and the product help documentation, to discover why they are exactly the opposite.

    After that, have them observe a disinterested, inexperienced, third-party as he or she attempts to discover what exactly is being sold on the Alpha website, what is required to set up a system, what is included with a purchase, and how much it costs.

    If such a person can figure out the most basic of any one of these with any certainty, within two hours without help, I swear I'll eat my hat.

    Then, provide them with the same files that were provided to me, and see if they can figure out how to install the package without researching the subject, or asking for help.

    And finally, after they discover how easy it all actually was, and would have been had the information been more intuitive, have them look at the help system and see if it makes the slightest sense.

    If it does, I'll be checking in for cognitive therapy immediately.

    </rant>

    SUMMARY:

    For its website, Alpha needs to create comprehensible summary pages, accessible from a SINGLE location, illustrating foundational concepts without assuming that the reader understands Alpha's paradigm, how Alpha is similar to, or different from other kinds of development software, what support software may be required (like the desktop application run time environment), and exactly what features to expect. It's not that hard.

    The following is an example of the kind of verbiage that would have made it easy (for me, anyway) to ascertain exactly what Alpha is, and is not, along with a shallow overview of how it functions. If any of it is incorrect, it's because Alpha failed to communicate these properties in a comprehensible way:

    Alpha Anywhere is a one-of-a-kind development environment enabling development of complex, data-driven applications that will run on almost any operating system, for mobile and workstation platforms.

    Alpha Anywhere requires very little programming skill to create applications because it generates all the code necessary to bridge the many languages required to run applications on these diverse platforms.

    More advanced programmers can "burrow" into the functions created by Alpha for customization, or create entirely new custom controls, functions, and features. Advanced programmers will also find it easy to employ custom extensions created in other software, such as interfaces using externally developed COM or ActiveX objects.

    Alpha Anywhere is designed to create applications for two distinct environments: Web Server applications for both mobile and desktop on any operating system, and Windows Desktop-specific applications.

    Alpha Anywhere is not a typical RAD environment that compiles low-level code into executable packages; it is more like having an entire staff of the world's best programmers at your fingertips:

    * It does not create compiled executables as a finished project; Alpha Anywhere simultaneously creates server and client-side scripts in multiple languages, leveraging JavaScript, HTML5, CSS, and Ajax, and the finished project runs on a web server, deploying web applications pages to browsers on desktop and mobile devices. The Windows Desktop Runtime Environment is required to deploy Windows Desktop-specific applications to Windows workstations.

    * The major portion of the finished project runs on a server, while the client applications are exhaustively configurable to be run from mobile devices and workstations in a vast variety of modes, from simple access via a common browser, to leveraging deep, device-specific functions on mobile platforms using PhoneGap, integrated phenomenally well into Alpha's Development Environment.

    *Given that the deployment of Alpha Anywhere applications is provided from a central server, only a single instance of an application need be created and maintained; once a finished or updated application is published to the Alpha Application server, it will be updated on all devices as soon as their browser's are refreshed. Applications projects leveraging PhoneGap will create and manage Alpha's server-side code as usual, but the client-side applications must be deployed from a different source.

    *Alpha applications are primarily data-driven, and Alpha Anywhere makes it trivial to connect to almost any database engine in existence. Alpha can work with connected database objects in several modes, and does not present limitations in the way it manipulates database objects; if a user requires access to special functions present within a given database engine which is not available using Alpha's "portable SQL", Alpha easily accommodates the use of the database engines "Native Syntax," erasing any potential limitations.

    *Alpha applications leverage the use of advanced CSS to control the layout, format, and theme of an application without requiring any knowledge of CSS scripting. As with all of its other features, advanced programmers have absolute control over CSS.

    *Alpha Anywhere offers exceptionally deep documentation and tutorial information. Working through Alpha's extensive library of video and textual tutorials, users who have never programmed before can create useful applications within minutes. (Which will become exceptionally more useful if it ever gets organized)

    *A fully-rounded Alpha Anywhere development package contains three parts; The Alpha Anywhere development environment, the Alpha Application Server, and the Windows Desktop Runtime Environment. Each of these packages are sold and licensed separately, unless Alpha Software makes packages available that include two or more products.

    *The "Windows Desktop-specific" paradigm is fading away as it becomes less relevant due to the powerful features available within web-applications. Alpha Software still makes the desktop runtime environment available for deploying Windows Desktop-specific applications, but its benefits are slowly eroding away as its feature set becomes supplanted by more capable web-server applications. (I believe the availability of the runtime environment has been de-emphasized by Alpha because it has become redundant due to the increasing capability of web-applications)

    *Alpha Anywhere is extendable with "feature Packs" that may be offered by Alpha Software for inclusion in the development environment. Feature packs may be made available as paid or free add-ons at Alpha's discretion.

    *The Alpha Anywhere Developer Edition is available for purchase at $1499.00, which includes one full license for the developer environment, one full license for the application server, and all of the benefits of a one-year subscription. Extended subscriptions at $1,499.00 per year provide continued access to updates and upgrades as they become available. A license for the desktop runtime environment is available at an additional fee. Licenses for feature packs may become available for additional cost as well.

    Does the above seem to be blindingly obvious? Perhaps it is to users who are familiar with Alpha Software products, and Alpha's staff, but I defy anyone who is unfamiliar with the product to collect all of the above information exclusively by perusing the website, as doing so requires an uncomfortable amount of assumption.

    Regardless, the text above is a pale representation, glossing over the fantastic capabilities of the Alpha Anywhere package, but it would have provided exactly what I would have needed to know in order to quickly qualify the Alpha Anywhere package as a candidate for our projects, leaving no room for doubt about what it is in general, how much it costs, and what is delivered for the price. Lacking this summary easily added a week to my decision to purchase.

    The forums have been exceptionally useful in sorting out much confusion, but a lot of this could be avoided by executing a thorough examination of the help contents and its organization. There are thousands of perfect entries in the help system that leave no doubt about how to use their described feature, but there are hundreds upon hundreds of others that appear to have been created as place holders containing minimal relevant information, perhaps the intent being to flesh them out later, which appears to have never happened.

    I honestly hope the help system gets revised, and becomes better organized, because much of the time I might have saved using Alpha's Hyper-RAD environment has been absorbed by research into irrelevant or poorly-documented features, and much time asking questions on the forums concerning fundamental issues would be saved by better documentation.

    And I can't help but feel like Alpha Software could improve its bottom line a bit if it would take a good, hard look about how the product is being presented on its website, and revise it for a bit more clarity about what it is, how it is used, and how much it costs.

    I think everything about the Alpha Package itself and the way it is organized and operates is pretty close to perfect, but the learning path has been far steeper than necessary given Alpha's awesome capabilities. I assumed, wrongly it seems, that a package as well engineered and organized as Alpha Anywhere would have had a world-class help system to match.

    #2
    Re: Something needs to be done about the help system...

    The documentation system for Alpha is currently being rebuilt.

    Comment


      #3
      Re: Something needs to be done about the help system...

      Longest. Post. Ever.

      And yes, there was an Alpha 4. That was the DOS product. Trivia - it was originally going to be called Dolphin Software.

      Yup, developers at Alpha have outrun everyone -their competition, their documenters and me, trying in vain to keep up. Despite the documentation problems, as you say, this is terrific software.
      -Steve
      sigpic

      Comment


        #4
        Re: Something needs to be done about the help system...

        I remeber when I did bought my first version of Alpha it was version 7.
        Then the documentation was uptodate. But then we did just have xbasic and almost all were developing desktop. (Yes I did have Alpha server version 7)

        It was that time (version 9) the internet thing really began to hit Alpha.
        After that the development speed has been so quick that the documentation just left behind. (Most of the documentation that time were for desktop.)

        Today the development speed is again much faster. If we think what version 11 was and what version 12 is today. It is almost unbelibable what all features we today have. All doors are open to Alpha developer today.

        I think it is very hard to write documentation to Alpha and keep it uptodate. Lot of dialogs and lot of widgets. Hundreds of different alternatives. And they change all the time. New features comes day after day.

        We did have xbasic, but now we have also css, javascript, .net , node, web sockets, rest api, sql, json, ..The list is endless. It is just an impossible job to document all this in Alpha.

        I think they concentrate to examples at the moment (mostly videos) and what changes they make (release notes).

        But I hope we some day have a xbasic uptodate language reference.

        I know that they have priorities and that they are doing their best in Alpha at the moment and that they understand the problems also from developers point of view.

        Comment


          #5
          Re: Something needs to be done about the help system...

          With DOS we started with 4 install floppydisks

          Comment


            #6
            Re: Something needs to be done about the help system...

            Originally posted by bea2701 View Post
            With DOS we started with 4 install floppydisks
            Oh, now I understand the name Alpha 4...

            Comment


              #7
              Re: Something needs to be done about the help system...

              Originally posted by kkfin View Post
              Oh, now I understand the name Alpha 4...


              At that time Bill Gates was working as a Windows cleaner employee

              Comment


                #8
                Re: Something needs to be done about the help system...

                It is a daunting task to keep the documentation up to date. They are working on it now and it's in the road map. Unfortunately they ignored to so long they will never catch up. But at least they are now working on it, so that's good.
                Peter
                AlphaBase Solutions, LLC

                [email protected]
                https://www.alphabasesolutions.com


                Comment


                  #9
                  Re: Something needs to be done about the help system...

                  I think the new upcomming release of Alpha should be called ROADRUNNER miep miep

                  Comment


                    #10
                    Re: Something needs to be done about the help system...

                    Yeah, I think general consensus has long been the documentation has been the weak link.
                    Let's hope that it really does get some long overdue attention.
                    Alpha Anywhere v12.4.6.5.2 Build 8867-5691 IIS v10.0 on Windows Server 2019 Std in Hyper-V

                    Comment


                      #11
                      Re: Something needs to be done about the help system...

                      I learned Alpha mostly through this message board and taking as many classes as possible. I also created a component I called "Cookbook" and every time I find some code I like I put it in the cookbook. Because the message board has been so good to me I try to pay it forward by adding videos or posts of things I discover to be helpful. The alpha help model really is the short video. This seems to be the fastest way to learn. Also, at the speed Alpha is developing, they can get the video to us quickly. I set aside about 10 mins per day to read the board and look at any new videos. It's a paradigm shift for sure.

                      Comment


                        #12
                        Re: Something needs to be done about the help system...

                        Originally posted by lvasic View Post
                        I learned Alpha mostly through this message board and taking as many classes as possible. I also created a component I called "Cookbook" and every time I find some code I like I put it in the cookbook. Because the message board has been so good to me I try to pay it forward by adding videos or posts of things I discover to be helpful. The alpha help model really is the short video. This seems to be the fastest way to learn. Also, at the speed Alpha is developing, they can get the video to us quickly. I set aside about 10 mins per day to read the board and look at any new videos. It's a paradigm shift for sure.
                        Your "Cookbook" is pretty much what I am putting together in Alpha's code library, collecting snippets of code from worked-out examples.

                        I can imagine that documenting Alpha Anywhere in a format that will satisfy all users is next to impossible, but I should soundly restate that I have no problem with the amount or the topical coverage offered by the help files and videos; just its organization, terse/incomplete examples, missing topics, conflicting information, outdated headings, ambiguous entries, and the occasional links that lead to a page or two on the Alpha website that won't display because the pages in that section report that the application server isn't properly licensed.



                        Twin Peaks is going to receive a P.O. from us shortly for training materials since they seem to be fairly up to speed.

                        Meanwhile, I've been re-creating the Alpha help system as I go along in Microsoft One-Note, organized in a way that makes more sense to me as I get my mind wrapped around the Alpha Anywhere system.

                        The largest difficulty may be that I have had to depart from data-bound controls in many parts of this project because of our extensive use of many-to-many linking tables, requiring a butt-load of Xbasic code:



                        Alpha is simply unbelievable in the way it assists the creation of complex table structures, but the automated functions, like drop-down-box cascading (or any other cascading) aren't designed to handle lookups from the linking tables along with the referenced table data meant to land in the drop-down choice list.

                        And that's just fine; no complaints about that...we knew when we started this project that there would be a lot of custom code.

                        So far, it looks like cascading controls in Alpha don't like being used with more than one table as a data source (and if I'm wrong, it's Alpha's fault), but I refuse to adjust my table structures just to accommodate easier programming; cascading Alpha controls works very well with flat, single tables, but it does not play nice when custom queries having complex joins are used from within the drop-down control's choice list properties to define the displayed and index values expected to filter data from the referenced field in the parent control.

                        For this reason, I am spending most of my time in the underbelly of the Alpha codebase where most sane people wouldn't be in the first place since the entire Alpha Anywhere package was designed to insulate the user from having to write custom code. It's easy to imagine that Alpha didn't place much priority on the creation of documentation for low-level code when its target user-base is supposed to be using the package as it was designed; programmable legos for dummies.

                        And I would be willing to bet that those who are very experienced with Alpha are probably wondering what all the complaining is about, because they know the system so well that every topic in the documentation makes perfect sense, and its placement is as logical as the complexity of the software will allow.

                        But I don't know it very well, so I could benefit from some learning path related to custom coding in this environment, more so than the "insert tab A into slot B, and world hunger is solved!" approach.

                        So far, I have never been able to open one or two examples that directly assist me to complete a function by using a direct search. Search terms that one would expect to provide multiple results don't really provide much help at all; I usually stumble across the information accidentally after moving on to the next challenge and studying its examples.

                        It only took 5 days to figure out how to get two drop-down boxes to cascade from linking tables and pass the converted JavaScript array back to the caller. In the end, it was EASY, but the help files and videos kept dragging me off in different directions (because Alpha is so flexible, there are often many, many ways to accomplish the same thing, but ORGANIZATION...) If I had stayed the course and kept adamant about using native SQL from within Xbasic, I might have finished a few hours sooner.

                        Now, back to the 8+ hour study as I attempt to populate a list box, programmatically, from terse/incomplete examples given in 12 help files and nine videos bridging how to do so using partial examples with poorly illustrated snippets of JavaScript, Xbasic, both, and neither, possibly using functions that the help system says will only work from the desktop, but are referenced from the UX sections exhaustively.


                        Here's what took me five days to accomplish with the guidance of the help system in its present state:

                        The following code is an AJAX callback from Xbasic built to cascade two drop-down boxes.

                        The first function, "populateCategory" is called from the client-side "onRenderComplete" event. It selects unique records from the table "scp_block_instructions_category" by filtering them via an inner join to table "scp_block_instructions_sub_category_link", which contains only indices referencing back to rows in "scp_block_instructions_category". Why? Because ""scp_block_instructions_category" contains entries for both categories AND sub-categories.

                        The next function, "populateSubCategory" is called from the "onChange" event fired by the drop-down box "DD_CATEGORY". It pulls a result set from table "scp_block_instructions_sub_category_link" filtered by the key value passed to the routine, and then the filtered record from each match queried from table "scp_block_instructions_category".

                        Code:
                        function populateCategory as c (e as p)
                        
                        'debug(1)
                        
                        Dim txt as c
                        Dim list as c
                        Dim catlist as c
                        Dim subcatlist as c
                        Dim js as c	
                        Dim flag as l
                        Dim sqlcommand as c
                        Dim cn as sql::Connection
                        'Dim args as SQL::Arguments
                        Dim rs as SQL::ResultSet
                        
                        'args.add("category_id","1")
                        
                        
                        
                        flag = cn.open("::Name::MRIAPP01_MRISCOPE")
                        
                        	If flag = .f. then
                        		populateCategory = "alert('Could not connect to MRIAPP01_MRISCOPE database.');"
                        		exit function
                        	end if
                        
                        sqlcommand = "SELECT DISTINCT scp_block_instructions_category.category, scp_block_instructions_category.id FROM scp_block_instructions_sub_category_link scp_block_instructions_sub_category_link INNER JOIN scp_block_instructions_category scp_block_instructions_category ON scp_block_instructions_sub_category_link.category_id = scp_block_instructions_category.id ORDER BY scp_block_instructions_category.id"
                        
                        'sqlcommand = "SELECT * FROM scp_block_instructions_category"
                        ' WHERE Project_id = :projid"
                        
                        flag = cn.Execute(sqlcommand)
                        ',args)
                        
                        	If flag = .f. then
                        		cn.close()
                        		populateCategory = "alert('Could not execute SQL statement.');"
                        		exit function
                        	end if
                        
                        rs = cn.ResultSet
                        
                        flag = rs.NextRow()
                        
                        	If flag = .f. then
                        		'No records in ResultSet
                        		cn.FreeResult()
                        		cn.close()
                        		populateCategory = ""
                        	end if
                        
                        txt = ""
                        
                        
                        'Create Category List
                        
                        'while flag
                        	
                        	
                        	
                        'end while
                        
                        
                        
                        'Create JavaScript Array
                        
                        'debug(1)
                        
                        	txt = "['Select Instruction Category','0']" + crlf()
                        
                        	while flag
                        		txt = txt + "['" + js_escape(rs.Data("category")) + "','" + js_escape(rs.Data("id")) + "']" + crlf()
                        		flag = rs.NextRow()
                        	end while
                        
                        
                        'Populate "list" string with crlf delimited JavaScript array...
                        list = "[" + crlf_to_comma(txt) + "]"
                        js = <<%txt%
                        var data = __data__;
                        var curData = '';
                        var clearExisting = true;
                        {dialog.object}.populateDropdownBox('DD_CATEGORY',data,clearExisting);
                        %txt%
                        js = stritran(js,"__data__",list)
                        populateCategory = js
                        
                        end function
                        
                        
                        
                        
                        
                        
                        
                        function populateSubCategory as c (e as p)
                        
                        'debug(1)
                        
                        Dim txt as c
                        Dim list as c
                        Dim js as c	
                        Dim idx_flag as l
                        Dim out_flag as l
                        Dim sqlcommand as c
                        Dim cn as sql::Connection
                        Dim idx_rs as SQL::ResultSet
                        Dim out_rs as SQL::ResultSet
                        Dim Category_LU as n
                        Dim SubCategory_LU as n
                        
                        
                        'Assign category variable sent to this sub at "e._currentRowDataNew.DD_CATEGORY" to "Category_LU"
                        Category_LU = e._currentRowDataNew.DD_CATEGORY
                        
                        idx_flag = cn.open("::Name::MRIAPP01_MRISCOPE")
                        
                        	If idx_flag = .f. then
                        		populateSubCategory = "alert('Could not connect to MRIAPP01_MRISCOPE database.');"
                        		exit function
                        	end if
                        
                        'Get result set from "scp_block_instructions_sub_category_link"
                        
                        sqlcommand = "SELECT * FROM scp_block_instructions_sub_category_link WHERE category_id = '" + Category_LU + "'"
                        
                        idx_flag = cn.Execute(sqlcommand)
                        
                        	If idx_flag = .f. then
                        		cn.close()
                        		populateSubCategory = "alert('Could not execute SQL statement.');"
                        		exit function
                        	end if
                        
                        idx_rs = cn.ResultSet
                        
                        idx_flag = idx_rs.NextRow()
                        
                        	If idx_flag = .f. then
                        		'No records in ResultSet
                        		cn.FreeResult()
                        		cn.close()
                        		populateSubCategory = ""
                        	end if
                        
                        'The result set for "scp_block_instructions_sub_category_link" has been collected into SQL result set object "idx_rs"
                        
                        txt = ""
                        
                        	txt = "['Select Instruction Sub-Category','0']" + crlf()
                        
                        	while idx_flag
                        	
                        		'Get subcategory ID from current record in "scp_block_instructions_sub_category_link" result set
                        		SubCategory_LU = idx_rs.Data("sub_category_id")
                        	
                        		'Assemble SQL command to get matching record from "scp_block_instructions_category"
                        		sqlcommand = "SELECT * FROM scp_block_instructions_category WHERE id = '" + SubCategory_LU + "'"
                        	
                        	
                        		'Execute assembled query...
                        		out_flag = cn.Execute(sqlcommand)
                        	
                        			'Test for successful execution against "scp_block_instructions_category"
                        			If out_flag = .f. then
                        				cn.close()
                        				populateSubCategory = "alert('Could not execute SQL statement.');"
                        				exit function
                        			end if
                        	
                        		out_rs = cn.ResultSet
                        	
                        		'Test for empty result set...
                        		out_flag = out_rs.NextRow()
                        	
                        			If out_flag = .f. then
                        				'No records in ResultSet
                        				.Hide("DD_SUB_CATEGORY")
                        				cn.FreeResult()
                        				cn.close()
                        				populateSubCategory = ""
                        			end if
                        	
                        		'If we made it this far, we have one row from "scp_block_instructions_category" 
                        		'where "scp_block_instructions_category.id" = "scp_block_instructions_sub_category_link.sub_category_id"
                        	
                        		'Create JavaScript Array
                        		txt = txt + "['" + js_escape(out_rs.Data("category")) + "','" + js_escape(out_rs.Data("id")) + "']" + crlf()	
                        	
                        		idx_flag = idx_rs.NextRow()
                        	end while
                        
                        'Populate "list" string with crlf delimited JavaScript array...
                        list = "[" + crlf_to_comma(txt) + "]"
                        js = <<%txt%
                        var data = __data__;
                        var curData = '';
                        var clearExisting = true;
                        {dialog.object}.populateDropdownBox('DD_SUB_CATEGORY',data,clearExisting);
                        %txt%
                        js = stritran(js,"__data__",list)
                        populateSubCategory = js
                        
                        end function
                        It looks like populating the list control is going to be extremely similar, but the help system won't return much help concerning the use of methods related to "{dialog.object}" and how the various methods work in this context.

                        I'll figure it out eventually.

                        Comment


                          #13
                          Re: Something needs to be done about the help system...

                          You may have already figured this out, but stick with the UX controls and the List Controls. You have the most control in those areas. This is a good time to start using Alpha because the UX control and the list control are game changers. Build everything like it is on the ipad with Panels. Use mobile techniques for building your interfaces eg, pick lists etc. It works great on the web desktop and then it's device agnostic too.

                          Comment


                            #14
                            Re: Something needs to be done about the help system...

                            regarding post # 12
                            disclaimer: i am a hobbyist not anywhere near your standard , just by looking at way you write the code. but i do have a question.
                            The first function, "populateCategory" is called from the client-side "onRenderComplete" event. It selects unique records from the table "scp_block_instructions_category" by filtering them via an inner join to table "scp_block_instructions_sub_category_link", which contains only indices referencing back to rows in "scp_block_instructions_category". Why? Because ""scp_block_instructions_category" contains entries for both categories AND sub-categories.

                            The next function, "populateSubCategory" is called from the "onChange" event fired by the drop-down box "DD_CATEGORY". It pulls a result set from table "scp_block_instructions_sub_category_link" filtered by the key value passed to the routine, and then the filtered record from each match queried from table "scp_block_instructions_category".
                            since the post is rather long and the code is rather long i am unable to grip the question you have about cascading dropdown when multiple tables are involved.
                            since you say alpha does well with flat table and the problem comes when multiple tables are involved and the code you have generously provided seems that it shows that when you select a record from one table then it uses the primary key to search the second table to construct the dropdown, and so on so on. is this correct?
                            or i am proving what i said that i am nowhere near your standard.
                            thanks for reading

                            gandhi

                            version 11 3381 - 4096
                            mysql backend
                            http://www.alphawebprogramming.blogspot.com
                            [email protected]
                            Skype:[email protected]
                            1 914 924 5171

                            Comment


                              #15
                              Re: Something needs to be done about the help system...

                              Originally posted by lvasic View Post
                              You may have already figured this out, but stick with the UX controls and the List Controls. You have the most control in those areas. This is a good time to start using Alpha because the UX control and the list control are game changers. Build everything like it is on the ipad with Panels. Use mobile techniques for building your interfaces eg, pick lists etc. It works great on the web desktop and then it's device agnostic too.
                              Thank you!

                              I only recently began to suspect that the "Windows desktop" environment and its controls were being phased out because they would be redundant and much less powerful than the UX/Web applications environment. I never intended to use the Windows Desktop runtime environment, but it added to my confusion when I discovered references to "desktop" vs "web" applications withing the help system, and the first time I installed the Alpha development software, it presented a dialog asking if it should set up the environment for the production of desktop applications, web applications, or both. Being unfamiliar with Alpha, I let it set up for both. I never did find any definitive answers about the difference between the two.

                              Now that I am fairly convinced that the "Windows Desktop" parts are irrelevant for this project, I'll be following your advice and concentrate on the UX and list controls.

                              In fact, a few minutes ago I started working through some help documents describing the use of UX list controls. Too bad one of these same documents describes great benefits using dialog controls, which don't appear to be present in the build I am working from.

                              Comment

                              Working...
                              X