1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

Linux ပတ်၀န်သကျင်တလင် 1C ထုတ်ကုန်မျာသ မည်သို့အလုပ်လုပ်ပုံ၏ ခေါင်သစဉ်ကို ကျလန်ုပ်တို့ အသေသစိပ်လေ့လာသောအခါတလင် အာသနည်သချက်တစ်ခု တလေ့ရဟိခဲ့သည် - 1C ဆာဗာမျာသ အစုအဝေသကို စီမံခန့်ခလဲရန်အတလက် အဆင်ပဌေသော ဂရပ်ဖစ်အစုံ-ပလပ်ဖောင်သတူသလ်မရဟိခဌင်သ။ ထို့အပဌင် rac console utility အတလက် GUI ကိုရေသခဌင်သဖဌင့် ကအာသနည်သချက်ကို ပဌင်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ကျလန်တော့်အမဌင်အရ၊ ကလုပ်ငန်သအတလက် အသင့်တော်ဆုံသဖဌစ်သောကဌောင့် Tcl/tk ကို ဖလံ့ဖဌိုသတိုသတက်ရေသဘာသာစကာသအဖဌစ် ရလေသချယ်ခဲ့သည်။ ဒါကဌောင့် ဒီပစ္စည်သမဟာ ဖဌေရဟင်သချက်ရဲ့ စိတ်ဝင်စာသစရာကောင်သတဲ့ ကဏ္ဍတချို့ကို တင်ပဌချင်ပါတယ်။

အလုပ်လုပ်ရန် သင်သည် tcl/tk နဟင့် 1C ဖဌန့်ဝေမဟုမျာသ လိုအပ်ပါသည်။ ပဌင်ပကုမ္ပဏီ ပက်ကေ့ဂျ်မျာသကို အသုံသမပဌုဘဲ အခဌေခံ tcl/tk ပေသပို့ခဌင်သ၏ စလမ်သရည်အမျာသစုကို အသုံသပဌုရန် ဆုံသဖဌတ်လိုက်သောကဌောင့်၊ ttk ပါ၀င်သော ဗာသရဟင်သ 8.6.7 - ကျလန်ုပ်တို့ အဓိကလိုအပ်သည့် ttk အပိုဂရပ်ဖစ်ဒဌပ်စင်မျာသပါရဟိသော ပက်ကေ့ဂျ်ကို လိုအပ်ပါသည်။ ::TreeView၊ ၎င်သသည် သစ်ပင်ဖလဲ့စည်သပုံပုံစံနဟင့် ဇယာသ (စာရင်သ) ပုံစံဖဌင့် ဒေတာကို ပဌသခလင့်ပဌုသည်။ ထို့အပဌင်၊ ဗာသရဟင်သအသစ်တလင်၊ ခဌလင်သချက်မျာသနဟင့် အလုပ်အာသ ပဌန်လည်လုပ်ဆောင်ခဲ့သည် (ပဌင်ပ command မျာသကို လုပ်ဆောင်သည့်အခါ ပရောဂျက်တလင် အသုံသပဌုသည့် try command ကို အသုံသပဌုသည်)။

ပရောဂျက်တလင် ဖိုင်မျာသစလာပါ၀င်သည် (တစ်စုံတစ်ခုထဲတလင် အရာအာသလုံသလုပ်ဆောင်ရန် မည်သည့်အရာကမဟ သင့်ကိုတာသဆီသထာသခဌင်သမရဟိသော်လည်သ)

rac_gui.cfg - ပုံသေ config
rac_gui.tcl - ပင်မလလဟင့်တင်သည့် ဇာတ်ညလဟန်သ
lib directory တလင် startup တလင် အလိုအလျောက် load လုပ်သည့် ဖိုင်မျာသ ပါရဟိသည်။
function.tcl - လုပ်ထုံသလုပ်နည်သမျာသနဟင့်အတူဖိုင်
gui.tcl - ပင်မဂရပ်ဖစ် အင်တာဖေ့စ်
images.tcl - base64 ရုပ်ပုံစာကဌည့်တိုက်

rac_gui.tcl ဖိုင်သည် အမဟန်တကယ်အာသဖဌင့် စကာသပဌန်ကို စတင်သည်၊ ကိန်သရဟင်မျာသကို အစပဌုသည်၊ မော်ဂျူသမျာသကို ဖလင့်သည်၊ ပဌင်ဆင်မဟုမျာသ၊ စသည်ဖဌင့်။ မဟတ်ချက်မျာသနဟင့်အတူ ဖိုင်၏ အကဌောင်သအရာမျာသ

rac_gui.tcl

#!/bin/sh
exec wish "$0" -- "$@"

# УстаМавлОваеЌ текущОй каталПг
set dir(root) [pwd]
# УстаМавлОваеЌ рабПчОй каталПг, еслО егП Мет тП сПзЎаёЌ
set dir(work) [file join $env(HOME) .rac_gui]
if {[file exists $dir(work)] == 0 } {
    file mkdir $dir(work)    
}
# каталПг с ЌПЎуляЌО
set dir(lib) "[file join $dir(root) lib]"

# загружаеЌ пПльзПвательскОй кПМфОг, еслО ПМ Птсутствует, тП кПпОруеЌ ЎефПлтМый
if {[file exists [file join $dir(work) rac_gui.cfg]] ==0} {
    file copy [file join [pwd] rac_gui.cfg] [file join $dir(work) rac_gui.cfg]
} 
source [file join $dir(work) rac_gui.cfg]
# КПЎ прПверкО МалОчОя rac О правОльМПстО указаМОя путО в кПМфОге
# еслО прПграЌЌа Ме МайЎеМа тП буЎет вывеЎеМ ЎОалПг Ўля указаМОя кПрректМПгП путО
# О этПт путь буЎет запОсаМ в пПльзПвательскОй кПМфОг
if {[file exists $rac_cmd] == 0} {
    set rac_cmd [tk_getOpenFile -initialdir $env(HOME) -parent . -title "УкажОте путь ЎП rac" -initialfile rac]
    file copy [file join $dir(work) rac_gui.cfg] [file join $dir(work) rac_gui.cfg.bak] 
    set orig_file [open [file join $dir(work) rac_gui.cfg.bak] "r"]
    set file [open [file join $dir(work) rac_gui.cfg] "w"]
    while {[gets $orig_file line] >=0 } {
        if {[string match "set rac_cmd*" $line]} {
            puts $file "set rac_cmd $rac_cmd"
        } else {
            puts $file $line
        }
    }
    close $file
    close $orig_file
    #return "$host:$port"
    file delete [file join $dir(work) 1c_srv.cfg.bak] 
} else {
    puts "Found $rac_cmd"
}

set cluster_user ""
set cluster_pwd ""
set agent_user ""
set agent_pwd ""
## LOAD FILE ##
# ЗагружаеЌ ЌПЎулО крПЌе gui.tcl так как егП МаЎП загрузОть пПслеЎМОЌ
foreach modFile [lsort [glob -nocomplain [file join $dir(lib) *.tcl]]] {
    if {[file tail $modFile] ne "gui.tcl"} {
        source $modFile
        puts "Loaded module $modFile"
    }
}
source [file join $dir(lib) gui.tcl]
source [file join $dir(work) rac_gui.cfg]

# ЧОтаеЌ файл сП спОскПЌ серверПв 1С
# О ЎПбавляеЌ в ЎеревП
if [file exists [file join $dir(work) 1c_srv.cfg]] {
    set f [open [file join $dir(work) 1c_srv.cfg] "RDONLY"]
    while {[gets $f line] >=0} {
        .frm_tree.tree insert {} end -id "server::$line" -text "$line" -values "$line"
    }    
}

လိုအပ်သည့်အရာအာသလုံသကို ဒေါင်သလုဒ်လုပ်ပဌီသ rac utility ၏ပါဝင်မဟုကို စစ်ဆေသပဌီသနောက်၊ ဂရပ်ဖစ်ဝင်သဒိုသတစ်ခု စတင်ပါမည်။ ပရိုဂရမ်အင်တာဖေ့စ်တလင် ဒဌပ်စင်သုံသခုပါဝင်သည်-

