二次開發實現的步驟:
第一步、新建元件工程(假設工程名為redevpro,包含乙個類名為 clsredev的類模組),引用k3billtransfer 元件和其他你要使用的元件例如ado--microsoft activex data objects 2.1 library等。
第二步、在clsredev類**中宣告
private withevents m_billtransfer as k3billtransfer.bill。
第三步、必須新增以下**否則系統不能夠傳遞事件到你的元件中
public sub show(byval o as object)
set m_billtransfer = o
end sub
第四步、在m_billtransfer的各事件中編寫相應處理**。例如
private sub m_billtransfer_billinitialize()
set cn = new adodb.connection
cn.cursorlocation = aduseclient
cn.open m_billtransfer.cnnstring
end sub
二次開發實現的步驟—續:
第五步、編寫完成以後編譯你的工程
第六步、註冊二次開發元件使單據呼叫時能觸發
在表t_thirdpartycomponent中增加二次開發元件記錄,各欄位
含義為ftypeid:二次開發外掛程式型別,0為客戶端外掛程式;2為中間層外掛程式
ftypedetailid:單據型別id,客戶端表示對應表ictransactiontype的
fid,中間層表示事件型別
findex:元件呼叫順序,按ftypedetailid排取乙個值
fcomponentname:客戶端二次開發元件,如prjdemo.clsdemo
fcomponentsrv:中間層儲存二次開發元件名稱
fdescription:描述
舉幾個二次開發的例子
範例一在選單中新增乙個選單,並實現該功能
private sub m_billtransfer _billinitialize()
m_billtransfer.addusermenuitem "ddd", "dddddd"
end sub
private sub m_billtranty_usermenuclick(byval index as long, byval caption as string)
if caption = "ddd" then
' 'msgbox "ok" 此處可以實現該選單的功能**
end if
end sub
範例二改變單據頭的filter 屬性值,在外掛程式中看到已經改變,
為什麼沒有傳到k3bills中去,用以下**即可實現
private sub m_billtransfer_beforheadlookup(byval ctlindex as long, byval nlookupclsid as long, cancel as boolean)
dim theadctl as variant
dim i as long
if ctlindex = 4 then
theadctl = m_billtransfer.headctl
theadctl(ctlindex).filter = replace(theadctl(ctlind
ex).filter, 986=986」, 「986<>986」)
m_billtransfer.headctl = theadctl 『一定需要先定義
乙個theadctl的變數, 最後把該變數賦給
m_billtransfer.headctl,才能使其真正生效
end if
end sub
範例三在外掛程式中改變輔助屬性的值為什麼不起作用,外掛程式中對錶體的賦值有的不能按照m_billtransfer.setgridtext的形式修改,一定要呼叫m_billtransfer.billform.setbilldatainput方式才可以真正修改
set tmpiteminfo = new kfo.dictionary
tmpiteminfo("name") = "黃色"
'輔助屬性名稱
tmpiteminfo("number") = "yellow"
'輔助屬性**
tmpiteminfo("value") = "2"
'輔助屬性內碼
m_billtransfer.billform.setbilldatainput tmpiteminfo,
"fauxpropid", 1, 1
set tmpiteminfo = nothing
'setbilldatainput 輔助屬性包,欄位名,單據體(0:單據頭;1:單據體),行號
範例四在外掛程式中填介面欄位的三值
private const operno = 22
'foperid的fctlorder
private sub setoperid(byval row as long, byref dctresult as kfo.dictionary)
on error goto herr
dim entryctl as variant
entryctl = m_billtransfer.entryctl
entryctl(operno).dinterid(row) =
dctresult.getvalue("foperid")
entryctl(operno).dnumber(row) = dctresult.getvalue("fid")
entryctl(operno).dname(row) = dctresult.getvalue("fname")
m_billtransfer.entryctl = entryctl
m_billtransfer.setgridtext row, operno, dctresult.getvalue("fname")
herr:
....
end sub
二次開發中間層介面
public function hookinvoke(byval eventid as long, dctparams as kfo.dictionary) as long
dctparams 引數包裡有可能要使用的單據資訊操作資訊和連線串
sdsn 連線串
operatecode 1
'------審核
2 '------反審核
4 '------儲存
8 '------刪除
16 '-----反作廢
32 '-----作廢
64 '-----單據複製
trantype 單據型別
interid 單據內碼
rob 1-藍字 -1紅字
返回值1為正常,返回值0為失敗,可以向上丟擲異常和提示資訊
金蝶K3系統中間層群集部署方案
中間層負載均衡 如確實需要同時使用多個中間層,金蝶推薦採用手工負載均衡的方式,也即為不同的客戶端指定不同的 中間層,或者分模組指定不同中間層。k 3v10.2 及更高版本,配合 windows server 2003sp1 以上伺服器作業系統,中間層效能已經非常好,通 常做負載均衡的必要。例如 4 ...
金蝶K3系統中間層群集部署方案
中間層負載均衡 如確實需要同時使用多個中間層,金蝶推薦採用手工負載均衡的方式,也即為不同的客戶端指定不同的 中間層,或者分模組指定不同中間層。k 3v10.2 及更高版本,配合 windows server 2003sp1 以上伺服器作業系統,中間層效能已經非常好,通 常做負載均衡的必要。例如 4 ...
金蝶K3老單新增自定義選單按鈕
先說下金蝶老單是新單的區別 金蝶是有著20多年的歷史,金蝶軟體是多年的積澱,軟體也經常更新,但是原有的 框架是不變的,因此,現在的金蝶wise,實際上用的還是已經淘汰的語言vb寫的,底層的框架也都是十幾年前落後的。金蝶也有新語言寫的,比如cloud,但wise至少不是。老單與新單,應該是金蝶bos功...