Jump to content
  • 0

verversen calculation


fvlo

Question

Ik heb 3 tabellen: project, taak, stap. Project heeft taken en taak heeft stappen.
Stappen kunnen door verschillende medewerkers uitgevoerd worden en de status kan 'Open' of 'Gereed' zijn.
Projectstatus=Open als niet alle stappen Gereed zijn.

Als ik Projectlayout op mijn scherm heb staan, en iemand wijzigt de status van de laatste Open stap naar Gereed, wil ik dat de projectstatus ook op 'Gereed' komt en: dat dit direct zichtbaar is..

Ik heb al e.e.a. geprobeerd:
Project heeft een unstored calculation CalcProjectStatus die (mbv ExecuteSql) kijkt of alle stappen gereed zijn. Dit veld staat op de Projectlayout. Werkt in principe.
Maar: de calculation wordt in mijn projectlayout niet ververst als een status in de Staplayout gewijzigd wordt.

Ik heb vervolgens een veld ProjectStatus gemaakt in de tabel Project en op de layout gezet.
Deze wordt mbv een script met naam 'UpdateStatus' gevuld (met de waarde van CalcProjectStatus) op het moment dat de status van de stap gewijzigd wordt.
Dit veld wordt nu op de Projectlayout netjes ververst.

Als ik nu op de Projectlayout data wijzig, wordt het projectrecord gelocked.
Het veld ProjectStatus kan op dat moment niet gewijzigd worden.
En dus krijg je in de ProjectLayout geen update van de status, totdat het record opgeslagen wordt.

Toen heb ik op de Staplayout het veld Project::CalcProjectStatus toegevoegd en in het script 'Refresh window' uitgevoerd. Als het Projectrecord NIET gelocked is, wordt de waarde netjes gewijzigd, in het andere geval NIET. 

Conclusie is dus dat  een calculation van een gelockt record niet wordt uitgevoerd. 

Als deze conclusie klopt, zou ik alleen nog iets kunnen doen in de OnRecordCommit trigger van de Projectlayout. Dit heeft alleen niet zoveel zin, omdat je dan de layout toch al aan het verlaten bent.

Of doe/zie ik toch ergens iets verkeerd?

Link to comment

7 answers to this question

Recommended Posts

  • 0
1 hour ago, Marsau said:

Je conclusie klopt. 
als je nu de calculatie van de status zo inricht dat ie getriggered vast wordt opgeslagen. 
Zowel bij wijzigingen in het project, als bij wijzigingen in de stappen. 
neem bijv de modificatie timestamp mee in de auto-enter calculatie. 

Dank voor je antwoord. Ik denk niet dat ik je helemaal begrijp, maar ik heb het nu als volgt opgelost:
Veld ProjectStatus, in de Auto-Enter-tab Calculated Value aangezet en daar de calculation ingezet en in de Validation-tab 'Validate data' op 'always' gezet. Daarna in de Projectlayout de trigger OnLayoutKeystroke aangezet die een script aanroept om ProjectStatus te vullen. Eigenlijk moet dat 'vullen' niet, omdat de auto-enter calculation dat  in mijn ogen had moet doen, maar ik ken geen betere manier.
Het lijkt me allemaal nogal wat rommelig, en misschien niet overal juist, maar for-the-time-being werkt het..

Link to comment
  • 0

Ik denk dat de trigger alleen hoeft te lopen als je een projectrecord vastlegt. Dus niet bij keystrokes. Calculatie wordt opnieuw uitgevoerd als één van de gerefereerde elementen wijzigt. Daarom is een modificatie timestamp ook zo prettig.

Denk ook dat je fouten moet afvangen bij de sciptstappen bij de stappen. Laat die bij elke commit ook iets wijzigen in het project. Dan gaat de rest vanzelf.

Link to comment
  • 0
22 minuten geleden zei Ari:

In het algemeen kun je de volgende formule toepassen bij een auto enter

Let( trigger = ModifiedTimestamp ;  VeldwaardeInAutocalc )

 

Telkens als het record wordt gewijzigd (en dus ook de ModifiedTimestamp) wordt de autocalc ververst

Ja, of gewoon als een logische waarde. Hij is als boolean namelijk altijd 1 en wordt toch geëvalueerd.

Wel is van belang dat je de waarde laat vervangen. Anders gebeurt er alsnog niets.

Link to comment
  • 0

Dank voor jullie bijdragen. Het issue is vooral dat, als bv de projectmanager het projectrecord in gebruik heeft (perongeluk een spatie in een veld gedrukt en het record is gelocked tot hij er uit gaat) en een andere medewerker geeft in de allerlaatste projectstap aan dat de stap klaar is. Je kunt op dat moment het projectrecord niet muteren, dus ziet de projectmanager niet dat het project inmiddels geheel gereed is. Fieldlocking zou een mooi ding zijn hier.. Dit is de reden waarom ik de de trigger OnLayoutKeystroke gebruik. 

Link to comment
  • 0

Als je in een record zit, krijg je m.i. nooit een update. Dat is dan de 'straf' voor het ongeoorloofd open houden van een record. :-)

Het lijkt er nu op dat bij elke toetsaanslag een record naar updates wordt gezocht. Je kan je afvragen of dat efficiënt design is. 

Wellicht beter om een timer te maken speciaal voor de project layout, waarbij na verloop van tijd een record wordt vastgelegd als er geen keystrokes zijn.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...