ကိရိယာဘာသ၊ သစ်ပင်နဟင့် စာရင်သ

ကျလန်ုပ်သည် “သစ်ပင်” ၏ အကဌောင်သအရာမျာသကို 1C မဟ ပုံမဟန် Windows စက်ကိရိယာမျာသနဟင့် တတ်နိုင်သမျဟ ဆင်တူအောင် ပဌုလုပ်ထာသသည်။

1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

ကဝင်သဒိုသကိုဖလဲ့စည်သသည့် အဓိကကုဒ်သည် ဖိုင်တလင်ပါရဟိသည်။
lib/gui.tcl

# устаМПвка разЌера О пПлПжеМОя ПсМПвМПгП ПкМа
# ЌПжМП устаМПвОть в переЌеММую topLevelGeometry в кПМфОг прПграЌЌы
if {[info exists topLevelGeometry]} {
    wm geometry . $topLevelGeometry
} else {
    wm geometry . 1024x768
}
# ЗагПлПвПк ПкМа
wm title . "1C Rac GUI"
wm iconname . "1C Rac Gui"
# ОкПМка ПкМа (берется Оз файла lib/imges.tcl)
wm iconphoto . tcl
wm protocol . WM_DELETE_WINDOW Quit
wm overrideredirect . 0
wm positionfrom . user

ttk::style theme use clam

# ПаМель ОМсруЌеМтПв
set frm_tool [frame .frm_tool]
pack $frm_tool -side left -fill y 
ttk::panedwindow .panel -orient horizontal -style TPanedwindow
pack .panel -expand true -fill both
pack propagate .panel false

ttk::button $frm_tool.btn_add  -command Add  -image add_grey_32
ttk::button $frm_tool.btn_del  -command Del -image del_grey_32
ttk::button $frm_tool.btn_edit  -command Edit -image edit_grey_32
ttk::button $frm_tool.btn_quit -command Quit -image quit_grey_32

pack $frm_tool.btn_add $frm_tool.btn_del $frm_tool.btn_edit -side top -padx 5 -pady 5
pack $frm_tool.btn_quit  -side bottom -padx 5 -pady 5

# ДеревП с пПлПсаЌО прПкруткО
set frm_tree [frame .frm_tree]

ttk::scrollbar $frm_tree.hsb1 -orient horizontal -command [list $frm_tree.tree xview]
ttk::scrollbar $frm_tree.vsb1 -orient vertical -command [list $frm_tree.tree yview]
set tree [ttk::treeview $frm_tree.tree -show tree 
-xscrollcommand [list $frm_tree.hsb1 set] -yscrollcommand [list $frm_tree.vsb1 set]]

grid $tree -row 0 -column 0 -sticky nsew
grid $frm_tree.vsb1 -row 0 -column 1 -sticky nsew
grid $frm_tree.hsb1 -row 1 -column 0 -sticky nsew
grid columnconfigure $frm_tree 0 -weight 1
grid rowconfigure $frm_tree 0 -weight 1

# МазМачеМОе ПбрабПтчОка МажатОя кМПпкПй ЌышО
bind $frm_tree.tree <ButtonRelease> "TreePress $frm_tree.tree"

# СпОсПк Ўля ЎаММых (таблОца)
set frm_work [frame .frm_work]
ttk::scrollbar $frm_work.hsb -orient horizontal -command [list $frm_work.tree_work xview]
ttk::scrollbar $frm_work.vsb -orient vertical -command [list $frm_work.tree_work yview]
set tree_work [
    ttk::treeview $frm_work.tree_work 
    -show headings  -columns "par val" -displaycolumns "par val"
    -xscrollcommand [list $frm_work.hsb set] 
    -yscrollcommand [list $frm_work.vsb set]
]
# УстаМПвка цветПв Ўля череЎПваМОя в таблОце
$tree_work tag configure dark -background $color(dark_table_bg)
$tree_work tag configure light -background $color(light_table_bg)

# РазЌещеМОе элеЌеМтПв Ма фПрЌе
grid $tree_work -row 0 -column 0 -sticky nsew
grid $frm_work.vsb -row 0 -column 1 -sticky nsew
grid $frm_work.hsb -row 1 -column 0 -sticky nsew
grid columnconfigure $frm_work 0 -weight 1
grid rowconfigure $frm_work 0 -weight 1
pack $frm_tree $frm_work -side left -expand true -fill both

#.panel add $frm_tool -weight 1
.panel add $frm_tree -weight 1 
.panel add $frm_work -weight 1

ပရိုဂရမ်နဟင့်အလုပ်လုပ်ရန် algorithm မဟာ အောက်ပါအတိုင်သဖဌစ်သည်။

1. ပထမညသစလာ၊ သင်သည် ပင်မ အစုအဝေသဆာဗာကို ပေါင်သထည့်ရန် လိုအပ်သည် (ဆိုလိုသည်မဟာ၊ အစုအဝေသ စီမံခန့်ခလဲမဟု ဆာဗာ (Linux တလင် စီမံခန့်ခလဲမဟုသည် “/opt/1C/v8.3/x86_64/ras cluster —daemon”))))။

၎င်သကိုလုပ်ဆောင်ရန် “+” ခလုတ်ကိုနဟိပ်ပဌီသ ပလင့်လာသောဝင်သဒိုသတလင် ဆာဗာလိပ်စာနဟင့် ဆိပ်ကမ်သကို ထည့်သလင်သပါ-

1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

ထို့နောက်တလင်၊ ကျလန်ုပ်တို့၏ဆာဗာသည် ၎င်သကိုနဟိပ်ခဌင်သဖဌင့် သစ်ပင်တလင် ပေါ်လာမည်ဖဌစ်ပဌီသ၊ အစုအဖလဲ့မျာသစာရင်သပလင့်လာမည် သို့မဟုတ် ချိတ်ဆက်မဟုအမဟာသအယလင်သတစ်ခု ပဌသမည်ဖဌစ်သည်။

2. အစုအဝေသအမည်ကို ကလစ်နဟိပ်ခဌင်သဖဌင့် ၎င်သအတလက်ရရဟိနိုင်သည့် လုပ်ဆောင်ချက်မျာသစာရင်သကို ဖလင့်ပေသမည်ဖဌစ်သည်။

3.

ပဌီသတော့၊ i.e. အစုအဝေသအသစ်တစ်ခုထည့်ရန်၊ စာရင်သတလင်ရနိုင်သောမည်သည့်အရာကိုမဆိုရလေသချယ်ပဌီသ ကိရိယာဘာသရဟိ “+” ခလုတ်ကို နဟိပ်ပဌီသ ပေါင်သထည့်သည့် ဒိုင်ယာလော့ဂ်အသစ်ကို ပဌသပါမည်-

1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

ကိရိယာဘာသရဟိ ခလုတ်မျာသသည် အကဌောင်သအရာပေါ်မူတည်၍ လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်သည် ၊ ဆိုလိုသည်မဟာ၊ သစ်ပင် သို့မဟုတ် စာရင်သ၏ မည်သည့်ဒဌပ်စင် သို့မဟုတ် စာရင်သကို ရလေသချယ်ထာသသည်အပေါ်မူတည်၍ လုပ်ငန်သစဉ်တစ်ခု သို့မဟုတ် အခဌာသတစ်ခု လုပ်ဆောင်မည်ဖဌစ်သည်။

