Need help with an If Then Else Statement

Dear all,
I want to take 3 measurements of a persons Systolic Blood Pressure
then calculate the average. However there are occasions when I will
only be able to capture 2 measurements, but I still need to calculate
the average. I have this on my form as:

However when running this through Validate, I get the error:

Invalid XPath expression [if (../systolicBP1 !=999 and ../systolicBP2 !
=999 and ../systolicBP3 !=999),(../systolicBP1 + ../systolicBP2 + ../
systolicBP3) div 3,(../systolicBP1 + ../systolicBP2) div 2)]!
java.lang.NullPointerException
at org.javarosa.core.model.FormDef.addTriggerable(FormDef.java:442)
at org.javarosa.xform.parse.XFormParser.parseBind(XFormParser.java:
1448)
at org.javarosa.xform.parse.XFormParser.parseModel(XFormParser.java:
435)
at org.javarosa.xform.parse.XFormParser.access$200(XFormParser.java:
77)
at org.javarosa.xform.parse.XFormParser$3.handle(XFormParser.java:
150)
at org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java:
350)
at org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java:
361)
at org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java:
361)
at org.javarosa.xform.parse.XFormParser.parseDoc(XFormParser.java:
316)
at org.javarosa.xform.parse.XFormParser.parse(XFormParser.java:267)
at
org.javarosa.xform.util.XFormUtils.getFormFromInputStream(XFormUtils.java:
62)
at org.odk.validate.FormValidator.validate(FormValidator.java:210)
at org.odk.validate.FormValidator.actionPerformed(FormValidator.java:
169)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown
Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown
Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown
Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Can anyone guide me as to how I could achieve my intended goal?

Thanks in advance,
Tumaini

The proper syntax is
"if(conditional_to_evaluate,what_happens_if_true,what_happens_if_false)".
You have a syntax error because you put a ")" after the conditional.

Try the following: ""

··· On Sun, May 20, 2012 at 1:10 PM, Tumaini Kilimba wrote: > Dear all, > I want to take 3 measurements of a persons Systolic Blood Pressure > then calculate the average. However there are occasions when I will > only be able to capture 2 measurements, but I still need to calculate > the average. I have this on my form as: > > readonly="true()" calculate="if (../systolicBP1 !=999 and ../ > systolicBP2 !=999 > and ../systolicBP3 !=999),(../systolicBP1 + ../systolicBP2 + ../ > systolicBP3) div 3,(../systolicBP1 + ../systolicBP2) div 2)" /> > > However when running this through Validate, I get the error: > > > Invalid XPath expression [if (../systolicBP1 !=999 and ../systolicBP2 ! > =999 and ../systolicBP3 !=999),(../systolicBP1 + ../systolicBP2 + ../ > systolicBP3) div 3,(../systolicBP1 + ../systolicBP2) div 2)]! > java.lang.NullPointerException > at org.javarosa.core.model.FormDef.addTriggerable(FormDef.java:442) > at org.javarosa.xform.parse.XFormParser.parseBind(XFormParser.java: > 1448) > at org.javarosa.xform.parse.XFormParser.parseModel(XFormParser.java: > 435) > at org.javarosa.xform.parse.XFormParser.access$200(XFormParser.java: > 77) > at org.javarosa.xform.parse.XFormParser$3.handle(XFormParser.java: > 150) > at org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java: > 350) > at org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java: > 361) > at org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java: > 361) > at org.javarosa.xform.parse.XFormParser.parseDoc(XFormParser.java: > 316) > at org.javarosa.xform.parse.XFormParser.parse(XFormParser.java:267) > at > org.javarosa.xform.util.XFormUtils.getFormFromInputStream(XFormUtils.java: > 62) > at org.odk.validate.FormValidator.validate(FormValidator.java:210) > at org.odk.validate.FormValidator.actionPerformed(FormValidator.java: > 169) > at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) > at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) > at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) > at javax.swing.DefaultButtonModel.setPressed(Unknown Source) > at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown > Source) > at java.awt.Component.processMouseEvent(Unknown Source) > at javax.swing.JComponent.processMouseEvent(Unknown Source) > at java.awt.Component.processEvent(Unknown Source) > at java.awt.Container.processEvent(Unknown Source) > at java.awt.Component.dispatchEventImpl(Unknown Source) > at java.awt.Container.dispatchEventImpl(Unknown Source) > at java.awt.Component.dispatchEvent(Unknown Source) > at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) > at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) > at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) > at java.awt.Container.dispatchEventImpl(Unknown Source) > at java.awt.Window.dispatchEventImpl(Unknown Source) > at java.awt.Component.dispatchEvent(Unknown Source) > at java.awt.EventQueue.dispatchEventImpl(Unknown Source) > at java.awt.EventQueue.access$000(Unknown Source) > at java.awt.EventQueue$3.run(Unknown Source) > at java.awt.EventQueue$3.run(Unknown Source) > at java.security.AccessController.doPrivileged(Native Method) > at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown > Source) > at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown > Source) > at java.awt.EventQueue$4.run(Unknown Source) > at java.awt.EventQueue$4.run(Unknown Source) > at java.security.AccessController.doPrivileged(Native Method) > at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown > Source) > at java.awt.EventQueue.dispatchEvent(Unknown Source) > at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown > Source) > at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) > at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown > Source) > at java.awt.EventDispatchThread.pumpEvents(Unknown Source) > at java.awt.EventDispatchThread.pumpEvents(Unknown Source) > at java.awt.EventDispatchThread.run(Unknown Source) > > Can anyone guide me as to how I could achieve my intended goal? > > Thanks in advance, > Tumaini > > -- > Post: opendatakit@googlegroups.com > Unsubscribe: opendatakit+unsubscribe@googlegroups.com > Options: http://groups.google.com/group/opendatakit?hl=en

