金蝶K3工業老單中間層開發示例 2

2021-06-22 01:07:19 字數 3478 閱讀 5142

二次開發實現的步驟:

第一步、新建元件工程(假設工程名為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功...