我正在尝试确定字段值的前两个字符是否与有限列表中的一个匹配,即("RG","HC","LP“等)这些值中可能有5-10个。我不关心它是哪一个,只关心它是“有效的”。
在SQL中,我可以使用CHARINDEX或In -我如何使用BQL来完成此操作?
我也许可以做一个切换/案例,但这样把它们都写出来似乎效率很低。
具体地说,我试图在字段的DBCalced属性中做到这一点:
[PXDBCalced(typeof(Switch<Case<Where<Substring<INItemLotSerial.lotSerialNbr,int1, int2>, In<EDType>>, Substring<INItemLotSerial.lotSerialNbr,int1, int2>>, StringEmpty>), typeof(string))]上面的代码似乎没有达到我的预期--我不知道它是用来做什么的,也不知道如何使用IN<>,因为我没有找到文档。我将EDType定义为一个常量字符串,所有值都用逗号分隔。
谢谢
发布于 2015-05-21 21:57:10
我的建议是处理FieldUpdated事件,而不是通过纯BQL语句。您可以从图形中执行此操作,也可以创建将应用于字段的自定义属性。有几种不同的方法可以创建此自定义属性,但最简单的定义如下所示:
private sealed class MyCustomBehaviourAttribute : PXEventSubscriberAttribute, IPXFieldUpdatedSubscriber
{
public void FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
// Add your logic here
}
}您还可以在源代码内部进行搜索(使用屏幕SM.20.45.70上的在文件中查找功能),并搜索实现IPXFieldUpdatedSubscriber或调用FieldUpdated.AddHandler手动订阅事件的属性。
发布于 2015-05-26 22:35:07
我无法将其放入评论中,但我使用了以下属性:
[PXDBCalced(typeof(Switch<Case<Where<Substring<INItemLotSerial.lotSerialNbr, int1, int2>, Equal<EDRG>,
Or<Substring<INItemLotSerial.lotSerialNbr, int1, int2>, Equal<EDAP>,
Or<Substring<INItemLotSerial.lotSerialNbr, int1, int2>, Equal<EDHC>,
Or<Substring<INItemLotSerial.lotSerialNbr, int1, int2>, Equal<EDRN>,
Or<Substring<INItemLotSerial.lotSerialNbr, int1, int2>, Equal<EDPP>,
Or<Substring<INItemLotSerial.lotSerialNbr, int1, int2>, Equal<EDPT>
>>>>>
>, Substring<INItemLotSerial.lotSerialNbr, int1, int2>>, StringEmpty>), typeof(string))]其中EDRG等是常量。
就像我说的,不是最漂亮的,但看起来很有效。
发布于 2015-05-22 19:11:32
In<T>不应该与参数(例如Required<T>或Optional<T>)一起使用,因为它接受向量或值作为其第二个操作数,这现在只能通过传递一个匹配参数的数组来实现。
https://stackoverflow.com/questions/30330154
复制相似问题