Author | Topic: Automatic Data Persistence Problem | |
---|---|---|
![]() | Jonathan Leeming | Automatic Data Persistence Problem on Fri, 23 Jun 2017 08:13:26 -0600 Hi... Looking through websamples/index.cxp I came across entity storage. In the comments of the appdata.cxp example it refers to ::Application:Data:TotalRequestCount however when I put the lines: IF VALTYPE(::Application:Data:TotalRequestCount) == "N" ::Application:Data:TotalRequestCount++ ELSE ::Application:Data:TotalRequestCount := 1 ENDIF I get an error: Object has no member variable with this name If I simply use ::Data:TotalRequestCount I do not get an error however the scope ii only for the current page and I'm interested in it being application wide as per the documenation... Application-specific data can be read or written by accessing ::Application:Data |
![]() | Nestor G. Torres | Re: Automatic Data Persistence Problem on Mon, 26 Jun 2017 09:49:00 +0200 Hi Jonathan, What you should be using instead of "::Application" is the root name or first CXP application name executed when opening your web application. for example: mycxpapp.cxp and within this cxp app setup your variables like: ::mycxpapp:Data:TotalRequestCount := 1 Then that variable will be seen by all other cxp app executing from your web page. Sometimes you must use a crystal ball when reading the doc's. Hope this helps. Kind regards Nestor On 2017/06/23 16:13, Jonathan Leeming wrote: > Hi... > > Looking through websamples/index.cxp I came across entity storage. In > the comments of the appdata.cxp example it refers to > ::Application:Data:TotalRequestCount however when I put the lines: > > IF VALTYPE(::Application:Data:TotalRequestCount) == "N" > ::Application:Data:TotalRequestCount++ > ELSE > ::Application:Data:TotalRequestCount := 1 > ENDIF > > I get an error: Object has no member variable with this name > > If I simply use ::Data:TotalRequestCount I do not get an error however > the scope ii only for the current page and I'm interested in it being > application wide as per the documenation... > > Application-specific data can be read or written > by accessing ::Application:Data |
![]() | Jonathan Leeming | Re: Automatic Data Persistence Problem on Mon, 26 Jun 2017 08:11:59 -0600 On 6/26/2017 1:49 AM, Nestor G. Torres wrote: > Hi Jonathan, > > What you should be using instead of "::Application" is the root name or > first CXP application name executed when opening your web application. > for example: mycxpapp.cxp and within this cxp app setup your variables > like: > ::mycxpapp:Data:TotalRequestCount := 1 > > Then that variable will be seen by all other cxp app executing from your > web page. > > Sometimes you must use a crystal ball when reading the doc's. > > Hope this helps. > Kind regards > Nestor > > > On 2017/06/23 16:13, Jonathan Leeming wrote: >> Hi... >> >> Looking through websamples/index.cxp I came across entity storage. In >> the comments of the appdata.cxp example it refers to >> ::Application:Data:TotalRequestCount however when I put the lines: >> >> IF VALTYPE(::Application:Data:TotalRequestCount) == "N" >> ::Application:Data:TotalRequestCount++ >> ELSE >> ::Application:Data:TotalRequestCount := 1 >> ENDIF >> >> I get an error: Object has no member variable with this name >> >> If I simply use ::Data:TotalRequestCount I do not get an error however >> the scope ii only for the current page and I'm interested in it being >> application wide as per the documenation... >> >> Application-specific data can be read or written >> by accessing ::Application:Data |
![]() | Nestor G. Torres | Re: Automatic Data Persistence Problem on Tue, 27 Jun 2017 06:53:28 +0200 Hi Jonathan, Try using "::Session" in your first CXP application executed when opening your web application. for example: myfirstcxpapp.cxp and within this cxp app setup your variables like: ::Session:TotalRequestCount := 1 /* drop the data qualifier */ Then that variable should be seen by all other cxp app executing from your web page within the User's. Hope this helps. Kind regards Nestor On 2017/06/26 16:11, Jonathan Leeming wrote: > On 6/26/2017 1:49 AM, Nestor G. Torres wrote: >> Hi Jonathan, >> >> What you should be using instead of "::Application" is the root name >> or first CXP application name executed when opening your web >> application. for example: mycxpapp.cxp and within this cxp app setup >> your variables like: >> ::mycxpapp:Data:TotalRequestCount := 1 >> >> Then that variable will be seen by all other cxp app executing from >> your web page. >> >> Sometimes you must use a crystal ball when reading the doc's. >> >> Hope this helps. >> Kind regards >> Nestor >> >> >> On 2017/06/23 16:13, Jonathan Leeming wrote: >>> Hi... >>> >>> Looking through websamples/index.cxp I came across entity storage. >>> In the comments of the appdata.cxp example it refers to >>> ::Application:Data:TotalRequestCount however when I put the lines: >>> >>> IF VALTYPE(::Application:Data:TotalRequestCount) == "N" >>> ::Application:Data:TotalRequestCount++ >>> ELSE >>> ::Application:Data:TotalRequestCount := 1 >>> ENDIF >>> >>> I get an error: Object has no member variable with this name >>> >>> If I simply use ::Data:TotalRequestCount I do not get an error >>> however the scope ii only for the current page and I'm interested in >>> it being application wide as per the documenation... >>> >>> Application-specific data can be read or written >>> by accessing ::Application:Data |
![]() | Nestor G. Torres | Re: Automatic Data Persistence Problem on Tue, 27 Jun 2017 07:11:30 +0200 If you want to keep a cumulative counter going, then maybe the logic should be 1) When User first opens the page then call a small cxp routine that reads the cumulative counter and sets the ::session:TotalRequestCount := dbfTotalRequestCount 2) In your cxp page that requires the counter to be incremented then call a cxp function that increments the ::session:TotalRequestCount++ and updates the dbfTotalRequestCount:= ::session:TotalRequestCount ... update dbf table. On 2017/06/27 06:53, Nestor G. Torres wrote: > Hi Jonathan, > > Try using "::Session" in your first CXP application executed when > opening your web application. for example: myfirstcxpapp.cxp and within > this cxp app setup your variables like: > ::Session:TotalRequestCount := 1 /* drop the data qualifier */ > > Then that variable should be seen by all other cxp app executing from > your web page within the User's. > > Hope this helps. > Kind regards > Nestor > > > > On 2017/06/26 16:11, Jonathan Leeming wrote: >> On 6/26/2017 1:49 AM, Nestor G. Torres wrote: >>> Hi Jonathan, >>> >>> What you should be using instead of "::Application" is the root name >>> or first CXP application name executed when opening your web >>> application. for example: mycxpapp.cxp and within this cxp app setup >>> your variables like: >>> ::mycxpapp:Data:TotalRequestCount := 1 >>> >>> Then that variable will be seen by all other cxp app executing from >>> your web page. >>> >>> Sometimes you must use a crystal ball when reading the doc's. >>> >>> Hope this helps. >>> Kind regards >>> Nestor >>> >>> >>> On 2017/06/23 16:13, Jonathan Leeming wrote: >>>> Hi... >>>> >>>> Looking through websamples/index.cxp I came across entity storage. >>>> In the comments of the appdata.cxp example it refers to >>>> ::Application:Data:TotalRequestCount however when I put the lines: >>>> >>>> IF VALTYPE(::Application:Data:TotalRequestCount) == "N" >>>> ::Application:Data:TotalRequestCount++ >>>> ELSE >>>> ::Application:Data:TotalRequestCount := 1 >>>> ENDIF >>>> >>>> I get an error: Object has no member variable with this name >>>> >>>> If I simply use ::Data:TotalRequestCount I do not get an error >>>> however the scope ii only for the current page and I'm interested in >>>> it being application wide as per the documenation... >>>> >>>> Application-specific data can be read or written >>>> by accessing ::Application:Data |
![]() | Jonathan Leeming | Re: Automatic Data Persistence Problem on Tue, 27 Jun 2017 13:05:59 -0600 Hi Nestor, I may have misled you with my use of a counter... I simply used it as an example that I had copied directly from Alaska's sample. My real intent is as follows... I do not want the IIS machine that is running my CXP pages to have any direct access to my datafiles or even the server. My CXP machine that is not directly on the main network makes a socket connection to another PC running as a socket server thru a dedicated direct wired CAT5 connection. The Socket Server machine accesses the server to collect what ever data is requested by the CXP machine and fires the results back as an array to the CXP machine. My CXP application can authenticate the user, scroll through data records and allow one to edit / update information without having any DBE capabilities. I was considering using the documented CXP ::Application:Data: to store picklists that could be used/shared by all instances of the CXP application. The ::Data:SomeVariable appears to work OK and would allow the picklist to be shared by all instances of that specific CXP program but not by all instances of all CXP programs making up the application. Currently the socket server will save a copy of the picklist read during the first CXP request made to the server since it started as an array. Subsequent requests from a CXP page for the same picklist would simply sent back the array rather than re-reading it from the server. I was simply looking to store the picklists locally although then I have to consider ensuring the picklists storing in the CXP entity storage are current. Actually of more interest to me is being able to use the same socket connection within an instance of my CXP application as Login.CXP calls Menu.CXP which calls BrowseEngage.cxp which call EditEngage.cxp. Currently I'm opening & closing socket connections because I can not figure out how to reference the socket opening by the previous CXP program. If I could the socket server could maintain all the details regarding open data files within a single socket thread for each connection instance. Otherwise I have to reopen & re-position data files as the chain of CXP programs closes & opens socket connections. Thanks for your feedback and suggestions... as always, thought provoking... Regards... Jonathan On 6/26/2017 11:11 PM, Nestor G. Torres wrote: > If you want to keep a cumulative counter going, then maybe the logic > should be > > 1) When User first opens the page then call a small cxp routine that > reads the cumulative counter and sets the ::session:TotalRequestCount := > dbfTotalRequestCount > > 2) In your cxp page that requires the counter to be incremented then > call a cxp function that increments the ::session:TotalRequestCount++ > and updates the dbfTotalRequestCount:= ::session:TotalRequestCount ... > update dbf table. > > > > On 2017/06/27 06:53, Nestor G. Torres wrote: >> Hi Jonathan, >> >> Try using "::Session" in your first CXP application executed when >> opening your web application. for example: myfirstcxpapp.cxp and >> within this cxp app setup your variables like: >> ::Session:TotalRequestCount := 1 /* drop the data qualifier */ >> >> Then that variable should be seen by all other cxp app executing from >> your web page within the User's. >> >> Hope this helps. >> Kind regards >> Nestor >> >> >> >> On 2017/06/26 16:11, Jonathan Leeming wrote: >>> On 6/26/2017 1:49 AM, Nestor G. Torres wrote: >>>> Hi Jonathan, >>>> >>>> What you should be using instead of "::Application" is the root name >>>> or first CXP application name executed when opening your web >>>> application. for example: mycxpapp.cxp and within this cxp app setup >>>> your variables like: >>>> ::mycxpapp:Data:TotalRequestCount := 1 >>>> >>>> Then that variable will be seen by all other cxp app executing from >>>> your web page. >>>> >>>> Sometimes you must use a crystal ball when reading the doc's. >>>> >>>> Hope this helps. >>>> Kind regards >>>> Nestor >>>> >>>> >>>> On 2017/06/23 16:13, Jonathan Leeming wrote: >>>>> Hi... >>>>> >>>>> Looking through websamples/index.cxp I came across entity storage. >>>>> In the comments of the appdata.cxp example it refers to >>>>> ::Application:Data:TotalRequestCount however when I put the lines: >>>>> >>>>> IF VALTYPE(::Application:Data:TotalRequestCount) == "N" >>>>> ::Application:Data:TotalRequestCount++ >>>>> ELSE >>>>> ::Application:Data:TotalRequestCount := 1 >>>>> ENDIF >>>>> >>>>> I get an error: Object has no member variable with this name >>>>> >>>>> If I simply use ::Data:TotalRequestCount I do not get an error >>>>> however the scope ii only for the current page and I'm interested >>>>> in it being application wide as per the documenation... >>>>> >>>>> Application-specific data can be read or written >>>>> by accessing ::Application:Data |
![]() | Nestor G. Torres | Re: Automatic Data Persistence Problem on Wed, 28 Jun 2017 09:15:23 +0200 Jonathan Thanks for the update. I am currently not into Sockets; and you are leading in that field; so I can not offer any option/hep. But I am glad you are pursuing interesting ideas and concepts. Have a great day and kind regards. Nestor On 2017/06/27 21:05, Jonathan Leeming wrote: > Hi Nestor, > > I may have misled you with my use of a counter... I simply used it as an > example that I had copied directly from Alaska's sample. My real intent > is as follows... > > I do not want the IIS machine that is running my CXP pages to have any > direct access to my datafiles or even the server. My CXP machine that > is not directly on the main network makes a socket connection to another > PC running as a socket server thru a dedicated direct wired CAT5 > connection. The Socket Server machine accesses the server to collect > what ever data is requested by the CXP machine and fires the results > back as an array to the CXP machine. My CXP application can > authenticate the user, scroll through data records and allow one to edit > / update information without having any DBE capabilities. > > I was considering using the documented CXP ::Application:Data: to store > picklists that could be used/shared by all instances of the CXP > application. The ::Data:SomeVariable appears to work OK and would allow > the picklist to be shared by all instances of that specific CXP program > but not by all instances of all CXP programs making up the application. > > Currently the socket server will save a copy of the picklist read during > the first CXP request made to the server since it started as an array. > Subsequent requests from a CXP page for the same picklist would simply > sent back the array rather than re-reading it from the server. I was > simply looking to store the picklists locally although then I have to > consider ensuring the picklists storing in the CXP entity storage are > current. > > Actually of more interest to me is being able to use the same socket > connection within an instance of my CXP application as Login.CXP calls > Menu.CXP which calls BrowseEngage.cxp which call EditEngage.cxp. > Currently I'm opening & closing socket connections because I can not > figure out how to reference the socket opening by the previous CXP > program. If I could the socket server could maintain all the details > regarding open data files within a single socket thread for each > connection instance. Otherwise I have to reopen & re-position data > files as the chain of CXP programs closes & opens socket connections. > > Thanks for your feedback and suggestions... as always, thought > provoking... Regards... Jonathan > > > On 6/26/2017 11:11 PM, Nestor G. Torres wrote: >> If you want to keep a cumulative counter going, then maybe the logic >> should be >> >> 1) When User first opens the page then call a small cxp routine that >> reads the cumulative counter and sets the ::session:TotalRequestCount >> := dbfTotalRequestCount >> >> 2) In your cxp page that requires the counter to be incremented then >> call a cxp function that increments the ::session:TotalRequestCount++ >> and updates the dbfTotalRequestCount:= ::session:TotalRequestCount ... >> update dbf table. >> >> >> >> On 2017/06/27 06:53, Nestor G. Torres wrote: >>> Hi Jonathan, >>> >>> Try using "::Session" in your first CXP application executed when >>> opening your web application. for example: myfirstcxpapp.cxp and >>> within this cxp app setup your variables like: >>> ::Session:TotalRequestCount := 1 /* drop the data qualifier */ >>> >>> Then that variable should be seen by all other cxp app executing from >>> your web page within the User's. >>> >>> Hope this helps. >>> Kind regards >>> Nestor >>> >>> >>> >>> On 2017/06/26 16:11, Jonathan Leeming wrote: >>>> On 6/26/2017 1:49 AM, Nestor G. Torres wrote: >>>>> Hi Jonathan, >>>>> >>>>> What you should be using instead of "::Application" is the root >>>>> name or first CXP application name executed when opening your web >>>>> application. for example: mycxpapp.cxp and within this cxp app >>>>> setup your variables like: >>>>> ::mycxpapp:Data:TotalRequestCount := 1 >>>>> >>>>> Then that variable will be seen by all other cxp app executing from >>>>> your web page. >>>>> >>>>> Sometimes you must use a crystal ball when reading the doc's. >>>>> >>>>> Hope this helps. >>>>> Kind regards >>>>> Nestor >>>>> >>>>> >>>>> On 2017/06/23 16:13, Jonathan Leeming wrote: >>>>>> Hi... >>>>>> >>>>>> Looking through websamples/index.cxp I came across entity storage. >>>>>> In the comments of the appdata.cxp example it refers to >>>>>> ::Application:Data:TotalRequestCount however when I put the lines: >>>>>> >>>>>> IF VALTYPE(::Application:Data:TotalRequestCount) == "N" >>>>>> ::Application:Data:TotalRequestCount++ >>>>>> ELSE >>>>>> ::Application:Data:TotalRequestCount := 1 >>>>>> ENDIF >>>>>> >>>>>> I get an error: Object has no member variable with this name >>>>>> >>>>>> If I simply use ::Data:TotalRequestCount I do not get an error >>>>>> however the scope ii only for the current page and I'm interested >>>>>> in it being application wide as per the documenation... >>>>>> >>>>>> Application-specific data can be read or written >>>>>> by accessing ::Application:Data |