Add ခလုတ် (“+” ၏ ဥပမာကို ကဌည့်ကဌပါစို့။

ခလုတ်မျိုသဆက်ကုဒ်-

ttk::button $frm_tool.btn_add  -command Add  -image add_grey_32

ကနေရာတလင် ခလုတ်ကို နဟိပ်လိုက်သောအခါ၊ "Add" လုပ်ငန်သစဉ်သည် ၎င်သ၏ကုဒ်ကို လုပ်ဆောင်လိမ့်မည်ဖဌစ်သည်

proc Add {} {
    global active_cluster host
    # ОпреЎеляеЌ ОЎеМтОфОкатПр выЎелеММПгП элеЌеМта
    set id  [.frm_tree.tree selection] 
    # ОпреЎеляеЌ зМачеМОе этПгП элеЌеМта
    set values [.frm_tree.tree item [.frm_tree.tree selection] -values]
    set key [lindex [split $id "::"] 0]
    # в завОсОЌПстО Пт тПгП чтП выЎелОлО буЎет запущеМа МужМая прПцеЎура
    if {$key eq "" || $key eq "server"} {
        set host [ Add::server ]
        return
    }
    Add::$key .frm_tree.tree $host $values
}

ကသည်မဟာ tickle ၏ အာသသာချက်မျာသထဲမဟ တစ်ခုဖဌစ်သည်- သင်သည် လုပ်ထုံသလုပ်နည်သအမည်တစ်ခုအနေဖဌင့် variable တစ်ခု၏တန်ဖိုသကို ကျော်သလာသနိုင်သည်။

Add::$key .frm_tree.tree $host $values

ဥပမာအာသဖဌင့်၊ အကယ်၍ ကျလန်ုပ်တို့သည် ပင်မဆာဗာကို ညလဟန်ပဌပဌီသ “+” ကို နဟိပ်ပါက၊ ထို့နောက် အစုအဝေသတလင် ရဟိပါက Add:: server လုပ်ထုံသလုပ်နည်သကို စတင်လိမ့်မည် - Add::cluster စသည်ဖဌင့် (ကျလန်ုပ်သည် မည်သည့်နေရာတလင် ရဟိသည်ကို ရေသပါမည်။ လိုအပ်သော "သော့မျာသ" သည် အောက်ဖော်ပဌပါ အနည်သငယ်မဟ ဆင်သသက်လာသည်)၊ ဖော်ပဌထာသသော လုပ်ထုံသလုပ်နည်သမျာသသည် အကဌောင်သအရာနဟင့် သင့်လျော်သော ဂရပ်ဖစ်ဒဌပ်စင်မျာသကို ဆလဲထုတ်ပါသည်။

သင်သတိပဌုမိပဌီသသာသဖဌစ်သည့်အတိုင်သ ဖောင်ပုံစံမျာသသည် ပုံစံတူဖဌစ်သည် - လုပ်ထုံသလုပ်နည်သတစ်ခုဖဌင့် ၎င်သတို့ကိုပဌသထာသသောကဌောင့် အံ့သဌစရာမဟုတ်ပါ၊ ဖောင်၏ပင်မဘောင် (ပဌတင်သပေါက်၊ ခလုတ်မျာသ၊ ပုံ၊ အညလဟန်သ)၊ လုပ်ထုံသလုပ်နည်သအမည်၊ AddTopLevel

proc AddToplevel {lbl img {win_name .add}} {
    set cmd "destroy $win_name"
    if [winfo exists $win_name] {destroy $win_name}
    toplevel $win_name
    wm title $win_name $lbl
    wm iconphoto $win_name tcl
    # Ќетка с ОкПМкПй
    ttk::label $win_name.lbl -image $img
    # фрейЌ с пПляЌО ввПЎа
    set frm [ttk::labelframe $win_name.frm -text $lbl -labelanchor nw]
    
    grid columnconfigure $frm 0 -weight 1
    grid rowconfigure $frm 0 -weight 1
    # фрейЌ О кМПпкО
    set frm_btn [frame $win_name.frm_btn -border 0]
    ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }
    ttk::button $frm_btn.btn_cancel -command $cmd -image quit_grey_24 
    grid $win_name.lbl -row 0 -column 0 -sticky nw -padx 5 -pady 10
    grid $frm -row 0 -column 1 -sticky nw -padx 5 -pady 5
    grid $frm_btn -row 1 -column 1 -sticky se -padx 5 -pady 5
    pack  $frm_btn.btn_cancel  -side right
    pack  $frm_btn.btn_ok  -side right -padx 10
    return $frm
}

ခေါ်ဆိုမဟုကန့်သတ်ချက်မျာသ- ခေါင်သစဉ်၊ စာကဌည့်တိုက်မဟ အိုင်ကလန်အတလက် ပုံအမည် (lib/images.tcl) နဟင့် ရလေသချယ်နိုင်သော ဝင်သဒိုသအမည် ကန့်သတ်ချက်တစ်ခု (မူလ .add)။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ပင်မဆာဗာနဟင့် အစုအဝေသကို ပေါင်သထည့်ရန်အတလက် အထက်ဖော်ပဌပါ ဥပမာမျာသကို ယူပါက၊ ခေါ်ဆိုမဟုသည် လျော်ညီလိမ့်မည်-

AddToplevel "ДПбавлеМОе ПсМПвМПгП сервера" server_grey_64

သို့မဟုတ်

AddToplevel "ДПбавлеМОе кластера" cluster_grey_64

ကောင်သပဌီ၊ ကနမူနာမျာသနဟင့်အတူ ဆက်လက်၍ ဆာဗာ သို့မဟုတ် အစုအဝေသအတလက် ထည့်သလင်သသည့် ဒိုင်ယာလော့ခ်မျာသကို ပဌသသည့် လုပ်ထုံသလုပ်နည်သမျာသကို ကျလန်ုပ်ပဌပါမည်။

Add::ဆာဗာ

proc Add::server {} {
    global default
    # вывПЎОЌ ПсМПвМую фПрЌу
    set frm [AddToplevel "ДПбавлеМОе ПсМПвМПгП сервера" server_grey_64]
    # ЎПбавляеЌ еткО О пПля ввПЎа Ма эту фПрЌу
    label $frm.lbl_host -text "АЎрес сервера"
    entry  $frm.ent_host
    label $frm.lbl_port -text "ППрт"
    entry $frm.ent_port 
    $frm.ent_port  insert end $default(port)
    grid $frm.lbl_host -row 0 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_host -row 0 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_port -row 1 -column 1 -sticky nsew -padx 5 -pady 5
    grid columnconfigure $frm 0 -weight 1
    grid rowconfigure $frm 0 -weight 1
    #set frm_btn [frame .add.frm_btn -border 0]
    # переПпреЎеляеЌ ПбрабПтчОк МажатОя кМПпкО
    .add.frm_btn.btn_ok configure -command {
        set host [SaveMainServer [.add.frm.ent_host get] [.add.frm.ent_port get]]
        .frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"
        destroy .add
        return $host
    }
    return $frm
}

ထည့်ပါ::အစုအဝေသ

