0
在數據窗口報告的詳細信息部分中,有一個計算字段,計算字段內部是PB函數,其中包含由值參數傳遞的2個字符串和字符串的返回類型。一旦檢索完成並填充數據,數據窗口將繼續檢索,因爲我從SQL分析器中觀察過,但沒有錯誤消息窗口。數據存儲填充後數據存儲不斷檢索
什麼似乎是這個功能的問題?
/*
Function name : f_generate_serialrange
Return Type : String
Argument Type : Argument Name :
String loc
String id
*/
Long ll_row
Double ld_serialno1, ld_serialno2, ld_start, ld_end, ld_result, ld_next, ld_prev = 0
Double ld_row, ld_count = 0, ld_countaccept = 0, ld_serialcount
String ls_sum, ls_start, ls_prev, ls_next, ls_serialno2
DataStore lds_getserial
lds_getserial = Create DataStore
lds_getserial.DataObject = 'dw_delivery_receipt_serialno1'
lds_getserial.SetTransObject(SQLCA)
lds_getserial.Retrieve(loc,palletid)
ll_row =lds_getserial.RowCount()
IF lds_getserial.RowCount() > 0 THEN
FOR ld_row = 1 TO lds_getserial.RowCount()
ld_serialno1 = Double(lds_getserial.GetItemString(ld_row,'serialno'))
ls_serialno2 = lds_getserial.GetItemString(ld_row,'serialno2')
IF ld_count = 0 THEN
ld_start = ld_serialno1
ls_start = ls_serialno2
ld_count++
ELSE
ld_next = ld_serialno1
ls_next = ls_serialno2
IF ld_prev = 0 THEN
ld_result = ld_next - ld_start
ELSE
ld_result = ld_next - ld_prev
END IF
IF ld_result > 1 THEN
IF ls_prev = '' THEN
ls_sum += String(ls_start) +'~n'
ELSE
ls_sum += String(ls_start) +' - '+String(ls_prev)+'~n'
END IF
ld_start = ld_next
ls_start = String(ls_next)
ld_prev = 0
ls_prev = ''
ELSE
ld_prev = ld_next
ls_prev = String(ls_next)
END IF
END IF
NEXT
IF ls_prev = '' THEN
ls_sum +=String(ls_start)+'~n'
ELSE
ls_sum +=String(ls_start)+' - '+String(ls_prev)+'~n'
END IF
END IF
//MessageBox('System Message','Serial Range has been successfully retrieved.',INformation!)
Destroy (lds_getserial)
RETURN ls_sum
您正在討論數據窗口,但代碼處理數據存儲。我在想你的問題可能與'retrieve.asneeded'屬性有關,但這不適用於數據存儲。 – Seki
您的意思是不建議在數據窗口報告中放置一個包含數據存儲的函數?是否因爲數據存儲將繼續檢索,儘管數據已經填充? – Alex
沒有。窗口或用戶對象的數據窗口控件中可視化地使用數據窗口的功能(它可能不可見):當激活「retrieve.asneeded」屬性時,DW僅檢索對應的記錄到可見的線條。然後在滾動dw時,檢索丟失的行以顯示。我雖然可能是你的問題,但這種情況不適用於在一段代碼中聲明/實例化的數據存儲(=不可見的數據窗口)。 – Seki