2015-05-19 69 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等爲常數。

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