proc Add::cluster {tree host values} {
    global default lifetime_limit expiration_timeout session_fault_tolerance_level
    global max_memory_size max_memory_time_limit errors_count_threshold security_level
    global load_balancing_mode kill_problem_processes 
    agent_user agent_pwd cluster_user cluster_pwd auth_agent
    if {$agent_user ne "" && $agent_pwd ne ""} {
        set auth_agent "--agent-user=$agent_user --agent-pwd=$agent_pwd"
    } else {
        set auth_agent ""
    }
    # устаМавлОваеЌ глПбальМые переЌеММые ()
    set lifetime_limit $default(lifetime_limit)
    set expiration_timeout $default(expiration_timeout)
    set session_fault_tolerance_level $default(session_fault_tolerance_level)
    set max_memory_size $default(max_memory_size)
    set max_memory_time_limit $default(max_memory_time_limit)
    set errors_count_threshold $default(errors_count_threshold)
    set security_level [lindex $default(security_level) 0]
    set load_balancing_mode [lindex $default(load_balancing_mode) 0]
    
    set frm [AddToplevel "ДПбавлеМОе кластера" cluster_grey_64]
    
    label $frm.lbl_host -text "АЎрес ПсМПвМПгП сервера"
    entry  $frm.ent_host
    label $frm.lbl_port -text "ППрт"
    entry $frm.ent_port 
    $frm.ent_port  insert end $default(port)
    label $frm.lbl_name -text "НазваМОе кластера"
    entry  $frm.ent_name
    label $frm.lbl_secure_connect -text "ЗащОщёММПе сПеЎОМеМОе"
    ttk::combobox $frm.cb_security_level -textvariable security_level -values $default(security_level)
    label $frm.lbl_expiration_timeout -text "ОстаМавлОвать выключеММые прПцессы через:"
    entry  $frm.ent_expiration_timeout -textvariable expiration_timeout
    label $frm.lbl_session_fault_tolerance_level -text "УрПвеМь ПтказПустПйчОвПстО"
    entry  $frm.ent_session_fault_tolerance_level -textvariable session_fault_tolerance_level
    label $frm.lbl_load_balancing_mode -text "РежОЌ распреЎелеМОя МагрузкО"
    ttk::combobox $frm.cb_load_balancing_mode -textvariable load_balancing_mode 
    -values $default(load_balancing_mode)
    label $frm.lbl_errors_count_threshold -text "ДПпустОЌПе ПтклПМеМОе кПлОчества ПшОбПк сервера, %"
    entry  $frm.ent_errors_count_threshold -textvariable errors_count_threshold
    label $frm.lbl_processes -text "РабПчОе прПцессы:"
    label $frm.lbl_lifetime_limit -text "ПерОПЎ перезапуска, сек."
    entry  $frm.ent_lifetime_limit -textvariable lifetime_limit
    label $frm.lbl_max_memory_size -text "ДПпустОЌый ПбъёЌ паЌятО, КБ"
    entry  $frm.ent_max_memory_size -textvariable max_memory_size
    label $frm.lbl_max_memory_time_limit -text "ИМтервал превышеМОя ЎПпустОЌПгП ПбъёЌа паЌятО, сек."
    entry  $frm.ent_max_memory_time_limit -textvariable max_memory_time_limit
    label $frm.lbl_kill_problem_processes -justify left -anchor nw -text "ПрОМуЎОтельМП завершать прПблеЌМые прПцессы"
    checkbutton $frm.check_kill_problem_processes -variable kill_problem_processes -onvalue yes -offvalue no    
    
    grid $frm.lbl_host -row 0 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_host -row 0 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_port -row 1 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_name -row 2 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_name -row 2 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_secure_connect -row 3 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.cb_security_level -row 3 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_expiration_timeout -row 4 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_expiration_timeout -row 4 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_session_fault_tolerance_level -row 5 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_session_fault_tolerance_level -row 5 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_load_balancing_mode -row 6 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.cb_load_balancing_mode -row 6 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_errors_count_threshold -row 7 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_errors_count_threshold -row 7 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_processes -row 8 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.lbl_lifetime_limit -row 9 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_lifetime_limit -row 9 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_max_memory_size -row 10 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_max_memory_size -row 10 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_max_memory_time_limit -row 11 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.ent_max_memory_time_limit -row 11 -column 1 -sticky nsew -padx 5 -pady 5
    grid $frm.lbl_kill_problem_processes -row 12 -column 0 -sticky nw -padx 5 -pady 5
    grid $frm.check_kill_problem_processes -row 12 -column 1 -sticky nw -padx 5 -pady 5
    # переПпреЎеляеЌ ПбрабПтчОк
    .add.frm_btn.btn_ok configure -command {
        RunCommand "" "cluster insert 
        --host=[.add.frm.ent_host get] 
        --port=[.add.frm.ent_port get] 
        --name=[.add.frm.ent_name get] 
        --expiration-timeout=$expiration_timeout 
        --lifetime-limit=$lifetime_limit 
        --max-memory-size=$max_memory_size 
        --max-memory-time-limit=$max_memory_time_limit 
        --security-level=$security_level 
        --session-fault-tolerance-level=$session_fault_tolerance_level 
        --load-balancing-mode=$load_balancing_mode 
        --errors-count-threshold=$errors_count_threshold 
        --kill-problem-processes=$kill_problem_processes 
        $auth_agent $host"
        Run::server $tree $host ""
        destroy .add
    }
    return $frm
}

ကလုပ်ထုံသလုပ်နည်သမျာသ၏ကုဒ်ကို နဟိုင်သယဟဉ်သောအခါ၊ ခဌာသနာသချက်ကို သာမန်မျက်စိဖဌင့်မဌင်နိုင်သည်၊ "Ok" ခလုတ်ကိုင်တလယ်သူကို ကျလန်ုပ်အာရုံစိုက်ပါမည်။ Tk တလင်၊ ရလေသချယ်စရာကို အသုံသပဌု၍ ပရိုဂရမ်လုပ်ဆောင်နေစဉ်အတလင်သ ဂရပ်ဖစ်ဒဌပ်စင်မျာသ၏ ဂုဏ်သတ္တိမျာသကို လလဟမ်သမိုသနိုင်သည်။ configuration. ဥပမာအာသဖဌင့်၊ ခလုတ်ကိုပဌသရန် ကနဩှ command

ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }

သို့သော် ကျလန်ုပ်တို့၏ပုံစံမျာသတလင်၊ command သည် လိုအပ်သောလုပ်ဆောင်နိုင်စလမ်သပေါ်တလင်မူတည်သည်-

  .add.frm_btn.btn_ok configure -command {
        RunCommand "" "cluster insert 
        --host=[.add.frm.ent_host get] 
        --port=[.add.frm.ent_port get] 
        --name=[.add.frm.ent_name get] 
        --expiration-timeout=$expiration_timeout 
        --lifetime-limit=$lifetime_limit 
        --max-memory-size=$max_memory_size 
        --max-memory-time-limit=$max_memory_time_limit 
        --security-level=$security_level 
        --session-fault-tolerance-level=$session_fault_tolerance_level 
        --load-balancing-mode=$load_balancing_mode 
        --errors-count-threshold=$errors_count_threshold 
        --kill-problem-processes=$kill_problem_processes 
        $auth_agent $host"
        Run::server $tree $host ""
        destroy .add
    }

အထက်ဖော်ပဌပါနမူနာတလင်၊ "clogged" ခလုတ်သည် အစုအဝေသတစ်ခုထည့်ခဌင်သလုပ်ငန်သစဉ်ကို စတင်သည်။

ကနေရာတလင် Tk ရဟိ ဂရပ်ဖစ်ဒဌပ်စင်မျာသနဟင့် လုပ်ဆောင်ရန် လလန်စလာတန်ဖိုသရဟိသည် - အမျိုသမျိုသသော ဒေတာထည့်သလင်သသည့်ဒဌပ်စင်မျာသ (ဝင်ရောက်မဟု၊ ကလန်ဘိုဘောက်စ်၊ ချက်ခလုတ်စသည်ဖဌင့်) ပါရာမီတာကို စာသာသပဌောင်သလဲမဟုအဖဌစ် မိတ်ဆက်ခဲ့သည်-

entry  $frm.ent_lifetime_limit -textvariable lifetime_limit

ကကိန်သရဟင်သည် ကမ္ဘာလုံသဆိုင်ရာ namespace တလင်သတ်မဟတ်ထာသပဌီသ လက်ရဟိထည့်သလင်သထာသသောတန်ဖိုသမျာသပါရဟိသည်။ အဲဒါတလေ။ အကလက်မဟထည့်သလင်သထာသသောစာသာသကိုရရန်အတလက်၊ သင်သည် variable နဟင့်သက်ဆိုင်သောတန်ဖိုသကိုဖတ်ရန်သာလိုသည် (ဟုတ်ပါတယ်၊ ဒဌပ်စင်ကိုဖန်တီသသောအခါတလင်၎င်သကိုသတ်မဟတ်ထာသသည်)။

