判斷條件中,如何比較字段值。

K/3 Cloud,不少地方容許設置條件,根據條件解析結果,決定功能是否處理,如實體服務規則執行條件、操做校驗條件、反寫規則執行條件、工做流連線跳轉條件等。

條件中,容許使用單據上的字段,與常量值進行比較。但不一樣的字段類型,容許比較的常量值會有很大不一樣,本帖嘗試對此介紹一二。

例1:普通文本字段 ,與之比較的字符串,須要使用單引號括起

F_JD_Text1 = '文本內容'

搜索字段中是否包含某段文本
F_JD_Text1.find('文本內容') >= 0

例2:數值字段 ,直接與數值比較

F_JD_Decimal1 = 1

例3: 複選框字段 ,必須與true, false比較,不能與0,1比較

F_JD_CheckBox1 = true and F_JD_CheckBox2 = falsecss


例4:下拉列表字段
下拉列表字段,存儲的是枚舉項,顯示的是枚舉名稱,公式中,須要與枚舉項進行比較
如F_JD_Combo1綁定的枚舉類型爲價格類型,有兩個枚舉項('1' : 到岸價; '2' : 出廠價)

F_JD_Combo1 = '1'

例5:日期字段 ,字段值爲日期型,不能與字符串常量進行比較。
能夠採用公用函數,把日期轉換爲字符串進行比較:

F_JD_Date1.ToString('yyyy-MM-dd') = '2016-07-07'

實際上,日期字段一般不會與常量值比較,常見的是與一些系統變量進行比較。
如判斷日期是否大於今天,' 今天 '須要用系統變量替代

F_JD_Date1 > @currentshortdate

附:其餘可用的系統變量(大小寫必須一致)
@currentshortdate : 今天,短日期,不包含時間
@currentlongdate : 此時,長日期,包含時間
@maxdate : 系統最大時間
@mindate : 系統最小時間
@userid : 當前登陸用戶內碼
@currentorgid : 當前登陸組織內碼
@null : null 值
@getstkclosedate : 未知

另外,系統支持對日期字段值進行計算:
計算日期差: (F_JD_Date1 -  F_JD_Date2).Days
增長天數:F_JD_Date1.AddDays(-1)
增長月份:F_JD_Date1.AddMonths(-1)
增長年份:F_JD_Date1.AddYears(-1)

取每一個月最後一天(複雜): 
FENDDate = FSTARDate.AddDays(1-float((FSTARDate.ToString("dd")))).AddMonths(+1).AddDays(-1)
此公式解讀:
FENDDate = {2016-07-07}.AddDays(1-float(({2016-07-07}.ToString("dd")))).AddMonths(+1).AddDays(-1)
FENDDate = {2016-07-07}.AddDays(1-float('07')).AddMonths(+1).AddDays(-1)
FENDDate = {2016-07-07}.AddDays(1-7).AddMonths(+1).AddDays(-1)
FENDDate = {2016-07-01}.AddMonths(+1).AddDays(-1)
FENDDate = {2016-08-01}.AddDays(-1)
FENDDate = {2016-07-31}

例6:基礎資料字段
基礎資料字段, F_JD_Base1 返回的是一個複雜對象 BaseFieldDynamicRow,包含了不少的屬性,不能與一個簡單常量進行比較。

如 F_JD_Base1 = '資料名稱',達不到預期效果。

須要明確的指定屬性與常量值進行比較:
F_JD_Base1.Id = 100001
F_JD_Base1.FNumber = 'GW0001'
F_JD_Base1.FName = '採購員'

特別說明:
1. 公式中須要用到的基礎資料屬性,必須在字段的 引用屬性 中添加;
2. 若是指定的屬性 FProperty ,也是一個基礎資料, F_JD_Base1 .FPropery 返回的是DynamicObject對象,須要使用['PropName'],進一步肯定具體的屬性值
F_JD_Base1.FProperty['Id'] = 100001
F_JD_Base1.FProperty['Number'] = 'GW0001'
F_JD_Base1.FProperty['Name'].ToString() = '採購員'

例7:單據體字段
單據體中的字段,公式取到的是一個集合,不能直接跟常量進行比較。
須要lambda表達式,對單據體行,進行循環,逐行取基礎資料字段值進行比較:

len(filter(lambda x : (x.F_JD_Base.FProperty['Name'].ToString = '採購員'), FEntity)) > 0

說明:
FEntity是單據體標識,公式中取到的是 BOSDynamicRow 集合
x 表明單據體當前行,類型爲BOSDynamicRow,容許直接使用"."取字段值
F_JD_Base.FProperty['Name'] 返回的是多語言文本對象,須要使用ToString()函數,轉換成純文本

例8:基礎資料單據體屬性值
如需對基礎資料字段,單據體中屬性進行比較,也須要使用lambda進行循環:

len(filter(lambda x: ( x['Post']['Name'].ToString() = '璧山分公司總經理' ), FStaffId.PostEntity)) > 0

說明:
FStaffId.PostEntity中,PostEntity 是基礎資料單據體的Orm實體名
FStaffId.PostEntity 返回值,是DynamicObject集合,須要經過x['PropName']的方式,取各屬性值
相關文章
相關標籤/搜索