基於Oracle觸發器的報表版本儲存工具

來源:互聯網
上載者:User

cognos本身沒有版本控制工具,frameworkmanager和transformer的專案檔可以藉助於cvs\svn等版本控制工具開控製版本,但是所有的報表都是存在content store裡的,如果那張報表一不小心被誤改或者刪除了,那就是永久的了。如果之前沒有備份的話那麼這樣報表就永遠的消失了。
前一段時間研究了一下content store,知道所有的報表定義都儲存在cmobjprops7這張表中,我就在想是不是可以利用觸發器捕獲更新刪除等操作,將之前的報表定義儲存下來呢?所以我就在oracle上建了一張表cmobjversion,一個觸發器cmrep_tr,一個方法getCmObjPath。其中觸發器是針對錶cmobjprops7,當它發生更新或者刪除操作時,先擷取之前的報表定義,並調用getCmObjPath擷取報表格儲存體路徑,儲存到cmobjversion表中。
create table CMOBJVERSION
(
  MODIFYDATE DATE,
  SPEC       CLOB,
  ACTION     VARCHAR2(32),
  REPORTPATH NVARCHAR2(1000)
);
comment on column CMOBJVERSION.MODIFYDATE is '修改時間';
comment on column CMOBJVERSION.SPEC is '報表定義';
comment on column CMOBJVERSION.ACTION is '動作(刪除、修改)';
comment on column CMOBJVERSION.REPORTPATH is '報表格儲存體路徑';
/
create or replace function getCmObjPath(id in number) return varchar2 is
  Result varchar2(4000);
  pcmid  number;
  cid    number;
  cmname varchar2(4000);
begin
/*
作者:interboy
說明:該函數傳入報表的cmid,返回報表的路徑
*/
  cid := id;
  loop
    select a.pcmid, b.NAME
      into pcmid, cmname
      from cmobjects a, cmobjnames b
     where a.cmid = b.CMID and b.ISDEFAULT =1
       and a.cmid = cid;
    cid    := pcmid;
    Result := cmname||'/'||Result;
    exit when pcmid = 0;
  end loop;

  return(substr(Result,0,length(Result)-1));
end getCmObjPath;
/

create or replace trigger cmrep_tr
  before delete or update on cmobjprops7
  for each row
begin
  /*
  作者:interboy
  說明:該觸發器實現了報表儲存和刪除時將之前的報表格儲存體到cmobjversion表中,以達到版本儲存的目的
  */
  if :old.spec is not null then
    case
      when updating then
        insert into cmobjversion
          (reportpath, modifydate, spec, action)
        values
          (getcmobjpath(:old.cmid), sysdate, :old.spec, 'update');
      when deleting then
        insert into cmobjversion
          (reportpath, modifydate, spec, action)
        values
          (getcmobjpath(:old.cmid), sysdate, :old.spec, 'delete');
    end case; end if;
end cmrep_tr;
/
執行上述指令碼後,報表發生更新,或者刪除時上一個報表定義會被儲存到cmobjversion表的spec欄位中。以前有個哥們就問過報表被誤刪除了,怎麼還原。因為他沒有做好備份,所以沒辦法恢複。
恢複的步驟
1.找到對應的報表定義,將其拷貝到ultraEdit裡,另存新檔XML檔案,注意編碼要設為UTF8格式
2.用reportstudio開啟本地報表,儲存
指令檔和示範的視頻已經發到論壇裡,有興趣的可以到http://www.cognoschina.net/club/thread-7582-1-1.html下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.