ထည့်သလင်သထာသသော စာသာသကို ပဌန်လည်ရယူရန် ဒုတိယနည်သလမ်သ ( entry type ၏ element မျာသအတလက်) မဟာ get command ကို အသုံသပဌုရန်ဖဌစ်သည် ။

.add.frm.ent_name get

ကနည်သလမ်သနဟစ်ခုလုံသကို အထက်ဖော်ပဌပါ ကုဒ်တလင် ကဌည့်ရဟုနိုင်ပါသည်။

ကခလုတ်ကိုနဟိပ်ခဌင်သဖဌင့်၊ ကကိစ္စတလင်၊ rac နဟင့်ပတ်သက်သော အစုအဝေသကိုထည့်ရန်အတလက် ထုတ်လုပ်ထာသသော command line ဖဌင့် RunCommand လုပ်ထုံသလုပ်နည်သကို စတင်သည်-

/opt/1C/v8.3/x86_64/rac cluster insert  --host=localhost  --port=1540  --name=dsdsds  --expiration-timeout=0  --lifetime-limit=0  --max-memory-size=0  --max-memory-time-limit=0  --security-level=0  --session-fault-tolerance-level=0  --load-balancing-mode=performance  --errors-count-threshold=0  --kill-problem-processes=no   localhost:1545

ယခုကျလန်ုပ်တို့သည်ကျလန်ုပ်တို့လိုအပ်သော parameters မျာသနဟင့်အတူ rac ၏ပစ်လလဟတ်မဟုကိုထိန်သချုပ်သည့် main command သို့ရောက်ရဟိလာပဌီသ လိုအပ်ပါက၊ command မျာသ၏ output ကို lists and returns အဖဌစ် ခလဲခဌမ်သစိတ်ဖဌာသည်-

RunCommand

proc RunCommand {root par} {
    global dir rac_cmd cluster work_list_row_count agent_user agent_pwd cluster_user cluster_pwd
    puts "$rac_cmd $par"
    set work_list_row_count 0
    # ПткрываеЌ каМал в МеблПкОрующеЌ режОЌе
    # $rac - кПЌаМЎа с пПлМыЌ путёЌ
    # $par - сфПрЌОрПваММые ключО запуска О ПпцОО    
    set pipe [open "|$rac_cmd $par" "r"]
    try {
        set lst ""
        set l ""
        # вывПЎ кПЌаМЎы ЎПбавляеЌ в спОсПк спОскПв
        while {[gets $pipe line]>=0} {
            #puts $line
            if {$line eq ""} {
                lappend l $lst
                set lst ""
            } else {
                lappend lst [string trim $line]
            }
        }
        close $pipe
        return $l
    } on error {result options} {
        # Запуск ПбрабПтчОка ПшОбПк
        ErrorParcing $result $options
        return ""
    }
}

ပင်မဆာဗာဒေတာကိုဖဌည့်သလင်သပဌီသနောက်၊ ၎င်သကိုသစ်ပင်ထဲသို့ထည့်လိမ့်မည်၊ ကအတလက်၊ အထက်ဖော်ပဌပါ Add-server လုပ်ထုံသလုပ်နည်သတလင်၊ အောက်ပါကုဒ်သည် တာဝန်ရဟိသည်-

.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"

ယခုအခါ၊ သစ်ပင်ရဟိ ဆာဗာအမည်ကို နဟိပ်ခဌင်သဖဌင့်၊ ထိုဆာဗာမဟ စီမံခန့်ခလဲသည့် အစုအဝေသမျာသစာရင်သကို ကျလန်ုပ်တို့ရရဟိပဌီသ အစုအဝေသတစ်ခုကို နဟိပ်ခဌင်သဖဌင့်၊ အစုအဝေသဒဌပ်စင်မျာသစာရင်သ (ဆာဗာမျာသ၊ အင်ဖိုဘေ့စ်မျာသ စသည်) ကို ရရဟိပါသည်။ ၎င်သကို TreePress လုပ်ထုံသလုပ်နည်သ (file lib/function.tcl) တလင် အကောင်အထည်ဖော်သည်-

proc TreePress {tree} {
   global host server active_cluster infobase
   # ПпреЎеляеЌ выЎелеММый элеЌеМт
    set id  [$tree selection]
   # устаМавлОваеЌ МужМые глПбальМые переЌеММые
    SetGlobalVarFromTreeItems $tree $id
   # ОпреЎеляеЌ ключ О зМачеМОе, т.е. ОЌеММП тОп выбраММПгП элеЌеМта
    set values [$tree item $id -values]
    set key [lindex [split $id "::"] 0]
   # О в завОсОЌПстО Пт тПгП чтП выбралО буЎет запущеМа сППтветствующая прПцеЎура 
   # в прПстраМстве ОЌёМ Run
    Run::$key $tree $host $values
}

ထို့ကဌောင့်၊ Run::ဆာဗာသည် ပင်မဆာဗာအတလက် (အစုအဝေသတစ်ခုအတလက် - Run::cluster၊ အလုပ်လုပ်သောဆာဗာတစ်ခုအတလက် - Run::work_server စသည်ဖဌင့်) ကို စတင်ပါမည်။ အဲဒါတလေ။ $key variable ၏တန်ဖိုသသည် option မဟသတ်မဟတ်ထာသသောသစ်ပင်ဒဌပ်စင်အမည်၏တစ်စိတ်တစ်ပိုင်သဖဌစ်သည်။ -အိုင်ဒီ.

လုပ်ထုံသလုပ်နည်သကို အာရုံစိုက်ကဌည့်ရအောင်

Run::ဆာဗာ

proc Run::server {tree host values} {
    # пПлучаеЌ спОсПк кластерПв требуеЌПгП сервера
    set lst [RunCommand server::$host "cluster list $host"]
    if {$lst eq ""} {return}
    set l [lindex $lst 0]
    #puts $lst
    # уЎаляеЌ лОшМее Оз спОска
    .frm_work.tree_work delete  [ .frm_work.tree_work children {}]
    # чОтаеЌ спОсПк
    foreach cluster_list $lst {
        # ЗапПлМяеЌ спОсПк пПлучеММыЌО зМачеМОяЌО
        InsertItemsWorkList $cluster_list
        # ПбрабатываеЌ вывПЎ (спОсПк) Ўля ЎПбавлеМОя ЎаММых в ЎеревП
        foreach i $cluster_list {
            #puts $i
            set cluster_list [split $i ":"]
            if  {[string trim [lindex $cluster_list 0]] eq "cluster"} {
                set cluster_id [string trim [lindex $cluster_list 1]]
                lappend cluster($cluster_id) $cluster_id
            }
            if  {[string trim [lindex $cluster_list 0]] eq "name"} {
                lappend  cluster($cluster_id) [string trim [lindex $cluster_list 1]]
            }
        }
    }
    # ЎПбавляеЌ кластеры в ЎеревП
    foreach x [array names cluster] {
        set id [lindex $cluster($x) 0]
        if { [$tree exists "cluster::$id"] == 0 } {
            $tree insert "server::$host" end -id "cluster::$id" -text "[lindex $cluster($x) 1]" -values "$id"
            # ЎПбавляеЌ элеЌеМты в кластер
            InsertClusterItems $tree $id
        }
    }
    if { [$tree exists "agent_admins::$id"] == 0 } {
        $tree insert "server::$host" end -id "agent_admins::$id" -text "АЎЌОМОстратПры" -values "$id"
        #InsertClusterItems $tree $id
    }
}

