2015-05-19 50 views
1

我想确定字段值的前两个字符是否与值的有限列表之一匹配,即(“RG”,“HC”,“LP”等)可能是这些值的5-10个。我不在乎它是哪一个,只是它是“有效的”。如何在BQL中执行TSQL CHARINDEX或TSQL IN?

在SQL中,我可以用CHARINDEX或IN做到 - 我怎么用BQL做到这一点?

我大概可以做一个SWITCH/CASE,但看起来效率不高,就像这样拼出来。

具体来说,我想对于一个场做到这一点的DBCalced属性:上面犯规

[PXDBCalced(typeof(Switch<Case<Where<Substring<INItemLotSerial.lotSerialNbr,int1, int2>, In<EDType>>, Substring<INItemLotSerial.lotSerialNbr,int1, int2>>, StringEmpty>), typeof(string))] 

的在好像做什么,我期待 - 不知道它是什么打算或如何使用<>因为我没有发现文档。我将EDType定义为一个常量字符串,其中所有值都以逗号分隔。

感谢

+0

你想用它做什么?有一个布尔型字段,如果是这样的话,返回True/False?或者对这个计算的字段运行查询?请提供关于上下文的更多信息,但不清楚你为什么要这么做:) – Gabriel

+0

我想让这个字段从记录中的另一个字段派生出来 - 如果前两个字符匹配我的标准值之一,然后使用那些否则字符会将字段留空。 – mag

+0

你有没有想过使用FieldUpdated事件(在这种情况下,我认为它是INItemLotSerial_LotSerialNbr_FieldUpdated)简单地设置其他字段使用普通的C#代码? – Gabriel

回答

1

而不是通过纯BQL报表做的,我的建议是处理FieldUpdated事件。您可以从图表中完成,或者您可以创建一个自定义属性,并将其应用于您的字段。还有,你可以创建这个自定义属性的几个不同的方式,但最简单的定义将看起来类似的东西:

private sealed class MyCustomBehaviourAttribute : PXEventSubscriberAttribute, IPXFieldUpdatedSubscriber 
{ 
    public void FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e) 
    { 
     // Add your logic here 
    } 
} 

您也可以搜索里面的源代码(使用在文件中查找功能在屏幕上SM.20.45 .70)并搜索实现IPXFieldUpdatedSubscriber的属性,或者调用FieldUpdated.AddHandler手动订阅该事件。

+0

谢谢,我现在正在尝试。我能够使用Switch/Case方法来实现它,但这会更好。 – mag

+0

您可以发布您使用的交换机/机箱解决方案吗? – Gabriel

0
In<T>

不应该与任何东西,但参数(例如Required<T>Optional<T>),因为它被接受的载体或值作为它的第二个操作数,现在可以实现仅将数组传递给匹配参数一起使用。

1

我不能放入一个评论,但我使用这个属性:

 [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等为常数。

就像我说的,不是最漂亮的,但似乎有效。