全域性變數的妙用

2021-06-26 20:41:35 字數 1883 閱讀 3716

目的:在採購申請form介面增加三個彈性字段 其中現有量字段要自動取即時庫存量 如下圖

做法:步驟一:彈性域-說明性-段

預設值:

select nvl(sum(t.primary_transaction_quantity),0) from mtl_onhand_quantities_detail t where t.inventory_item_id = :lines.item_id

說明::lines.item_id是採購申請行的:塊名.欄位名(注意:此預設值有問題 後面接著說)

測試結果:

採購申請(有料號)  採購申請(有料號) 都沒問題了

但是申請彙總出問題了 提示找不到::lines.item_id

經分析 原因如下

剛開的三個彈性域對申請彙總的form是共用的 但是申請行彙總介面的物料id是:req_lines_folder.item_id 因此:lines.item_id無法被識別

如下圖

解決方法:

大神說用全域性變數試試

用個性化將採購申請介面的:lines.item_id賦值給全域性變數

彈性域定義那裡引用這個全域性變數

select nvl(sum(t.primary_transaction_quantity),0) from mtl_onhand_quantities_detail t where t.inventory_item_id =:global.v_hkp

注:對於採購申請(無料號)來說 :lines.item_id是空值 因此個性化要做特殊處理

將全域性變數賦為null即可

成功!注1:因為彈性域作用很強大 所有用到這個彈性域的地方都會被影響到 因此如果有用到這個彈性域但是沒有定義此全域性變數的就會報錯

找到這個form 在個性化定義了最高端別when-new-form-instence觸發器下的全域性變數

但是針對從web介面開啟的這個form 這個觸發器在報錯之前沒執行到 可能是在when-new-form-instence之前的pre-form裡就開始驗證全域性變數 因此全域性變數v_hkp要在pre-form裡定義才可能被執行到

這樣就ok了 問題解決了。 

注2:大神說全域性變數還可以做一次驗證使用(例報廢處理)

一般form的驗證都是三次驗證 用全域性變數 只有全域性變數為0時才進行驗證 驗證一次之後全域性變數設為1  不再進行第二次驗證

static全域性變數 全域性變數

1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...

c 全域性變數 靜態全域性變數

全域性變數是靜態儲存方式,靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。區別 雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。靜態區域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能...