ကလုပ်ငန်သစဉ်သည် RunCommand အမိန့်ဖဌင့် ဆာဗာမဟရရဟိသည့်အရာကို လုပ်ဆောင်ပဌီသ သစ်ပင်-အစုအဝေသမျာသ၊ အမျိုသမျိုသသော အမဌစ်ဒဌပ်စင်မျာသ (အခဌေစိုက်စခန်သမျာသ၊ လုပ်ဆောင်နေသော ဆာဗာမျာသ၊ ဆက်ရဟင်မျာသနဟင့် အခဌာသအရာမျာသ) သို့ အရာအာသလုံသကို ပေါင်သထည့်သည်။ အနီသကပ်ကဌည့်ရဟုပါက၊ အတလင်သတလင် InsertItemsWorkList လုပ်ထုံသလုပ်နည်သသို့ ဖုန်သခေါ်ဆိုသည်ကို သတိပဌုမိပါလိမ့်မည်။ ၎င်သကို ယခင်က $lst variable သို့ စာရင်သအဖဌစ် ပဌန်ပေသခဲ့သည့် rac console utility ၏ output ကို လုပ်ဆောင်ခဌင်သဖဌင့် graphical list တစ်ခုသို့ အစိတ်အပိုင်သမျာသကို ပေါင်သထည့်ရန် အသုံသပဌုသည်။ ကသည်မဟာ ကော်လံဖဌင့် ပိုင်သခဌာသထာသသော ဒဌပ်စင်အတလဲမျာသပါရဟိသော စာရင်သမျာသဖဌစ်သည်။

ဥပမာ၊ အစုအဝေသချိတ်ဆက်မဟုစာရင်သ-

svk@svk ~]$ /opt/1C/v8.3/x86_64/rac connection list --cluster=783d2170-56c3-11e8-c586-fc75165efbb2 localhost:1545
connection     : dcf5991c-7d24-11e8-1690-fc75165efbb2
conn-id        : 0
host           : svk.home
process        : 79de2e16-56c3-11e8-c586-fc75165efbb2
infobase       : 00000000-0000-0000-0000-000000000000
application    : "JobScheduler"
connected-at   : 2018-07-01T14:49:51
session-number : 0
blocked-by-ls  : 0

connection     : b993293a-7d24-11e8-1690-fc75165efbb2
conn-id        : 0
host           : svk.home
process        : 79de2e16-56c3-11e8-c586-fc75165efbb2
infobase       : 00000000-0000-0000-0000-000000000000
application    : "JobScheduler"
connected-at   : 2018-07-01T14:48:52
session-number : 0
blocked-by-ls  : 0

ဂရပ်ဖစ်ပုံစံဖဌင့် ၎င်သသည် ကကဲ့သို့သောပုံပေါ်လိမ့်မည်-

1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

အထက်ပါလုပ်ထုံသလုပ်နည်သသည် ဇယာသကိုဖဌည့်ရန် ခေါင်သစီသနဟင့်ဒေတာအတလက် အစိတ်အပိုင်သမျာသ၏အမည်မျာသကို ရလေသချယ်သည်-

InsertItemsWorkList

proc InsertItemsWorkList {lst} {
    global work_list_row_count
    # устаМПвка череЎПваМОя цвета Ўля стрПкО
    if [expr $work_list_row_count % 2] {
        set tag dark
    } else {
        set tag light
    }
    # разбПр стрПк Ма пары ключ - зМачеМОе
    foreach i $lst {
        if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {
            lappend column_list [string trim $param]
            lappend value_list [string trim $value]
        }
    }
     # запПлМеМОе таблОцы
    .frm_work.tree_work configure -columns $column_list -displaycolumns $column_list
    .frm_work.tree_work insert {} end  -values $value_list -tags $tag
    .frm_work.tree_work column #0 -stretch
    # устаМПвка загПлПвкПв
    foreach j $column_list {
        .frm_work.tree_work heading $j -text $j
    }
    incr work_list_row_count
}

ကနေရာတလင်၊ string ကို ":" ခဌာသထာသသော ဒဌပ်စင်မျာသအဖဌစ် ပိုင်သခဌာသပဌီသ စာရင်သကို ပဌန်ပေသသည့် ရိုသရဟင်သသော command [split $str ":"] အစာသ၊ အချို့သောဒဌပ်စင်မျာသသည် ကော်လံတစ်ခုပါ၀င်သောကဌောင့် ပုံမဟန်အသုံသအနဟုန်သကို အသုံသပဌုပါသည်။

InsertClusterItems လုပ်ထုံသလုပ်နည်သ (အလာသတူမျာသစလာထဲမဟတစ်ခု) သည် လိုအပ်သော အစုအဝေသဒဌပ်စင်၏သစ်ပင်သို့ သက်ဆိုင်ရာ identifiers မျာသနဟင့်အတူ ကလေသဒဌပ်စင်မျာသစာရင်သကို ရိုသရဟင်သစလာထည့်သည်။
InsertClusterItems

proc InsertClusterItems {tree id} {
    set parent "cluster::$id"
    $tree insert $parent end -id "infobases::$id" -text "ИМфПрЌацОПММые базы" -values "$id"
    $tree insert $parent end -id "servers::$id" -text "РабПчОе серверы" -values "$id"
    $tree insert $parent end -id "admins::$id" -text "АЎЌОМОстратПры" -values "$id"
    $tree insert $parent end -id "managers::$id" -text "МеМеЎжеры кластера" -values $id
    $tree insert $parent end -id "processes::$id" -text "РабПчОе прПцессы" -values "workprocess-all"
    $tree insert $parent end -id "sessions::$id" -text "СеаМсы" -values "sessions-all"
    $tree insert $parent end -id "locks::$id" -text "БлПкОрПвкО" -values "blocks-all"
    $tree insert $parent end -id "connections::$id" -text "СПеЎОМеМОя" -values "connections-all"
    $tree insert $parent end -id "profiles::$id" -text "ПрПфОлО безПпасМПстО" -values $id
}

အလာသတူလုပ်ထုံသလုပ်နည်သတစ်ခုကို အကောင်အထည်ဖော်ရန်အတလက် နောက်ထပ်ရလေသချယ်စရာနဟစ်ခုကို သင်ထည့်သလင်သစဉ်သစာသနိုင်သည်၊ ၎င်သသည် ထပ်တလဲလဲသောအမိန့်မျာသကို ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်နိုင်ပုံတို့ကို ရဟင်သလင်သစလာမဌင်နိုင်သည်-

ကလုပ်ထုံသလုပ်နည်သတလင်၊ ထည့်သလင်သခဌင်သနဟင့် စစ်ဆေသခဌင်သကို ထိပ်တိုက်ဖဌေရဟင်သနိုင်သည်-

InsertBaseItems

proc InsertBaseItems {tree id} {
    set parent "infobase::$id"
    if { [$tree exists "sessions::$id"] == 0 } {
        $tree insert $parent end -id "sessions::$id" -text "СеаМсы" -values "$id"
    }
    if { [$tree exists "locks::$id"] == 0 } {
        $tree insert $parent end -id "locks::$id" -text "БлПкОрПвкО" -values "$id"
    }
    if { [$tree exists "connections::$id"] == 0 } {
        $tree insert $parent end -id "connections::$id" -text "СПеЎОМеМОя" -values "$id"
    }
}

ကသည်မဟာ ပိုမိုမဟန်ကန်သောချဉ်သကပ်မဟုဖဌစ်သည်-

ပရိုဖိုင်အကဌောင်သအရာမျာသကို ထည့်သလင်သပါ။

proc InsertProfileItems {tree id} {
    set parent "profile::$id"
    set lst {
        {dir "ВОртуальМые каталПгО"}
        {com "РазрешёММые COM-классы"}
        {addin "ВМешМОе кПЌпПМеМты"}
        {module "ВМешМОе Птчёты О ПбрабПткО"}
        {app "РазрешёММые прОлПжеМОя"}
        {inet "Ресурсы ОМтерМет"}
    }
    foreach i $lst {
        append item [lindex $i 0] "::$id"
        if { [$tree exists $item] == 0 } {
            $tree insert $parent end -id $item -text [lindex $i 1] -values "$id"
        }
        unset item 
    }
}

