我们可能有两种可能的方法来解决这个问题。
注意:在下文中,我们假设该值将显示在文本字段中。显示的代码 sn-ps 是该特定字段的计算事件脚本的一部分。如果要在另一个计算中使用该值,请定义变量,然后使用其名称而不是“event.value”。
a) 如果值可以从选项中计算出来(在“零件类型加缺陷类型”的意义上),我们可以将组件设置为单选按钮选择的返回值。在这种情况下,该值被快速计算:
event.value = this.getField("PartType").value*1 + this.getField("DefectType").value*1) ;
或者,如果有更复杂的算法/公式,请改用它。
b) 如果没有公式/算法来计算值,我们需要一个查找表。在我们的例子中,我们将定义一个二维数组,其中元素表示 PartType,并且是相应缺陷类型的数组。
然后单选按钮字段的返回值将对应于该查找表中的索引号。
我们将首先开始设置查找表:
var myLUT = new Array() ;
myLUT[0] = [10, 70, aa] ; // values for Gear and Burn, Stress, Depth
myLUT[1] = [bb, cc, dd] ; // values for Camshaft and Burn, Stress, Depth
myLUT[2] = [35, ee, ff] ; // values for Bearing and Burn, Stress, Depth
其中 aa、bb 等表示相应组件的值。
我们可以在计算脚本中定义此查找表,但创建包含此定义的文档级脚本更有效。
Calculate 脚本如下所示:
var pt = this.getField("PartType").value ;
var dt = this.getField("DefectType").value ;
event.value = myLUT[pt][dt] ;
这样就可以了。
在处理单选按钮字段时还有一件事。即使必须选择一个选项,也有可能(并且合法)没有选择作为默认值。然而,这两种情况都假定选择了选项。因此,我们必须通过要求两个组都有一个选中的选项来保护代码:
if (this.getField("PartType").value != "Off" && this.getField("DefectType").value != "Off") {
// now run our code
}
如果一个或两个单选按钮组(尚未)被选中,我们可能还必须指定会发生什么。