NetTalk Central

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Wolfgang Orth

Pages: [1] 2 3 ... 6
1
Hello Bruce and all others,

one of my servers has several methods for internal use, some few others for public use.

My intention now is to not doisplay any documentation, parameters, whatever, of those for internal use.

I vaguely recall or at least believe to do, that there has been an option to display such NetWebServiceMethods. Or not. However, I can't find anything alike in NT 11.48. Has this option been in prior versions or did I did my memory fooled me once again?

For the moment I helped myself by putting an OMIT() at the top of each GenerateWSDL, GenerateDocumention and GenerateHelp. Those methods are still listed in the dropdows / list of buttons to pick any documention, pointing to /Methods?ThisSecretThat and so on. Those pages are empty now, but even for me this looks amateurish.

Did I overlook this checkmark?

Or maybe it could become a conditional option?

Any opinion on that?

thanks for reading
Wolfgang

2
Web Server - Ask For Help / History of Nettalk 11 since 11.48
« on: February 21, 2022, 05:12:53 AM »
Hello Bruce,

the latest Nettalk 11 version is 11.53, the History list however ends with 11.48 (Dec 2020 - NetACME).

Are there any significant modification since, so that we _have_ to update or are those modification more kind of cosmetic ones?

I ask because 11.48 runs well for me and I hesitate to change the core of my app (though I know you put much effort into updates).

Yours sincerely
Caspar Milquetoast

https://www.capesoft.com/docs/NetTalk12/NetTalkHistory.htm


3
Hello again, Bruce!

SOAP-API manual again

On Nov 18 2020 I reported via mail about a tiny glitch in the listing of variables, when STRINGs are longer than 255 charactes. Any STRING longer gets displayed as STRING([255]) and in the right column  "String from 0 to 255 characters". My guess is that you obtain that number from the picture of that variable, not from its length definition itself.

I manipulate the packet-Object in the SendPacket ROUTINE with
packet.Replace('some significant text' &  &'STRING([255])', '.... STRING([10.000])', 1)

It works, its fast enough, but its a somehow dirty workaround and I just wanted to ask, if there will be a clean fix.

thx
Wolfgang

Attachment: Stringsize_API-Manual.PNG


Code: [Select]
packet.Replace('<div class="nt-service-fieldtype">&nbsp;&nbsp;&nbsp;&nbsp;(string[255])</div>', '<div class="nt-service-fieldtype">&nbsp;&nbsp;&nbsp;&nbsp;(string[10.000])</div>', 1)

4
Web Server - Ask For Help / API manual - "Try It"-button
« on: January 15, 2021, 01:41:50 AM »
Hello Bruce and all others,

this "Try It"-button is way cool, earned me some ohhhs and ahhhs during a presentation.

Unfortunately there seems to be one quirk.

For my presentation I prepared several requests and stored them as TXT (UTF-8 coded), so I could quickly copy and paste different request, showing different outcoming results.

The quirk now is, that sometimes no result got displayed. I checked DebugView and saw, that the result has been sent. Sometimes I could repeat 3 or 4 different requests in a row, then sometimes the second attempt showed a blank result field.



Did anyone else ran into this also?

The fix is to refresh the page with F5. This is not a real showstopper, less a rock, but a gravelstone. However, I suspect that other programmers, who will then be told to use that API to integrate into their own software, may talk bad about this flaw, trying to make the entire API-project look poor, unreliable.

Any idea how to overcome this behaviour?

Thank you inadvance
Wolfgang

5
Hello all,

since Nettalk 11 requires the latest Visual C++ Redistributables installed on the target machine (because of the most recent OpenSSL), I added a check for these DLLs to make sure, that my server does not return "ERROR: -73 Unable to Listen on TCP Port".

It is probably recommended to add the VC++ Redistributables as an option to the SetupBuilder installation script. If this option is set under "Core Prerequisites", then the installer will look upfront for the existance of those VC++ Redistributables on the target machin. If not at present, the SB-installer will "fix that for you" <g> by simply installing the VC++ version 27702. It took we a while to get the script to accept my desire. But I won!