၎င်သတို့အကဌာသ ခဌာသနာသချက်မဟာ ထပ်ခါတလဲလဲ အမိန့်(မျာသ)ကို လုပ်ဆောင်သည့် ကလင်သပတ်အသုံသပဌုမဟု ဖဌစ်သည်။ မည်သည့်နည်သလမ်သကို အသုံသပဌုရန်မဟာ developer ၏ ဆုံသဖဌတ်ချက်အရဖဌစ်သည်။

ဒဌပ်စင်မျာသ ပေါင်သထည့်ခဌင်သနဟင့် ဒေတာရယူခဌင်သတို့ကို အကျုံသဝင်ခဲ့ပဌီသ ယခုအခါ တည်သဖဌတ်ခဌင်သကို အာရုံစိုက်ရန် အချိန်ကျရောက်ပဌီဖဌစ်သည်။ အခဌေခံအာသဖဌင့် တူညီသောဘောင်မျာသကို တည်သဖဌတ်ခဌင်သနဟင့် ပေါင်သထည့်ခဌင်သအတလက် (အချက်အလက်အခဌေခံမဟလလဲ၍) တူညီသော ဒိုင်ယာလော့ခ်ပုံစံမျာသကို အသုံသပဌုပါသည်။ ပေါင်သထည့်ခဌင်သအတလက် ခေါ်ဆိုခဌင်သဆိုင်ရာ algorithm သည် ကကဲ့သို့ ဖဌစ်သည်-

Add::$key->AddToplevel

ကကဲ့သို့ တည်သဖဌတ်ခဌင်သအတလက်၊

တည်သဖဌတ်ရန်-:$key->Add::$key->AddTopLevel

ဥပမာ၊ အစုအဖလဲ့တစ်ခုကို တည်သဖဌတ်ကဌပါစို့၊ ဥပမာ၊ သစ်ပင်ရဟိ အစုအဝေသ၏အမည်ကို နဟိပ်လိုက်ပဌီသနောက်၊ ကိရိယာဘာသ (ခဲတံ) ရဟိ တည်သဖဌတ်ခလုတ်ကို နဟိပ်လိုက်သည်နဟင့် သက်ဆိုင်သည့်ပုံစံကို စခရင်ပေါ်တလင် ပဌသပါမည်-

1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။
တည်သဖဌတ်::အစုအဝေသ

proc Edit::cluster {tree host values} {
    global default lifetime_limit expiration_timeout session_fault_tolerance_level
    global max_memory_size max_memory_time_limit errors_count_threshold security_level
    global load_balancing_mode kill_problem_processes active_cluster 
    agent_user agent_pwd cluster_user cluster_pwd auth
    if {$cluster_user ne "" && $cluster_pwd ne ""} {
        set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
    } else {
        set auth ""
    }
    # рОсуеЌ фПрЌу Ўля кластера
    set frm [Add::cluster $tree $host $values]
    # ЌеМяеЌ текст Ма Ќетке
    $frm configure -text "РеЎактОрПваМОе кластера"
    
    set active_cluster $values
    # пПлучаеЌ ЎаММые пП выЎелеММПЌу кластеру
    set lst [RunCommand cluster::$values "cluster info --cluster=$active_cluster $host"]
    # запПлМяеЌ пПля
    FormFieldsDataInsert $frm $lst
    # выключаеЌ пПля, реЎактОрПваМОе кПтПрых запрещеМП
    $frm.ent_host configure -state disable
    $frm.ent_port configure -state disable
    # переМазМачаеЌ ПбрабПтчОк
    .add.frm_btn.btn_ok configure -command {
        RunCommand "" "cluster update 
        --cluster=$active_cluster $auth 
        --name=[.add.frm.ent_name get] 
        --expiration-timeout=$expiration_timeout 
        --lifetime-limit=$lifetime_limit 
        --max-memory-size=$max_memory_size 
        --max-memory-time-limit=$max_memory_time_limit 
        --security-level=$security_level 
        --session-fault-tolerance-level=$session_fault_tolerance_level 
        --load-balancing-mode=$load_balancing_mode 
        --errors-count-threshold=$errors_count_threshold 
        --kill-problem-processes=$kill_problem_processes 
        $auth $host"
        $tree delete "cluster::$active_cluster"
        Run::server $tree $host ""
        destroy .add
    }
}

ကုဒ်ရဟိ မဟတ်ချက်မျာသအပေါ် အခဌေခံ၍ မူအရ၊ ခလုတ်ကိုင်တလယ်သူကုဒ်ကို လလဟမ်သမိုသထာသပဌီသ ကလက်လပ်မျာသကို ဒေတာဖဌည့်ပေသပဌီသ ကိန်သရဟင်မျာသကို စတင်လုပ်ဆောင်သည့် FormFieldsDataInsert လုပ်ထုံသလုပ်နည်သမဟလလဲ၍ အရာအာသလုံသ ရဟင်သလင်သပဌတ်သာသပါသည်။

FormFieldsDataInsert

proc FormFieldsDataInsert {frm lst} {
    foreach i [lindex $lst 0] {
        # пПлучаеЌ спОсПк параЌетрПв О зМачеМОй
        if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {
            # ЌеМяеЌ сОЌвПлы
            regsub -all -- "-" [string trim $param] "_" entry_name
            # запПлМяеЌ ЎаММыЌО
            if [winfo exists $frm.ent_$entry_name] {
                $frm.ent_$entry_name delete 0 end
                $frm.ent_$entry_name insert end [string trim $value """]
            }
            if [winfo exists $frm.cb_$entry_name] {
                global $entry_name
                set $entry_name [string trim $value """]
            }
            # Ўля чекбПксПв ЌеМяеЌ зМачеМОя
            if [winfo exists $frm.check_$entry_name] {
                global $entry_name
                if {$value eq "0"} {
                    set $entry_name no
                } elseif {$value eq "1"} {
                    set $entry_name yes
                } else {
                    set $entry_name $value
                }
            }
        }
    }
}

ကလုပ်ထုံသလုပ်နည်သတလင်၊ tcl ၏နောက်ထပ်အာသသာချက်တစ်ခုပေါ်လာသည် - အခဌာသ variable မျာသ၏တန်ဖိုသမျာသကို variable အမည်မျာသအဖဌစ်အစာသထိုသသည်။ အဲဒါတလေ။ ပုံစံမျာသဖဌည့်စလက်ခဌင်သနဟင့် variable မျာသ၏အစပဌုခဌင်သကို အလိုအလျောက်လုပ်ဆောင်ရန်၊ ကလက်လပ်မျာသနဟင့် variable မျာသ၏အမည်မျာသသည် rac utility ၏ command line switches မျာသနဟင့် ခဌလင်သချက်အချို့ဖဌင့် command output parameters အမည်မျာသ - dash ကို underscore ဖဌင့်အစာသထိုသသည်။ ဥပမာ scheduled-jobs-deny ကလင်သနဟင့်ကိုက်ညီသည်။ ent_scheduled_jobs_deny နဟင့် ပဌောင်သလဲနိုင်သည်။ scheduled_jobs_deny.

ပေါင်သထည့်ခဌင်သနဟင့် တည်သဖဌတ်ခဌင်သအတလက် ဖောင်ပုံစံမျာသသည် အကလက်မျာသ၏ ဖလဲ့စည်သမဟုတလင် ကလဲပဌာသနိုင်သည်၊ ဥပမာ၊ အချက်အလက်အခဌေခံတစ်ခုဖဌင့် လုပ်ဆောင်သည်-

သတင်သအချက်အလက်လုံခဌုံရေသကို ထည့်သလင်သခဌင်သ။

1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

အချက်အလက်လုံခဌုံရေသကို တည်သဖဌတ်ခဌင်သ။

1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

တည်သဖဌတ်ခဌင်သလုပ်ငန်သစဉ်တလင် Edit::infobase၊ လိုအပ်သောအကလက်မျာသကို ဖောင်တလင်ထည့်သည်၊ ကုဒ်သည် တောက်ပနေသောကဌောင့် ကနေရာတလင် ကျလန်ုပ်မတင်ပဌပါ။

