2012年10月8日

將 CONSTRUCT 所輸入的欄位拆開來

通常報表要判斷多個欄位的時候,
都是用 CONSTRUCT BY NAME tm.wc ON 欄位1,欄位2,欄位3…
有時候欄位1要另外判斷,欄位2又要另外判斷的時候怎麼辦,
這樣 tm.wc 已經組好 SQL 的語法,總不能用字串去拆吧,可能會有錯誤的情況。
當然你也可以分寫開三次 CONSTRUCT ,只是使用者要按三次確定才行。

山不轉路轉,就變化一下吧~~
這時候 GET_FLDBUF 的指令就可以派上用場了。
只是抓出來的卻是使用者輸入查詢的字串,SQL 根本不能拿來用。

只在原本的 CONSTRUCT 加上:
  AFTER CONSTRUCT
          LET tm.wc1 = GET_FLDBUF(imd01)
          LET tm.wc2 = GET_FLDBUF(sfa01)
          LET tm.wc3 = GET_FLDBUF(sfa03)

再來就是增加三個 CONSTRUCT,這樣就分別對應到 tm.wc1, tm.wc2, tm.wc3 。
之後的 SQL 就只要抓 wc1,wc2,wc3 的值就好了。

      CONSTRUCT BY NAME tm.wc1 ON imd01
         BEFORE CONSTRUCT
            DISPLAY tm.wc1 TO FORMONLY.imd01
            EXIT CONSTRUCT
      END CONSTRUCT
     
      CONSTRUCT BY NAME tm.wc2 ON sfa01
         BEFORE CONSTRUCT
            DISPLAY tm.wc2 TO FORMONLY.sfa01
            EXIT CONSTRUCT
      END CONSTRUCT

      CONSTRUCT BY NAME tm.wc3 ON sfa03
         BEFORE CONSTRUCT
            DISPLAY tm.wc3 TO FORMONLY.sfa03
            EXIT CONSTRUCT
      END CONSTRUCT

雖然是很白痴的用法,不過至少也是可以解決不少特殊報表的需求。

沒有留言:

張貼留言