結合Domino打造全功能的Grid

2021-09-08 22:28:03 字數 4366 閱讀 7224

在domino開發中我們經常會遇到表單上需要乙個類似table的元件,你可以增刪改等。比如我有乙個張報核單據,上面需要詳細列出每項金額的明細,我們先看完成後的效果:

上面的圖就是我用extjs完成的。

2.功能介紹

這個grid元件可以完成增加,刪除,插入,修改,排序等功能。每項功能的操作都只是針對grid,不需要額外的formpanel。雙擊單元格就可以修改。 

3.如何使用

這個元件我做的盡可能通用,由於是專門為domino平台定製,grid中的資料均儲存在notes的多值域中。使用這個gird元件,你需要提供以下幾個陣列:

(1):多值網域名稱的陣列(第一列對應的序號多值域的名字必須為seq)

(2):gird title顯示文字的陣列

4.注意問題:

1.ext中datefield實際你取出值存到多值域的時候是乙個utc的時間。如果你在新的系統中使用該元件,這個沒有問題。由於我的系統原來的多值域儲存的時間為「2009-08-08」類似形式,這樣在顯示的時候就無法識別了。

2.元件的校驗實際上就是ext各個form元件的校驗,這個要根據不同系統的業務來處理。

3.許可權控制,在domino中的系統中工作流居多,不同的流程條件下需要有許可權控制,這個有兩種方案,

方案一:根據不同條件對grid的列是否設定editor屬性,並控制按鈕的屬性。

方案二:由於grid是呈現在表單上的div元素,可以控制該div的隱藏條件,然後根據是否能取得到div dom來判斷去例項不同的grid。

由於在domino中js和表單的互動不是很方便,我選擇方案二。

4. 7.關於編號的維護只維護新增,插入時,刪除時不維護。

5.程式介紹

5.1.三個公用的函式如下:

1.   將多值域轉換為陣列返回

2.   多陣列進行增,刪,插入

3.   根據不同的型別去例項化不同的ext元件

function cotoarray(name)

);break;

case "timefield":

editorcm=new ext.form.timefield();

break;

case "combobox":

editorcm=new ext.form.combobox();

break;

case "numberfield":

editorcm=new ext.form.numberfield();

break;

return editorcm;

5.2.下面是ext.onready部分:

ext.onready(function();

var colmread=new ext.grid.columnmodel(arrcolmread);

//-----end construct the read colunm of grid 

//----- construct the edit colunm of grid 

var sm = new ext.grid.checkboxselectionmodel();

var arrcolm=new array();

for(var k=0;k<=arrname.length;k++)

if(k==0)

arrcolm[k]=sm;

else

if(arrtypename[k-1]=="combobox")

arrcolm[k]=)};

else if(arrtypename[k-1]=="datefield")

arrcolm[k]=;

else

arrcolm[k]=;

var colm=new ext.grid.columnmodel(arrcolm);

//-----end construct the edit colunm of grid

// create the data store  

var strdata= new array(); 

if(cotoarray(arrname[0])!="")

for (i=0;istrdata[i]=new array();

for(var j=0;jstrdata[i][j]=cotoarray(arrname[j])[i]

var store1=new ext.data.******store(

}//---end grid1  

//-------add1 button click

if(ext.getdom('add1')!=null)

var button = ext.get('add1');

var win;

button.on('click', function(){                 

var re=new ext.data.record(

seq:grid1.getstore().getcount()+1

var store2=grid1.getstore();

store2.add(re);

store2.commitchanges();          

//------begin add at last     

opmultifieldarray(arrname,0,0,(grid1.getstore().getcount()+1));

//------end add1 button click   

//----------delete1 button click

if(ext.getdom('delete1')!=null)

var delbutton=ext.get('delete1');

delbutton.on('click',function(){  

var _rd = grid1.getselectionmodel().getselected() ;  

var delindex=grid1.getstore().indexof(_rd);

if(grid1.getselectionmodel().getcount()==1)

grid1.getstore().remove(_rd);   

grid1.getstore().commitchanges();

else

alert('每次只能刪除一條!');

opmultifieldarray(arrname,1,delindex); 

//-----------end delete1 buttom click  

//-----------begin insert1 buttom click 

if(ext.getdom('insert1')!=null)

var insbutton=ext.get('insert1');

insbutton.on('click',function(){

var _rd = grid1.getselectionmodel().getselected() ;

var insindex=grid1.getstore().indexof(_rd);   

var re=new ext.data.record(

seq:insindex+1

var store2=grid1.getstore();

if(grid1.getselectionmodel().getselected()!=null)

store2.insert(insindex,re);

store2.commitchanges();  

else

alert('請選擇要插入的位置!');

//------begin insert at index  

opmultifieldarray(arrname,2,insindex,insindex);

var arrseq=cotoarray(arrname[0]);

for(i=0;iarrseq[i]=i+1;

ext.getdom(arrname[0]).value=arrseq.join(";");

//------end insert at index

//-----------end iinsert1 buttom click

5.3.子表單中需要加入的html**部分:

注意這些都為內嵌html,並且需要設定隱藏條件。 

還有建立需要的多值域.

打造基於Linux的全功能開發系統

前兩天,裝有windows server 2003的第一硬碟 ibm 騰龍4 40g 在我啟動windows的過程中終於香消玉隕,幸運的是在第二硬碟上裝了個linux redhat 9.0 讓我在買硬碟前的這幾天有機可用。在以前,linux僅僅作為乙個簡單的c開發平台和乙個試驗性的作業系統,趁win...

vim自帶的補全功能

vi7.0版本自帶了自動補全功能omni completion。那麼vim是如何找到匹配的單詞的呢?在預設的情況下,vim在查詢乙個單詞時是按照如下的步驟 1 在當前檔案中進行查詢 2 在其他視窗中進行查詢 3 在其他的已裝入的緩衝區中進行查詢 4 在沒有裝入緩衝區的檔案中進行查詢 5 在當前的標記...

centos的yum自動補全功能

之前用ubuntu的時候,apt get install 後面按tab可以把包名自動補全並給出可用的包的提示。新機器裝了centos7標準版的也有這個功能,不過裝了centos7 minimal的卻沒這個功能,yum install按tab後提示的是本地檔案的列表。後來上網找了一下,原來這個是因為c...