MySQL formula - Using MySQL functions
Posted: 14 Oct 2018, 17:35
Hi Sergey,
there is some strange behavior of MySQL formulas when using CASE. In development, when adding logic to the formula, everything works fine up to a certain point where the system gives error message: In order to find error, I commented out certain sections in formula field, including an INSTR(str, Substring) line. In the example below, I have commented out every line in formula field (using the "#" sign). I am not asking to read the logic. The code just provides proof of having commented out every singel line in formula:
#CASE
# Keine Fristen (TODAY wird automatisch eingetragen)
# WHEN get_value([902])=0 THEN '---'
# Meilenstein / Vormerkung (Tatsächlicher Beginn und Fertigstellung müssen identisch sein)
# WHEN get_value([902])>=1 AND get_value([902])<=2 THEN
# CASE # Level 2
# WHEN [692]=0 AND [674]=0 THEN '✗ Bauaufsicht Terminkontrolle: Tatsächlicher Beginn u. Fertigstellung leer'
# WHEN [692]=0 THEN '✗ Bauaufsicht Terminkontrolle: Tatsächlicher Beginn leer'
# WHEN [674]=0 THEN '✗ Bauaufsicht Terminkontrolle: Tatsächliche Fertigstellung leer'
# WHEN [692]<>[674] THEN '✗ Bauaufsicht Terminkontrolle: Tatsächlicher Beginn ≠ Tatsächliche Fertigstellung'
# ELSE '✓ Bauaufsicht Terminkontrolle: okay'
# END # Level 2
# # Bauzeitplan / Aufgabe / Mängelrüge / Sonstiger Vorgang (Tatsächlicher Beginn muss vor Fertigstellung sein)
# WHEN get_value([902])>2 THEN
# #Test ob Beginn/Fertigstellung Bauzeitplan oder Beginn/Fertigstellung Gewerk schlagend
# CASE # Level 2
# WHEN INSTR([972],'✗')=0 AND INSTR([998],'✗')=0 THEN
# #Beginn/Fertigstellung Gewerk schlagend
# #Termine Test ob vor Beginn, in Arbeit, nach Fertigstellung
# CASE # Level 3
# #TODAY vor Geplanter Beginn
# WHEN [667]>UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '• Arbeit noch vor Beginn'
# WHEN [667]>UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ Arbeit vor Datum Beginn Gestartet'
# #TODAY >= Beginn und <=Fertigstellung
# WHEN [667]<=UNIX_TIMESTAMP(CURDATE) AND [668]>=UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ in Arbeit'
# WHEN [667]<=UNIX_TIMESTAMP(CURDATE) AND [668]>=UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '✗ Beginn Arbeit Prüfen/Säumig'
# #TODAY nach Geplanter Fertigstellung
# WHEN [668]>UNIX_TIMESTAMP(CURDATE) AND [674]=0 THEN '✗ Fertigstellung Arbeit Prüfen/Säumig'
# WHEN [668]>UNIX_TIMESTAMP(CURDATE) AND [674]>0 THEN '✗ Arbeit erledigt'
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht (Beginn/Fertigstellung Gewerk schlagend)'
# END # Level 3
# WHEN INSTR([972],'✗')>0 OR INSTR([998],'✗')>0 THEN
# #Bginn/Fertigstellung Bauzeitplan schlagend
# #Termine Test ob vor Beginn, in Arbeit, nach Fertigstellung
# CASE # Level 3
# #TODAY vor Geplanter Beginn
# WHEN [917]>UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '• Arbeit noch vor Beginn'
# WHEN [917]>UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ Arbeit vor Datum Beginn Gestartet'
# #TODAY >= Beginn und <=Fertigstellung
# WHEN [917]<=UNIX_TIMESTAMP(CURDATE) AND [713]>=UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ in Arbeit'
# WHEN [917]<=UNIX_TIMESTAMP(CURDATE) AND [713]>=UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '✗ Beginn Arbeit Prüfen/Säumig'
# #TODAY nach Geplanter Fertigstellung
# WHEN [713]>UNIX_TIMESTAMP(CURDATE) AND [674]=0 THEN '✗ Fertigstellung Arbeit Prüfen/Säumig'
# WHEN [713]>UNIX_TIMESTAMP(CURDATE) AND [674]>0 THEN '✗ Arbeit erledigt'
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht (Beginn/Fertigstellung Bauzeitplan schlagend)'
# END # Level 3
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht (Beginn/Fertigstellung Bauzeitplan oder Gewerk schlagend)'
# END # Level 2
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht'
#END CASE
When running Ruko again, it still gives me the error message referring to problems with the INSTR function. I also did empty cache in the browser. I have no idea why the error is still being raised. Are there limits as to how many levels you can perform recurrsions with a formula and/or within Ruko? I ran into similar situations twice before this now. I had to solve to problems by going back to earlier backups and redo the formula input.
Best, pepe
there is some strange behavior of MySQL formulas when using CASE. In development, when adding logic to the formula, everything works fine up to a certain point where the system gives error message: In order to find error, I commented out certain sections in formula field, including an INSTR(str, Substring) line. In the example below, I have commented out every line in formula field (using the "#" sign). I am not asking to read the logic. The code just provides proof of having commented out every singel line in formula:
#CASE
# Keine Fristen (TODAY wird automatisch eingetragen)
# WHEN get_value([902])=0 THEN '---'
# Meilenstein / Vormerkung (Tatsächlicher Beginn und Fertigstellung müssen identisch sein)
# WHEN get_value([902])>=1 AND get_value([902])<=2 THEN
# CASE # Level 2
# WHEN [692]=0 AND [674]=0 THEN '✗ Bauaufsicht Terminkontrolle: Tatsächlicher Beginn u. Fertigstellung leer'
# WHEN [692]=0 THEN '✗ Bauaufsicht Terminkontrolle: Tatsächlicher Beginn leer'
# WHEN [674]=0 THEN '✗ Bauaufsicht Terminkontrolle: Tatsächliche Fertigstellung leer'
# WHEN [692]<>[674] THEN '✗ Bauaufsicht Terminkontrolle: Tatsächlicher Beginn ≠ Tatsächliche Fertigstellung'
# ELSE '✓ Bauaufsicht Terminkontrolle: okay'
# END # Level 2
# # Bauzeitplan / Aufgabe / Mängelrüge / Sonstiger Vorgang (Tatsächlicher Beginn muss vor Fertigstellung sein)
# WHEN get_value([902])>2 THEN
# #Test ob Beginn/Fertigstellung Bauzeitplan oder Beginn/Fertigstellung Gewerk schlagend
# CASE # Level 2
# WHEN INSTR([972],'✗')=0 AND INSTR([998],'✗')=0 THEN
# #Beginn/Fertigstellung Gewerk schlagend
# #Termine Test ob vor Beginn, in Arbeit, nach Fertigstellung
# CASE # Level 3
# #TODAY vor Geplanter Beginn
# WHEN [667]>UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '• Arbeit noch vor Beginn'
# WHEN [667]>UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ Arbeit vor Datum Beginn Gestartet'
# #TODAY >= Beginn und <=Fertigstellung
# WHEN [667]<=UNIX_TIMESTAMP(CURDATE) AND [668]>=UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ in Arbeit'
# WHEN [667]<=UNIX_TIMESTAMP(CURDATE) AND [668]>=UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '✗ Beginn Arbeit Prüfen/Säumig'
# #TODAY nach Geplanter Fertigstellung
# WHEN [668]>UNIX_TIMESTAMP(CURDATE) AND [674]=0 THEN '✗ Fertigstellung Arbeit Prüfen/Säumig'
# WHEN [668]>UNIX_TIMESTAMP(CURDATE) AND [674]>0 THEN '✗ Arbeit erledigt'
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht (Beginn/Fertigstellung Gewerk schlagend)'
# END # Level 3
# WHEN INSTR([972],'✗')>0 OR INSTR([998],'✗')>0 THEN
# #Bginn/Fertigstellung Bauzeitplan schlagend
# #Termine Test ob vor Beginn, in Arbeit, nach Fertigstellung
# CASE # Level 3
# #TODAY vor Geplanter Beginn
# WHEN [917]>UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '• Arbeit noch vor Beginn'
# WHEN [917]>UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ Arbeit vor Datum Beginn Gestartet'
# #TODAY >= Beginn und <=Fertigstellung
# WHEN [917]<=UNIX_TIMESTAMP(CURDATE) AND [713]>=UNIX_TIMESTAMP(CURDATE) AND [692]>0 THEN '✓ in Arbeit'
# WHEN [917]<=UNIX_TIMESTAMP(CURDATE) AND [713]>=UNIX_TIMESTAMP(CURDATE) AND [692]=0 THEN '✗ Beginn Arbeit Prüfen/Säumig'
# #TODAY nach Geplanter Fertigstellung
# WHEN [713]>UNIX_TIMESTAMP(CURDATE) AND [674]=0 THEN '✗ Fertigstellung Arbeit Prüfen/Säumig'
# WHEN [713]>UNIX_TIMESTAMP(CURDATE) AND [674]>0 THEN '✗ Arbeit erledigt'
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht (Beginn/Fertigstellung Bauzeitplan schlagend)'
# END # Level 3
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht (Beginn/Fertigstellung Bauzeitplan oder Gewerk schlagend)'
# END # Level 2
# ELSE 'ERROR: CI-Terminprüfung Bauaufsicht'
#END CASE
When running Ruko again, it still gives me the error message referring to problems with the INSTR function. I also did empty cache in the browser. I have no idea why the error is still being raised. Are there limits as to how many levels you can perform recurrsions with a formula and/or within Ruko? I ran into similar situations twice before this now. I had to solve to problems by going back to earlier backups and redo the formula input.
Best, pepe