Kirk, I have one word that will do all of what we are after : "This"
It works in listbox, which is a form object, any reason it can't be extended to other form objects? Again, I don't think anyone on this thread is complaining, we are just trying to understand how to use the new functionality to do what we need to. We need to interact with the users through some entry areas, call it objects, fields, variables. Whatever. And sometimes do silly things like verification of values, formatting to a certain standard etc. From everything that was presented so far, there is no way to utilize the new methodology (call it ORDA, dot notation whatever) as a data source of an entry area without using some part of classic 4D. Coming up with all sorts of workarounds is fine, but it is still a workaround. Cheers, will probably see you later today..... Lahav -----Original Message----- From: 4D_Tech <[email protected]> On Behalf Of Kirk Brooks via 4D_Tech Sent: Friday, May 1, 2020 1:21 PM To: 4D iNug Technical <[email protected]> Cc: Kirk Brooks <[email protected]> Subject: Re: Object notation replacement for use of Self in a script — v18 Chris, On Tue, Apr 28, 2020 at 10:53 PM Chris Belanger via 4D_Tech < [email protected]> wrote: > Generic programming of vars on a form is very complicated when one > uses object attributes for the data source. > > For example, on screen you make a simple text input object named > “enCompany”. It’s data source is Form.en_Company.Name ( i.e. > [Company]Name ) > In ‘classic 4d”, where the data source would be [Company]Name, one can > code its script: > TRIM ( Self ) And TRIM would simply take a POINTER, and you can perform operations on the > data that the user typed into that field. (Such as trim off leading & > trailing spaces). > So what does Self actually point to? The object on the form the field is displayed in or the actual field in the database? The two are not the same thing. In classic 4D that distinction is never really apparent to us. It didn't need to be and we didn't want to have to deal with it. It was part of the how we perceived working with 4D: a field on a form _was_ the data. It's also why 4D forms from ages past are so overloaded with data processing being done on the form itself instead of separated into more independent modules. IP and process vars enabled that trend even more. This is a main reason opening up one of these old databases in v18 and attempting to change something is so fraught. But I digress. With modern 4D tools you just don't do things that way anymore. Working with ORDA I rarely find a pointer a good solution to anything except managing form objects like buttons. We are saddled with some unfortunate nomenclature here because a 'form object' has nothing to do with an object in Form. 'Form objects' are those named widgets on the form. They _may_ be populated with data from something in Form, or a variable, or a list box and so on. A big conceptual difference between classic 4D and modern 4D is the distinction between a form object and the data it presents is explicit. So when I set the data source for an input object to be Form.myEntity_o.Name where myEntity_o is a reference to an entity in Company the actual data and the form object are no longer implicitly the same thing like they are in classic 4D. I have a reference to the entity and I have a form object. They are two different things. I can't get a pointer to the form object in this case. Why not? First, what do I want to do with it? If I want to manage the form object itself, visibility, enterability, etc., I don't need a pointer, I can just use the object name. If I want to do something with the data, as you do, the pointer won't work because there are no pointers to object references. Why not? I'm sure there are technical reasons but they don't matter to me because you don't need it. You don't need it because you have a reference: myEntity_o. If you want to change the data you do that with the reference - not through whatever that data happens to be displayed in. This is a fundamental, conceptual difference between using ORDA and classic 4D. In classic 4D we have tables, records, fields and pointers to reference them. In ORDA we have datastores, dataclasses, entities, properties and we use references. In the example of the name field you can still put code in the form object to react to On Data Change. And you can still pass data to a generic method to manage it. Two ideas come to mind: 1) method takes an entity // myMethod1 (entity) // $1 is a Company entity - check the name, address, etc. for proper formatting 2) method is a function Form.myEntity_o.Name:=myMethod2(Form.myEntity_o.Name) Is the form you are working with an existing form or one you created from scratch? I find it much easier to use the new approaches on new forms. If not by totally rewriting them then by separating out the new work into a subform. That lets me design the form using a modern approach without having to do too much to the old one. I said this someplace else recently and it applies here: just because 4D (still) provides some tools for doing things doesn't mean it's a good tool to use. For instance, would anyone make a new form and use DRAG AND DROP PROPERTIES? ORDA isn't an evolutionary step in 4D - it's a revolutionary step. It really is like learning a new language. 18r3 is that way for sure. I had time to begin updating my old 4D coding ideas starting a couple of years ago. It wasn't easy and it made me feel old. But I kept at it. And it became a lot easier and them fun. Now I'm amazed at things I can do simply by setting up the data structure. Another big difference for me in this. Taking time to get the structure right is time well spent. -- Kirk Brooks San Francisco, CA ====================== ********************************************************************** 4D Internet Users Group (4D iNUG) Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:[email protected] ********************************************************************** ********************************************************************** 4D Internet Users Group (4D iNUG) Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:[email protected] **********************************************************************

