Colin said Hi Theo, I used the tool you developed and it works fine. One question though. It doesn't do anything with tables USLINK and USILINK. Should it? My data here has entries in both those tables referencing (using columns USLINK-->USPECNAMCAL and USILINK-->UIMPLNAMCAL) the removed component. Thanks,
I probably missed those tables... Will investigate when I have some time and will update the tool when needed. Will post a reply in this thread when I know more.
One way is to sort the signature list by clicking on the column header for the icon column on the very left. You will then find it sorts all the signatures with no implementation together. Unfortunately, they are about two thirds of the way down the page. I don't believe there is any useful command line to get rid of signatures for removed components easily.
Ummm, what? I can't find a delete signature anywhere in version 9.5 (Except of course the signature editor, but it's a total pain to try and find unimplemented signatures in there, hence Theo's code (which looks good)).
Sorry - only sayin... When I delete a UF component in IDF - since UF manages to remove UFORM and all associated child records then it shouldn't really be too hard to kill the signature / operations too?
KnutD said Uniface lab; delete component ==> delete signature??
This functionality is already implemented. In case a component is deleted with the Component Integration Editor (menu Editors > Component Integration) then both component and signature are automatically deleted. Therefore: the Component Editor is for deleting components, the Signature Editor is for deleting signatures, and the Component Integration Editor is for deleting both. Makes sense, or not? Please forgive my irony...
Except that the component integration editor takes something like 20 minutes to synchronise the diagram every time I go into it, and I haven't the time to wait to then find and delete a single form. It is actively hundreds of time faster to delete them both independantly. Except that where you forget you are then left with useless tag ends of signatures which complain they aren't implemented on the compile. All in all, the fact that they have a separate but not independent existance is mostly annoying....
KnutD said Uniface lab; delete component ==> delete signature??
This functionality is already implemented. In case a component is deleted with the Component Integration Editor (menu Editors > Component Integration) then both component and signature are automatically deleted. Therefore: the Component Editor is for deleting components, the Signature Editor is for deleting signatures, and the Component Integration Editor is for deleting both. Makes sense, or not? Please forgive my irony...
ahm.... Following that line of thinking.... Then I would need the Component Integration Editor to create the UF signatures..... yet I don't.... When I create a component in the Component Editor, UF creates (and compiles) the signatures automatically - it's not something I have to worry about. Conversely, when I delete a component in the Component Editor, UF does not delete the signatures automatically - therein lies the real irony
Ok, I probably should have added some <IRONY> tags in my last post. I of course also agree that the current functionality is certainly not ideal and it should be more consistent. However...
KnutD said ahm.... Following that line of thinking.... Then I would need the Component Integration Editor to create the UF signatures..... yet I don't....
Yes, it does. When you create a new UF component in the Component Integration Editor (e.g. a form) then it will create both the component and the signature (without even compiling the component).
KnutD said When I create a component in the Component Editor, UF creates (and compiles) the signatures automatically - it's not something I have to worry about.
Actually, the Compiler is creating the signature and not the Component Editor itself. But I agree, this is not something you have to worry about.
KnutD said Conversely, when I delete a component in the Component Editor, UF does not delete the signatures automatically - therein lies the real irony
<IRONY> So what you actually need is a signature un-compile option for the Compiler </IRONY> Ok, enough fun.
Hi Theo, I used the tool you developed and it works fine. One question though. It doesn't do anything with tables USLINK and USILINK. Should it? My data here has entries in both those tables referencing (using columns USLINK-->USPECNAMCAL and USILINK-->UIMPLNAMCAL) the removed component. Thanks,
Yeah, it's that whole "I don't know which entities the component code is stored in", problem that would make me extremely wary of any home grown insert/delete on the model. For example, if your IDF does not use the cross reference data, then your investigation would not indicate the changes in here. Since the cross reference file is across many objects, finding the component name in the data may be a matter of luck. This would then allow for incorrect data in the IDF, which we have limited idea of the inherent data integrity requirements. I certainly would be reluctant to help one of my customers who came to me with "I wrote this routine to delete orders from the data and now the whole orders database is giving me the wrong calculations", and I expect Uniface would be in much the same boat. The problem WE have as developers is that we have to learn to live with the shortcomings (not the bugs but the design 'flaws') for two more years until we can (Hopefully) get on the Version 10 bandwagon, and have some hope of influencing the ongoing development. Until then, I fear we are 'tail end charlie' on the development schedule.
Just do it the dITo way and start with an empty repository. create a new component "DITOFIND" with entity and fields etc., including compile. go to the assembly workbench (wait until their part of data are created). Now EXPORT all of the repository to myfind.exp in the dosbox, use: find /n "<DSC " myfind.exp > myfind.entities find /n "DITOFIND" myfind.exp > myfind.formfields It's EASY
From a customer point of view, I think it's better to write a "component delete" form on our own, which deletes components including all connected occurences rather than try to remove half of the debris left over from the Global Actions. Perhaps I will spend some time as a dITo project with some hints how these infos are collected and evaluated. If we create our own tool, we can have it now. P.S. As the data model documentation can NOT be trusted, it takes some investigation at first which records are created when a new component is compiled. All of them should have the formname somewhere in the record, so it's not too hard to find them, especially if we start with an empty repository at first.
17 Comments
Local Administrator
I probably missed those tables... Will investigate when I have some time and will update the tool when needed. Will post a reply in this thread when I know more.
Author: Theo Neeskens (tneeskens@itblockz.nl)
Local Administrator
One way is to sort the signature list by clicking on the column header for the icon column on the very left. You will then find it sorts all the signatures with no implementation together. Unfortunately, they are about two thirds of the way down the page. I don't believe there is any useful command line to get rid of signatures for removed components easily.
Author: Iain Sharp (i.sharp@pcisystems.co.uk)
Local Administrator
Hi, I have made little tool that helps you find and delete signatures without implementation. Code reviews, comments etc are welcome ! http://unifaceinfo.com/wp-content/uploads/dlm_uploads/2014/06/sigclean.zip
Author: Theo Neeskens (tneeskens@itblockz.nl)
Local Administrator
Uniface lab; delete component ==> delete signature??
Author: Knut (knut.dybendahl@gmail.com)
Local Administrator
Ummm, what? I can't find a delete signature anywhere in version 9.5 (Except of course the signature editor, but it's a total pain to try and find unimplemented signatures in there, hence Theo's code (which looks good)).
Author: Iain Sharp (i.sharp@pcisystems.co.uk)
Local Administrator
Sorry - only sayin... When I delete a UF component in IDF - since UF manages to remove UFORM and all associated child records then it shouldn't really be too hard to kill the signature / operations too?
Author: Knut (knut.dybendahl@gmail.com)
Local Administrator
Yes, I've never really understood why they remain behind.
Author: Iain Sharp (i.sharp@pcisystems.co.uk)
Local Administrator
This functionality is already implemented.
In case a component is deleted with the Component Integration Editor (menu Editors > Component Integration) then both component and signature are automatically deleted.
Therefore: the Component Editor is for deleting components, the Signature Editor is for deleting signatures, and the Component Integration Editor is for deleting both. Makes sense, or not?
Please forgive my irony...
Author: diseli (daniel.iseli@uniface.com)
Local Administrator
Except that the component integration editor takes something like 20 minutes to synchronise the diagram every time I go into it, and I haven't the time to wait to then find and delete a single form. It is actively hundreds of time faster to delete them both independantly.
Except that where you forget you are then left with useless tag ends of signatures which complain they aren't implemented on the compile.
All in all, the fact that they have a separate but not independent existance is mostly annoying....
Author: Iain Sharp (i.sharp@pcisystems.co.uk)
Local Administrator
ahm.... Following that line of thinking.... Then I would need the Component Integration Editor to create the UF signatures..... yet I don't.... When I create a component in the Component Editor, UF creates (and compiles) the signatures automatically - it's not something I have to worry about. Conversely, when I delete a component in the Component Editor, UF does not delete the signatures automatically - therein lies the real irony
Author: Knut (knut.dybendahl@gmail.com)
Local Administrator
Ok, I probably should have added some <IRONY> tags in my last post.
I of course also agree that the current functionality is certainly not ideal and it should be more consistent. However...
Yes, it does. When you create a new UF component in the Component Integration Editor (e.g. a form) then it will create both the component and the signature (without even compiling the component).
Actually, the Compiler is creating the signature and not the Component Editor itself.
But I agree, this is not something you have to worry about.
<IRONY> So what you actually need is a signature un-compile option for the Compiler </IRONY>
Ok, enough fun.
Author: diseli (daniel.iseli@uniface.com)
Local Administrator
Or a method of starting the integration editor which doesn't take twenty minutes "Synchronising...."
Author: Iain Sharp (i.sharp@pcisystems.co.uk)
Local Administrator
Hi Theo, I used the tool you developed and it works fine. One question though. It doesn't do anything with tables USLINK and USILINK. Should it? My data here has entries in both those tables referencing (using columns USLINK-->USPECNAMCAL and USILINK-->UIMPLNAMCAL) the removed component. Thanks,
Author: Colin (cdouglass@siriussoftware.com.au)
Local Administrator
Yeah, it's that whole "I don't know which entities the component code is stored in", problem that would make me extremely wary of any home grown insert/delete on the model. For example, if your IDF does not use the cross reference data, then your investigation would not indicate the changes in here. Since the cross reference file is across many objects, finding the component name in the data may be a matter of luck. This would then allow for incorrect data in the IDF, which we have limited idea of the inherent data integrity requirements. I certainly would be reluctant to help one of my customers who came to me with "I wrote this routine to delete orders from the data and now the whole orders database is giving me the wrong calculations", and I expect Uniface would be in much the same boat. The problem WE have as developers is that we have to learn to live with the shortcomings (not the bugs but the design 'flaws') for two more years until we can (Hopefully) get on the Version 10 bandwagon, and have some hope of influencing the ongoing development. Until then, I fear we are 'tail end charlie' on the development schedule.
Author: Iain Sharp (i.sharp@pcisystems.co.uk)
Local Administrator
Just do it the dITo way and start with an empty repository. create a new component "DITOFIND" with entity and fields etc., including compile. go to the assembly workbench (wait until their part of data are created). Now EXPORT all of the repository to myfind.exp in the dosbox, use: find /n "<DSC " myfind.exp > myfind.entities find /n "DITOFIND" myfind.exp > myfind.formfields It's EASY
Author: ulrich-merkel (ulrichmerkel@web.de)
Local Administrator
From a customer point of view, I think it's better to write a "component delete" form on our own, which deletes components including all connected occurences rather than try to remove half of the debris left over from the Global Actions. Perhaps I will spend some time as a dITo project with some hints how these infos are collected and evaluated. If we create our own tool, we can have it now. P.S. As the data model documentation can NOT be trusted, it takes some investigation at first which records are created when a new component is compiled. All of them should have the formname somewhere in the record, so it's not too hard to find them, especially if we start with an empty repository at first.
Author: ulrich-merkel (ulrichmerkel@web.de)
Local Administrator
Hi, it took me some time to do this but now I have updated the Signature Cleaner to include USLINK and USILINK. I have replaced the download at: http://unifaceinfo.com/downloads/download-info/signature-cleaner/ Unfortunately it still won't cleanup ALL unused signatures, because there is a bug in the Global Actions screen. See this discussion: http://unifaceinfo.com/forum/unifacedevelopment/global-actions-component-delete/#p6048442
Author: Theo Neeskens (tneeskens@itblockz.nl)