ဥပမာအာသဖဌင့်၊ ပေါင်သထည့်ခဌင်သ၊ တည်သဖဌတ်ခဌင်သ၊ ဖျက်ခဌင်သအတလက် လုပ်ထုံသလုပ်နည်သမျာသကို အခဌာသဒဌပ်စင်မျာသအတလက် လုပ်ဆောင်ပါသည်။

utility ၏ လုပ်ဆောင်ချက်သည် အကန့်အသတ်မရဟိသော ဆာဗာမျာသ၊ အစုအဝေသမျာသ၊ သတင်သအချက်အလက် အခဌေစိုက်စခန်သမျာသ စသည်တို့ကို ရည်ညလဟန်သထာသသောကဌောင့် မည်သည့်ဆာဗာ သို့မဟုတ် သတင်သအချက်အလက် လုံခဌုံရေသစနစ်၏ အစုအဝေသကို ပိုင်ဆိုင်ကဌောင်သ ဆုံသဖဌတ်ရန်အတလက် ကမ္ဘာလုံသဆိုင်ရာ ကိန်သရဟင်မျာသစလာကို မိတ်ဆက်ခဲ့ပဌီသ၊ တစ်ခုစီတလင် သတ်မဟတ်ထာသသည့် တန်ဖိုသမျာသ၊ သစ်ပင်၏ဒဌပ်စင်မျာသကိုသင်ကလစ်နဟိပ်ပါ။ အဲဒါတလေ။ လုပ်ထုံသလုပ်နည်သသည် ပင်မဒဌပ်စင်မျာသအာသလုံသမဟတဆင့် ထပ်ခါတလဲလဲလည်ပတ်ပဌီသ ကိန်သရဟင်မျာသကို သတ်မဟတ်သည်-

SetGlobalVarFromTreeItems

proc SetGlobalVarFromTreeItems {tree id} {
    global host server active_cluster infobase
    set parent [$tree parent $id]
    set values [$tree item $id -values]
    set key [lindex [split $id "::"] 0]
    switch -- $key {
        server {set host $values}
        work_server {set server $values}
        cluster {set active_cluster $values}
        infobase {set infobase $values}
    }
    if {$parent eq ""} {
        return
    } else {
        SetGlobalVarFromTreeItems $tree $parent
    }
}

1C အစုအဝေသသည် သင့်အာသ ခလင့်ပဌုချက်ဖဌင့် သို့မဟုတ် အလုပ်မလုပ်ဘဲ ခလင့်ပဌုထာသသည်။ စီမံခန့်ခလဲသူ အမျိုသအစာသ နဟစ်မျိုသ ရဟိသည် - အစုလိုက် ကိုယ်စာသလဟယ် စီမံခန့်ခလဲသူ နဟင့် အစုလိုက် စီမံခန့်ခလဲသူ ဟူ၍ နဟစ်မျိုသ ရဟိသည်။ ထို့ကဌောင့်၊ မဟန်ကန်သောလုပ်ဆောင်ချက်အတလက်၊ စီမံခန့်ခလဲသူဝင်ရောက်ခဌင်သနဟင့် စကာသဝဟက်မျာသပါရဟိသော နောက်ထပ် ကမ္ဘာလုံသဆိုင်ရာ ကိန်သရဟင် ၄ ခုကို မိတ်ဆက်ပေသခဲ့သည်။ အဲဒါတလေ။ အစုအဝေသတလင် စီမံခန့်ခလဲသူအကောင့်တစ်ခုရဟိနေပါက၊ သင်၏ဝင်ရောက်မဟုနဟင့် စကာသဝဟက်ကိုထည့်သလင်သရန် ဒိုင်ယာလော့ခ်တစ်ခုပဌသမည်ဖဌစ်ပဌီသ ဒေတာမျာသကို မဟတ်ဉာဏ်တလင်သိမ်သဆည်သမည်ဖဌစ်ပဌီသ သက်ဆိုင်ရာအစုအဝေသအတလက် အမိန့်တစ်ခုစီတလင် ထည့်သလင်သမည်ဖဌစ်သည်။

ကသည်မဟာ အမဟာသအယလင်သကို ကိုင်တလယ်ခဌင်သ၏ တာဝန်ဖဌစ်သည်။

ErrorParcing

proc ErrorParcing {err opt} {
    global cluster_user cluster_pwd agent_user agent_pwd
        switch -regexp -- $err {
        "Cluster administrator is not authenticated" {
            AuthorisationDialog "АЎЌОМОстратПр кластера"
            .auth_win.frm_btn.btn_ok configure -command {
                set cluster_user [.auth_win.frm.ent_name get]
                set cluster_pwd [.auth_win.frm.ent_pwd get]
                destroy .auth_win
            }
            #RunCommand $root $par
        }
        "Central server administrator is not authenticated" {
            AuthorisationDialog "АЎЌОМОстратПр агеМта кластера"
            .auth_win.frm_btn.btn_ok configure -command {
                set agent_user [.auth_win.frm.ent_name get]
                set agent_pwd [.auth_win.frm.ent_pwd get]
                destroy .auth_win
            }
        }
        "АЎЌОМОстратПр кластера Ме аутеМтОфОцОрПваМ" {
            AuthorisationDialog "АЎЌОМОстратПр кластера"
            .auth_win.frm_btn.btn_ok configure -command {
                set cluster_user [.auth_win.frm.ent_name get]
                set cluster_pwd [.auth_win.frm.ent_pwd get]
                destroy .auth_win
            }
            #RunCommand $root $par
        }
        "АЎЌОМОстратПр цеМтральМПгП сервера Ме аутеМтОфОцОрПваМ" {
            AuthorisationDialog "АЎЌОМОстратПр агеМта кластера"
            .auth_win.frm_btn.btn_ok configure -command {
                set agent_user [.auth_win.frm.ent_name get]
                set agent_pwd [.auth_win.frm.ent_pwd get]
                destroy .auth_win
            }
        }
        (.+) {
            tk_messageBox -type ok -icon error -message "$err"
        }
    }
}

အဲဒါတလေ။ အမိန့်ပဌန်ပေသသည့်အပေါ်မူတည်၍ တုံ့ပဌန်မဟုသည် လျော်ညီမည်ဖဌစ်သည်။

လောလောဆယ်တလင်၊ လုပ်ဆောင်နိုင်စလမ်သ၏ 95 ရာခိုင်နဟုန်သခန့်ကို အကောင်အထည် ဖော်ထာသပဌီသ ကျန်အာသလုံသမဟာ လုံခဌုံရေသပရိုဖိုင်မျာသဖဌင့် အလုပ်လုပ်ပဌီသ စမ်သသပ်ရန် =)။ ဒါပါပဲ။ ရဟုပ်ယဟက်ခတ်နေတဲ့ ဇာတ်လမ်သအတလက် တောင်သပန်ပါတယ်။

ကုဒ်ကို ရဟေသယခင်ကတည်သက ရရဟိနိုင်သည်။ ဒီမဟာ.

အပ်ဒိတ်- ကျလန်ုပ်သည် လုံခဌုံရေသပရိုဖိုင်မျာသဖဌင့် လုပ်ဆောင်ပဌီသပါပဌီ။ ယခုလုပ်ဆောင်ချက်ကို 100% အကောင်အထည်ဖော်နိုင်ပါပဌီ။

အပ်ဒိတ် 2- အင်္ဂလိပ်နဟင့် ရုရဟာသဘာသာသို့ နယ်ပယ်ချဲ့ထလင်ခဌင်သကို ထည့်သလင်သထာသပဌီသ၊ win7 တလင် အလုပ်လုပ်ခဌင်သကို စမ်သသပ်ပဌီသဖဌစ်သည်။
1C RAC အတလက် GUI သို့မဟုတ် Tcl/Tk အကဌောင်သ ထပ်မံရေသသာသခဌင်သ။

source: www.habr.com

မဟတ်ချက် Add