Thanks Yaw!

··· On Mon, May 21, 2012 at 3:24 AM, Yaw Anokwa wrote:

The proper syntax is
"if(conditional_to_evaluate,what_happens_if_true,what_happens_if_false)".
You have a syntax error because you put a ")" after the conditional.

Try the following: ""

On Sun, May 20, 2012 at 1:10 PM, Tumaini Kilimba tkilimba@ihi.or.tz wrote:

Dear all,
I want to take 3 measurements of a persons Systolic Blood Pressure
then calculate the average. However there are occasions when I will
only be able to capture 2 measurements, but I still need to calculate
the average. I have this on my form as:

However when running this through Validate, I get the error:

Invalid XPath expression [if (../systolicBP1 !=999 and ../systolicBP2 !
=999 and ../systolicBP3 !=999),(../systolicBP1 + ../systolicBP2 + ../
systolicBP3) div 3,(../systolicBP1 + ../systolicBP2) div 2)]!
java.lang.NullPointerException
at
org.javarosa.core.model.FormDef.addTriggerable(FormDef.java:442)
at
org.javarosa.xform.parse.XFormParser.parseBind(XFormParser.java:
1448)
at
org.javarosa.xform.parse.XFormParser.parseModel(XFormParser.java:
435)
at
org.javarosa.xform.parse.XFormParser.access$200(XFormParser.java:
77)
at org.javarosa.xform.parse.XFormParser$3.handle(XFormParser.java:
150)
at
org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java:
350)
at
org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java:
361)
at
org.javarosa.xform.parse.XFormParser.parseElement(XFormParser.java:
361)
at org.javarosa.xform.parse.XFormParser.parseDoc(XFormParser.java:
316)
at
org.javarosa.xform.parse.XFormParser.parse(XFormParser.java:267)
at

org.javarosa.xform.util.XFormUtils.getFormFromInputStream(XFormUtils.java:

  1. at org.odk.validate.FormValidator.validate(FormValidator.java:210)
    at
    org.odk.validate.FormValidator.actionPerformed(FormValidator.java:
  2. at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
    Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
    Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at
    javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
    Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown
    Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown
    Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at
    java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown
    Source)
    at
    java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown
    Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at
    java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown
    Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
    Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown
    Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
    Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Can anyone guide me as to how I could achieve my intended goal?

Thanks in advance,
Tumaini

--
Post: opendatakit@googlegroups.com
Unsubscribe: opendatakit+unsubscribe@googlegroups.com
Options: http://groups.google.com/group/opendatakit?hl=en

--
Post: opendatakit@googlegroups.com
Unsubscribe: opendatakit+unsubscribe@googlegroups.com
Options: http://groups.google.com/group/opendatakit?hl=en