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

Novell Server - Records Crossover

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    #31
    Re: Novell Server - Records Crossover

    Manny, the autoincrement field rule looks to the record in your table that has the highest order number and then increments it. In a multi-user setting, if two workstatioins begin a new order at about the same time, the field rule on each machine will find the SAME highes field value, since no new records have been saved to your table. Question 1 for you: Do you have questions about this?

    Next, Alpha displays the incremented order number on your form. Until that record is commited to the table it's only a provisional order number. If the other workstation saves their record to the table first, then this work station's field value will be checked against the table when its order is commited. If it's no longer highest, it will be incremented again. Question 2 for you: Do you have questions about this?

    Next, the display of detail records from your linked one to many child table is "crossing over" because the two workstations have, at least temporarily, the same auto-incremented order number. The overlap goes away when the second workstation saves their record, because the just saved record now has a different order number. Handled transparently for you by the field rule. Question 3 for you: Do you have questions about this?

    Suggestions to prevent the display of child table records entered on other workstations in a multi-user setting:

    a) Force each new order to be immediately saved. This commits the record to the table so the next workstation's field rule will compute a DIFFERENT order number. Use this approach if you must use the autoincrment field rule.

    b) An alternative that will work if you must use the autoincrmenet field rule is to suppress the display of the linked child table records on your form until you've saved the order header. If you do it this way you don't need to force the newly begun header record to be saved first.

    c) An alternative that many prefer is to NOT use the autoincrmenet field rule, but to roll your own incrementing script that fires when the parent table record is saved. Sample code has already been posted here. This typically involves retrieving the last order number from a table OTHER than your order header table, and then immediately commiting a newly incremented field value to that table. This works well if it's done when the order header record is saved, and before you try to begin entering linked child table records.

    Last question: Do you have questions about these ideas?
    Last edited by Tom Cone Jr; 12-05-2008, 01:10 PM. Reason: Expand explanations a bit.

    Comment


      #32
      Re: Novell Server - Records Crossover

      Thanks to all....and just to clear things up...I would never yell at Manny....I know better....
      We've been working together for 15 years!

      I need to get more attention and boy I got it!

      We've tried to save the record as soon as we start however there are several fields in the header that need to be completed before we can save the record. Buy the time we complete the fields I can see the other user parts.

      Next?

      Comment


        #33
        Re: Novell Server - Records Crossover

        Originally posted by NancyL View Post
        We've tried to save the record as soon as we start however there are several fields in the header that need to be completed before we can save the record. Buy the time we complete the fields I can see the other user parts.

        Next?
        Hhhmmm...

        What if you hide the child browse until the header is saved?

        or

        You could have the header form based upon the table only. When the header is saved, auto-popup a form based upon the set, or child table - either one w. the browse.

        Really, there are a million ways to do this (I'm exaggerating only slightly).
        Peter
        AlphaBase Solutions, LLC

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


        Comment


          #34
          Re: Novell Server - Records Crossover

          P.S. Also, (don't take offense) you have missed the point of saving the header record 1st (programmatically) then filling in the remaining fields after the fact.
          Peter
          AlphaBase Solutions, LLC

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


          Comment


            #35
            Re: Novell Server - Records Crossover

            I would never yell at Manny....I know better....
            It's not Manny I was talking about :) Your tone using ALL CAPS like in message 27 will not motivate people here to help you IMHO. It is important to note that this is a peer supported board and is not an "Official Alpha" support system. The people on this board are donating their time.

            We've tried to save the record as soon as we start however there are several fields in the header that need to be completed before we can save the record.
            Forget about using the built in field rules for fields being required and roll your own field rules that are implemented at the appropriate time (when you leave the header section)- this eliminates any issue you have as far as saving the header first with it's unique id field. This is the most straightforward way to accomplish your end goal......in my opinion at least.

            Comment


              #36
              Re: Novell Server - Records Crossover

              In case you want to go the way I mentioned above. Here is another function I wrote to check for a required field. It can be placed right before you leave the header section - just use it for each field you want to be required. Example - if you have 4 fields to check to be required - then you would use this function 4 times.

              Code:
              'Date Created: 29-Aug-2006 02:14:11 PM
              'Last Updated: 14-Feb-2007 07:40:47 PM
              'Created By  : Jeff
              'Updated By  : Jeff Kletrovets
              
              FUNCTION Reqd_Fld_Check as L (FldToCheck as C)
              	'****** Place this function in the OnPush event of the Save Button ************
              ' ****** Sample Required Field Checking - OnPush event of Save Button
              'IF Reqd_Fld_Check("empidf")=.F. then
              '	topparent:empidf.activate()
              'stop
              'end if
              ' ***** End of Sample Code for Required Field Checking
              	DIM TblReqd as P
              	DIM FldReqd as P
              	TblReqd = table.current()
              	fldreqd = TblReqd.field_get(fldtocheck)
              
              	' If table is in Enter Mode then we need to perform the check for an empty field.
              
              	SELECT
              		CASE tblreqd.mode_get() = 2
              			' ************* ENTER MODE *********** Enter Mode = 2
              			IF fldreqd.is_blank() THEN
              				' ********  Now get the Default Descrptive Name to display in the message box.
              				'This will make this function dynamic by displaying the default descriptive name in
              				'the message box.
              				'Getting field name here
              				fldlong = tblreqd.field_get(fldtocheck)
              
              				'If the table has rules get the default descriptive name which is long_name
              				IF fldlong.has_rules() THEN
              					rules = fldlong.rules_get()
              					long_name = rules.Long_Name
              				ELSE
              					long_name = "Data Entry"  'use this as default text in message box if no rules
              				END IF
              
              				' *********** End of Get Default Descriptive Name *********
              				' ***********  Now show error message box ***************
              				ui_msg_box("Required Field","The "+long_name+" field must be filled in!",UI_STOP_SYMBOL)
              				Reqd_Fld_Check = .F.
              '				vcommand=eval("fldtocheck+'.activate()'")
              '				evaluate_template(vcommand)
              '				return						
              '				end
              			ELSE
              				'Field has data entered so it is ok to move on
              				Reqd_Fld_Check = .T.
              
              			END IF
              
              		CASE tblreqd.mode_get() = 1
              			' ************* EDIT MODE *********** Edit Mode = 2
              			IF fldreqd.is_blank() THEN
              				' ********  Now get the Default Descrptive Name to display in the message box.
              				'This will make this function dynamic by displaying the default descriptive name in
              				'the message box.
              				fldlong = tblreqd.field_get(fldtocheck)
              
              				'If the table has rules get the default descriptive name which is long_name
              				IF fldlong.has_rules() THEN
              					rules = fldlong.rules_get()
              					long_name = rules.Long_Name
              				ELSE
              					long_name = "Data Entry"
              				END IF
              
              				' *********** End of Get Default Descriptive Name *********
              				' ***********  Now show error message box ***************
              				ui_msg_box("Required Field","The "+long_name+" field must be filled in!",UI_STOP_SYMBOL)
              				Reqd_Fld_Check = .F.
              '				vcommand=eval("fldtocheck+'.activate()'")
              '				evaluate_template(vcommand)
              '				return
              '				end
              			ELSE
              				'Field has data so it is ok to move on
              				Reqd_Fld_Check = .T.
              
              			END IF
              
              	END SELECT
              	
              
              END FUNCTION

              Comment


                #37
                Re: Novell Server - Records Crossover

                THANK YOU JEFF....opps just kidding thank you Jeff and to all of you.

                Didn't mean to yell......

                You all seem to understand how important required fields are. These users will pass over anything they're allowed to.

                Jeff Manny is going over what you sent and seeing what he do with it.

                Thank you and I'll be back!!!

                Comment


                  #38
                  Re: Novell Server - Records Crossover

                  Sure thing....for my function to work properly you just have to fill in the "Default Descriptive Name" in the Field Rules for the table. The function will go get that name and then let the user know which field is required by name.

                  For example, if a field is not filled in then the function will pop up a message that says something to the effect of:

                  "The Customer ID field is Required"

                  Where Customer ID is the default descriptive name for the CUSTID field.

                  Comment


                    #39
                    Re: Novell Server - Records Crossover

                    Nancy,

                    Attached is a very simple example of saving the header record first. Try this on your network. Have two or more users start a new record at the same time and enter a bunch of child records. See if this doesn't work for you. Have Manny the Programmer look at the code in the two buttons - it's trivial!

                    Try it! What the hell. It might actually work for you!
                    Peter
                    AlphaBase Solutions, LLC

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


                    Comment


                      #40
                      Re: Novell Server - Records Crossover

                      Thank you Tom! I have used your idea of hiding the child table. In so doing, I have added a button called 'New Item' and the following code and it works fine:

                      if Invoice_header->Ordered_by <> "" then
                      Orders:browse1.commit()
                      browse1.new_record()
                      end if

                      Thank again.

                      Manny

                      Comment


                        #41
                        Re: Novell Server - Records Crossover

                        Hi Nancy,
                        I just wanted to reply to your question regarding Novell servers :

                        "Is there a downside to using Alpha5V9 on Novell versus Windows 2003 server"

                        In a nutshell, no. My current employer, and previous employer, run our A5 apps from a Novell server without issues, and work very well. In fact, I far prefer Novell over Windows, just because its so solid.

                        Best wishes to you on your application development.
                        Land of the Free, Because of the Brave
                        Support our US Military

                        Comment

                        Working...
                        X