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]
**********************************************************************

Reply via email to