The SB-installer is now about 30 MB bigger than without those VC++ Redistributables. I tested it by removing the already installed pack from the compüter and then called the installer. Indeed, right after its self-check the installer pops up a message, telling that VC++ Redistributables are missing, offering to install them upfront, before continuing. 
If you want to test yourself, remove the pack by doing a right mouse-click on "Windows Start", select Settings -> Apps and scroll down to "Microsoft Visual C++ 2015-2019 Redistributable" and remove it. (Probably use a test-machine for this - don't blame me later if something gets screwed up!).

So, _IF_ the user has accepted to install that pack, your secure NT 11 should be good.

But what, if the user does _NOT_ accept that pack or the install goes well, but months later the user decides to simply copy the entire folder to another machine... which of course does not have any VC++ redistributables installed. I am pretty sure, it will take quite a long time to find that culprit. I would never ever think of missing that VC++ stuff!

Thats why I added some little check to my server administration program. At start up, it looks for a certain node in the Windows Registry. If not present or not being the version I need to rely on, then I display a message, urging to install that VC++ stuff and then quit.

The variables I use:


Bld             ULONG
Installed       ULONG
Major           ULONG
Minor           ULONG
Rbld            ULONG
Version         CSTRING(201)


The entries in the registry are using DWORD and SZ, so I choosed to use ULONG and CSTRING. It worked with LONG and STRING though.

During INIT of my program, I call a window procedure which is hidden.
Here I fill the variables mentioned above by reading the registry at
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86
like this:


    Bld         = GETREG(REG_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86','Bld')
    Installed   = GETREG(REG_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86','Installed')
    Major       = GETREG(REG_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86','Major')
    Minor       = GETREG(REG_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86','Minor')
    Rbld        = GETREG(REG_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86','Rbld')
    Version     = GETREG(REG_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86','Version')


If nothing is installed at all, those numeric values are all 0 (zero).


    IF Installed = 1 AND Bld >= 27702  ! Version 27702 gets installed by SB as of today
        dbgView('All is fine!')
        POST(EVENT:CloseWindow)
    ELSE
        ! Either this or probably CHOOSE()
        IF Installed = 0
            ?STRINGx{PROP:Text} = 'The VC++ Redistributable is not installed.'
        ELSE
            ?STRINGx{PROP:Text} = 'The VC++ Redistributable is not up-to-date! Installed is ' & Version
        END
        0{PROP:Hide} = FALSE
    END


If the user moves the server to a machine without VC++ Redistributables, he / she will get a notice either in the Admin-program now or will find a hint in some logfile.

With HyperActive then I provide a download-link directly to the Microsoft page

https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

for retrieving the VC++ stuff x86: vc_redist.x86.exe manually.

Wolfgang Orth

6
Hello all,

since Nettalk 11 uses OpenSSL 1.1.1 now, it is necessary to have the most recent VC++ Redistributables. They can be found via

https://www.capesoft.com/docs/NetTalk11/NetTalk11Upgrade.htm#ChangesRequired and there "Visual Studio 2017 (x86) runtime":

https://support.microsoft.com/en-za/help/2977003/the-latest-supported-visual-c-downloads

My Question: Which installer to pick?

Is the installer depending on the Windows version (32-/64-bit), that runs on the target machine?

Thank you for a hint
Wolfgang

7
Hello all,

is it possible to communicate with another software in HL7, using Nettalk?

From what I read, HL7 is located on layer 7 (hence its name?) of the OSI-model.

Is anyone able and willing to share, how such a, Example Request / Response looks like.

Does such a HL7-Request look similar? I mean, without that XML-stuff of course, but with their own brew of ||^yadda||whatever||^yadda||more yadda||.

Maybe something like that?

Code: [Select]
HTTP/1.1 200 OK
Date: Fri, 03 Jul 2020 11:28:19 GMT
Expires: Thu, 04 Jul 2019 11:28:19 GMT
Content-Length: 796
Content-Encoding: gzip
Content-Type: text/xml
....

MSH|^~\&|KIS|ADT|LAB|ADT|200510141345||BAR^P12^BAR_P12|ADT03|P|2.5^DEU&&HL70399|||AL|NE||8859/1|||2.16.840.1.113883.2.6.9.66^^2.16.840.1.113883.2.6^ISO
EVN||200510141345
PID|||943246^^^KIS^PI||Nissing^Walter^^^^^L||19480403|M|||Finkengasse 4&Finkengasse&4^^München^XA-DE-BY^89654^DEU^H
PV1||I|CHI^202^2^CH^^N||||||||||||||||654325^^^KIS^VN||||||||||||||||000000|||||||||200510091820
ZBE|234345^KIS|200510121230||REFERENCE
DG1|1||K35.-^Akute Appendizitis^I10-2005||200510141345|ED|||||||||1.1|432113^^^^^^^^^^^^DN||||23543^KIS|A
DG1|2||K35.-^Akute Appendizitis^I10-2005||200510141345|AD|||||||||1.2|432113^^^^^^^^^^^^DN||||23544^KIS|A
DG1|3||K35.0^Akute Appendizitis mit diffuser Peritonitis^I10-2005||200510141345|BD|||||||||1.2|432113^^^^^^^^^^^^DN||||23545^KIS|A


Is HL7 able to communicate with a Nettalk Webserver or maybe Simpleserver?

That yadda-parsing have to be done manually with StringTheory then. But it would be neat, if Nettalk could be used basically.

Thanks for any input,
Wolfgang

8
Hello Bruce and all others,

coming from Nettalk 9 to Nettalk 11, I have one problem to solve now.
In the past I used to have two objects, one for the insecure, the other for the secure port.
https://capesoft.com/docs/NetTalk11/NetTalk10Upgrade.htm#ListeningOn2Ports

I still have the need to serve both server under one address.
As far as I understand now, I need to have two different server-EXE simultaniously, one listening on the insecure port, the other on the secure port with the self-issued certificate.

The insecure servre will serve some static pages, but probably also the API-dokumentation.

I want to avoid the warnings when I call those static URLs on the secure port, so I am willing for those  manouvers.

For installing / starting / stopping / removing the recent server (NT9) I have an Admin.EXE. Since there will be two EXE now, I look to keep the UX still the same. So only one set of buttons to administer the background service. Having two servers individually to start will lead to a mess.

My idea: Once one server is started (reading the port number from an INI like before), it will then check, whether the other server (same EXE, but different port) runs. If NOT running, then it will start the same EXE with RUN(), passing the other purpose as a parameter. Because the calling program is a background service, the called server with the other port runs with the same credentials, IOW it will be invisible like the service. Which is a desired behaviour.

Now on the buttons to stop / remove the background service, I prepend that service-calls with a NetWebClient method to shutdown the other server. Just issueing a POST(CloseDown) in the service method.

When in the Admin.EXE the service is now restarted, it will perform a check and RUN() for the other server. Probably repeatedly in the TIMER.event. like a kind of watchdog. So the can keep each other running.

To me it sounds reasonable.

Any other opinion?

Thank you in advance!

bye
Wolfgang

9
Hello Bruce and all others,

while converting a Client from Nettalk 9.30 to 11.29 (on Clarion 11.0.13401), I ran into this warning:

Label duplicated, second used: PKEY - D:\Projekte\KiK_5\KiKAdmin\KiKAdmin012.clw:1744,51

which is pointing to

WebClient.CreateAuthorizationStringVapid PROCEDURE(String pAudience,String pSub,Long pExp,String pKey,String pPublicKey)

ReturnValue          ANY

  CODE
  ReturnValue = PARENT.CreateAuthorizationStringVapid(pAudience,pSub,pExp,pKey,pPublicKey)
  RETURN ReturnValue

Does this have anything to do with what Don Ridley mentioned here?
http://www.nettalkcentral.com/forum/index.php?topic=8327.msg33914#msg33914

In case this is relevant, this program is not using ABC, but Clarion-chain templates. (man, that sucks!)

The good news is, that the EXE compiles ... but crashes, when run:

Index out of range
Error point: 00441B12
Process PID=3704  Image: D:\Projekte\KiK_5\KiKAdmin\KiKAdmin.exe
Thread 1  Handle=00000284  TID=8424

Stack frame: 0019F928

Call Stack:
00441B12
00449C43
00469C1B
00497B9F
0049D335
00469877
00468FAC
010CD8F7
010CD3E1

Clarion modules:
01000000  11.00:13401 D:\Projekte\KiK_5\KiKAdmin\ClaRUN.dll
001D0000  11.00:13401 D:\Projekte\KiK_5\KiKAdmin\ClaASC.dll
007C0000  11.00:13401 D:\Projekte\KiK_5\KiKAdmin\ClaDOS.dll
02330000  11.00:13244 D:\Projekte\KiK_5\KiKAdmin\ClaMEM.dll
13000000  11.00:13147 D:\Projekte\KiK_5\KiKAdmin\CLAnet.dll
00790000  11.00:13401 D:\Projekte\KiK_5\KiKAdmin\ClaTPS.dll
00400000  11.00:13401 D:\Projekte\KiK_5\KiKAdmin\KiKAdmin.exe

Thread stack:
0019F920: 97 1F 0C 01  00 00 00 00  60 F9 19 00  12 1B 44 00
0019F930: 00 00 00 00  E8 5B FF 01  00 00 00 00  00 00 00 00
...
...
...

Thanks
Wolfgang

10

The second problem is this:

When the converted server starts, I get the following entry in the log:

ERROR: -73 Unable to Listen on TCP Port 443 SSL Could Not Load TLS DLLs [Could not load the TLS DLLs - libssl-1_1.dll, libcrypto-1_1.dll, msvcr120.dll]

In the docs for Nettalk 10 I read this:
https://mirror.capesoft.com/docs/NetTalk10/NetTalkWebSecure.htm#Troubleshooting

ANd this is the link to the docs of Nettalk 11, not mentioning MSVCR120:
https://mirror.capesoft.com/docs/NetTalk11/NetTalkWebSecure.htm#Troubleshooting

Anyway, all three files are sitting right next to the EXE. So why does the EXE do not see them?

What do I have to do to fix that?

btw, I am on Windows 10 1903, so I guess I already have the Visual Studio 2017 (x86) runtime. (Have not checked it by now, will do tomorrow)

Thanks for any attention so far
Wolfgang

11
Web Server - Ask For Help / Two big problems in NT 11 - at least for me
« on: November 09, 2019, 10:45:32 AM »
Hello Bruce,

finally I am in the process to upgrade my major programs from Clarion 10 / Nettalk 9 to the most recent Clarion 11 / Nettalk 11. I am aware that there will be some work with chanking all the webclients, but before getting there, I ran into two other problems.

The communication between my clioent and server has (mostly) to be encrypted. And because the customers are hospitals, they might run my program in an isolated, "air-gapped" LAN. Hence I have to issue a self-signed certificate for the webserver. Which is fine so far, because the user works with a Clarion-written fat-client, where I can suppress the errors about this not-so-valid certificate.

Unfortunately there are two occasions I have to serve data on the regular insecure port (defaults to 80). In Nettalk 9 I was able to have my program running two webservers. That worked great!

The reason why I had to have that insecure webserver was, that they would be forced to add my self-issued certificate in their web of trust, to avoid warnings when the two occasions happen, as mentioned before. So it was prerfect for all participants.

While the secure server had a CSL set, the insecure one did not. Otherwise each thime a MESSAGE() pops up, telling that the connection is insecure. Not good for a server when running as a service.

Code: [Select]
"It will thus be necessary to remove the second object
in the WebServer procedure, and just set the two port numbers
for the primary object correctly."

https://www.capesoft.com/docs/NetTalk10/NetTalk10Upgrade.htm#ListeningOn2Ports

Unfortunately this is not possible for me!

Is there any way to sneak around this problem?

Because it is not a good idea to put two probably unrelated problems into one posting, I stop here and wtite a second post.


12
Web Server - Ask For Help / cURL - FileUpload to a NT-(SOAP)Server
« on: September 05, 2019, 05:32:39 AM »
Hello Bruce and all others,

the plan is to automatically upload files via cURL to a Nettalk-Webserver. NT v10.25 with StringTheory 3

From one of the previous webinars I understood, that a SOAP-Server would suit best for this. However, I do not get it going. :-(

I see the incoming request, but the incoming data are completly empty. In the .PrimeParameter-Method I placed
dbgView(p_web.GetValue('IncomingFile'))
to get shown the contents of the incoming data. In my test I send a TXT.

First I tried
curl -T "g:\cURL\manual.txt" http://192.168.178.113:88/FileUpload
which appears in the logging like


PUT /FileUpload HTTP/1.1
Host: 192.168.178.113:88
User-Agent: curl/7.55.1
Accept: */*
Content-Length: 12206
Expect: 100-continue

This is the Manual bla bla bla...

.... and here comes the text of the sent file.

Then I tried (beside many variations)
curl -F "manual=@g:\cURL\manual.txt;type=multipart/form-data" http://192.168.178.113:88/FileUpload
is in the logging of the server like

POST /FileUpload HTTP/1.1
Host: 192.168.178.113:88
User-Agent: curl/7.55.1
Accept: */*
Content-Length: 12455
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------cb39bf6890b52e75

--------------------------cb39bf6890b52e75
Content-Disposition: form-data; name="manual"; filename="manual.txt"
Content-Type: multipart/form-data

This is the Manual bla bla bla...

etc etc etc

So, its in there, but not in p_web.GetValue('IncomingFile') and therefore my attempt to save the file in the .ServiceMethod
IncomingFile.SaveFile(ThisProgram.EXEPath() & 'web\uploads\mimimi.txt')
results in an empty file "mimimi.txt"

DebugView returns this:

*** excerpt copied from DebugView ****

[st] [netTalk][thread=3] FileUpload START Event=
(in this line contents ought to appear from dbgView() in .PrimeParameters, but that string is empty)
[st] [netTalk][thread=3] Incoming Parameters Format: xml=0 ; json=0
[st] [netTalk][thread=3] IncomingFile =  .....


*** /excerpt copied from DebugView ****

What am I missing?

Or should I better tinker a FORM for such upload? Maybe because POST expects a FORM? Which then would lead to the question, how a FORM has to look like. But one step after the other. And there seem to exist some FORMs in the examples.

Thanks in advance!
Wolfgang

13
Web Server - Ask For Help / MAC-address Vendor
« on: June 23, 2019, 02:29:13 AM »
Hello all,

in my SOAP-Server I store the Computername and the MAC-Address for some significant reason (explanation below). Now I noticed, that one computername is listed twice in my database, with two different MAC-Addresses. One MAC-Address is apparently from an Intel-NIC. The other, differening only in the first and the last byte, is completely unknown, seems to have no vendor. *)

I also see, that this desktop-name is used from the same public IP-Address. That lets me assume to be the the identical computer. But how can it be, that this PC has a valid MAC-Address on one day, a different, "invalid" one the next day?

Does anyone know more about this? Could it be a virtual machine with revolving MACs?

The significant reason explained: This SOAP-Client-Server-combo is meant to be used inside a LAN. On first contact between client and server, the computername and its MAC-Address get joined with the department the user selects from a list, then gets stored in the DB. Now we can make a machine log-in, we can avoid a user log-in. Its meant for convenience. Computername + MAC-Address have to be unique.
I know these data, because they appeared in the DB of my publicly available demo. However, its an anonymous demo, there is no chance to get a hold on that person and ask directly.
The ISP-issued IP-address, from where the computer got connected to my server, was the same over several days, albeit the number seems to not come from a pool of static addresses. Normally ISP's disconnect every 24 hours, so every day a normal, private customer gets a new one. Which private user runs virtual machines? But it is also not recognizable, whether the IP-Address is issued to a company. It seems to be a pool of dynamic addresses. And corporations have their own address-blocks.

Thank you for your patience - and for any input!
Wolfgang


*) The IEEE issues a  24 Bit identifier to vendors, the Organizationally Unique Identifier (OUI). The vendors normally use this as the first three bytes in the MAC-Address.
https://standards.ieee.org/products-services/regauth/oui/index.html

14
Web Server - Ask For Help / Redirect a virtual URL to a file
« on: May 31, 2019, 02:43:58 AM »
Hello Bruce, Stu, any other!

In an older thread from 2016, Stu asked about how to redirect a request from "www" to "root".

When I wanted to hook into that thread with my question, the forum-soft suggested to start a new topic, due to the age of the original thread. So here it goes:

I think I want something very similar like Stu did. I have a .ZIP sitting somewhere in the .\web-directory. This files is meant to be sort of invisible., It should be accessible only, when you are a customer. But we want to avoid to force the user to type a password to verify against his. Folks are not endurable nowadays, all must be made as easy as possibly. I personally like comfort also.

So the idea is, to send out a unique, however not existing URL to each customer, with a specific string or token or whatever it is called, being part of this URL.
Like
https://theserver.com/123ABC/update.zip
https://theserver.com/qwer99/update.zip
https://theserver.com/UhT432/update.zip

and each url will return the same update.zip. Those inserted tokens will probably based in the customers name, with all spaces removed. Plus a numeric part as a sort of increment for further uses. Have to be unique, though.

Bruce wrote in 2016 in an answer to Stu:
-------------------------------------------------------------
so the call is

p_web.Redirect(toURL)

I think the best place for it is in WebHandler, _SendFile, after loc:filename is set...
something along the lines of

  if lower(sub(loc:filename,1,3)) = 'www'
    self.redirect....
    return
  end

-------------------------------------------------------------

My question: does this SELF.Redirect() have to have the EXACT address of the file in that toURL-parameter?

First I tried SELF.Redirect('update.zip'), because it sits in the .\web-directory, but it turned into error -34, Error sending data NetSimple.Send. Same with '.\update.zip'. It now works with the exact URL of the ZIP.

Thats okay for me. I just wanted to know, whether I made a mistake on my side or whether this is intended.

I can read a value for this toURL string from an .INI, for pointing to the most recent .ZIP.

[UPDATE]
It seems as if SELF.Redirect('/filename.zip', 1) is working now.




Bonus question: Is it okay to put some data-access into this embed p_web._sendFile() before Parent?

I need to veriy this unique token per customer to verify and also log to a file or send via mail, who already downloaded his / her file.

Or do I misuse the wrong embed here, need to do that somewhere else?

At the moment I ask for Nettalk 10. The upgrade in in the works, but .. yes, it will come - later.


thanks
Wolfgang

15
Hello Bruce and all,

this is a strategic matter I am chewing on.

At startup the webserver reads a Product.TPS into a MEMORY-table.
When the Webclients (Clarion/NT-programs) start, they download this
entire table for the use during its work. This table is completely used
for read-only on the client-side.

Now someone on the server-side will have a program
(likely Clarion/NT-made web-client also) to modify this table.
Think if a complete replacement of table.
(Skipable details: The .TPS is a list of drugs.
The pharmacist can flag products, which are in stock.
Nurses may toggle between ALL drugs / Recently available drugs.
No product is purged, they are just flagged differently.
However, the pharmacy may produce their own nutrition solutions etc.
Those homebrew products are planned to be added to
our MEMORY-table of the drugs.
And those homebrew products can be replaced / removed.
Not on a daily base, but this homebrew-fraction of the table is volatile. /skip)

From this moment on, the data on the client-side are different from those on the server-side.

How do I update this MEMORY-table on the client-side?
The client-user may have one or two procedure open,
where this MEMORY-table is in use. I would not want to
drag away the chair they are sitting on.

One idea I had was to signal on the client-side with a
floating WinEvent-message bottom right-hand corner, saying
"Please close this MDI-Child, a new drug list is lingering for an update".
There is a  good chance that this message is ignored or misunderstood.

A focus-grabbing MESSAGE() is no option. (How about CS Messagebox()?)

Alternatively I could wait for the MDI-child to be closed, then quickly
request and download that modified list. But my program has two
different procedures, both using this same MEMORY-table.
So closing one would not help much, if the second remains open.

One other idea I have to keep the homebrew products separated from
the general druglist. This would be a tiny list, which could easily be sent
each time a procedure opens. But whatever I do, it seems to be the
same problems as with disconnected apps.

How is this solved with "Disconnected Apps"?

Actually I see two questions:
How to solve this technically and how to treat the user?

Thanks you very much for your patience to read all this lament.
Wolfgang

Pages: [1] 2 3 ... 6