xj qian
2024-07-17 b1d01ea6fa62ce12c2e592b3315186f6b3c8359d
Merge branch 'master' of http://116.62.18.175:6699/r/mis-prj
已添加23个文件
已修改7个文件
9248 ■■■■■ 文件已修改
jrj/ext-jrj/ext-jrj.vcxproj 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/ext-jrj/ext-jrj.vcxproj.filters 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/BasicCode/CustomerMarketMaint.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/BasicCode/ExpressMaint.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/BasicCode/ForwarderMaint.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/BasicCode/ShipcompanyMaint.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/BasicCode/TestingCompanyMaint.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/AddUser.cpp 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/AddUserGroup.cpp 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/BindComputer.cpp 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp 1576 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/Data.config.cpp 571 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/Developer.Synch.cpp 432 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/Flow3.cpp 476 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/FlowTermImport.cpp 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/FlowTermSelect.cpp 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/GroupManagerList_A.cpp 1576 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/LogList.cpp 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/Organization_A.cpp 513 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/ProcessManagement_A.cpp 513 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/Resource.select.data.config.cpp 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/Role.config.cpp 548 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/SysLoginRecord.cpp 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/SysUser.cpp 330 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/TestRetrieveing.cpp 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/UserImport.cpp 329 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/UserPassDlg.cpp 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/level.Customer.v3.cpp 375 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/maint.Level.Customer3.cpp 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/SystemSettings/view.assignadjust.cpp 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/ext-jrj/ext-jrj.vcxproj
@@ -817,6 +817,75 @@
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\AddUser.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\AddUserGroup.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\BindComputer.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Buglist.Developer.hxsoft_A.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Data.config.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Developer.Synch.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Flow3.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\FlowTermImport.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\FlowTermSelect.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\GroupManagerList_A.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\level.Customer.v3.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\LogList.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\maint.Level.Customer3.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Organization_A.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\ProcessManagement_A.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Resource.select.data.config.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Role.config.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\SysLoginRecord.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\SysUser.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\TestRetrieveing.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\UserImport.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\UserPassDlg.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\view.assignadjust.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\project\business\VATNotify\list.vatnotify.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
    </ClCompile>
jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -118,6 +118,9 @@
    <Filter Include="project\business\BasicCode">
      <UniqueIdentifier>{64c23153-69c8-4db3-9225-9e5375e489ff}</UniqueIdentifier>
    </Filter>
    <Filter Include="project\business\SystemSettings">
      <UniqueIdentifier>{9d76dee1-2190-4b2c-8f17-bd2e54140f7d}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="framework.h">
@@ -1019,5 +1022,74 @@
    <ClCompile Include="..\project\business\BasicCode\TypeList.maint.supplier.cpp">
      <Filter>project\business\BasicCode</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\AddUser.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\AddUserGroup.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\BindComputer.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Buglist.Developer.hxsoft_A.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Data.config.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Developer.Synch.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Flow3.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\FlowTermImport.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\FlowTermSelect.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\GroupManagerList_A.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\level.Customer.v3.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\LogList.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\maint.Level.Customer3.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Organization_A.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\ProcessManagement_A.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Resource.select.data.config.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\Role.config.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\SysLoginRecord.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\SysUser.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\TestRetrieveing.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\UserImport.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\UserPassDlg.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
    <ClCompile Include="..\project\business\SystemSettings\view.assignadjust.cpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClCompile>
  </ItemGroup>
</Project>
jrj/project/business/BasicCode/CustomerMarketMaint.cpp
@@ -17,6 +17,7 @@
    xstring ContactID;
    xdwtable dw_base;
    xcell dw_cell;
    xstring m_EntityID = L"";
public:
    CustomerMarketMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
jrj/project/business/BasicCode/ExpressMaint.cpp
@@ -17,6 +17,7 @@
    xstring m_username;
    xstring ContactID;
    xcell dw_cell;
    xstring m_EntityID = L"";
public:
    ExpressMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
jrj/project/business/BasicCode/ForwarderMaint.cpp
@@ -18,7 +18,7 @@
    xstring m_username;
    xstring ContactID;
    xcell dw_cell;
    xstring m_EntityID = L"";
public:
    ForwarderMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
jrj/project/business/BasicCode/ShipcompanyMaint.cpp
@@ -16,6 +16,7 @@
    xstring m_username;
    xstring ContactID;
    xdwtable dw_base;
    xstring m_EntityID = L"";
    xcell dw_cell;
public:
    ShipcompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
jrj/project/business/BasicCode/TestingCompanyMaint.cpp
@@ -17,6 +17,7 @@
    xstring ContactID;
    xdwtable dw_base;
    xcell dw_cell;
    xstring m_EntityID = L"";
public:
    TestingCompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
jrj/project/business/SystemSettings/AddUser.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,229 @@
use "win.vl"
use "treeview.vm"
use "dev:vm[xdwgrid.vm]"
use "dev:vm[xdwtable.vm]"
use "pref.vl"
use "dev:vm[xml.vm]"
use "dev:vm[xaserverarg.vm]"
use "dev:vm[xaserver.vm]"
use "dev:vm[xutil.vm]"
use "dev:code[pa.tpp]"
use "dev:vm[control.vm]"
#include "dev:xpage[SysUser.vx]"
unit vbusiness.xpage tpp
[
    class pa
    {
        string note;
        int hitem;
        int row;
        int wid;
        treeview__ tv;
        xdwgrid__ dw;
        win__ pwin;
    }
]
unit vbusiness.xpage
[
    AddUser is extend win__;
    about AddUser
    [
        control:
        method:
        [
            pa p;
            int SetAgent()
            {
                return 1;
            }
            //焦点激活处理函数
            int OnSetFocus(ref TEvent evt,int param)
            {
                int SetAgent();
                //重置工具条
                return 1;
            }
            int AppendItem(xml__ x,msxml::IXMLDOMElement r,string item){
                var e = x.GetXmlDoc().createElement(item);
                //xcontrol xc = GetControl(item);
                control__ xc = new control__;
                xc.setNativePointer(this.GetControl(item));
                e.text = xc.GetText();
                r.appendChild(e);
                return 1;
            }
            int OnSave()
            {
                control__ xc = new control__;
                /*xc=GetControl("EmployeeNo");
                if (xc.GetText()=="")
                {
                    alert("用户代码不能为空!");
                    return 0;
                }*/
                xc=GetControl("UserName");
                if (xc.GetText()=="")
                {
                    alert("用户名称不能为空!");
                    return 0;
                }
                xml__ x = new xml__;
                x.setNativePointer(x.CreateInstance());
                xaserverarg__ arg = new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                x.LoadXml("<SysUser/>");
                var r = x.GetXmlDoc().documentElement;
                string guid;
                string guid1;
                if (p.note=="修改")
                {
                    msxml::IXMLDOMElement ele=xdwgrid__::GetRowElement(p.row);
                    guid = ele.selectSingleNode("UserID").text;
                    //guid=ele.getAttribute("guid");
                    //if (ele.selectSingleNode("empid"))
                    //    r.appendChild(ele.selectSingleNode("empid"));
                }
                else
                    guid=win__::GetGuid();
                    //guid1=win32::GetGuid();
                r.setAttribute("guid",guid);
                //r.setAttribute("guid1",guid1);
                //AppendItem(x,r,"EmployeeNo");
                AppendItem(x,r,"UserName");
                AppendItem(x,r,"PassWord");
                AppendItem(x,r,"Status");
                //trace(x.GetXml());
                //return 1;
                arg.AddArg("content",x.GetXml());
                int ls_item = treeview__::GetSelectedItem(p.wid);
                msxml::IXMLDOMElement e=treeview__::GetItemData(p.wid,ls_item);
                string gpguid=e.selectSingleNode("@guid").text;
                arg.AddArg("gpguid",gpguid);
                if (xaserver__::ExecXAction(GetServerUrl(),"[update.User.xa]",arg.GetString())==1)
                {
                    alert("ok");
                    if (p.note=="修改")
                    {
                        xdwgrid__ dw = new xdwgrid__;
                        //dw.setNativePointer(p.dw_user);
                        int row = dw.GetNextSelectRow(0);
                        //dw.SetItemString(row,"UserName","");
                        msxml::IXMLDOMElement e;
                        e = x.GetXmlDoc().documentElement;
                        string ls_pass = e.selectSingleNode("PassWord").text;
                        string ls_status = e.selectSingleNode("Status").text;
                        dw.SetItemString(row,"PassWord",ls_pass);
                        dw.SetItemString(row,"Status",ls_status);
                        dw.Redraw();
                    }
                    else
                    {
                    //----------
                        //p.pwin.OnTreeSelChanged();
                    }
                }
                else
                {
                    alert("保存出错!");
                    return 0;
                }
                return 1;
            }
            int ClearItem(string item)
            {
                control__ xc = new control__;
                xc.setNativePointer(GetControl(item));
                xc.SetText("");
                return 1;
            }
            //命令发布函数
            int OnCmdDispatch(string comdid)
            {
                if (comdid=="cb_cancel")
                    CloseWindow();
                else if(comdid=="cb_ok")
                {
                    int r=OnSave();
                    if (r==1)
                        CloseWindow();
                }
                else if(comdid=="cb_save")
                {
                    OnSave();
                    p.note="新增";
                    win__::SetWindowText(GetHWND(),p.note+"用户");
                    ClearItem("userno");
                    ClearItem("username");
                    ClearItem("pwd");
                }
                return 0;
            }
            //命令处理事件
            int OnXCommand(ref TXCommandEvent evt,int param)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int OnAttachEvent()
            {
                //绑定工具条点击事件
                AttachEvent("WM_XCOMMAND",OnXCommand);
                //获取焦点事件,用于重置工具条
                AttachEvent("WM_SETFOCUS",OnSetFocus);
            }
            int OnInitial()
            {
                SetAgent();
                OnAttachEvent();
                return 1;
            }
            int SetItem(string value,string item){
                control__ xc = new control__;
                xc.setNativePointer(GetControl(item));
                xc.SetText(value);
                return 1;
            }
            int onload()
            {
                OnInitial();
                p = new pa;
                if(this.GetParam())
                {
                    p=GetParam();
                    win__::SetWindowText(GetHWND(),p.note+"用户");
                    if (p.note=="修改")
                    {
                        xdwgrid__ dw = new xdwgrid__;
                        dw.setNativePointer(p.dw);
                        msxml::IXMLDOMElement ele=dw.GetRowElement(p.row);
                        //if(ele.selectSingleNode("EmployeeNo"))
                            //SetItem(ele.selectSingleNode("EmployeeNo").text,"EmployeeNo");
                        if(ele.selectSingleNode("UserName"))
                            SetItem(ele.selectSingleNode("UserName").text,"UserName");
                        if(ele.selectSingleNode("PassWord"))
                            SetItem(ele.selectSingleNode("PassWord").text,"PassWord");
                        if(ele.selectSingleNode("Status"))
                            SetItem(ele.selectSingleNode("Status").text,"Status");
                    trace("Aa");
                    return 1;
                    }
                }
                return 1;
            }
        ]
    ]
]
jrj/project/business/SystemSettings/AddUserGroup.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,183 @@
use "win.vl"
use "treeview.vm"
use "dev:vm[xdwgrid.vm]"
use "dev:vm[xdwtable.vm]"
use "pref.vl"
use "dev:vm[xml.vm]"
use "dev:vm[xaserverarg.vm]"
use "dev:vm[xaserver.vm]"
use "dev:vm[xutil.vm]"
use "dev:code[pa.tpp]"
use "dev:vm[control.vm]"
unit vbusiness.xpage tpp
[
    class pa
    {
        string note;
        int hitem;
        int row;
        int wid;
        treeview__ tv;
        xdwgrid__ dw;
        win__ pwin;
    }
]
unit vbusiness.xpage
[
    AddUserGroup is extend win__;
    about AddUserGroup
    [
        control:
        method:
        [
            pa p;
            int SetAgent()
            {
                return 1;
            }
            //焦点激活处理函数
            int OnSetFocus(ref TEvent evt,int p)
            {
                int SetAgent();
                //重置工具条
                return 1;
            }
            int AppendItem(xml__ x,msxml::IXMLDOMElement r,string item){
                var e = x.GetXmlDoc().createElement(item);
                control__ xc = new control__;
                xc.setNativePointer(this.GetControl(item));
                e.text = xc.GetText();
                r.appendChild(e);
                return 1;
            }
            int AppendAttrib(xml__ x,msxml::IXMLDOMElement r,string item){
                var e = x.GetXmlDoc().createElement(item);
                //xcontrol xc = GetControl(item);
                control__ xc = new control__;
                xc.setNativePointer(this.GetControl(item));
                e.text = xc.GetText();
                r.setAttribute(item,xc.GetText());
                return 1;
            }
            //命令发布函数
            int OnCmdDispatch(string comdid)
            {
                if (comdid=="cb_cancel")
                    CloseWindow();
                else if(comdid=="cb_ok")
                {
                    int wid = p.wid;
                    xml__ x = new xml__;
                    x.setNativePointer(x.CreateInstance());
                    xaserverarg__ arg = new xaserverarg__;
                    arg.setNativePointer(arg.CreateInstance());
                    x.LoadXml("<row/>");
                    var r = x.GetXmlDoc().documentElement;
                    string gpguid;
                    if (p.note=="修改")
                    {
                        msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,p.hitem);
                        gpguid=ele.selectSingleNode("@JobID").text;
                    }
                    else
                        gpguid=win__::GetGuid();
                    r.setAttribute("JobID",gpguid);
                    AppendAttrib(x,r,"JobName");
                    AppendAttrib(x,r,"JobType");
                    //AppendItem(x,r,"JobName");
                    //AppendItem(x,r,"JobType");
                    //trace(x.GetXml());
                    //return 1;
                    arg.AddArg("content",x.GetXml());
                    if (xaserver__::ExecXAction(GetServerUrl(),"[update.Usergroup.xa]",arg.GetString())==1)
                    {
                        control__ xc = new control__;
                        xc.setNativePointer(this.GetControl("JobName"));
                        //p.tv.Redraw();
                        if (p.note=="修改")
                        {
                            treeview__::SetItemData(wid,p.hitem,r);
                            treeview__::SetItemLabel(wid,p.hitem,xc.GetText());
                        }
                        else
                        {
                            int root = treeview__::GetRootItem(wid);
                            treeview__::InsertChildItem(wid,root,xc.GetText(),r,15);
                        }
                        CloseWindow();
                    }
                    else
                    {
                        alert("保存出错!");
                    }
                }
                return 0;
            }
            //命令处理事件
            int OnXCommand(ref TXCommandEvent evt,int p)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int OnAttachEvent()
            {
                //绑定工具条点击事件
                AttachEvent("WM_XCOMMAND",OnXCommand);
                //获取焦点事件,用于重置工具条
                AttachEvent("WM_SETFOCUS",OnSetFocus);
            }
            int OnInitial()
            {
                SetAgent();
                OnAttachEvent();
                return 1;
            }
            int SetItem(string value,string item){
                control__ xc = new control__;
                xc.setNativePointer(GetControl(item));
                xc.SetText(value);
                return 1;
            }
            int onload()
            {
                OnInitial();
                p = new pa;
                if(this.GetParam())
                {
                    p=GetParam();
                    win__::SetWindowText(GetHWND(),p.note+"用户组");
                    if (p.note=="修改")
                    {
                        int wid = p.wid;
                        msxml::IXMLDOMElement ele=treeview__::GetItemData(wid,p.hitem);
                        //trace(ele.xml);
                        //SetItem(ele.selectSingleNode("gpno").text,"gpno");
                        //SetItem(ele.selectSingleNode("gpname").text,"gpname");
                        string ls_guid = ele.selectSingleNode("@JobID").text;
                        string ls_name = ele.selectSingleNode("@JobName").text;
                        string ls_type = ele.selectSingleNode("@JobType").text;
                        SetItem(ls_guid,"JobID");
                        SetItem(ls_name,"JobName");
                        SetItem(ls_type,"JobType");
                    }
                }
                return 1;
            }
        ]
    ]
]
jrj/project/business/SystemSettings/BindComputer.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
use"lang.vl"
use "win.vl"
use "dev:vm[xdwgrid.vm]"
unit vbusiness.vpage
[
    BindComputerDlgNew is extend win__;
    about BindComputerDlgNew
    [
        field:
        method:
        [
            xdwgrid__    dw_list;
            int  OnRetrieve()
            {
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg = this.GetParam();
                if(arg.GetArgString("BindComputer"))
                {
                    string sbys= arg.GetArgString("BindComputer");
                    //alert(sbys);
                    x.LoadXml(sbys);
                }
                else
                {
                    x.LoadXml("<args></args>");
                }
                dw_list.Retrieve(x.GetXmlDoc().selectSingleNode("args"));
                dw_list.ResetUpdateStatus();
                dw_list.Redraw();
                return 1;
            }
            int OnAddRow(xdwgrid__ dw)
            {
                dw.InsertRow(0);
                return 1;
            }
            int OnDelRow(xdwgrid__ dw)
            {
                int row = dw.GetRow();
                if(row<1 || row > dw.GetRowCount()) return -1;
                dw.DeleteRow(row);
                return 1;
            }
            //命令发布函数
            int OnCmdDispatch(string comdid)
            {
                dw_list.AcceptText();
                xaserverarg__ arg = new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg = win__::GetParam();
                arg.AddArg("comdid",comdid);
                if (comdid=="ok")
                {
                    xml__ x = new xml__;
                    x.setNativePointer(xml__ ::CreateInstance());
                    dw_list.DwUpdateAllTo(x.GetXmlDoc());
                    arg.AddArg("xml",x.GetXml());
                    CloseWindow();
                }
                else if(comdid=="close")
                    CloseWindow();
                else if(comdid == "add")
                    OnAddRow(dw_list);
                else if(comdid == "del")
                    OnDelRow(dw_list);
                return 0;
            }
            //命令处理事件
            int OnXCommand(ref TXCommandEvent evt,int p)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int OnAttachEvent()
            {
                //绑定工具条点击事件
                AttachEvent("WM_XCOMMAND",OnXCommand);
            }
            int onload()
            {
                OnAttachEvent();
                dw_list = new xdwgrid__;
                dw_list.setNativePointer(GetControl("dw_list"));
                dw_list.SetDataObject(GetServerUrl(),"dev:sheet[SysUser.tpl/BindComputer]");
                dw_list.SetReadOnly(true);
                if(this.GetParam())
                {
                    OnRetrieve();
                }
                return 1;
            }
        ]
    ]
]
jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1576 @@
#include <wobject/xstring.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/ximageview.hpp>
#include "vbusiness/vframe/maint.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
#include "viewobject/saleorder.view.hpp"
#include "viewobject/quote.view.hpp"
#include "viewobject/shoppingcart.view.hpp"
#include "viewobject/productLibrary.view.hpp"
#include "xcontrol/xcheckbox.hpp"
#include "xcontrol/xshtml.hpp"
class __declspec(dllexport) ProductLibrary4Win : public xframe
{
public:
    //产品库产品列表
    xdwgrid    dw_list;
    //购物车产品列表
    xdwgrid    dwc_list;
    //产品缓存对象
    //xdataset g_xdoc_product;
    //xdataset g_xdoc_shoppingcart;
    xcombobox  cbx_goodscar;
    //是否多选
    xnode    m_agentNode;    //Agent Condition
    xtreeview tv_folder;
    xstring     agentFor;
    KXMLDOMElement imageElement;
    xstring m_customer;
public:
    ProductLibrary4Win(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
    static ProductLibrary4Win* CreateInstance(void* implPtr, void* hWnd)
    {
        ProductLibrary4Win* pWin = new ProductLibrary4Win(implPtr, (HWND)hWnd);
        return pWin;
    }
public:
    int FillGoodsCarList()
    {
        xcombobox xc = GetControl(L"frame:cbx_goodscar");
        if (!xc) return 0;
        xml  x = ShoppingCartView::GetRoleList();
        if (!x) return 0;
        xc.SetText(L"==选择购物车==L");
        KXMLDOMNodeList nlist = x.selectNodes(L"//item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            xc.AddItem( name);
        }
        return 1;
    }
    int SetAgent()
    {
        xstring xfNodeAgentArea = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        if (m_agentNode)
        {
            SetAgentNode(anode, m_agentNode);
        }
        else
        {
            KXMLDOMElement xframeElement = GetElement();
            KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[@for='" + agentFor + L"']/*");
            if (agent)
            {
                bstring s = agent.xml();
                m_agentNode = SetAgentNode(anode, s);
                //FillGoodsCarList();
            }
        }
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent * evt, int param)
    {
        //重置工具条
        SetAgent();
        return 1;
    }
    KXMLDOMElement OnGetCarListRowElement(int row = 0)
    {
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return KXMLDOMElement();
        KXMLDOMElement e = dw_list.GetRowElement(row);
        return e;
    }
    int OnShowImage(xstring skuid)
    {
        ximageview im = GetControl(L"im1");
        //im.RemoveImage();
        im.Reset();
        xml xp ;
        xaserverarg arg_pic;
        arg_pic.AddArg(L"SKUID", skuid);
        if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU", arg_pic.GetString(), xp) != 1)
        {
            trace(xstring(L"xxx")+xp.xml());
        }
        else
        {
            //trace(skuid+L" "+xp.GetXml());
            imageElement = xp.documentElement();
            KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
            int lenp = nlistp.length();
            for (int ip = 0; ip < lenp; ip++)
            {
                KXMLDOMElement xitem = nlistp.item(ip);
                xstring picname = xitem.selectSingleNode(L"PicPath").text();
                xstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
                if (picname == L"/business/products/Thumbs//")
                    picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
                im.AddImages(picname, (LPTSTR)L"");
            }
            im.Redraw();
            //win32::SendMessage(im.GetId(),0x000f,0,1);
            //win32::InvalidateRect(im.GetId(),cast(0 as ref xrect),true);
        }
        return 1;
    }
    int OnShowImage(xstring skuid, xstring customerItemNo)
    {
        ximageview im = GetControl(L"im1");
        //im.RemoveImage();
        im.Reset();
        xml xp ;
        xaserverarg arg_pic ;
        arg_pic.AddArg(L"SKUID", skuid);
        arg_pic.AddArg(L"CustomerID", m_customer);
        arg_pic.AddArg(L"CustomerItemNo", customerItemNo);
        if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKU", arg_pic.GetString(), xp) != 1)
        {
            trace(L"error:" + xstring(xp.xml(),true));
        }
        else
        {
            imageElement = xp.documentElement();
            KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
            int lenp = nlistp.length();
            for (int ip = 0; ip < lenp; ip++)
            {
                KXMLDOMElement xitem = nlistp.item(ip);
                bstring picname = xitem.selectSingleNode(L"PicPath").text();
                bstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
                if (picname == L"/business/products/Thumbs//")
                    picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
                im.AddImages(picname, L"");
            }
            im.Redraw();
        }
        return 1;
    }
    int OnRowChanged(TEvent * evt, int p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        xshtml xs = GetControl(L"html_detail");
        xstring html = makeHtml(row);
        xs.SetContent(html);
        xs.Redraw();
        xstring id = dw_list.GetGuid(row);
        OnShowImage(id);
        trace(id);
        return 1;
    }
    int OnGoodsCarRowChanged(TEvent * evt, int p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        xshtml xs = GetControl(L"html_detail");
        xstring html = makeGoodscarHtml(row);
        xs.SetContent(html);
        xs.Redraw();
        if (m_customer)
        {
            xstring id = dw_list.GetItemString(row, L"SKUID");
            xstring customerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
            OnShowImage(id, customerItemNo);
        }
        return 1;
    }
    int DeleteRow(int row)
    {
        int IDOK = 1;
        int MB_OKCANCEL = 1;
        int MB_ICONQUESTION = 32;
        if (MessageBoxW(GetHWND(), L"确认删除指定的项,删除后将不能恢复?", L"提示", MB_OKCANCEL | MB_ICONQUESTION) != IDOK) return 1;
        xstring id = dw_list.GetGuid(row);
        if (ProductLibraryView::DeleteItem(id) == 1)    dw_list.DeleteRow(0);
        return 1;
    }
    int SetSelectState(xdwgrid dw_obj, int state)
    {
        if (state == 1)
        {
            dw_obj.SetSelectionMode(3);
        }
        else if (state == -1)
        {
            dw_obj.SelectRow(0, false);
            dw_obj.SetSelectionMode(0);
        }
        return 1;
    }
    int OnCkbCLick(TEvent * evt, int p)
    {
        xcheckbox cbx_1 = GetControl(L"frame:cbx1");
        int state = cbx_1.GetCheck();
        return SetSelectState(dw_list, state);
    }
    int OnCkbCLick2(TEvent * evt, int p)
    {
        xcheckbox cbx_2 = GetControl(L"frame:cbx2");
        int state = cbx_2.GetCheck();
        return SetSelectState(dwc_list, state);
    }
    xml  GetGoodsPropList(xstring guid)
    {
        xml x;
        xaserverarg arg;
        arg.AddArg(L"guid", guid);
        if (xurl::get(L"/sale/data/SO/goods/goodsprop/list", arg.GetString(), x) != 1)
        {
            bstring error = x.text();
            alert(error);
        }
        return x;
    }
    xml  GetGoodsPropListEx(xstring guid)
    {
        xml x;
        xstring fields = L"<data>";
        //fields +=L"<field name='HighestPrice' label='最高价'/>";
        //fields +=L"<field name='LowestPrice' label='最低价'/>";
        //fields +=L"<field name='BulkPrice' label='散货价'/>";
        //fields +=L"<field name='CardPrice' label='纸卡价'/>";
        //fields +=L"<field name='BuyPrice' label='采购价'/>";
        //fields +=L"<field name='SupplierID' label='货源'/>";
        fields += L"<field name='Packing' label='包装方式'/>";
        fields += L"<field name='PackingRate' label='每箱数量'/>";
        fields += L"<field name='VolumeDesc' label='包装尺码'/>";
        fields += L"<field name='GWPerPkg' label='毛重'/>";
        fields += L"<field name='NWPerPkg' label='净重'/>";
        //fields +=L"<field name='DeveloperID' label='开发人员'/>";
        fields += L"<field name='AttributeValue_1' label='产品属性'/>";
        //fields +=L"<field name='Remark' label='备注'/>";
        fields += L"</data>";
        x.loadXML(fields);
        return x;
    }
    xstring makeHtml(int row)
    {
        xstring id = dw_list.GetItemString(row, L"@guid");
        xml x = GetGoodsPropList(id);
        xml x1 = GetGoodsPropListEx(id);
        xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"SKUNo") +
            L"</span> <span style='font-weight:700;width:50;font-size:10pt' >类项:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"RefNo") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >公司型号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"GoodsNo") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CName") +
            L"</span></div>";
        if (dw_list.GetItemString(row, L"CSpec") != L"")
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CSpec") +
                L"</span></div>";
        KXMLDOMNodeList fieldsEx = x1.selectNodes(L"data/field");
        xstring ls_detail = L"";
        xstring ls_item = L"";
        xstring name;
        xstring label;
        int len = fieldsEx.length();
        int i = 0;
        for (i = 0; i < len; true)
        {
            int cnt = 0;
            ls_item = L"";
            while (cnt < 2)
            {
                name = fieldsEx.item(i).selectSingleNode(L"@name").text();
                label = fieldsEx.item(i).selectSingleNode(L"@label").text();
                ls_item += L"<td>" + label + L"</td>" + L"<td style='text-align:center'>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
                cnt++;
                i++;
                if (i == len)break;
            }
            ls_detail += L"<tr>" + ls_item + L"</tr>";
        }
        html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
            + L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
            + ls_detail
            + L"</table>"
            + L"</div>";
        xstring ls_star = L"";
        KXMLDOMNodeList fields = x.selectNodes(L"data/field");
        len = fields.length();
        ls_detail = L"";
        if (len > 0)
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >技术要求:</span></div>";
        for (i = 0; i < len; true)
        {
            ls_item = L"";
            int count = 0;
            while (count < 2)
            {
                name = fields.item(i).selectSingleNode(L"@name").text();
                label = fields.item(i).selectSingleNode(L"@label").text();
                if (name == L"QualityTerm" || name == L"PackTerm" || label == L"质量" || label == L"包装质量" || label == L"技术要求")
                {
                    i++;
                    if (i >= len)count = 2;
                    continue;
                }
                else if (dw_list.GetItemString( row, (LPCTSTR)name) == L"")
                {
                    KXMLDOMNodeList options = fields.item(i).selectNodes(L"item");
                    int tlen = options.length();
                    xstring terms = L"";
                    for (int k = 0; k < tlen; k++)
                    {
                        if (xstring(options.item(k).text()))
                        {
                            if (k > 0) terms += L", L";
                            terms += (xstring)L"[" + options.item(k).text() + L"]";
                        }
                    }
                    ls_star += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >" + label + L"*:</span><span  style='width:90;font-size:10pt'>" + terms + L"</span></div>";
                }
                else
                {
                    ls_item = L"<td>" + label + L"</td>" + L"<td>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
                    count++;
                }
                i++;
                if (i >= len)count = 2;
            }
            ls_item = L"<tr>" + ls_item + L"</tr>";
            ls_detail += ls_item;
        }
        html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
            +L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
            + ls_detail
            + L"</table>"
            + L"</div>";
        if (dw_list.GetItemString(row, L"QualityTerm") != L"")
        {
            html += L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >质量:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt'  >" + dw_list.GetItemString(row, L"QualityTerm") + L"</span></div>";
        }
        if (dw_list.GetItemString(row, L"PackTerm") != L"")
        {
            html += L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >包装质量:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row, L"PackTerm") + L"</span></div>";
        }
        if (dw_list.GetItemString( row, L"Remark") != L"")
        {
            //html +=  L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >备注:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString( row, L"Remark") + L"</span></div>";
        }
        html += L"<div style='height:24px'/>";
        //星标项
        html += ls_star;
        //显示图片
        /*
        if (id != L"")
        {
            xml xp=new xml;
            xp.setNativePointer(xml::CreateInstance());
            xaserverarg arg_pic=new xaserverarg;
            arg_pic.setNativePointer(arg_pic.CreateInstance());
            arg_pic.AddArg(L"SKUID",id);
            if(url::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU",arg_pic.GetString(),xp)!=1)
            {
                trace(L"xxx",xp.GetXml());
            }else {
                html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >ͼƬ:</span>"    ;
                KXMLDOMElement ep=  xp.selectSingleNode(L"ImageList");
                if (ep)
                {
                    if (ep.SelectNodes(L"image")){
                        KXMLDOMNodeList  nlistp = ep.SelectNodes(L"image");
                        int ip=0;
                        int lenp = nlistp.length;
                        for(ip=0;ip<lenp;ip++)
                        {
                            KXMLDOMElement xitemp = nlistp.item(ip);
                            xstring filename = xitemp.selectSingleNode(L"PicPath").text;
                            //trace(filename);
                            html +=  L"<control visible='layer' controlclass='ximage'  data='' src='http://192.168.7.241:7001" +  filename +L"'/>";
                        }
                    }
                }
                html +=  L"</div>";
            }
        }else {
            xstring picname = L"1FA9E331-F95C-4E51-B80C-73FB9B911D8D.jpg";//dw_list.GetItemString(row,L"ImgName"); //ItemID+L".jpg";
            xstring str = picname.mid(0,2);
            str = str.upper();
            xstring serversrc =L"http://192.168.7.241:1001/business/products/chanpin/"+str+L"/"+picname;
            html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >ͼƬ:</span>";
            html +=  L"<control visible='layer' controlclass='ximage'  data='' src='"+ serversrc +L"'/></div>";
        }
        */
        html += L"</body></html>";
        //trace(html);
        return html;
    }
    xstring makeGoodscarHtml(int row)
    {
        xstring No = dwc_list.GetItemString(row, L"RefNo");//获取属性值id
        xml x = GetGoodsPropList(No);
        xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color1:#ccdccc none #f0f0f0 none'>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"No") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CName") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CSpec") +
            L"</span></div>";
        KXMLDOMNodeList fields = x.selectNodes(L"data/field");
        int len = fields.length();
        html += (xstring)L"<table>" +
            L"<colgroup span='1' width='80'/>" +
            L"<colgroup span='1' width='120'/>" +
            L"<colgroup span='1' width='420'/>";
        html += L"<tr>";
        html += L"<td style='text-align:center'>编号</td><td style='text-align:center'>项目</td><td style='text-align:center'>内容</td>";
        html += L"</tr>";
        for (int i = 0; i < len; i++)
        {
            xstring name = fields.item(i).selectSingleNode(L"@name").text();
            xstring label = fields.item(i).selectSingleNode(L"@label").text();
            html += L"<tr>";
            if (i == 0)
                html += L"<td rowspan='" + xstring(len) + L"'>" + No + L"</td><td >" + label + L"</td><td >" + L"</td>";
            else
                html += L"<td >" + label + L"</td><td >" +dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
            html += L"</tr>";
        }
        html += L"<tr>";
        html += L"<td rowspan='3'>" +dw_list.GetItemString( row, L"PackCode") + L"</td><td >包装方式</td><td >" +
            dw_list.GetItemString(row, L"CPack") + L"</td>";
        html += L"</tr>";
        html += L"<tr height='48'>";
        html += L"<td >包装要求</td><td >" +dw_list.GetItemString( row, L"PackQualityTerm") + L"</td>";
        html += L"</tr>";
        html += L"<tr>";
        html += L"<td >侧唛</td><td ></td>";
        html += L"</tr>";
        html += L"<tr height='72'>";
        html += L"<td>" +dw_list.GetItemString( row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
            dw_list.GetItemString(row, L"QualityTerm") + L"</td>";
        html += L"</tr>";
        html += L"</table>";
        html += L"</body></html>";
        return html;
    }
    int CarGoodsDelete()
    {
        return 1;
    }
    xstring Up(xstring name) {
        xstring str = name.mid(0, 2);
        str = str.toUpper();
        return xaserver::UploadFile(L"product" + str, name + L".jpg", GetHWND(), L"", false);
    }
    int OnAddImage() {
        if (m_customer != L"") return OnAddImageEx();
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        KXMLDOMElement e = dw_list.GetRowElement(row);
        xstring skuid = dw_list.GetItemString( row, L"@guid");
        xstring SKUNo = dw_list.GetItemString( row, L"SKUNo");
        xstring id = ViewObject::GetGuid();
        xstring ret1 = Up(id);
        if (ret1 == L"-1") return -1;
        if (ret1 == L"0")
        {
            alert(L"上传图片失败");
            return -1;
        }
        xstring originfile = ret1;
        xstring ext = originfile.right(7);
        if (ext.find(L".") >= 0)
            ext = ext.mid(ext.find(L".") + 1, 9999);
        else
            ext = L"jpg";
        // å›¾ç‰‡ååŠ å…¥æ•°æ®åº“
        xml x ;
        x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
            L"<ProductPictureID>" + id + L"</ProductPictureID>" +
            L"<OriginFile>" + originfile + L"</OriginFile>" +
            L"<FileExt>" + ext + L"</FileExt>" +
            L"<SKUID>" + skuid + L"</SKUID>" +
            L"<Name>[" + SKUNo.trim() + L"]</Name>" +
            L"<FileName>" + id + L".jpg</FileName>" +
            L"</Item>"
        );
        xaserverarg arg;
        arg.AddArg(L"content", x.xml());
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        dw_list.SetItemString(row, L"pic", L"*");
        dw_list.Redraw();
        //刷新一下界面,显示图片
        OnShowImage(skuid);
        return 1;
    }
    int OnAddImageEx() {
        int row = dwc_list.GetNextSelectRow(1);
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return 0;
        KXMLDOMElement e = dw_list.GetRowElement( row);
        xstring skuid =dw_list.GetItemString( row, L"SKUID");
        xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
        xstring CustomerID = m_customer;
        xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
        xstring id = ViewObject::GetGuid();
        xstring ret1 = Up(id);
        if (ret1 == L"-1") return -1;
        if (ret1 == L"0")
        {
            alert(L"上传图片失败");
            return -1;
        }
        xstring originfile = ret1;
        xstring ext = originfile.right(7);
        if (ext.find(L".") >= 0)
            ext = ext.mid(ext.find(L".") + 1, 9999);
        else
            ext = L"jpg";
        // å›¾ç‰‡ååŠ å…¥æ•°æ®åº“
        xml x;
        x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
            L"<ProductPictureID>" + id + L"</ProductPictureID>" +
            L"<OriginFile>" + originfile + L"</OriginFile>" +
            L"<FileExt>" + ext + L"</FileExt>" +
            L"<SKUID>" + skuid + L"</SKUID>" +
            L"<CustomerItemNo>" + CustomerItemNo + L"</CustomerItemNo>" +
            L"<CustomerID>" + CustomerID + L"</CustomerID>" +
            L"<Name>[" + SKUNo.trim() + L"]</Name>" +
            L"<FileName>" + id + L".jpg</FileName>" +
            L"</Item>"
        );
        xaserverarg arg;
        arg.AddArg(L"content", x.xml());
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        dwc_list.SetItemString(row, L"pic", L"*");
        dwc_list.Redraw();
        //刷新一下界面,显示图片
        OnShowImage(skuid, CustomerItemNo);
        return 1;
    }
    int OnDeleteImageEx()
    {
        int row = dwc_list.GetNextSelectRow(1);
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return 0;
        ximageview im = GetControl(L"im1");
        int index = im.GetSelectIndex();
        int count = im.GetImageCount();
        if (count < 1) return 1;
        KXMLDOMNodeList images = imageElement.selectNodes(L"image");
        int length = images.length();
        if (length < index) return 1;
        int MB_OKCANCEL = 0x00000001;
        int IDOK = 1;
        if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
        xstring id = images.item(index).selectSingleNode(L"@guid").text();
        xml x ;
        xaserverarg arg;
        arg.setNativePointer(arg.CreateInstance());
        xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
        arg.AddArg(L"content", str);
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        if (count == 1)
        {
            dwc_list.SetItemString(row, L"pic", L"");
            dwc_list.Redraw();
        }
        xstring skuid =dw_list.GetItemString( row, L"SKUID");
        xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
        xstring CustomerID = m_customer;
        xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
        OnShowImage(skuid, CustomerItemNo);
        return 1;
    }
    int OnDeleteImage() {
        if (m_customer != L"") return OnDeleteImageEx();
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        ximageview im = GetControl(L"im1");
        int index = im.GetSelectIndex();
        int count = im.GetImageCount();
        if (count < 1) return 1;
        KXMLDOMNodeList images = imageElement.selectNodes(L"image");
        int length = images.length();
        if (length < index) return 1;
        int MB_OKCANCEL = 0x00000001;
        int IDOK = 1;
        if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
        xstring id = images.item(index).selectSingleNode(L"@guid").text();
        xml x;
        xaserverarg arg;
        xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
        arg.AddArg(L"content", str);
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        if (count == 1)
        {
            dw_list.SetItemString(row, L"pic", L"");
            dw_list.Redraw();
        }
        KXMLDOMElement e1 = dw_list.GetRowElement(row);
        xstring skuid = e1.getAttribute(L"guid");
        OnShowImage(skuid);
        return 1;
    }
    int OnPreviewImage()
    {
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        KXMLDOMElement e = dw_list.GetRowElement(row);
        //KXMLDOMElement e = dw_list.GetRowElement(row);
        //alert(e.xml);
        xstring id = dw_list.GetItemString( row, L"@guid");
        //alert(id);
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
        xstring categoryid = e1.selectSingleNode(L"@guid").text();
        //alert(categoryid);
        xaserverarg* arg = new xaserverarg;
        arg->AddArg(L"SKUID", id);
        arg->AddArg(L"CategoryID", categoryid);
        OpenWindow(L"dev:xpage[PictureView.Product3.vx]", (LPARAM)arg);
        return 1;
    }
    int ItemMaint()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        //xstring no = e.getAttribute(L"no");
        //if(no==L"") return 1;
        xstring guid = e.getAttribute(L"guid");
        if (guid == L"") return 1;
        /*
        if(no==L"NP0000FS" || no==L"UP0000FS")
        {
            OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
        }else
        {
            int pr = g_xdoc_product;
            OpenWindow(L"dev:xpage[ProductLibraryItemMaint.vx]",pr);
        }
        */
        //KXMLDOMElement ele = g_xdoc_product.getRowElement(L"data/Item", 1);
        //alert(ele.xml);
#ifdef shouldfinished
        int pr = g_xdoc_product;
        OpenWindow(L"dev:xpage[ProductLibraryItemMaint3.vx]", pr);
#endif
        return 1;
    }
    int ItemAdd()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        //alert(e.xml);
        /*xstring no = e.getAttribute(L"no");
        if(no==L"") return 1;
        if(no==L"NP0000FS" || no==L"UP0000FS")
        {
            OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
        }else
        {
            int p = no;
            OpenWindow(L"dev:xpage[SO.autolist.goodslib.add.vx]",p);
        }*/
        xstring guid = e.getAttribute(L"guid");
        if (guid == L"") return 1;
        xaserverarg arg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"guid", e.getAttribute(L"guid"));
        if (name == L"个人产品")
            arg.AddArg(L"FolderID", e.getAttribute(L"guid"));
        else
            arg.AddArg(L"CategoryID", e.getAttribute(L"guid"));
        xstring No = e.getAttribute(L"CategoryNo");
        if (No == L"") No = e.getAttribute(L"no");
        xstring Name = e.getAttribute(L"CName");
        if (Name == L"") Name = e.getAttribute(L"cname");
        arg.AddArg(L"No", No);
        arg.AddArg(L"CName", Name);
        OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", (LPARAM)&arg);
        if (arg.GetArgString(L"data.modify") == L"1")RetrieveData();
        return 1;
    }
    int OnAddFolder()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xaserverarg arg;
        if (hItem != hTopItem)
        {
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring folder = e.getAttribute(L"guid");
            if (folder != L"")
            {
                arg.AddArg(L"parentCategoryID", folder);
                OpenWindow(L"dev:xpage[UserFolderMaint.vx]",(LPARAM)&arg);
                /*if(arg.GetArgString(L"FolderID")!=L"")
                {
                    int child = tv_folder.GetChildItem(hItem);
                    if(!child)
                    {
                        ExpandItem(hItem);
                    }
                    else
                    {
                        KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
                        KXMLDOMElement e2 = e1.cloneNode(0);
                        e2.
                    }
                }*/
            }
        }
        return 1;
    }
    int OnMaintFolder()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xaserverarg arg;
        if (name == L"个人库" && selectname == L"新产品" && tv_folder.GetParentItem(hItem) == hTopItem) return 1;
        if (hItem != hTopItem)
        {
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring folder = e.getAttribute(L"guid");
            if (folder != L"")
            {
                arg.AddArg(L"CategoryID", folder);
                OpenWindow(L"dev:xpage[UserFolderMaint.vx]", (LPARAM)&arg);
                if (arg.GetArgString(L"label") != L"")
                {
                    tv_folder.SetItemLabel(hItem, arg.GetArgString(L"label"));
                }
            }
        }
        return 1;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        int hCursor;
        xstring name = L"";
        if (comdid == L"xmRefresh")
        {
            return RetrieveData();
        }
        else if (comdid == L"xmCarGoodsDelete")
        {
            CarGoodsDelete();
            return 1;
        }
        else if (comdid == L"xmAddFolder")
        {
            return OnAddFolder();
        }
        else if (comdid == L"xmMaintFolder")
        {
            return OnMaintFolder();
        }
        else if (comdid == L"xmClose")
        {
            CloseWindow();
            return 1;
        }
        else if (comdid == L"xmCarGoodsMaint")
        {
#ifdef shouldfinish
            OpenWindow(L"dev:xpage[ShoppingCartProductMaint.vx]", trust(g_xdoc_shoppingcart as int));
#endif
            return 1;
        }
        else if (comdid == L"xmCarMaint")
        {
            OpenWindow(L"dev:xpage[SO.autolist.Shopcar.vx]");
            return 1;
        }
        else if (comdid == L"xmSaleOrder")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", (LPARAM) & carg);
            return 1;
        }
        else if (comdid == L"xmEnquiry")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[Enquiry.Import.vx]", (LPARAM)&carg);
            return 1;
        }
        else if (comdid == L"xmPurchar")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg ;
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[PO.Import.vx]", (LPARAM)&carg);
            return 1;
        }
        else if (comdid == L"xmSearch")
        {
            RetrieveData();
            return 1;
        }
        else if (comdid == L"xmQuote")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg;
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[Quote.Import.vx]",  (LPARAM) & carg);
            return 1;
        }
        else if (comdid == L"xmAdd")
        {
            return ItemAdd();
        }
        else if (comdid == L"xmDelete")
        {
            int row = dw_list.GetRow();
            if (row < 1) return 1;
            xstring skuid = dw_list.GetItemString( row, L"@guid");
            xml skuid_x = ViewObject::RetrieveData(L"/sale/data/ProductLibrary3/ProductNumberone", L"SKUID", skuid);
            xstring  skuidEx = skuid_x.text();
            int  skuid1 = skuidEx.toInt();
            if (skuid1)
            {
                if (skuid1 > 0)
                {
                    alert(L"订单已有产品,不允许删除!");
                    return 1;
                }
            }
            DeleteRow(row);
            return 1;
        }
        else if (comdid == L"xmCarAdd")
        {
            HCURSOR hCursor = xutil::SetCursorWait();
            name = xcontrol(GetControl(L"frame:ed_goodscar")).GetText();
            if (name != L"")
            {
                if (ShoppingCartView::AddCar(name) == 1)
                {
                    tv_folder.InsertChildItem(LookupTopFolder(tv_folder.GetSelectedItem()),
                        name, 0, 35);
                }
            }
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        else if (comdid == L"xmMaint")
        {
            return ItemMaint();
        }
        else if (comdid == L"xmAddImage")
        {
            return OnAddImage();
        }
        else if (comdid == L"xmDeleteImage")
        {
            return OnDeleteImage();
        }
        else if (comdid == L"xmPreviewImage")
        {
            return OnPreviewImage();
        }
        else if (comdid == L"xmPropConfigure")
        {
#ifdef shouldfinish
            int r = cast(g_xdoc_product.getData(L"data/Item", L"@guid") as int);
            OpenWindow(L"dev:xpage[Product.ItemProp.Maint.vx]", r);
#endif
            return 1;
        }
        else if (comdid == L"xmRertieve")
        {
            /*
            int hItem1 = tv_folder.GetSelectedItem();
            KXMLDOMElement e2= tv_folder.GetItemData(hItem1);
            xstring no1 = e2.getAttribute(L"no");
            xml x2 = vcontrol::RetrieveData(L"/sale/data/SO/goods/usergoods/listex1",L"parent",no1);
            g_xdoc_product.Retrieve(x2);
            */
            return 1;
        }
        else if (comdid == L"xmToCar")
        {
            name = xcontrol(GetControl(L"frame:cbx_goodscar")).GetText();
            if (name == L"==选择购物车==L")
            {
                alert(L"请选择购物车");
                return 1;
            }
            int xrow = dw_list.GetNextSelectRow(1);
            xstring goodsid = L"";
            xstring html = L"<data>";
            while (xrow > 0)
            {
                KXMLDOMElement e =dw_list.GetRowElement(xrow);
                goodsid = ProductLibraryView::GetElementString(e, L"@guid");
                html += L"<item goodid='" + goodsid + L"' id ='" + ProductLibraryView::GetGuid() + L"'/>";
                xrow = dw_list.GetNextSelectRow(xrow + 1);
            }
            html += L"</data>";
            trace(html);
            if (ShoppingCartView::GoodsImport(name, html) == 1)
                alert(L"添加错误!");
            else
                alert(L"添加成功");
            return 1;
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt, int param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    //查找当前树项的顶级目录
    HTREEITEM LookupTopFolder(HTREEITEM hItem)
    {
        HTREEITEM hRoot = tv_folder.GetRootItem();
        while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
        return hItem;
    }
    //插入产品类项的子项
    int MakeGoodsFolderItem(HTREEITEM hItem, xstring sno)
    {
        xml x = ProductLibraryView::GetTreeChildItems3(sno);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"CName");
            xstring no = e.getAttribute(L"CategoryNo");
            xstring label = no.trim() + L" " + name;
            HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 15);
            xstring child = e.getAttribute(L"Childs");
            if (child == L"")
                tv_folder.SetItemChild(h, 1);
            else if (child != L"0")
                tv_folder.SetItemChild(h, 1);
        }
        return 1;
    }
    //插入新产品目录子项
    int MakeUserGoodsFolderItem(HTREEITEM hItem, xstring sno)
    {
        xml x = ProductLibraryView::GetTreeUserChildItems3(sno);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"CName");
            xstring no = e.getAttribute(L"CategoryNo");
            xstring label = no.trim() + L" " + name;
            HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 15);
            xstring child = e.getAttribute(L"Childs");
            if (child == L"")
                tv_folder.SetItemChild(h, 1);
            else if (child != L"0")
                tv_folder.SetItemChild(h, 1);
        }
        return 1;
    }
    //插入购物车项
    int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
    {
        KXMLDOMNodeList nlist = ele.selectNodes(L"item");
        int len = nlist.length();
        if (len > 0) tv_folder.SetItemChild(hItem, 1);
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int MakeGoodCarFolderItem(HTREEITEM hItem)
    {
        xml x = ShoppingCartView::GetRoleList();
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int ExpandItem(HTREEITEM hItem)
    {
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        HTREEITEM child = tv_folder.GetChildItem(hItem);
        xstring no = L"";
        KXMLDOMElement e;
        if (name == L"公司库" && !child)
        {
            no = L"";
            if (hTopItem != hItem)
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
            }
            else
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
            }
            MakeGoodsFolderItem(hItem, no);
        }
        else if (name == L"个人库" && !child)
        {
            no = L"";
            if (hTopItem != hItem)
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
                MakeUserGoodsFolderItem(hItem, no);
            }
        }
        else if (name == L"购物车" && !child)
        {
            if (hItem == hTopItem)MakeGoodCarFolderItem(hItem);
        }
        return 1;
    }
    //树展开
    int OnTreeExpanding(TEvent * evt, int p)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        return ExpandItem(hItem);
    }
    int ResetAgent(xstring agentAsk)
    {
        if (agentFor != agentAsk)
        {
            agentFor = agentAsk;
            m_agentNode = 0;
            SetAgent();
        }
        return 1;
    }
    HTREEITEM LookupCustomerFolder(HTREEITEM hItem)
    {
        while (true)
        {
            KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
            xstring str = e1.getAttribute(L"no");
            if (str.find(L"Customer:") >= 0) return hItem;
            hItem = tv_folder.GetParentItem(hItem);
            if (hItem == 0) break;
        }
        return 0;
    }
    xstring LookupCustomer(HTREEITEM hItem)
    {
        hItem = LookupCustomerFolder(hItem);
        if (hItem == 0) return L"";
        KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
        xstring str = e1.getAttribute(L"no");
        return str.mid(xstring(L"Customer:").length(), 9999);
    }
    int RetrieveData()
    {
        ximageview im = GetControl(L"im1");
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xcontrol query = GetControl(L"sl_search");
        xstring queryString = query.GetText();
        if (hItem == hTopItem)
        {
            dw_list.Reset();
            dw_list.SetReadOnly(true);
            dw_list.Redraw();
            dwc_list.Reset();
            dwc_list.SetReadOnly(true);
            dwc_list.Redraw();
            im.Reset();
            im.Redraw();
            xshtml xs1 = GetControl(L"html_detail");
            xs1.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
            if (name != L"公司库") return 1;
        }
        //return 1;
        HCURSOR hCursor = xutil::SetCursorWait();
        if (name == L"购物车")
        {
            if (selectname != name)
            {
                KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
                xstring str = e1.getAttribute(L"no");
                alert(str);
                if (str.find(L"Customer:") == 0 || str.find(L"SO:") == 0)
                {
                    m_customer = LookupCustomer(hItem);
                    if (str.find(L"Customer:") == 0)
                        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodscustomerlist");
                    else
                        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodssolist");
                    dwc_list.Reset();
                    dwc_list.SetReadOnly(true);
                    dw_list.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
                }
                else if (e1.getAttribute(L"categoryid") != L"")
                {
                    xstring categoryid = e1.getAttribute(L"categoryid");
                    dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid));
                    dwc_list.SetReadOnly(true);
                    dwc_list.Reset();
                    dw_list.Retrieve(ProductLibraryView::GetMaintList3(categoryid, queryString, L""));
                    dwc_list.Redraw();
                }
                else
                {
                    dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
                    dwc_list.SetReadOnly(true);
                    dwc_list.Reset();
                    dw_list.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
                }
                //dwc_list.PostRetrieve();
                dwc_list.Redraw();
                xshtml xs = GetControl(L"html_detail");
                if (dwc_list.GetRowCount() >= 1)
                {
                    xs.SetContent(makeGoodscarHtml(1));
                    if (m_customer != L"")
                    {
                        xstring skuid =dw_list.GetItemString( 1, L"SKUID");
                        xstring customerItemNo =dw_list.GetItemString( 1, L"CustomerItemNo");
                        OnShowImage(skuid, customerItemNo);
                    }
                }
                else
                {
                    im.Reset();
                    im.Redraw();
                    xs = GetControl(L"html_detail");
                    xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
                }
                xs.Redraw();
            }
        }
        else
        {
            if (name == L"个人库" || name == L"公司库")
            {
                xstring no = L"N000005";
                if (name == L"个人库") no = L"U000005";
                if (hItem != hTopItem)
                {
                    KXMLDOMElement e = tv_folder.GetItemData(hItem);
                    no = e.getAttribute(L"guid");
                }
                else
                    return 1;
                /*    dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(no).GetXmlDoc());
                    dw_list = GetControl(L"dw_list");
                    dw_list.Reset();
                    dw_list.SetReadOnly(true);
                */
                if (name == L"个人库")
                    dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
                else
                {
                    if (queryString != L"")
                    {
                        if (no == L"N000005")
                            dw_list.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
                        else
                            dw_list.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
                    }
                    else
                    {
                        if (no == L"N000005") return 1;
                        dw_list.Retrieve(ProductLibraryView::GetMaintList3(no));
                    }
                }
                //dw_list.PostRetrieve();
                dw_list.Redraw();
                xshtml xs = GetControl(L"html_detail");
                if (dw_list.GetRowCount() > 0)
                {
                    xs.SetContent(makeHtml(1));
                    xstring id = dw_list.GetItemString( 1, L"@guid");
                    OnShowImage(id);
                }
                else
                {
                    im.Reset();
                    im.Redraw();
                    xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
                }
                xs.Redraw();
            }
        }
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    int OnTreeSelChanged(TEvent * evt, int p)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        ximageview im = GetControl(L"im1");
        m_customer = L"";
        //alert(name);
        if (name == L"购物车")
        {
            if (agentFor != L"goodscar")SwitchLayer(L"goodscarsheet", L"sheetframe");
            ResetAgent(L"goodscar");
        }
        else
        {
            if (agentFor != L"goodslib")SwitchLayer(L"goodslibsheet", L"sheetframe");
            if (name == L"个人库")
                ResetAgent(L"userlib");
            else
                ResetAgent(L"goodslib");
        }
        //RetrieveData();
        PostMessage(GetHWND(), 0x401, (WPARAM)L"xmRefresh", 0);
        return 1;
    }
    int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
    {
        KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement& e = * new KXMLDOMElement(nlist.item(i));
            xstring name = e.getAttribute(L"cname");
            xstring sImage = e.getAttribute(L"image");
            int image = 15;
            //if(sImage) image = sImage.toInt();
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            tv_folder.SetItemChild(h, 1);
            ExpandChildFolder(h, e);
        }
        return 1;
    }
    int  InitialFolder()
    {
        KXMLDOMElement xframeElement = GetElement();
        KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
        ExpandChildFolder(0, e);
        return 1;
    }
    int OnViewZoomChange(TEvent* evt, int lParam)
    {
        ximageview im = GetControl(L"im1");
        xcombobox xc = GetControl(L"precent");
        xstring text = xc.GetLBText();
        int p = text.toInt();
        if (p == 0) p = 100;
        im.Preview(p);
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent)&ProductLibrary4Win::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&ProductLibrary4Win::OnSetFocus);
        AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnRowChanged);
        AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnGoodsCarRowChanged);
        AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ProductLibrary4Win::OnTreeExpanding);
        AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ProductLibrary4Win::OnTreeSelChanged);
        AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick);    //checkbox打钩事件
        AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick2);    //checkbox打钩事件
        AttachEvent(L"im1", L"IMG_LDBCLICK", (FEvent)&ProductLibrary4Win::OnImgDBClicked);
        AttachEvent(L"precent", L"CBN_SELCHANGE", (FEvent)&ProductLibrary4Win::OnViewZoomChange);
        return 1;
    }
    int onload()
    {
        agentFor = L"goodslib";
        m_customer = 0;
        OnAttachEvent();
        tv_folder = GetControl(L"tv_folder");
        dw_list = GetControl(L"dw_list");
        dwc_list = GetControl(L"dwc_list");
        InitialFolder();
        dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L""));
        dw_list = GetControl(L"dw_list");
        dw_list.SetReadOnly(true);
        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
        dwc_list.SetReadOnly(true);
        tv_folder.ExpandItem(tv_folder.GetRootItem());
        tv_folder.ItemFocus(tv_folder.GetRootItem());
        if (dw_list.GetRowCount())
        {
            xshtml xs = GetControl(L"html_detail");
            xs.SetContent(makeHtml(1));
        }
        return 1;
    }
    int onloaded()
    {
        SetAgent();
        return 1;
    }
    int OnImgDBClicked(TEvent * evt, int pr)
    {
        IMGNNMHDR& nmtv = *(IMGNNMHDR*)evt->notify.pnmh;
        xstring src = nmtv.path;
        /*if(src.length() > 60)
            src = src.right(44);
        else
            src=src.mid(src.find(L"Thumbs", 0)+6, 50);
        */
        xaserverarg& arg = *new xaserverarg;
        //arg.AddArg(L"src",L"/business/products/chanpin"+src);
        arg.AddArg(L"src", src);
        //win::OpenWindow(L"dev:xpage[BigPicture.vx]",arg);
        int h = openUrl(L"/sale/view/ProductLibrary/xpage/bigpictureview", &arg);
        return 1;
        /*
        xwin x = new xwin;
        x.setNativePointer(h);
        m_winHwnd = x.GetHWND();
        xstring sh = doc.GetXml();
        int p = cast(sh as int);
        win32::SendMessage(m_winHwnd, 0x401, p, 0);
        */
        return 1;
    }
};
jrj/project/business/SystemSettings/Data.config.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,571 @@
use "lang.vl"
use "win.vl"
use "treeview.vm"
use "dev:vm[xutil.vm]"
use "dev:vm[xdwtable.vm]"
use "dev:vm[xdwgrid.vm]"
use "dev:vm[combobox.vm]"
use "frame.vl"
use "file.vl"
use "dev:vm[xlayersheet.vm]"
use "publiccode.vl"
unit vbusiness.vpage
[
    DataConfig is extend frame;
    about DataConfig
    [
        field:
        method:
        [
            treeview__    dw_tree;
            xdwgrid__ dw_list;
            xdwgrid__ dw_role;
            combobox__ dw_ddlb;
            xlayersheet__ m_sheet;
            int alert(string str)
            {
                TApp::alert(this,str,3);
                return 0;
            }
            int createTree(msxml::IXMLDOMElement e, int parentItem)
            {
                if(treeview__::GetChildItem(dw_tree.GetId(), parentItem) > 0) return 0;
                var list=e.selectNodes("item");
                int i=0,s=list.length;
                msxml::IXMLDOMElement xitem;
                for (i=0;i<s;i++)
                {
                    xitem= list.item(s - i - 1);
                    string Name=xitem.selectSingleNode("name").text;
                    string image = xitem.selectSingleNode("image").text;
                    int curItem=treeview__::InsertItem(dw_tree.GetId(), parentItem,0,Name,xitem,image.toInt());
                    string child=xitem.selectSingleNode("child").text;
                    if (child != "0")
                        treeview__::SetItemChild1(dw_tree.GetId(), curItem,1);
                }
                return 1;
            }
            int OnTreeExpanding(ref TNotifyEvent evt,int p)
            {
                ref NMTREEVIEW nmtv = evt.pnmh;
                int sitem = nmtv.itemNew.hItem;
                int i = combobox__::GetCurSel(dw_ddlb.GetId());
                msxml::IXMLDOMElement e =     treeview__::GetItemData(dw_tree.GetId(), sitem);
                string id = e.selectSingleNode("id").text;
                string xid = e.selectSingleNode("tree").text;
                int hCursor = xutil__::SetCursorWait();
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("pid",id);
                arg.AddArg("tree",xid);
                //if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/user/select",arg.GetString(),x)!=1)
                {
                    trace("错误返回="+x.GetXml());
                    return -1;
                }
                msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
                createTree(ele, sitem);
                xutil__::RestoreCursor(hCursor);
                return 1;
            }
            int OnRetrieve(string id)
            {
                int hIcon= xutil__::SetCursorWait();
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("id",id);
                trace(id);
                arg.AddArg("flag","-1");
                //if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/maint/data",arg.GetString(),x)!=1)
                {
                    trace("错误返回1="+x.GetXml());
                    return -1;
                }
                if(x.GetXml() == "")
                    x.LoadXml("<root><items/><roles/></root>");
                xml__ x1 = new xml__;
                x1.setNativePointer(xml__ ::CreateInstance());
                if(x.GetXmlDoc().selectSingleNode("root/items"))
                {
                    dw_list.Retrieve(x.GetXmlDoc().selectSingleNode("root/items"));
                    dw_list.SetReadOnly(true);
                    dw_list.Redraw();
                }
                else
                {
                    x1.LoadXml("<items/>");
                    dw_list.Retrieve(x1);
                    dw_list.SetReadOnly(true);
                    dw_list.Redraw();
                }
                if(x.GetXmlDoc().selectSingleNode("root/roles"))
                {
                    dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("root/roles"));
                    dw_role.SetReadOnly(true);
                    dw_role.Redraw();
                }
                else
                {
                    x1.LoadXml("<roles/>");
                    dw_role.Retrieve(x1);
                    dw_role.SetReadOnly(true);
                    dw_role.Redraw();
                }
                xutil__::RestoreCursor(hIcon);
                return 1;
            }
            int OnTreeSelecded( ref TNotifyEvent evt,int p)
            {
                ref NMTREEVIEW nmtv = evt.pnmh;
                int hItem = nmtv.itemNew.hItem;
                int wid = dw_tree.GetId();
                msxml::IXMLDOMElement ele =treeview__::GetItemData(wid,hItem);
                string id = ele.SelectSingleNode("id").text;
                OnRetrieve(id);
                return 1;
            }
            int OnSelect()
            {
                int nIndex = combobox__::GetCurSel(dw_ddlb.GetId());
                combobox__ dw_ddlbdata =  new combobox__;
                dw_ddlbdata.setNativePointer(this.GetControl("dw_ddlbdata"));
                int h = combobox__::FindString(dw_ddlbdata.GetId(), nIndex.toString());
                param p;
                xnode__ bnode;
                xnode__ anode = new xnode__;
                anode.setNativePointer(GetAgentNode("tree"));
                if(h < 0)
                {
                    string str = "<vbox><xtree name='dw_tree"+nIndex.toString()+"' imagelist='0'/></vbox>";
                    bnode = new xnode__;
                    bnode.setNativePointer(SetAgentNodeContent(anode,str));
                    p = combobox__::GetItemData(dw_ddlb.GetId(), nIndex);
                    msxml::IXMLDOMElement ele = p;
                    dw_tree =  new treeview__;
                    dw_tree.setNativePointer(this.GetControl("dw_tree"+nIndex.toString()));
                    createTree(ele, 0);
                    AttachEvent("dw_tree"+nIndex.toString(), "TVN_ITEMEXPANDING",OnTreeExpanding);
                    AttachEvent("dw_tree"+nIndex.toString(), "TVN_SELCHANGED",OnTreeSelecded);
                    int sk = combobox__::AddItem(dw_ddlbdata.GetId(), nIndex.toString());
                    p = bnode;
                    combobox__::SetItemData(dw_ddlbdata.GetId(), sk, p);
                }
                else
                {
                    p = combobox__::GetItemData(dw_ddlbdata.GetId(), h);
                    bnode = p;
                    SetAgentNodeContent(anode,bnode);
                    dw_tree =  new treeview__;
                    dw_tree.setNativePointer(this.GetControl("dw_tree"+nIndex.toString()));
                }
                return 1;
            }
            int OnSave()
            {
                int m = treeview__::GetSelectedItem(dw_tree.GetId());
                if(m == 0) return 0;
                int wid = dw_tree.GetId();
                int hItem=treeview__::GetSelectedItem(wid);
                msxml::IXMLDOMElement ele =treeview__::GetItemData(wid,hItem);
                string id = ele.SelectSingleNode("id").text;
                string tpy = ele.SelectSingleNode("type").text;
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                dw_list.DwUpdateAllToEx(x.GetXmlDoc());
                msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
                e.SetAttribute("id", id);
                e.SetAttribute("type", tpy);
                xml__ x1 = new xml__;
                x1.setNativePointer(xml__ ::CreateInstance());
                dw_role.DwUpdateAllToEx(x1.GetXmlDoc());
                msxml::IXMLDOMElement e1 = x1.GetXmlDoc().documentElement;
                e.AppendChild(e1);
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("content", e.xml);
                arg.AddArg("dbmap", "Data.config.dbmap");
                //if(xaserver__::ExecXAction(GetServerUrl(),"[onSave.xa]",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/save",arg.GetString(),x)!=1)
                //if(url::get("/workflow/action/datarole.resource/bill.update",arg.GetString(),x)!=1)
                {
                    trace("error:"+x.GetXml());
                    alert("保存出错!");
                    return 0;
                }
                if(x.GetXmlDoc().selectSingleNode("error"))
                {
                    alert("保存出错2!");
                    return 0;
                }
                dw_list.ResetUpdateStatus();
                dw_role.ResetUpdateStatus();
                alert("保存成功!");
                return 1;
            }
            int OnSelectDdlb(ref TNotifyEvent evt,int p)
            {
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                dw_list.DwUpdateAllToEx(x.GetXmlDoc());
                msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
                if(e)
                {
                    var list = e.SelectNodes("//*[@update.new='1' or @update.modify='1' or @update.delete='1']");
                    int s = list.length;
                    if(s>0)
                    {
                        int ret = win__::MessageBox(this.GetHWND(), "当前修改记录未保存,是否保存?","提示",4);
                        if(ret == 6)
                            OnSave();
                    }
                }
                OnSelect();
                int m = treeview__::GetSelectedItem(dw_tree.GetId());
                string id;
                if(m == 0)
                {
                    id = "";
                }
                else
                {
                    msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
                    id = ele.SelectSingleNode("id").text;
                }
                OnRetrieve(id);
                return 1;
            }
            int createTreeRoot()
            {
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("pid","");
                arg.AddArg("tree","0");
                //if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/user/select",arg.GetString(),x)!=1)
                {
                    trace("错误返回="+x.GetXml());
                    return -1;
                }
                msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
                var list = e.SelectNodes("*");
                int i;
                int len = list.length;
                msxml::IXMLDOMElement ele;
                for(i=0; i<len; i++)
                {
                    ele= list.item(i);
                    string name = ele.selectSingleNode("@tree").text;
                    int sk = combobox__::AddItem(dw_ddlb.GetId(), name);
                    param p = ele;
                    combobox__::SetItemData(dw_ddlb.GetId(), sk, p);
                }
                if(len > 0)
                {
                    combobox__::SetCurSel(dw_ddlb.GetId(), 0);
                    OnSelect();
                }
                OnRetrieve("");
                return 1;
            }
            int OnSetFocus(ref TEvent evt,int p)
            {
                SetAgent("data");
                return 1;
            }
            string GetPath()
            {
                int h = treeview__::GetSelectedItem(dw_tree.GetId());
                if(h == 0) return 0;
                int tv = dw_tree.GetId();
                string str = treeview__::GetItemLabel(tv, h);
                int k = treeview__::GetParentItem(tv, h);
                while(k > 0)
                {
                    string tmp = treeview__::GetItemLabel(tv, k);
                    str = tmp+"\\" + str;
                    k = treeview__::GetParentItem(tv, k);
                }
                return str;
            }
            int OnAddRole()
            {
                int m = treeview__::GetSelectedItem(dw_tree.GetId());
                if(m == 0) return -1;
                msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
                string tpy=""+ele.selectSingleNode("type").text;
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("dataUrl","/sale/data/Role.config/pref/model/select");
                openUrl("/sale/view/Role.config/xpage/role/select/user", arg);
                string str = arg.GetArgString("item");
                if(str == "") return -1;
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                x.LoadXml(str);
                var list=x.GetXmlDoc().selectNodes("items/item");
                int i=0,s=list.length;
                msxml::IXMLDOMElement xitem;
                int row = dw_role.GetRowCount() + 1;
                string treepath = GetPath();
                for (i=0;i<s;i++)
                {
                    xitem= list.item(i);
                    string id = ""+xitem.selectSingleNode("@id").text;
                    string name=""+xitem.selectSingleNode("@name").text;
                    //string tpy=""+xitem.selectSingleNode("@type").text;
                    dw_role.InsertRow(0);
                    dw_role.SetItemString(row + i, "id", id);
                    dw_role.SetItemString(row + i, "name", ""+treepath);
                    dw_role.SetItemDisplayString(row + i, "name", name);
                    dw_role.SetItemString(row + i, "type", tpy);
                }
                return 1;
            }
            int OnAddRow()
            {
                int m = treeview__::GetSelectedItem(dw_tree.GetId());
                if(m == 0) return 0;
                int k = m_sheet.GetSheetIndex();
                if(k == 0)
                    //openUrl("/sale/view/role.config/xpage/data/select/resource", dw_list);
                    OpenWindow("dev:xpage[Resource.select.data.config.vx]", dw_list);
                else
                    OnAddRole();
                return 1;
            }
            int OnDelRow()
            {
                int k = m_sheet.GetSheetIndex();
                int row;
                string hr_type;
                msxml::IXMLDOMElement e;
                if(k == 0)
                {
                    row = dw_list.GetRow();
                    if(row<1 || row > dw_list.GetRowCount()) return -1;
                    e = dw_list.GetRowElement(row);
                    if(e.selectSingleNode("fromparent"))
                    {
                        hr_type = e.selectSingleNode("fromparent").text;
                        if(hr_type != "")
                        {
                            alert("继承的权限无权删除!");
                            return 0;
                        }
                    }
                    dw_list.DeleteRow(row);
                }
                else
                {
                    row = dw_role.GetRow();
                    if(row<1 || row > dw_role.GetRowCount()) return -1;
                    e = dw_role.GetRowElement(row);
                    if(e.selectSingleNode("fromparent"))
                    {
                        hr_type = e.selectSingleNode("fromparent").text;
                        if(hr_type != "")
                        {
                            alert("继承的权限无权删除!");
                            return 0;
                        }
                    }
                    dw_role.DeleteRow(row);
                }
                return 1;
            }
            int OnSetCopy(xdwgrid__ dw, msxml::IXMLDOMElement e, string name)
            {
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                msxml::IXMLDOMElement ele;
                bool f = false;
                int count = dw.GetRowCount();
                if(count == 0)
                {
                    x.LoadXml("<" + name + "s/>");
                    ele = x.GetXmlDoc().documentElement;
                }
                else
                {
                    msxml::IXMLDOMElement e1  = dw.GetRowElement(1);
                    ele = e1.parentNode;
                }
                var li = e.SelectNodes(name);
                int i;
                int len = li.length;
                string treepath = GetPath();
                for(i=0; i<len; i++)
                {
                    msxml::IXMLDOMElement ele1= li.item(i);
                    if(ele1.selectSingleNode("fromparent"))
                    {
                        string str = ele1.selectSingleNode("fromparent").text;
                        if(str != "") continue;
                    }
                    xml__ x1 = new xml__;
                    x1.setNativePointer(xml__::CreateInstance());
                    x1.LoadXml(ele1.xml);
                    msxml::IXMLDOMElement ele2 = x1.GetXmlDoc().documentElement;
                    ele2.setAttribute("update.new","1");
                    ele2.setAttribute("update.modify","1");
                    ele2.setAttribute("guid",publiccode::GetGuid());
                    if(ele2.selectSingleNode("name"))
                        ele2.selectSingleNode("name").text = treepath;
                    //ele1.selectSingleNode("@guid").text = publiccode::GetGuid();
                    //ele1.selectSingleNode("@update.new").text = "1";
                    //ele1.selectSingleNode("@update.modify").text = "1";
                    ele.appendChild(ele2);
                }
                dw.Retrieve(ele);
                dw.SetReadOnly(true);
                dw.Redraw();
                return 1;
            }
            int OnCopy()
            {
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                int p = arg.__nativept;
                OpenWindow("dev:xpage[Data.config.copy.vx]", p);
                string id = arg.GetArgString("id");
                string f = arg.GetArgString("flag");
                if(id == "") return 1;
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                if(url::get("/sale/data/Role.config/pref/maint/data",arg.GetString(),x)!=1)
                {
                    trace("错误返回="+x.GetXml());
                    return -1;
                }
                if(x.GetXml() == "")
                    x.LoadXml("<root><items/><roles/></root>");
                msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
                if(f == "0" || f == "1")
                {
                    msxml::IXMLDOMElement ele1 = e.selectSingleNode("items");
                    OnSetCopy(dw_list, ele1, "item");
                }
                if(f == "0" || f == "2")
                {
                    msxml::IXMLDOMElement ele2 = e.selectSingleNode("roles")
                    OnSetCopy(dw_role, ele2, "role");
                }
                return 1;
            }
            int OnCmdDispatch(string comdid)
            {
                if(comdid == "Config")
                    openUrl("/sale/view/role.config/xpage/data/resource/config");
                if(comdid == "RightQuery")
                    openUrl("/sale/view/role.config/xpage/data/modulerightquery");
                else if(comdid == "New")
                    OnAddRow();
                else if(comdid == "Del")
                    OnDelRow();
                else if(comdid == "Save")
                    OnSave();
                else if(comdid == "Copy")
                    OnCopy();
                else if(comdid == "xmProdDivi")
                    openUrl("/sale/view/RoleAccount3/xpage/data/proddivi");
                return 0;
            }
            int OnXCommand(ref TXCommandEvent evt,int p)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int onload()
            {
                SetAgent("data");
                dw_list = new xdwgrid__;
                dw_list.setNativePointer(GetControl("dw_list"));
                dw_list.openUrl("/sale/view/Role.config/template/data/config/resourceOrg");
                dw_list.SetReadOnly(false);
                dw_role = new xdwgrid__;
                dw_role.setNativePointer(GetControl("dw_role"));
                //dw_role.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/role]");
                //dw_role.openUrl(m_vface+"/template/role/config/role");
                dw_role.openUrl("/sale/view/Role.config/template/role/config/role");
                dw_role.SetReadOnly(false);
                dw_ddlb =  new combobox__;
                dw_ddlb.setNativePointer(this.GetControl("dw_ddlb"));
                m_sheet =  new xlayersheet__;
                m_sheet.setNativePointer(this.GetControl("m_sheet"));
                AttachEvent("WM_XCOMMAND",OnXCommand);
                AttachEvent("WM_SETFOCUS",OnSetFocus);
                AttachEvent("dw_ddlb","CBN_SELCHANGE",OnSelectDdlb);
                createTreeRoot();
                return 1;
            }
        ]
    ]
]
jrj/project/business/SystemSettings/Developer.Synch.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,432 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) DeveloperSynch :  public xframe
    {
    public:
        xtreeview    tv_gs;
        xsedit dw_log;
        int nItems;
        int nCount;
        xstring sContent;
    public:
        DeveloperSynch(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static DeveloperSynch* CreateInstance(void* implPtr, void* hWnd)
        {
            DeveloperSynch* pWin = new DeveloperSynch(implPtr, (HWND)hWnd);
            return pWin;
        }
        xstring ProcessDevCmd(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
        {
            if(aurl == L"") aurl = GetServerUrl();
            //alert(aurl);
            xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin);
            return d;
        }
        xstring ProcessDevCmd2(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
        {
            if(aurl == L"") aurl = GetServerUrl();
            //alert(aurl);
            xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin);
            return d;
        }
        int GetProjectItem(int hItem)
        {
            int pitem = hItem;
            xstring typ;
            while(true)
            {
                int h =tv_gs.GetItemData(tv_gs.GetId(), pitem);
                KXMLDOMElement e = trust(h as KXMLDOMElement);
                typ = GetEleString(e, L"@tagname");
                if(typ==L"project")break;
                pitem =tv_gs.GetParentItem(tv_gs.GetId(), pitem);
                if(pitem<=0)break;
            }
            return pitem;
        }
        int GetP2Item(int hItem)
        {
            int hDomainItem;
            int hP2Item = hItem;
            while(true)
            {
                hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item);
                if(xtreeview::GetParentItem(tv_gs.GetId(), hDomainItem)<=0)break;
                hP2Item = hDomainItem;
            }
            return hP2Item;
        }
        xstring GetItemGuid(int hItem)
        {
            int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
            KXMLDOMElement e = trust(h as KXMLDOMElement);
            xstring guid = e.GetAttribute(L"guid");
            return guid;
        }
        xaserverarg GetDataArg(int hItem, xaserverarg arg)
        {
            int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
            KXMLDOMElement e = trust(h as KXMLDOMElement);
            xstring node = GetEleString(e, L"@tagname");
            //WriteLog(e.xml);
            if(node==L"File" || node==L"file")
            {
                xstring caption = e.getAttribute(L"caption");
                int hP2Item = 0;
                int hDomainItem = 0;
                if(xtreeview::GetParentItem(tv_gs.GetId(), hItem)<=0)
                {
                    hDomainItem = hItem;
                }else
                {
                    hP2Item = GetP2Item(hItem);
                    hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item);
                }
                //find project folder
                xstring prjguid=L"";
                int pitem = GetProjectItem(hItem);
                if(pitem > 0)
                    prjguid = GetItemGuid(pitem);
                //xaserverarg arg ;
                //;
                arg.AddArg(L"project.guid",prjguid);
                if(hP2Item)
                {
                    if(hP2Item != hItem)
                    {
                        xstring guid = e.getAttribute(L"guid");
                        arg.AddArg(L"guid",guid);
                    }
                    xstring guid2 = GetItemGuid(hP2Item);
                    arg.AddArg(L"root.guid",guid2);
                }else if(hDomainItem > 0)
                {
                    xstring guid3 = GetItemGuid(hDomainItem);
                    arg.AddArg(L"domain.guid",guid3);
                }
                return 1;
            }
            else if(node==L"folder" || node==L"project")
                return 2;
            else
                return 0;
        }
        int SaveData(int hItem)
        {
            xcontrol xc = GetControl(L"surl");
            xstring surl = xc.GetText();
            if(surl == L"")
            {
                alert(L"请输入同步服务器地址");
                return 1;
            }
            xstring name =tv_gs.GetItemLabel(hItem);
            xaserverarg arg ;
            ;
            int ret = GetDataArg(hItem, arg);
            //alert(arg.GetString());
            if(ret == 0)
            {
                WriteLog(name+L" å¤±è´¥, åŽŸå› :获取工程或文件夹失败!");
                return -1;
            }
            else if(ret == 2)
            {
                ret = SynchFolder(hItem);
                if(ret == -1)
                    WriteLog(name+L" å¤±è´¥, åŽŸå› :获取文件数据失败!");
                else if(ret == 0)
                    WriteLog(name+L" å¤±è´¥, åŽŸå› :复制文件失败!");
                else
                    WriteLog(name);
                return -1;
            }
            SynchFolder(hItem);
            arg.AddArg(L"__name",name);
            arg.AddArg(L"__url",surl);
            synchServer(arg);
            if(name.right(3) == L".vx" || name.right(5) == L".xpage")
            {
                arg.AddArg(L"__name",name + L"[Code]");
                arg.AddArg(L"iscode",L"yes");
                synchServer(arg);
            }
            return 1;
        }
        xstring GetFolderPath(int hItem)
        {
            int k = hItem;
            if(k == 0) return L"";
            xstring src = L"";
            //xstring name = L"";
            while(k > 0)
            {
                int h =tv_gs.GetItemData(tv_gs.GetId(), k);
                k =tv_gs.GetParentItem(tv_gs.GetId(), k);
                KXMLDOMElement e = trust(h as KXMLDOMElement);
                xstring node = GetEleString(e, L"@tagname");
                if(node != L"File" && node != L"file")
                {
                    xstring tmp = GetEleString(e, L"@src");
                    //if(name == L"") name = GetEleString(e, L"@caption");
                    if(tmp != L"")
                    {
                        SynchFolder(k);
                        if(src == L"") src = tmp;
                        else
                        {
                            int j = 1;
                            int s =  tmp.length()();
                            xstring t = tmp.right(j).left(1);
                            while(t != L"\\" && j < s)
                            {
                                //WriteLog(t);
                                j++;
                                t = tmp.right(j).left(1);
                            }
                            if(j >= s)
                                src = tmp+ L"\\" + src;
                            else
                                src = tmp.left(s - j)+ L"\\" + src;
                        }
                    }
                }
            }
            if(src == L"")
            {
                //WriteLog(name+L" åŒæ­¥å¤±è´¥, åŽŸå› :获取文件数据失败0!");
                return L"";
            }
            //if(src.left(9) ==L"Projects\\") src = src.mid(9, src.length()());
            src = L"\\" + src;//.replace(L"Projects\\",L"");
            //WriteLog(src);
            return src;
        }
        int SynchFolder(int hItem)
        {
            xstring src =  GetFolderPath(hItem);
            if(src== L"") return -1;
            if(xaserver::FileCopy(L"devfolder8001", src, L"devfolder5001", src) != 1)
                return 0;
            //WriteLog(src);
            return 1;
        }
        int synchServer(xaserverarg arg)
        {
            xstring name = arg.GetArgString(L"__name");
            xstring surl = arg.GetArgString(L"__url");
            xstring d =  ProcessDevCmd(L"getobject",arg.GetString());
            if(d == L"")
            {
                WriteLog(name+L" å¤±è´¥, åŽŸå› :获取文件数据失败!");
                return -1;
            }
            //WriteLog(d);
            arg.AddArg(L"content",d);
            ProcessDevCmd(L"saveobject",arg.GetString(), surl,true);
            WriteLog(name);
            return 1;
        }
        int WriteLog(xstring str)
        {
            if(sContent == L"")
                sContent = str;
            else
                sContent += L"\r\n" + str;
            //alert(sContent);
            dw_log.SetContent(sContent, L"");
            return 1;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            SetAgent();
            return 1;
        }
        int Add(int hItem)
        {
            if(nCount >99)
            {
                alert(L"同时同步的数量不能大于100个!");
                return 1;
            }
            nItems[nCount] = hItem;
            nCount++;
            return 1;
        }
        int Del(int hItem)
        {
            for(int i=0; i<nCount; i++)
            {
                int p = nItems[i];
                if(p == hItem) break;
            }
            if(i<nCount)
            {
                for(int j=i; j<nCount - 1; j++)
                {
                    int k = nItems[j + 1];
                    nItems[j] = k;
                }
                nCount --;
            }
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if(comdid != L"synch") return 1;
            HCURSOR hCursor = xutil::SetCursorWait();
            sContent = L"";
            for(int i=0; i<nCount; i++)
            {
                int p = nItems[i];
                //int h =tv_gs.GetItemData(tv_gs.GetId(), p);
                //KXMLDOMElement e = trust(h as KXMLDOMElement);
                //alert(e.xml);
                SaveData(p);
                xtreeview::SetChecked(tv_gs.GetId(), p,0);
            }
            xutil::RestoreCursor(hCursor);
            nCount = 0;
            return 0;
        }
        int OnTreeCheckBoxSel(TEvent* evt, LPARAM p)
        {
            TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
            int hItem = nmtv.FromItem;
            HCURSOR hCursor = xutil::SetCursorWait();
            int hwnd = nmtv.hwndFrom;
            int c = 1 -tv_gs.GetChecked(hwnd, hItem);
            if(c == 1)
                Add(hItem);
            else
                Del(hItem);
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&DeveloperSynch::OnXCommand);
            //获取焦点事件,用于重置工具条
            //AttachEvent(L"WM_SETFOCUS",OnSetFocus);
            AttachEvent(L"DevExplorer",L"TVN_CHECKBOXSEL", (FEvent)&DeveloperSynch::OnTreeCheckBoxSel);
            AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING", (FEvent)&DeveloperSynch::OnTreeExpanding);
            return 1;
        }
        int OnTreeExpanding(TEvent* evt, LPARAM lparam)
        {
            TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
            int hItem = nmtv.itemNew.hItem;
            int cItem=xtreeview::GetChildItem(tv_gs.GetId(), hItem);
            if(cItem > 0) return 1;
            int p =tv_gs.GetItemData(tv_gs.GetId(), hItem);
            KXMLDOMElement ele = trust(p as KXMLDOMElement);
            xstring src =GetEleString(ele, L"@src");
            xstring tagname =GetEleString(ele, L"@tagname");
            if (src == L"" || tagname == L"file" || tagname == L"File") return 1;
            OnSetTree(hItem, GetFolderPath(hItem));
            return 1;
        }
        int OnSetTree(int pItem, KXMLDOMElement e)
        {
            KXMLDOMNodeList li=e.selectNodes(L"*");
            int i=0;
            int s=li.length();
            for (i=0;i<s;i++){
                KXMLDOMElement  ele= li.item(s - i - 1);
                xstring caption = GetEleString(ele, L"@caption");
                xstring src =GetEleString(ele, L"@src");
                xstring image =GetEleString(ele, L"@image");
                int p = trust(ele as int);
                int hItem=xtreeview::InsertItem(tv_gs.GetId(), pItem,0,caption,p,image.toInt());
                xstring tagname =GetEleString(ele, L"@tagname");
                if (src != L"" && tagname != L"file" && tagname != L"File")
                    xtreeview::SetItemChild1(tv_gs.GetId(), hItem,1);
                OnSetTree(hItem, ele);
            }
            return 1;
        }
        int OnSetTree(int hItem, xstring src)
        {
            xml x=new xml;
            xaserverarg arg;
            ;
            arg.AddArg(L"src",src);
            if(xaserver::ExecXQuery(GetServerUrl(),L"[Developer.Tree.xq]",arg.GetString(),x)!=1)
            {
                alert(L"读取节点失败!");
                return 1;
            }
            KXMLDOMElement e = x.documentElement();
            OnSetTree(hItem, e);
            return 1;
        }
        int onload()
        {
            nCount = 0;
            tv_gs = GetControl(L"DevExplorer");
            dw_log = GetControl(L"xlog");
            OnAttachEvent();
            return 1;
        }
        int onloaded()
        {
            OnSetTree(0, L"Projects/projects.xhw");
            return 1;
        }
    };
jrj/project/business/SystemSettings/Flow3.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,476 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) flow :  public xframe
    {
    public:
        xtreeview tv_1;
        xlayersheet    tab_1;
        xdwgrid    dw_flow;
        xdwgrid    dw_state;
        xdwgrid    dw_button;
        xdwgrid    dw_role;
        xdwgrid    dw_bill;
        xdwgrid    dw_scene;
        xdwgrid    dw_buttonright;
        xdwgrid    dw_datafieldright;
        xstring     flowid;
        xtreeview tv_folder;
        xnode    m_agentNode;    //Agent Condition
    public:
        flow(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static flow* CreateInstance(void* implPtr, void* hWnd)
        {
            flow* pWin = new flow(implPtr, (HWND)hWnd);
            return pWin;
        }
        xstring GetSheetType(int index)
        {
            if (index == 0)  return L"flowitem";
            else if (index == 1) return L"state";
            else if (index == 2) return L"actionrole";
            else if (index == 3) return L"button";
            else if (index == 4) return L"role";
            else if (index == 5) return L"bill";
            else if (index == 6) return L"scene";
            else if (index ==7) return L"fieldrole";
            else return L"unkown";
        }
        xdwgrid GetSheetDwgrid(int index)
        {
            xstring typ = GetSheetType(index);
            if(typ==L"flowitem") return dw_flow;
            if(typ==L"actionrole") return dw_buttonright;
            if(typ==L"state") return dw_state;
            if(typ==L"button") return dw_button;
            if(typ==L"role") return dw_role;
            if(typ==L"bill") return dw_bill;
            if(typ==L"scene") return dw_scene;
            if(typ==L"fieldrole") return dw_datafieldright;
            return 0;
        }
        xdwgrid GetSheetDbmap(int index)
        {
            xstring typ = GetSheetType(index);
            if(typ==L"flowitem") return "flow.dbmap";
            if(typ==L"actionrole") return "workflow.actionrole.dbmap";
            if(typ==L"state") return "state.dbmap";
            if(typ==L"button") return "button.dbmap";
            if(typ==L"role") return "role.dbmap";
            if(typ==L"bill") return "bill.dbmap";
            if(typ==L"scene") return "scene.dbmap";
            if(typ==L"fieldrole") return "workflow.datarole.dbmap";
            return 0;
        }
        xstring GetDwname(xstring typ)
        {
            if(typ==L"flowitem") return L"/sale/view/Flow3/template/flow";
            if(typ==L"actionrole") return L"/sale/view/Flow3/template/buttonright";
            if(typ==L"state") return L"/sale/view/Flow3/template/state";
            if(typ==L"button") return L"/sale/view/Flow3/template/button";
            if(typ==L"role") return L"/sale/view/Flow3/template/role";
            if(typ==L"bill") return L"/sale/view/Flow3/template/bill";
            if(typ==L"scene") return L"/sale/view/Flow3/template/scene";
            if(typ==L"fieldrole") return L"/sale/view/Flow3/template/datafieldright";
            return L"";
        }
        int SetAgent()
        {
            xstring xfNodeAgentArea  = L"agentarea";
            xnode anode = GetAgentNode(xfNodeAgentArea);
            if(m_agentNode)
            {
                SetAgentNode (anode,m_agentNode);
            }
            else
            {
                KXMLDOMElement xframeElement =  GetElement();
                KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring s = agent.xml();
                    m_agentNode =  SetAgentNode (anode,s);
                }
            }
            return 1;
        }
        int OnSave()
        {
            if(flowid==L"") return 1;
            xstring sdbmap;
            xml x ;
            int index = tab_1.GetSheetIndex();
            sdbmap = (xstring)GetSheetDbmap(index);
            xdwgrid dw_list = GetSheetDwgrid(index);
            dw_list.DwUpdateAllToEx(x);
            //trace(x.xml());
            KXMLDOMNodeList ls = x.documentElement().selectNodes(L"*[@update.modify='1' and @update.new='1']");
            int len = ls.length();
            for(int k=0;k<len;k++)
            {
                KXMLDOMElement e;
                if(ls.item(k).selectSingleNode(L"flowID"))
                {
                    e = ls.item(k).selectSingleNode(L"flowID");
                    e.setAttribute(L"update.modify",L"1");
                    e.text() = flowid;
                }else
                {
                    e = x.createElement(L"flowID");
                    e.setAttribute(L"update.modify",L"1");
                    e.text() = flowid;
                    ls.item(k).appendChild(e);
                }
            }
            xaserverarg arg ;
            ;
            arg.AddArg(L"content",x.xml());
            arg.AddArg(L"sdbmap",sdbmap);
            trace(x.xml());
            if(xurl::get(L"/sale/data/Flow3/save/flow", arg.GetString(),x)!=1)
            {
                xstring error = x.text();
                alert(L"err:"+error);
                return 1;
            }
            dw_list.ResetUpdateStatus();
            //alert(x.xml());
            alert(L"保存成功!");
            return 1;
        }
        int OnAddrow()
        {
            int i = tab_1.GetSheetIndex();
            xdwgrid dw_list = GetSheetDwgrid(i);
            dw_list.InsertRow(0);
            return 1;
        }
        int OnInsertrow()
        {
            int i = tab_1.GetSheetIndex();
            xdwgrid dw_list = GetSheetDwgrid(i);
            dw_list.InsertRow(dw_list.GetRow());
            return 1;
        }
        int OnDeleterow()
        {
            int i = tab_1.GetSheetIndex();
            xdwgrid dw_list = GetSheetDwgrid(i);
            dw_list.DeleteRow(0);
            return 1;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            SetAgent();
            //alert(evt.hWnd.toString());
            return 1;
        }
        int OnClicked(TEvent* evt, int p)
        {
            DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
            int row = hdr.row;
            xstring colname=hdr.colname;
            //trace(colname);
            xaserverarg arg ;
            ;
            xstring comdid =L"";
            xstring data=L"";
            xstring display=L"";
            xdwgrid dw_list;
            int index = tab_1.GetSheetIndex();
            dw_list = GetSheetDwgrid(index);
            arg.AddArg(L"sdata",L"");
            arg.AddArg(L"flowid",flowid);
            if(colname==L"billID")
            {
                arg.AddArg(L"stype",L"bill");
                arg.AddArg(L"datacolumn",L"billID");
                arg.AddArg(L"displaycolumn",L"billName");
                arg.AddArg(L"dwname",L"/sale/view/Flow3/template/bill");
            }
            else if(colname==L"stateSource")
            {
                arg.AddArg(L"stype",L"state");
                arg.AddArg(L"datacolumn",L"stateID");
                arg.AddArg(L"displaycolumn",L"stateName");
                arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
            }
            else if(colname==L"state")
            {
                arg.AddArg(L"stype",L"state");
                arg.AddArg(L"datacolumn",L"stateID");
                arg.AddArg(L"displaycolumn",L"stateName");
                arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
            }
            else if(colname==L"stateTarget")
            {
                arg.AddArg(L"stype",L"state");
                arg.AddArg(L"datacolumn",L"stateID");
                arg.AddArg(L"displaycolumn",L"stateName");
                arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
            }
            else if(colname==L"roles")
            {
                arg.AddArg(L"stype",L"role");
                arg.AddArg(L"datacolumn",L"roleName");
                arg.AddArg(L"displaycolumn",L"roleName");
                arg.AddArg(L"dwname",L"/sale/view/Flow3/template/role");
            }
            else if(colname==L"flowAction")
            {
                arg.AddArg(L"stype",L"button");
                arg.AddArg(L"datacolumn",L"buttonName");
                arg.AddArg(L"displaycolumn",L"buttonName");
                arg.AddArg(L"dwname",L"/sale/view/Flow3/template/button");
            }
            else
                return 1;
            OpenWindow(L"dev:xpage[FlowTermSelect.vx]",arg);
            comdid = arg.GetArgString(L"comdid");
            if(comdid==L"xmOk")
            {
                data = arg.GetArgString(L"data");
                display = arg.GetArgString(L"display");
                dw_list.SetItemDisplayString(row,colname,display);
                dw_list.SetItemString(row,colname,data);
                dw_list.Redraw();
            }
            return 1;
        }
        int OnImport()
        {
            int i = tab_1.GetSheetIndex();
            xdwgrid dw_list = GetSheetDwgrid(i);
            xaserverarg arg ;
            ;
            arg.SetArg(L"stype",GetSheetType(i),L"xstring");
            arg.SetArg(L"sdata",L"ddd",L"xstring");
            arg.SetArg(L"flowID",flowid,L"xstring");
            int obj = cast(dw_list as int);
            arg.SetArg(L"dwobj",obj.toString(),L"xstring");
            arg.SetArg(L"dwname",GetDwname(GetSheetType(i)),L"xstring");
            OpenWindow(L"dev:xpage[FlowTermImport.vx]",arg);
            return 1;
        }
        int  OnRetrieve()
        {
            if(flowid==L"") return 1;
            xml x ;
            xaserverarg arg ;
            ;
            //int i = tab_1.GetSheetIndex();
            for(int i=0;i<7;i++)
            {
                //alert(i.toString());
                arg.SetArg(L"stype",GetSheetType(i),L"xstring");
                arg.SetArg(L"sdata",L"ddd",L"xstring");
                arg.SetArg(L"flowID",flowid,L"xstring");
                //trace(arg.GetString());
                if (getUrl(L"/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1)
                {
                    //trace(x.text());
                    //return -1;
                    continue;
                }
                xdwgrid dw_list = GetSheetDwgrid(i);
                dw_list.Retrieve(x);
                dw_list.Redraw();
            }
            return 1;
        }
        int OnTreeSelChanged(TEvent* evt, int p)
        {
            NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
            HTREEITEM hItem = nmtv.itemNew.hItem;
            KXMLDOMElement& e = *(KXMLDOMElement*)tv_1.GetItemData(hItem);
            flowid = e.getAttribute(L"flowID");
            HCURSOR hCursor = xutil::SetCursorWait();
            SetFlowChart(e);
            OnRetrieve();
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        int OnTabSelectSheet(TEvent* evt, int p)
        {
            //OnRetrieve();
            return 1;
        }
        int SetFlowChart(KXMLDOMElement e)
        {
            xstring flowUrl = e.getAttribute(L"flowchart");
            xflowchart flowchart = GetControl(L"flowchart");
            xml f ;
            if(flowUrl != L"")
            {
                if(xaserver::FetchXml(flowUrl,L"",f)==1)
                {
                    flowchart.LoadEx(f.documentElement());
                }
            }else
            {
                f.loadXML(L"<sheet/>");
                flowchart.LoadEx(f.documentElement());
            }
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if (comdid == L"xmSave")
                return OnSave();
            if (comdid == L"xmAddrow")
                return OnAddrow();
            if (comdid == L"xmInsertrow")
                return OnInsertrow();
            if (comdid == L"xmDeleterow")
                return OnDeleterow();
            if (comdid == L"xmImport")
                return OnImport();
            return 0;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&flow::OnXCommand);
            //获取焦点事件,用于重置工具条
            AttachEvent(L"WM_SETFOCUS", (FEvent)&flow::OnSetFocus);
            AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&flow::OnTreeSelChanged);
            AttachEvent(L"tab_1",L"LYSN_SELECTEDSHEET", (FEvent)&flow::OnTabSelectSheet);
            AttachEvent(L"dw_flow",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
            AttachEvent(L"dw_buttonright",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
            AttachEvent(L"dw_button",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
            AttachEvent(L"dw_state",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
            return 1;
        }
        int CreateFlowFloder()
        {
            xml x = ViewObject::RetrieveData(L"/sale/data/flow3/flowfolder");
            if(x)
            {
                KXMLDOMNodeList nlist = x.selectNodes(L"//item");
                int len = nlist.length();
                int hItem = 0;
                for (int i = 0; i < len; i++)
                {
                    KXMLDOMElement e = nlist.item(i);
                    xstring name = e.getAttribute(L"flowName");
                    xstring no = e.getAttribute(L"flowNo");
                    xstring label = name;//no.trim() + L" " + name;
                    int h= tv_folder.InsertChildItem(hItem,label, trust(e as int),22);
                    //tv_folder.SetItemChild(h,1);
                }
            }
            return 1;
        }
        int onload()
        {
            flowid = L"";
            tv_folder = GetControl(L"tv_folder");
            CreateFlowFloder();
            tv_1 = GetControl(L"tv_1");
            tab_1 = GetControl(L"tab_1");
            dw_flow = GetControl(L"dw_flow");
            dw_flow.openUrl(L"/sale/view/Flow3/template/flow");
            dw_state = GetControl(L"dw_state");
            dw_state.openUrl(L"/sale/view/Flow3/template/state");
            dw_button = GetControl(L"dw_button");
            dw_button.openUrl(L"/sale/view/Flow3/template/button");
            dw_role = GetControl(L"dw_role");
            dw_role.openUrl(L"/sale/view/Flow3/template/role");
            dw_bill = GetControl(L"dw_bill");
            dw_bill.openUrl(L"/sale/view/Flow3/template/bill");
            dw_scene = GetControl(L"dw_scene");
            dw_scene.openUrl(L"/sale/view/Flow3/template/scene");
            dw_buttonright = GetControl(L"dw_buttonright");
            dw_buttonright.openUrl(L"/sale/view/Flow3/template/buttonright");
            dw_datafieldright = GetControl(L"dw_datafieldright");
            dw_datafieldright.openUrl(L"/sale/view/Flow3/template/datafieldright");
            OnAttachEvent();
            return 1;
        }
        int onloaded()
        {
            SetAgent();
            OnRetrieve();
            return 1;
        }
    };
jrj/project/business/SystemSettings/FlowTermImport.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) FlowTermImport :  public xframe
    {
    public:
        xdwgrid    dw_list;
        xstring stype;
        xstring sdata;
        xstring flowid;
        xstring datacolumn;
        xstring displaycolumn;
        xdwgrid dw_obj;
        xnode    m_agentNode;    //Agent Condition
    public:
        FlowTermImport(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static FlowTermImport* CreateInstance(void* implPtr, void* hWnd)
        {
            FlowTermImport* pWin = new FlowTermImport(implPtr, (HWND)hWnd);
            return pWin;
        }
        int SetAgent()
        {
            xstring xfNodeAgentArea  = L"agentarea";
            xnode anode = GetAgentNode(xfNodeAgentArea);
            if(m_agentNode)
            {
                SetAgentNode (anode,m_agentNode);
            }
            else
            {
                KXMLDOMElement xframeElement =  GetElement();
                KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring s = agent.xml();
                    m_agentNode =  SetAgentNode (anode,s);
                }
            }
            return 1;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            //SetAgent();
            return 1;
        }
        int OnOK(xstring comdid)
        {
            int row = dw_list.GetNextSelectRow(1);
            if(row < 1 && dw_list.GetRowCount()==1) row = 1;
            if (row<1)
            {
                alert(L"请选择项!");
                return 1;
            }
            while (row>0)
            {
                int nrow = dw_obj.InsertRow(0);
                int columnCount = dw_obj.GetColumnCount();
                for(int i=1;i<=columnCount;i++)
                {
                    if(dw_list.GetColumnName(i)==L"guid") continue;
                    dw_obj.SetItemString(nrow,i,dw_list.GetItemString(row,i));
                    if(dw_list.GetItemDisplayString(row,i)!=L"")
                        dw_obj.SetItemDisplayString(nrow,i,dw_list.GetItemDisplayString(row,i));
                }
                row = dw_list.GetNextSelectRow(row + 1);
            }
            CloseWindow();
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if (comdid==L"xmOk")
            {
                OnOK(comdid);
                return 1;
            }
            else if (comdid==L"xmCancel")
            {
                CloseWindow();
                return 1;
            }
            return 0;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&FlowTermImport::OnXCommand);
            //获取焦点事件,用于重置工具条
            AttachEvent(L"WM_SETFOCUS", (FEvent)&FlowTermImport::OnSetFocus);
            return 1;
        }
        int  OnRetrieve()
        {
            xml x ;
            xaserverarg arg ;
            ;
            arg.AddArg(L"stype",stype);
            arg.AddArg(L"sdata",sdata);
            arg.AddArg(L"flowID",flowid);
            if (getUrl(L"/sale/data/Flow3/retrieve/flowimport",arg.GetString(),x)!=1)
            {
                trace(x.text());
                return -1;
            }else
            {
                dw_list.Retrieve(x);
                dw_list.Redraw();
                dw_list.SetReadOnly(true);
            }
            return 1;
        }
        int onload()
        {
            SetArg();
            dw_list = GetControl(L"dw_list");
            //dw_list.openUrl(L"xxx");
            if(GetWinParam())
            {
                xaserverarg arg = GetArg();
                stype = arg.GetArgString(L"stype");
                sdata = arg.GetArgString(L"sdata");
                flowid = arg.GetArgString(L"flowid");
                xstring dwname = arg.GetArgString(L"dwname");
                int dwobj = arg.GetArgString(L"dwobj").toInt();
                dw_obj = cast(dwobj as xdwgrid);
                dw_list.openUrl(dwname);
                OnRetrieve();
                dw_list.SetSelectionMode(3);
            }
            OnAttachEvent();
            return 1;
        }
        int onloaded()
        {
            //SetAgent();
            return 1;
        }
    };
jrj/project/business/SystemSettings/FlowTermSelect.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,176 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) FlowTermSelect :  public xframe
    {
    public:
        xdwgrid    dw_list;
        xstring stype;
        xstring sdata;
        xstring flowid;
        xstring datacolumn;
        xstring displaycolumn;
        xnode    m_agentNode;    //Agent Condition
    public:
        FlowTermSelect(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static FlowTermSelect* CreateInstance(void* implPtr, void* hWnd)
        {
            FlowTermSelect* pWin = new FlowTermSelect(implPtr, (HWND)hWnd);
            return pWin;
        }
        int SetAgent()
        {
            xstring xfNodeAgentArea  = L"agentarea";
            xnode anode = GetAgentNode(xfNodeAgentArea);
            if(m_agentNode)
            {
                SetAgentNode (anode,m_agentNode);
            }
            else
            {
                KXMLDOMElement xframeElement =  GetElement();
                KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring s = agent.xml();
                    m_agentNode =  SetAgentNode (anode,s);
                }
            }
            return 1;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            //SetAgent();
            return 1;
        }
        int OnOK(xstring comdid)
        {
            xaserverarg arg ;
            arg = GetArg();
            arg.AddArg(L"comdid",comdid);
            int row = dw_list.GetNextSelectRow(1);
            if(row < 1 && dw_list.GetRowCount()==1) row = 1;
            if (row<1)
            {
                alert(L"请选择项!");
                return 1;
            }
            while (row>0)
            {
                KXMLDOMElement e = dw_list.GetRowElement(row);
                xstring data = e.selectSingleNode(datacolumn).text()+(xstring)L"";
                xstring display = e.selectSingleNode(displaycolumn).text()+ (xstring)L"";
                arg.AddArg(L"data",data);
                arg.AddArg(L"display",display);
                row = dw_list.GetNextSelectRow(row + 1);
            }
            CloseWindow();
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if (comdid==L"xmOk")
            {
                OnOK(comdid);
                return 1;
            }
            else if (comdid==L"xmCancel")
            {
                CloseWindow();
                return 1;
            }
            return 0;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&FlowTermSelect::OnXCommand);
            //获取焦点事件,用于重置工具条
            AttachEvent(L"WM_SETFOCUS", (FEvent)&FlowTermSelect::OnSetFocus);
            return 1;
        }
        int  OnRetrieve()
        {
            xml x ;
            xaserverarg arg ;
            ;
            arg.AddArg(L"stype",stype);
            arg.AddArg(L"sdata",sdata);
            arg.AddArg(L"flowID",flowid);
            if (getUrl(L"/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1)
            {
                trace(x.text());
                return -1;
            }else
            {
                dw_list.Retrieve(x);
                dw_list.Redraw();
                dw_list.SetReadOnly(true);
            }
            return 1;
        }
        int onload()
        {
            SetArg();
            dw_list = GetControl(L"dw_list");
            //dw_list.openUrl(L"xxx");
            if(GetWinParam())
            {
                xaserverarg arg = GetArg();
                stype = arg.GetArgString(L"stype");
                sdata = arg.GetArgString(L"sdata");
                flowid = arg.GetArgString(L"flowid");
                datacolumn = arg.GetArgString(L"datacolumn");
                displaycolumn = arg.GetArgString(L"displaycolumn");
                xstring dwname = arg.GetArgString(L"dwname");
                dw_list.openUrl(dwname);
                OnRetrieve();
                dw_list.SetSelectionMode(1);
            }
            OnAttachEvent();
            return 1;
        }
        int onloaded()
        {
            //SetAgent();
            return 1;
        }
    };
jrj/project/business/SystemSettings/GroupManagerList_A.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1576 @@
#include <wobject/xstring.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/ximageview.hpp>
#include "vbusiness/vframe/maint.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
#include "viewobject/saleorder.view.hpp"
#include "viewobject/quote.view.hpp"
#include "viewobject/shoppingcart.view.hpp"
#include "viewobject/productLibrary.view.hpp"
#include "xcontrol/xcheckbox.hpp"
#include "xcontrol/xshtml.hpp"
class __declspec(dllexport) ProductLibrary4Win : public xframe
{
public:
    //产品库产品列表
    xdwgrid    dw_list;
    //购物车产品列表
    xdwgrid    dwc_list;
    //产品缓存对象
    //xdataset g_xdoc_product;
    //xdataset g_xdoc_shoppingcart;
    xcombobox  cbx_goodscar;
    //是否多选
    xnode    m_agentNode;    //Agent Condition
    xtreeview tv_folder;
    xstring     agentFor;
    KXMLDOMElement imageElement;
    xstring m_customer;
public:
    ProductLibrary4Win(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
    static ProductLibrary4Win* CreateInstance(void* implPtr, void* hWnd)
    {
        ProductLibrary4Win* pWin = new ProductLibrary4Win(implPtr, (HWND)hWnd);
        return pWin;
    }
public:
    int FillGoodsCarList()
    {
        xcombobox xc = GetControl(L"frame:cbx_goodscar");
        if (!xc) return 0;
        xml  x = ShoppingCartView::GetRoleList();
        if (!x) return 0;
        xc.SetText(L"==选择购物车==L");
        KXMLDOMNodeList nlist = x.selectNodes(L"//item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            xc.AddItem( name);
        }
        return 1;
    }
    int SetAgent()
    {
        xstring xfNodeAgentArea = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        if (m_agentNode)
        {
            SetAgentNode(anode, m_agentNode);
        }
        else
        {
            KXMLDOMElement xframeElement = GetElement();
            KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[@for='" + agentFor + L"']/*");
            if (agent)
            {
                bstring s = agent.xml();
                m_agentNode = SetAgentNode(anode, s);
                //FillGoodsCarList();
            }
        }
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent * evt, int param)
    {
        //重置工具条
        SetAgent();
        return 1;
    }
    KXMLDOMElement OnGetCarListRowElement(int row = 0)
    {
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return KXMLDOMElement();
        KXMLDOMElement e = dw_list.GetRowElement(row);
        return e;
    }
    int OnShowImage(xstring skuid)
    {
        ximageview im = GetControl(L"im1");
        //im.RemoveImage();
        im.Reset();
        xml xp ;
        xaserverarg arg_pic;
        arg_pic.AddArg(L"SKUID", skuid);
        if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU", arg_pic.GetString(), xp) != 1)
        {
            trace(xstring(L"xxx")+xp.xml());
        }
        else
        {
            //trace(skuid+L" "+xp.GetXml());
            imageElement = xp.documentElement();
            KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
            int lenp = nlistp.length();
            for (int ip = 0; ip < lenp; ip++)
            {
                KXMLDOMElement xitem = nlistp.item(ip);
                xstring picname = xitem.selectSingleNode(L"PicPath").text();
                xstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
                if (picname == L"/business/products/Thumbs//")
                    picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
                im.AddImages(picname, (LPTSTR)L"");
            }
            im.Redraw();
            //win32::SendMessage(im.GetId(),0x000f,0,1);
            //win32::InvalidateRect(im.GetId(),cast(0 as ref xrect),true);
        }
        return 1;
    }
    int OnShowImage(xstring skuid, xstring customerItemNo)
    {
        ximageview im = GetControl(L"im1");
        //im.RemoveImage();
        im.Reset();
        xml xp ;
        xaserverarg arg_pic ;
        arg_pic.AddArg(L"SKUID", skuid);
        arg_pic.AddArg(L"CustomerID", m_customer);
        arg_pic.AddArg(L"CustomerItemNo", customerItemNo);
        if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKU", arg_pic.GetString(), xp) != 1)
        {
            trace(L"error:" + xstring(xp.xml(),true));
        }
        else
        {
            imageElement = xp.documentElement();
            KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
            int lenp = nlistp.length();
            for (int ip = 0; ip < lenp; ip++)
            {
                KXMLDOMElement xitem = nlistp.item(ip);
                bstring picname = xitem.selectSingleNode(L"PicPath").text();
                bstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
                if (picname == L"/business/products/Thumbs//")
                    picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
                im.AddImages(picname, L"");
            }
            im.Redraw();
        }
        return 1;
    }
    int OnRowChanged(TEvent * evt, int p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        xshtml xs = GetControl(L"html_detail");
        xstring html = makeHtml(row);
        xs.SetContent(html);
        xs.Redraw();
        xstring id = dw_list.GetGuid(row);
        OnShowImage(id);
        trace(id);
        return 1;
    }
    int OnGoodsCarRowChanged(TEvent * evt, int p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        xshtml xs = GetControl(L"html_detail");
        xstring html = makeGoodscarHtml(row);
        xs.SetContent(html);
        xs.Redraw();
        if (m_customer)
        {
            xstring id = dw_list.GetItemString(row, L"SKUID");
            xstring customerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
            OnShowImage(id, customerItemNo);
        }
        return 1;
    }
    int DeleteRow(int row)
    {
        int IDOK = 1;
        int MB_OKCANCEL = 1;
        int MB_ICONQUESTION = 32;
        if (MessageBoxW(GetHWND(), L"确认删除指定的项,删除后将不能恢复?", L"提示", MB_OKCANCEL | MB_ICONQUESTION) != IDOK) return 1;
        xstring id = dw_list.GetGuid(row);
        if (ProductLibraryView::DeleteItem(id) == 1)    dw_list.DeleteRow(0);
        return 1;
    }
    int SetSelectState(xdwgrid dw_obj, int state)
    {
        if (state == 1)
        {
            dw_obj.SetSelectionMode(3);
        }
        else if (state == -1)
        {
            dw_obj.SelectRow(0, false);
            dw_obj.SetSelectionMode(0);
        }
        return 1;
    }
    int OnCkbCLick(TEvent * evt, int p)
    {
        xcheckbox cbx_1 = GetControl(L"frame:cbx1");
        int state = cbx_1.GetCheck();
        return SetSelectState(dw_list, state);
    }
    int OnCkbCLick2(TEvent * evt, int p)
    {
        xcheckbox cbx_2 = GetControl(L"frame:cbx2");
        int state = cbx_2.GetCheck();
        return SetSelectState(dwc_list, state);
    }
    xml  GetGoodsPropList(xstring guid)
    {
        xml x;
        xaserverarg arg;
        arg.AddArg(L"guid", guid);
        if (xurl::get(L"/sale/data/SO/goods/goodsprop/list", arg.GetString(), x) != 1)
        {
            bstring error = x.text();
            alert(error);
        }
        return x;
    }
    xml  GetGoodsPropListEx(xstring guid)
    {
        xml x;
        xstring fields = L"<data>";
        //fields +=L"<field name='HighestPrice' label='最高价'/>";
        //fields +=L"<field name='LowestPrice' label='最低价'/>";
        //fields +=L"<field name='BulkPrice' label='散货价'/>";
        //fields +=L"<field name='CardPrice' label='纸卡价'/>";
        //fields +=L"<field name='BuyPrice' label='采购价'/>";
        //fields +=L"<field name='SupplierID' label='货源'/>";
        fields += L"<field name='Packing' label='包装方式'/>";
        fields += L"<field name='PackingRate' label='每箱数量'/>";
        fields += L"<field name='VolumeDesc' label='包装尺码'/>";
        fields += L"<field name='GWPerPkg' label='毛重'/>";
        fields += L"<field name='NWPerPkg' label='净重'/>";
        //fields +=L"<field name='DeveloperID' label='开发人员'/>";
        fields += L"<field name='AttributeValue_1' label='产品属性'/>";
        //fields +=L"<field name='Remark' label='备注'/>";
        fields += L"</data>";
        x.loadXML(fields);
        return x;
    }
    xstring makeHtml(int row)
    {
        xstring id = dw_list.GetItemString(row, L"@guid");
        xml x = GetGoodsPropList(id);
        xml x1 = GetGoodsPropListEx(id);
        xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"SKUNo") +
            L"</span> <span style='font-weight:700;width:50;font-size:10pt' >类项:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"RefNo") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >公司型号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"GoodsNo") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CName") +
            L"</span></div>";
        if (dw_list.GetItemString(row, L"CSpec") != L"")
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CSpec") +
                L"</span></div>";
        KXMLDOMNodeList fieldsEx = x1.selectNodes(L"data/field");
        xstring ls_detail = L"";
        xstring ls_item = L"";
        xstring name;
        xstring label;
        int len = fieldsEx.length();
        int i = 0;
        for (i = 0; i < len; true)
        {
            int cnt = 0;
            ls_item = L"";
            while (cnt < 2)
            {
                name = fieldsEx.item(i).selectSingleNode(L"@name").text();
                label = fieldsEx.item(i).selectSingleNode(L"@label").text();
                ls_item += L"<td>" + label + L"</td>" + L"<td style='text-align:center'>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
                cnt++;
                i++;
                if (i == len)break;
            }
            ls_detail += L"<tr>" + ls_item + L"</tr>";
        }
        html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
            + L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
            + ls_detail
            + L"</table>"
            + L"</div>";
        xstring ls_star = L"";
        KXMLDOMNodeList fields = x.selectNodes(L"data/field");
        len = fields.length();
        ls_detail = L"";
        if (len > 0)
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >技术要求:</span></div>";
        for (i = 0; i < len; true)
        {
            ls_item = L"";
            int count = 0;
            while (count < 2)
            {
                name = fields.item(i).selectSingleNode(L"@name").text();
                label = fields.item(i).selectSingleNode(L"@label").text();
                if (name == L"QualityTerm" || name == L"PackTerm" || label == L"质量" || label == L"包装质量" || label == L"技术要求")
                {
                    i++;
                    if (i >= len)count = 2;
                    continue;
                }
                else if (dw_list.GetItemString( row, (LPCTSTR)name) == L"")
                {
                    KXMLDOMNodeList options = fields.item(i).selectNodes(L"item");
                    int tlen = options.length();
                    xstring terms = L"";
                    for (int k = 0; k < tlen; k++)
                    {
                        if (xstring(options.item(k).text()))
                        {
                            if (k > 0) terms += L", L";
                            terms += (xstring)L"[" + options.item(k).text() + L"]";
                        }
                    }
                    ls_star += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >" + label + L"*:</span><span  style='width:90;font-size:10pt'>" + terms + L"</span></div>";
                }
                else
                {
                    ls_item = L"<td>" + label + L"</td>" + L"<td>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
                    count++;
                }
                i++;
                if (i >= len)count = 2;
            }
            ls_item = L"<tr>" + ls_item + L"</tr>";
            ls_detail += ls_item;
        }
        html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
            +L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
            + ls_detail
            + L"</table>"
            + L"</div>";
        if (dw_list.GetItemString(row, L"QualityTerm") != L"")
        {
            html += L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >质量:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt'  >" + dw_list.GetItemString(row, L"QualityTerm") + L"</span></div>";
        }
        if (dw_list.GetItemString(row, L"PackTerm") != L"")
        {
            html += L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >包装质量:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row, L"PackTerm") + L"</span></div>";
        }
        if (dw_list.GetItemString( row, L"Remark") != L"")
        {
            //html +=  L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >备注:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString( row, L"Remark") + L"</span></div>";
        }
        html += L"<div style='height:24px'/>";
        //星标项
        html += ls_star;
        //显示图片
        /*
        if (id != L"")
        {
            xml xp=new xml;
            xp.setNativePointer(xml::CreateInstance());
            xaserverarg arg_pic=new xaserverarg;
            arg_pic.setNativePointer(arg_pic.CreateInstance());
            arg_pic.AddArg(L"SKUID",id);
            if(url::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU",arg_pic.GetString(),xp)!=1)
            {
                trace(L"xxx",xp.GetXml());
            }else {
                html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >ͼƬ:</span>"    ;
                KXMLDOMElement ep=  xp.selectSingleNode(L"ImageList");
                if (ep)
                {
                    if (ep.SelectNodes(L"image")){
                        KXMLDOMNodeList  nlistp = ep.SelectNodes(L"image");
                        int ip=0;
                        int lenp = nlistp.length;
                        for(ip=0;ip<lenp;ip++)
                        {
                            KXMLDOMElement xitemp = nlistp.item(ip);
                            xstring filename = xitemp.selectSingleNode(L"PicPath").text;
                            //trace(filename);
                            html +=  L"<control visible='layer' controlclass='ximage'  data='' src='http://192.168.7.241:7001" +  filename +L"'/>";
                        }
                    }
                }
                html +=  L"</div>";
            }
        }else {
            xstring picname = L"1FA9E331-F95C-4E51-B80C-73FB9B911D8D.jpg";//dw_list.GetItemString(row,L"ImgName"); //ItemID+L".jpg";
            xstring str = picname.mid(0,2);
            str = str.upper();
            xstring serversrc =L"http://192.168.7.241:1001/business/products/chanpin/"+str+L"/"+picname;
            html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >ͼƬ:</span>";
            html +=  L"<control visible='layer' controlclass='ximage'  data='' src='"+ serversrc +L"'/></div>";
        }
        */
        html += L"</body></html>";
        //trace(html);
        return html;
    }
    xstring makeGoodscarHtml(int row)
    {
        xstring No = dwc_list.GetItemString(row, L"RefNo");//获取属性值id
        xml x = GetGoodsPropList(No);
        xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color1:#ccdccc none #f0f0f0 none'>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"No") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CName") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CSpec") +
            L"</span></div>";
        KXMLDOMNodeList fields = x.selectNodes(L"data/field");
        int len = fields.length();
        html += (xstring)L"<table>" +
            L"<colgroup span='1' width='80'/>" +
            L"<colgroup span='1' width='120'/>" +
            L"<colgroup span='1' width='420'/>";
        html += L"<tr>";
        html += L"<td style='text-align:center'>编号</td><td style='text-align:center'>项目</td><td style='text-align:center'>内容</td>";
        html += L"</tr>";
        for (int i = 0; i < len; i++)
        {
            xstring name = fields.item(i).selectSingleNode(L"@name").text();
            xstring label = fields.item(i).selectSingleNode(L"@label").text();
            html += L"<tr>";
            if (i == 0)
                html += L"<td rowspan='" + xstring(len) + L"'>" + No + L"</td><td >" + label + L"</td><td >" + L"</td>";
            else
                html += L"<td >" + label + L"</td><td >" +dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
            html += L"</tr>";
        }
        html += L"<tr>";
        html += L"<td rowspan='3'>" +dw_list.GetItemString( row, L"PackCode") + L"</td><td >包装方式</td><td >" +
            dw_list.GetItemString(row, L"CPack") + L"</td>";
        html += L"</tr>";
        html += L"<tr height='48'>";
        html += L"<td >包装要求</td><td >" +dw_list.GetItemString( row, L"PackQualityTerm") + L"</td>";
        html += L"</tr>";
        html += L"<tr>";
        html += L"<td >侧唛</td><td ></td>";
        html += L"</tr>";
        html += L"<tr height='72'>";
        html += L"<td>" +dw_list.GetItemString( row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
            dw_list.GetItemString(row, L"QualityTerm") + L"</td>";
        html += L"</tr>";
        html += L"</table>";
        html += L"</body></html>";
        return html;
    }
    int CarGoodsDelete()
    {
        return 1;
    }
    xstring Up(xstring name) {
        xstring str = name.mid(0, 2);
        str = str.toUpper();
        return xaserver::UploadFile(L"product" + str, name + L".jpg", GetHWND(), L"", false);
    }
    int OnAddImage() {
        if (m_customer != L"") return OnAddImageEx();
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        KXMLDOMElement e = dw_list.GetRowElement(row);
        xstring skuid = dw_list.GetItemString( row, L"@guid");
        xstring SKUNo = dw_list.GetItemString( row, L"SKUNo");
        xstring id = ViewObject::GetGuid();
        xstring ret1 = Up(id);
        if (ret1 == L"-1") return -1;
        if (ret1 == L"0")
        {
            alert(L"上传图片失败");
            return -1;
        }
        xstring originfile = ret1;
        xstring ext = originfile.right(7);
        if (ext.find(L".") >= 0)
            ext = ext.mid(ext.find(L".") + 1, 9999);
        else
            ext = L"jpg";
        // å›¾ç‰‡ååŠ å…¥æ•°æ®åº“
        xml x ;
        x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
            L"<ProductPictureID>" + id + L"</ProductPictureID>" +
            L"<OriginFile>" + originfile + L"</OriginFile>" +
            L"<FileExt>" + ext + L"</FileExt>" +
            L"<SKUID>" + skuid + L"</SKUID>" +
            L"<Name>[" + SKUNo.trim() + L"]</Name>" +
            L"<FileName>" + id + L".jpg</FileName>" +
            L"</Item>"
        );
        xaserverarg arg;
        arg.AddArg(L"content", x.xml());
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        dw_list.SetItemString(row, L"pic", L"*");
        dw_list.Redraw();
        //刷新一下界面,显示图片
        OnShowImage(skuid);
        return 1;
    }
    int OnAddImageEx() {
        int row = dwc_list.GetNextSelectRow(1);
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return 0;
        KXMLDOMElement e = dw_list.GetRowElement( row);
        xstring skuid =dw_list.GetItemString( row, L"SKUID");
        xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
        xstring CustomerID = m_customer;
        xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
        xstring id = ViewObject::GetGuid();
        xstring ret1 = Up(id);
        if (ret1 == L"-1") return -1;
        if (ret1 == L"0")
        {
            alert(L"上传图片失败");
            return -1;
        }
        xstring originfile = ret1;
        xstring ext = originfile.right(7);
        if (ext.find(L".") >= 0)
            ext = ext.mid(ext.find(L".") + 1, 9999);
        else
            ext = L"jpg";
        // å›¾ç‰‡ååŠ å…¥æ•°æ®åº“
        xml x;
        x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
            L"<ProductPictureID>" + id + L"</ProductPictureID>" +
            L"<OriginFile>" + originfile + L"</OriginFile>" +
            L"<FileExt>" + ext + L"</FileExt>" +
            L"<SKUID>" + skuid + L"</SKUID>" +
            L"<CustomerItemNo>" + CustomerItemNo + L"</CustomerItemNo>" +
            L"<CustomerID>" + CustomerID + L"</CustomerID>" +
            L"<Name>[" + SKUNo.trim() + L"]</Name>" +
            L"<FileName>" + id + L".jpg</FileName>" +
            L"</Item>"
        );
        xaserverarg arg;
        arg.AddArg(L"content", x.xml());
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        dwc_list.SetItemString(row, L"pic", L"*");
        dwc_list.Redraw();
        //刷新一下界面,显示图片
        OnShowImage(skuid, CustomerItemNo);
        return 1;
    }
    int OnDeleteImageEx()
    {
        int row = dwc_list.GetNextSelectRow(1);
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return 0;
        ximageview im = GetControl(L"im1");
        int index = im.GetSelectIndex();
        int count = im.GetImageCount();
        if (count < 1) return 1;
        KXMLDOMNodeList images = imageElement.selectNodes(L"image");
        int length = images.length();
        if (length < index) return 1;
        int MB_OKCANCEL = 0x00000001;
        int IDOK = 1;
        if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
        xstring id = images.item(index).selectSingleNode(L"@guid").text();
        xml x ;
        xaserverarg arg;
        arg.setNativePointer(arg.CreateInstance());
        xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
        arg.AddArg(L"content", str);
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        if (count == 1)
        {
            dwc_list.SetItemString(row, L"pic", L"");
            dwc_list.Redraw();
        }
        xstring skuid =dw_list.GetItemString( row, L"SKUID");
        xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
        xstring CustomerID = m_customer;
        xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
        OnShowImage(skuid, CustomerItemNo);
        return 1;
    }
    int OnDeleteImage() {
        if (m_customer != L"") return OnDeleteImageEx();
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        ximageview im = GetControl(L"im1");
        int index = im.GetSelectIndex();
        int count = im.GetImageCount();
        if (count < 1) return 1;
        KXMLDOMNodeList images = imageElement.selectNodes(L"image");
        int length = images.length();
        if (length < index) return 1;
        int MB_OKCANCEL = 0x00000001;
        int IDOK = 1;
        if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
        xstring id = images.item(index).selectSingleNode(L"@guid").text();
        xml x;
        xaserverarg arg;
        xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
        arg.AddArg(L"content", str);
        if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text());
            return -1;
        }
        if (count == 1)
        {
            dw_list.SetItemString(row, L"pic", L"");
            dw_list.Redraw();
        }
        KXMLDOMElement e1 = dw_list.GetRowElement(row);
        xstring skuid = e1.getAttribute(L"guid");
        OnShowImage(skuid);
        return 1;
    }
    int OnPreviewImage()
    {
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        KXMLDOMElement e = dw_list.GetRowElement(row);
        //KXMLDOMElement e = dw_list.GetRowElement(row);
        //alert(e.xml);
        xstring id = dw_list.GetItemString( row, L"@guid");
        //alert(id);
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
        xstring categoryid = e1.selectSingleNode(L"@guid").text();
        //alert(categoryid);
        xaserverarg* arg = new xaserverarg;
        arg->AddArg(L"SKUID", id);
        arg->AddArg(L"CategoryID", categoryid);
        OpenWindow(L"dev:xpage[PictureView.Product3.vx]", (LPARAM)arg);
        return 1;
    }
    int ItemMaint()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        //xstring no = e.getAttribute(L"no");
        //if(no==L"") return 1;
        xstring guid = e.getAttribute(L"guid");
        if (guid == L"") return 1;
        /*
        if(no==L"NP0000FS" || no==L"UP0000FS")
        {
            OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
        }else
        {
            int pr = g_xdoc_product;
            OpenWindow(L"dev:xpage[ProductLibraryItemMaint.vx]",pr);
        }
        */
        //KXMLDOMElement ele = g_xdoc_product.getRowElement(L"data/Item", 1);
        //alert(ele.xml);
#ifdef shouldfinished
        int pr = g_xdoc_product;
        OpenWindow(L"dev:xpage[ProductLibraryItemMaint3.vx]", pr);
#endif
        return 1;
    }
    int ItemAdd()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        //alert(e.xml);
        /*xstring no = e.getAttribute(L"no");
        if(no==L"") return 1;
        if(no==L"NP0000FS" || no==L"UP0000FS")
        {
            OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
        }else
        {
            int p = no;
            OpenWindow(L"dev:xpage[SO.autolist.goodslib.add.vx]",p);
        }*/
        xstring guid = e.getAttribute(L"guid");
        if (guid == L"") return 1;
        xaserverarg arg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"guid", e.getAttribute(L"guid"));
        if (name == L"个人产品")
            arg.AddArg(L"FolderID", e.getAttribute(L"guid"));
        else
            arg.AddArg(L"CategoryID", e.getAttribute(L"guid"));
        xstring No = e.getAttribute(L"CategoryNo");
        if (No == L"") No = e.getAttribute(L"no");
        xstring Name = e.getAttribute(L"CName");
        if (Name == L"") Name = e.getAttribute(L"cname");
        arg.AddArg(L"No", No);
        arg.AddArg(L"CName", Name);
        OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", (LPARAM)&arg);
        if (arg.GetArgString(L"data.modify") == L"1")RetrieveData();
        return 1;
    }
    int OnAddFolder()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xaserverarg arg;
        if (hItem != hTopItem)
        {
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring folder = e.getAttribute(L"guid");
            if (folder != L"")
            {
                arg.AddArg(L"parentCategoryID", folder);
                OpenWindow(L"dev:xpage[UserFolderMaint.vx]",(LPARAM)&arg);
                /*if(arg.GetArgString(L"FolderID")!=L"")
                {
                    int child = tv_folder.GetChildItem(hItem);
                    if(!child)
                    {
                        ExpandItem(hItem);
                    }
                    else
                    {
                        KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
                        KXMLDOMElement e2 = e1.cloneNode(0);
                        e2.
                    }
                }*/
            }
        }
        return 1;
    }
    int OnMaintFolder()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xaserverarg arg;
        if (name == L"个人库" && selectname == L"新产品" && tv_folder.GetParentItem(hItem) == hTopItem) return 1;
        if (hItem != hTopItem)
        {
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring folder = e.getAttribute(L"guid");
            if (folder != L"")
            {
                arg.AddArg(L"CategoryID", folder);
                OpenWindow(L"dev:xpage[UserFolderMaint.vx]", (LPARAM)&arg);
                if (arg.GetArgString(L"label") != L"")
                {
                    tv_folder.SetItemLabel(hItem, arg.GetArgString(L"label"));
                }
            }
        }
        return 1;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        int hCursor;
        xstring name = L"";
        if (comdid == L"xmRefresh")
        {
            return RetrieveData();
        }
        else if (comdid == L"xmCarGoodsDelete")
        {
            CarGoodsDelete();
            return 1;
        }
        else if (comdid == L"xmAddFolder")
        {
            return OnAddFolder();
        }
        else if (comdid == L"xmMaintFolder")
        {
            return OnMaintFolder();
        }
        else if (comdid == L"xmClose")
        {
            CloseWindow();
            return 1;
        }
        else if (comdid == L"xmCarGoodsMaint")
        {
#ifdef shouldfinish
            OpenWindow(L"dev:xpage[ShoppingCartProductMaint.vx]", trust(g_xdoc_shoppingcart as int));
#endif
            return 1;
        }
        else if (comdid == L"xmCarMaint")
        {
            OpenWindow(L"dev:xpage[SO.autolist.Shopcar.vx]");
            return 1;
        }
        else if (comdid == L"xmSaleOrder")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", (LPARAM) & carg);
            return 1;
        }
        else if (comdid == L"xmEnquiry")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[Enquiry.Import.vx]", (LPARAM)&carg);
            return 1;
        }
        else if (comdid == L"xmPurchar")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg ;
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[PO.Import.vx]", (LPARAM)&carg);
            return 1;
        }
        else if (comdid == L"xmSearch")
        {
            RetrieveData();
            return 1;
        }
        else if (comdid == L"xmQuote")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml();
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg;
            carg.AddArg(L"content", content);
            OpenWindow(L"dev:xpage[Quote.Import.vx]",  (LPARAM) & carg);
            return 1;
        }
        else if (comdid == L"xmAdd")
        {
            return ItemAdd();
        }
        else if (comdid == L"xmDelete")
        {
            int row = dw_list.GetRow();
            if (row < 1) return 1;
            xstring skuid = dw_list.GetItemString( row, L"@guid");
            xml skuid_x = ViewObject::RetrieveData(L"/sale/data/ProductLibrary3/ProductNumberone", L"SKUID", skuid);
            xstring  skuidEx = skuid_x.text();
            int  skuid1 = skuidEx.toInt();
            if (skuid1)
            {
                if (skuid1 > 0)
                {
                    alert(L"订单已有产品,不允许删除!");
                    return 1;
                }
            }
            DeleteRow(row);
            return 1;
        }
        else if (comdid == L"xmCarAdd")
        {
            HCURSOR hCursor = xutil::SetCursorWait();
            name = xcontrol(GetControl(L"frame:ed_goodscar")).GetText();
            if (name != L"")
            {
                if (ShoppingCartView::AddCar(name) == 1)
                {
                    tv_folder.InsertChildItem(LookupTopFolder(tv_folder.GetSelectedItem()),
                        name, 0, 35);
                }
            }
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        else if (comdid == L"xmMaint")
        {
            return ItemMaint();
        }
        else if (comdid == L"xmAddImage")
        {
            return OnAddImage();
        }
        else if (comdid == L"xmDeleteImage")
        {
            return OnDeleteImage();
        }
        else if (comdid == L"xmPreviewImage")
        {
            return OnPreviewImage();
        }
        else if (comdid == L"xmPropConfigure")
        {
#ifdef shouldfinish
            int r = cast(g_xdoc_product.getData(L"data/Item", L"@guid") as int);
            OpenWindow(L"dev:xpage[Product.ItemProp.Maint.vx]", r);
#endif
            return 1;
        }
        else if (comdid == L"xmRertieve")
        {
            /*
            int hItem1 = tv_folder.GetSelectedItem();
            KXMLDOMElement e2= tv_folder.GetItemData(hItem1);
            xstring no1 = e2.getAttribute(L"no");
            xml x2 = vcontrol::RetrieveData(L"/sale/data/SO/goods/usergoods/listex1",L"parent",no1);
            g_xdoc_product.Retrieve(x2);
            */
            return 1;
        }
        else if (comdid == L"xmToCar")
        {
            name = xcontrol(GetControl(L"frame:cbx_goodscar")).GetText();
            if (name == L"==选择购物车==L")
            {
                alert(L"请选择购物车");
                return 1;
            }
            int xrow = dw_list.GetNextSelectRow(1);
            xstring goodsid = L"";
            xstring html = L"<data>";
            while (xrow > 0)
            {
                KXMLDOMElement e =dw_list.GetRowElement(xrow);
                goodsid = ProductLibraryView::GetElementString(e, L"@guid");
                html += L"<item goodid='" + goodsid + L"' id ='" + ProductLibraryView::GetGuid() + L"'/>";
                xrow = dw_list.GetNextSelectRow(xrow + 1);
            }
            html += L"</data>";
            trace(html);
            if (ShoppingCartView::GoodsImport(name, html) == 1)
                alert(L"添加错误!");
            else
                alert(L"添加成功");
            return 1;
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt, int param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    //查找当前树项的顶级目录
    HTREEITEM LookupTopFolder(HTREEITEM hItem)
    {
        HTREEITEM hRoot = tv_folder.GetRootItem();
        while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
        return hItem;
    }
    //插入产品类项的子项
    int MakeGoodsFolderItem(HTREEITEM hItem, xstring sno)
    {
        xml x = ProductLibraryView::GetTreeChildItems3(sno);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"CName");
            xstring no = e.getAttribute(L"CategoryNo");
            xstring label = no.trim() + L" " + name;
            HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 15);
            xstring child = e.getAttribute(L"Childs");
            if (child == L"")
                tv_folder.SetItemChild(h, 1);
            else if (child != L"0")
                tv_folder.SetItemChild(h, 1);
        }
        return 1;
    }
    //插入新产品目录子项
    int MakeUserGoodsFolderItem(HTREEITEM hItem, xstring sno)
    {
        xml x = ProductLibraryView::GetTreeUserChildItems3(sno);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"CName");
            xstring no = e.getAttribute(L"CategoryNo");
            xstring label = no.trim() + L" " + name;
            HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 15);
            xstring child = e.getAttribute(L"Childs");
            if (child == L"")
                tv_folder.SetItemChild(h, 1);
            else if (child != L"0")
                tv_folder.SetItemChild(h, 1);
        }
        return 1;
    }
    //插入购物车项
    int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
    {
        KXMLDOMNodeList nlist = ele.selectNodes(L"item");
        int len = nlist.length();
        if (len > 0) tv_folder.SetItemChild(hItem, 1);
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int MakeGoodCarFolderItem(HTREEITEM hItem)
    {
        xml x = ShoppingCartView::GetRoleList();
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int ExpandItem(HTREEITEM hItem)
    {
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        HTREEITEM child = tv_folder.GetChildItem(hItem);
        xstring no = L"";
        KXMLDOMElement e;
        if (name == L"公司库" && !child)
        {
            no = L"";
            if (hTopItem != hItem)
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
            }
            else
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
            }
            MakeGoodsFolderItem(hItem, no);
        }
        else if (name == L"个人库" && !child)
        {
            no = L"";
            if (hTopItem != hItem)
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
                MakeUserGoodsFolderItem(hItem, no);
            }
        }
        else if (name == L"购物车" && !child)
        {
            if (hItem == hTopItem)MakeGoodCarFolderItem(hItem);
        }
        return 1;
    }
    //树展开
    int OnTreeExpanding(TEvent * evt, int p)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        return ExpandItem(hItem);
    }
    int ResetAgent(xstring agentAsk)
    {
        if (agentFor != agentAsk)
        {
            agentFor = agentAsk;
            m_agentNode = 0;
            SetAgent();
        }
        return 1;
    }
    HTREEITEM LookupCustomerFolder(HTREEITEM hItem)
    {
        while (true)
        {
            KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
            xstring str = e1.getAttribute(L"no");
            if (str.find(L"Customer:") >= 0) return hItem;
            hItem = tv_folder.GetParentItem(hItem);
            if (hItem == 0) break;
        }
        return 0;
    }
    xstring LookupCustomer(HTREEITEM hItem)
    {
        hItem = LookupCustomerFolder(hItem);
        if (hItem == 0) return L"";
        KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
        xstring str = e1.getAttribute(L"no");
        return str.mid(xstring(L"Customer:").length(), 9999);
    }
    int RetrieveData()
    {
        ximageview im = GetControl(L"im1");
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xcontrol query = GetControl(L"sl_search");
        xstring queryString = query.GetText();
        if (hItem == hTopItem)
        {
            dw_list.Reset();
            dw_list.SetReadOnly(true);
            dw_list.Redraw();
            dwc_list.Reset();
            dwc_list.SetReadOnly(true);
            dwc_list.Redraw();
            im.Reset();
            im.Redraw();
            xshtml xs1 = GetControl(L"html_detail");
            xs1.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
            if (name != L"公司库") return 1;
        }
        //return 1;
        HCURSOR hCursor = xutil::SetCursorWait();
        if (name == L"购物车")
        {
            if (selectname != name)
            {
                KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
                xstring str = e1.getAttribute(L"no");
                alert(str);
                if (str.find(L"Customer:") == 0 || str.find(L"SO:") == 0)
                {
                    m_customer = LookupCustomer(hItem);
                    if (str.find(L"Customer:") == 0)
                        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodscustomerlist");
                    else
                        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodssolist");
                    dwc_list.Reset();
                    dwc_list.SetReadOnly(true);
                    dw_list.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
                }
                else if (e1.getAttribute(L"categoryid") != L"")
                {
                    xstring categoryid = e1.getAttribute(L"categoryid");
                    dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid));
                    dwc_list.SetReadOnly(true);
                    dwc_list.Reset();
                    dw_list.Retrieve(ProductLibraryView::GetMaintList3(categoryid, queryString, L""));
                    dwc_list.Redraw();
                }
                else
                {
                    dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
                    dwc_list.SetReadOnly(true);
                    dwc_list.Reset();
                    dw_list.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
                }
                //dwc_list.PostRetrieve();
                dwc_list.Redraw();
                xshtml xs = GetControl(L"html_detail");
                if (dwc_list.GetRowCount() >= 1)
                {
                    xs.SetContent(makeGoodscarHtml(1));
                    if (m_customer != L"")
                    {
                        xstring skuid =dw_list.GetItemString( 1, L"SKUID");
                        xstring customerItemNo =dw_list.GetItemString( 1, L"CustomerItemNo");
                        OnShowImage(skuid, customerItemNo);
                    }
                }
                else
                {
                    im.Reset();
                    im.Redraw();
                    xs = GetControl(L"html_detail");
                    xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
                }
                xs.Redraw();
            }
        }
        else
        {
            if (name == L"个人库" || name == L"公司库")
            {
                xstring no = L"N000005";
                if (name == L"个人库") no = L"U000005";
                if (hItem != hTopItem)
                {
                    KXMLDOMElement e = tv_folder.GetItemData(hItem);
                    no = e.getAttribute(L"guid");
                }
                else
                    return 1;
                /*    dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(no).GetXmlDoc());
                    dw_list = GetControl(L"dw_list");
                    dw_list.Reset();
                    dw_list.SetReadOnly(true);
                */
                if (name == L"个人库")
                    dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
                else
                {
                    if (queryString != L"")
                    {
                        if (no == L"N000005")
                            dw_list.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
                        else
                            dw_list.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
                    }
                    else
                    {
                        if (no == L"N000005") return 1;
                        dw_list.Retrieve(ProductLibraryView::GetMaintList3(no));
                    }
                }
                //dw_list.PostRetrieve();
                dw_list.Redraw();
                xshtml xs = GetControl(L"html_detail");
                if (dw_list.GetRowCount() > 0)
                {
                    xs.SetContent(makeHtml(1));
                    xstring id = dw_list.GetItemString( 1, L"@guid");
                    OnShowImage(id);
                }
                else
                {
                    im.Reset();
                    im.Redraw();
                    xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
                }
                xs.Redraw();
            }
        }
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    int OnTreeSelChanged(TEvent * evt, int p)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        ximageview im = GetControl(L"im1");
        m_customer = L"";
        //alert(name);
        if (name == L"购物车")
        {
            if (agentFor != L"goodscar")SwitchLayer(L"goodscarsheet", L"sheetframe");
            ResetAgent(L"goodscar");
        }
        else
        {
            if (agentFor != L"goodslib")SwitchLayer(L"goodslibsheet", L"sheetframe");
            if (name == L"个人库")
                ResetAgent(L"userlib");
            else
                ResetAgent(L"goodslib");
        }
        //RetrieveData();
        PostMessage(GetHWND(), 0x401, (WPARAM)L"xmRefresh", 0);
        return 1;
    }
    int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
    {
        KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement& e = * new KXMLDOMElement(nlist.item(i));
            xstring name = e.getAttribute(L"cname");
            xstring sImage = e.getAttribute(L"image");
            int image = 15;
            //if(sImage) image = sImage.toInt();
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            tv_folder.SetItemChild(h, 1);
            ExpandChildFolder(h, e);
        }
        return 1;
    }
    int  InitialFolder()
    {
        KXMLDOMElement xframeElement = GetElement();
        KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
        ExpandChildFolder(0, e);
        return 1;
    }
    int OnViewZoomChange(TEvent* evt, int lParam)
    {
        ximageview im = GetControl(L"im1");
        xcombobox xc = GetControl(L"precent");
        xstring text = xc.GetLBText();
        int p = text.toInt();
        if (p == 0) p = 100;
        im.Preview(p);
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent)&ProductLibrary4Win::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&ProductLibrary4Win::OnSetFocus);
        AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnRowChanged);
        AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnGoodsCarRowChanged);
        AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ProductLibrary4Win::OnTreeExpanding);
        AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ProductLibrary4Win::OnTreeSelChanged);
        AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick);    //checkbox打钩事件
        AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick2);    //checkbox打钩事件
        AttachEvent(L"im1", L"IMG_LDBCLICK", (FEvent)&ProductLibrary4Win::OnImgDBClicked);
        AttachEvent(L"precent", L"CBN_SELCHANGE", (FEvent)&ProductLibrary4Win::OnViewZoomChange);
        return 1;
    }
    int onload()
    {
        agentFor = L"goodslib";
        m_customer = 0;
        OnAttachEvent();
        tv_folder = GetControl(L"tv_folder");
        dw_list = GetControl(L"dw_list");
        dwc_list = GetControl(L"dwc_list");
        InitialFolder();
        dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L""));
        dw_list = GetControl(L"dw_list");
        dw_list.SetReadOnly(true);
        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
        dwc_list.SetReadOnly(true);
        tv_folder.ExpandItem(tv_folder.GetRootItem());
        tv_folder.ItemFocus(tv_folder.GetRootItem());
        if (dw_list.GetRowCount())
        {
            xshtml xs = GetControl(L"html_detail");
            xs.SetContent(makeHtml(1));
        }
        return 1;
    }
    int onloaded()
    {
        SetAgent();
        return 1;
    }
    int OnImgDBClicked(TEvent * evt, int pr)
    {
        IMGNNMHDR& nmtv = *(IMGNNMHDR*)evt->notify.pnmh;
        xstring src = nmtv.path;
        /*if(src.length() > 60)
            src = src.right(44);
        else
            src=src.mid(src.find(L"Thumbs", 0)+6, 50);
        */
        xaserverarg& arg = *new xaserverarg;
        //arg.AddArg(L"src",L"/business/products/chanpin"+src);
        arg.AddArg(L"src", src);
        //win::OpenWindow(L"dev:xpage[BigPicture.vx]",arg);
        int h = openUrl(L"/sale/view/ProductLibrary/xpage/bigpictureview", &arg);
        return 1;
        /*
        xwin x = new xwin;
        x.setNativePointer(h);
        m_winHwnd = x.GetHWND();
        xstring sh = doc.GetXml();
        int p = cast(sh as int);
        win32::SendMessage(m_winHwnd, 0x401, p, 0);
        */
        return 1;
    }
};
jrj/project/business/SystemSettings/LogList.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,217 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) ViewLogList : public xwin
    {
    public:
        xdwgrid    dw_list;
        xoffice     dw_office;
        xcell        dw_cell;
        xnode    m_agentNode;    //Agent Condition
        xstring m_category;
        xstring argStr;
        xstring    searchStr;
    public:
        ViewLogList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
    public:
        static ViewLogList* CreateInstance(void* implPtr, void* hWnd)
        {
            ViewLogList* pWin = new ViewLogList(implPtr, (HWND)hWnd);
            return pWin;
        }
        int SetAgent()
        {
            xstring xfNodeAgentArea  = L"agentarea";
            xnode anode = GetAgentNode(xfNodeAgentArea);
            if(m_agentNode)
            {
                SetAgentNode (anode,m_agentNode);
            }
            else
            {
                KXMLDOMElement xframeElement =  GetElement();
                KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring s = agent.xml();
                    m_agentNode =  SetAgentNode (anode,s);
                }
            }
            return 1;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            SetAgent();
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            HCURSOR hCursor =  0;
             if(comdid==L"xmQuery")
            {
                        xaserverarg ar ;
                        ar.AddArg(L"argurl",L"/sale/view/Total3/arg/LogListItem");
                        if(argStr !=L"")
                            ar.AddArg(L"arg",argStr);
                        OpenWindow(L"dev:xpage[view.total.arg.vx]",ar);
                        xstring arstr = ar.GetArgString(L"arg");
                        if(arstr != L"" && ar.GetArgString(L"action")==L"ok")
                        {
                            argStr = arstr;
                            hCursor = xutil::SetCursorWait();
                            OnRetrieve(L"/sale/data/Total3/total/GDNTotal/Item/LogList",argStr);
                            xutil::RestoreCursor(hCursor);
                        }
                    else
                    {
                        argStr=L"";
                        OnRetrieve(L"/sale/data/Total3/total/GDNTotal/Item/LogList",argStr);
                    }
                return 1;
             }
                     if(comdid==L"xmAnalysis")
            {
                hCursor = xutil::SetCursorWait();
                xstring str = dw_list.DataAnalysis(L"");
                xaserverarg arg;
                ;
                arg.AddArg(L"html", str);
                OpenWindow(L"dev:xpage[data.vanalysis.vx]", arg);
                xutil::RestoreCursor(hCursor);
                return 1;
             }
                     if(comdid==L"xmSearch") return OnSearch();
            return 0;
        }
        int OnSearch()
        {
            xaserverarg arg;
            ;
            arg.AddArg(L"text", searchStr);
            OpenWindow(L"dev:xpage[search.dialog.vx]", arg);
            xstring str = arg.GetArgString(L"text");
            if(str != searchStr)
            {
                searchStr = str;
                dw_list.Filter(L"*",searchStr);
                return 1;
            }
            return 1;
        }
        int OnCombboChanged(TEvent* evt, LPARAM lParam)
        {
            int h = xcombobox::GetCurSel(evt->command.hCtrl);
            if(h > -1)
            {
                HCURSOR hCursor = xutil::SetCursorWait();
                KXMLDOMElement e = xcombobox::GetItemData(evt->command.hCtrl, h);
                PostMessage(GetHWND(),0x401,(LPARAM)L"xmQuery",0);
                //OnCmdDispatch(L"xmQuery");
                xutil::RestoreCursor(hCursor);
            }
            return 1;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnDWClick(TEvent* evt, int p)
        {
            DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
            xstring value = hdr.data;
            xstring colname = hdr.colname;
            int row = hdr.row;
            if(row < 1) return 1;
            return 1;
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&ViewLogList::OnXCommand);
            //获取焦点事件,用于重置工具条
            AttachEvent(L"WM_SETFOCUS", (FEvent)&ViewLogList::OnSetFocus);
            AttachEvent(L"cb_report",L"CBN_SELCHANGE", (FEvent)&ViewLogList::OnCombboChanged);
            AttachEvent(L"dw_report",L"DWV_CLICKED", (FEvent)&ViewLogList::OnDWClick);
            return 1;
        }
        int  OnRetrieve(xstring dataurl, xstring argstr)
        {
            dw_list.Reset();
            xml x ;
            xaserverarg arg ;
            ;
            arg.AddArg(L"arg",argstr);
            //alert(argstr);
            if (xurl::get(dataurl,arg.GetString(),x)!=1)
            {
                //alert(x.xml());
                trace(x.text());
                dw_list.Redraw();
                return -1;
            }
            //alert(x.xml());
            dw_list.Retrieve(x);
            dw_list.Redraw();
            dw_list.SetReadOnly(true);
            return 1;
        }
        int onload()
        {
            dw_list = GetControl(L"dw_report");
            dw_office  = GetControl(L"dw_office");
            dw_cell = GetControl(L"dw_cell");
            dw_list.openUrl(L"/sale/view/Total3/template/business/gdn/LogList/ship/full");
            argStr =L"";
            xcombobox xc = GetControl(L"cb_report");
            OnAttachEvent();
            return 1;
        }
        int onloaded()
        {
            SetAgent();
            OnCmdDispatch(L"xmQuery");
            return 1;
        }
    };
jrj/project/business/SystemSettings/Organization_A.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,513 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
class __declspec(dllexport) SO3list : public listwin
{
public:
    string m_sType; //树选中的类型
    string m_sTypeTxt; //树选中的数据
    string urlTree;
    string myDataUrl;
    string rows;
    xcombobox ddlb_1;
    xcombobox cbx_datashow;
    int changeddlb;
    xtreeview tv_folder;
    xdwgrid dw_goods;
    xdwgrid dw_source;
public:
    SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
public:
    static SO3list* CreateInstance(void* implPtr, void* hWnd)
    {
        SO3list* pWin = new SO3list(implPtr, (HWND)hWnd);
        return pWin;
    }
    //process tree
    //查找当前树项的顶级目录
    HTREEITEM LookupTopFolder(HTREEITEM hItem)
    {
        HTREEITEM hRoot = tv_folder.GetRootItem();
        while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
        return hItem;
    }
    int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
    {
        KXMLDOMNodeList nlist = ele.selectNodes(L"item");
        int len = nlist.length();
        if (len > 0) tv_folder.SetItemChild(hItem, 1);
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int ExpandFolderItem(HTREEITEM hItem, string no)
    {
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    //树展开
    int OnTreeExpanding(TEvent* evt, int p)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        string name = tv_folder.GetItemLabel(hTopItem);
        HTREEITEM child = tv_folder.GetChildItem(hItem);
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
        return 1;
    }
    //展开子文件
    int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
    {
        KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute(L"name");
            xstring sImage = e.getAttribute(L"image");
            xstring child = e.getAttribute(L"child");
            int image = 15;
            if (sImage) image = sImage.toInt();
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            if (child != L"no") tv_folder.SetItemChild(h, 1);
            //ExpandChildFolder(h, e);
        }
        return 1;
    }
    //初始化文件夹
    int  InitialFolder()
    {
        KXMLDOMElement xframeElement = GetElement();
        KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
        if (e)
            ExpandChildFolder(0, e);
        return 1;
    }
    int OnTreeSelChanged(TEvent* evt, LPARAM p)
    {
        if (changeddlb) return 1;
        return OnPreRetrieve();
    }
    int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
    {
        if (updateItem == L"del")
        {
            int DelRow = dw_list.GetRow();
            dw_list.DeleteRow(DelRow);
            return 1;
        }
        else if (updateItem == L"setstate")
        {
            int row = dw_list.GetRow();
            if (row < 1) return 1;
            KXMLDOMElement ele = dw_list.GetRowElement(row);
            string id = GetEntityIDName(1);
            string entity = ele.selectSingleNode(id).text();
            //trace(entity);
            SetAgent(L"list", entity);
            if (arg.GetArgString(L"state") != L"")
                //this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state"));
                dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
            if (arg.GetArgString(L"billstatus") != L"")
            {
                xstring billstatus = arg.GetArgString(L"billstatus");
                xstring statusName = GetBillStatusName(billstatus);
                dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
                dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
            }
            dw_list.Redraw();
        }
        return 1;
    }
    bool IsEmptyQueryStr(string queryStr)
    {
        if (queryStr == L"") return true;
        if (queryStr == L"<items join='and'/>") return true;
        if (queryStr == L"<items join=\"and\"/>") return true;
        //trace(queryStr);
        return false;
    }
    //检索
    int OnPreRetrieve()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        if (!hItem) return 1;
        HCURSOR hCursor = xutil::SetCursorWait();
        KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
        string no = e1.getAttribute(L"no");
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
        if (x)
        {
            dw_list.Retrieve(x);
            dw_list.Redraw();
        }
        else
        {
            dw_list.Reset();
            dw_list.Redraw();
            dw_goods.Reset();
            dw_goods.Redraw();
        }
        dw_list.SetReadOnly(true);
        xutil::RestoreCursor(hCursor);
        return 1;
        /*
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //第几页
        arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //每页数量
        arg.AddArg(L"QueryTxt", m_QueryTxt,""); //查询条件
        arg.AddArg(L"sType",m_sType,"");
        arg.AddArg(L"sTypeTxt",m_sTypeTxt,"");
        xml x =  ViewObject::MakeXml();
        KXMLDOMElement   n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]");
        if(n)
        {
            KXMLDOMElement e = n;
            if(e.selectSingleNode(L"@dataUrl"))
            {
                string dataUrl = e.selectSingleNode(L"@dataUrl").text;
                if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl;
                getUrl(dataUrl, arg.GetString(), x);
                KXMLDOMElement ele=x.GetXmlDoc().documentElement;
                if(dw_pages.ptr_native_)
                {
                    if(ele.selectSingleNode(L"@TotalPage"))
                    {
                        string s=ele.selectSingleNode(L"@TotalPage").text; //总数量
                        dw_pages.SetMaxPage(s.toInt());
                    }
                }
                dw_list.Retrieve(x);
                dw_list.Redraw();
                dw_list.SetReadOnly(true);
            }
            else
            {
                SetEntityData(arg);
            }
        }
        else
        {
            SetEntityData(arg);
        }
        */
    }
    //历史数据
    int Onhistroydata()
    {
        int row = dw_list.GetNextSelectRow(1);
        if (row > 0)
        {
            KXMLDOMElement e = dw_list.GetRowElement(row);
            xaserverarg& arg = * new xaserverarg;
            string sCustomerID = e.selectSingleNode(L"CustomerID").text();
            arg.AddArg(L"CustomerID", sCustomerID, L"");
            string sCustomerName = e.selectSingleNode(L"CustomerName").text();
            arg.AddArg(L"CustomerName", sCustomerName, L"");
            arg.AddArg(L"EntityName", GetEntityName(1), L"");
            arg.AddArg(L"EntityID", GetEntityID(1), L"");
            openUrl(L"/sale/view/SO/xpage/histroydata", &arg);
        }
        return 1;
    }
    //xcombobox下拉
    int OnSelectDdlb(TEvent* evt, LPARAM p)
    {
        changeddlb = 1;
        HWND wid = ddlb_1.GetHWND();
        int CB_GETCURSEL = 0x0147;
        int nIndex =SendMessage(wid, CB_GETCURSEL, 0, 0);
        KXMLDOMElement e = ddlb_1.GetElement();
        KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
        string no = e2.selectSingleNode(L"@element").text();
        HTREEITEM hItem = tv_folder.GetRootItem();
        while (tv_folder.GetChildItem(hItem))
            tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
        ExpandFolderItem(hItem, no);
        changeddlb = 0;
        return 1;
    }
    int OnSelectDataShowDdlb(TEvent* evt, LPARAM p)
    {
        HWND wid = cbx_datashow.GetHWND();
        int CB_GETCURSEL = 0x0147;
        int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0);
        KXMLDOMElement e = cbx_datashow.GetElement();
        KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
        rows = e2.selectSingleNode(L"@rows").text();
        OnPreRetrieve();
        return 1;
    }
    int PreOnCmdDispatch(xstring comdid)
    {
        if (comdid == L"action:bill.new")
        {
            xstring s = publiccode::GetUser().id;
            xstring no = publiccode::GetUser().no;
            if (no != L"00303" && no != L"admin")
            {
                KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
                if (supplier_x)
                {
                    if ((xstring)supplier_x.text() != L"业务员")
                    {
                        alert(L"当前角色不是业务员不能新增单子,请重新选择角色");
                        return 0;
                    }
                }
            }
        }
        if (comdid == L"action:bill.annex")
        {
            xstring deptname = publiccode::GetUser().deptname;
            if (deptname == L"采购部")
            {
                return 1;
            }
            int row = dw_list.GetRow();
            if (row < 1) return 1;
            xstring guid = dw_list.GetItemString(row, L"SOID");
            xaserverarg& arg = * new xaserverarg();
            if (guid.length() <= 0)return 1;
            arg.AddArg(L"entityid", guid);
            arg.AddArg(L"Type", L"Y");
            OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg);
            return 0;
        }
        if (comdid == L"action:bill.histroydata") return Onhistroydata();
        else if (comdid == L"action:bill.refresh")
        {
            changeddlb = 1;
            HTREEITEM RItem = tv_folder.GetRootItem();
            while (tv_folder.GetChildItem(RItem))
                tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
            ExpandFolderItem(RItem, L"Category:Customer");
            tv_folder.ExpandItem(RItem);
            tv_folder.ItemFocus(RItem);
            changeddlb = 0;
            return OnPreRetrieve();
        }
        if (comdid == L"action:bill.saveas")
        {
            dw_list.SaveAs(L"");
            return 1;
        }
        if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
        return 1;
    }
    int OnSourceRemark()
    {
        xstring name = L"外销合同";
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
        KXMLDOMNodeList items = x.selectNodes(L"data/Item");
        KXMLDOMNode t = items.item(0);
        xstring Content = L"";
        if (t.selectSingleNode(L"Content"))
        {
            Content = t.selectSingleNode(L"Content").text();
        }
        xaserverarg& arg = *new xaserverarg;
        arg.AddArg(L"value", Content);
        OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg);
        return 1;
    }
    int OnRowChanged(TEvent* evt, LPARAM p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        if (row < 1) return 1;
        //fixed one event only one process
        listwin::OnRowChanged(evt, p);
        HCURSOR     hCursor = xutil::SetCursorWait();
        xstring SONo = dw_list.GetItemString(row, L"SONo");
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo);
        if (x)
            dw_goods.Retrieve(x);
        else
            dw_goods.Reset();
        dw_goods.Redraw();
        dw_goods.SetReadOnly(true);
        x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo);
        if (x)
            dw_source.Retrieve(x);
        else
            dw_source.Reset();
        dw_source.Redraw();
        dw_source.SetReadOnly(true);
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    int AttachListon()
    {
        AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //树选择
        AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//绑定行更改触发事件OnRowChanged
        //AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked);
        AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//绑定下拉框更改触发事件OnSelectDdlb
        AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//绑定选择数据显示下拉列表事件OnSelectDataShowDdlb
        return 1;
    }
    int onload()
    {
        changeddlb = 0;
        listwin::onload();
        ddlb_1 = GetControl(L"cbx_1");
        cbx_datashow = GetControl(L"cbx_datashow");
        dw_goods = GetControl(L"dw_goods");
        dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item");
        dw_source = GetControl(L"dw_source");
        dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem");
        dw_goods.SetColumnState(L"ItemID", false);
        dw_goods.SetColumnState(L"LineType", false);
        dw_goods.SetColumnState(L"Brand", false);
        dw_goods.SetColumnState(L"Assortment", false);
        dw_goods.SetColumnState(L"ClassifyID", false);
        dw_goods.SetColumnState(L"UnitFreight", false);
        //dw_goods.SetColumnState(L"CName",false);//隐藏列
        dw_goods.SetColumnState(L"Brand", false);
        dw_goods.SetColumnState(L"SKUNo", false);
        dw_goods.SetColumnState(L"SOLineNo", false);
        dw_goods.SetColumnState(L"CustomerPONo", false);
        dw_goods.SetColumnState(L"ScheduleShipDate", false);
        dw_goods.SetColumnState(L"PackTechNote", false);
        dw_goods.SetColumnState(L"EnquiryPriceListID", false);
        dw_goods.SetColumnState(L"Submitter", false);
        dw_goods.SetColumnState(L"POSupplierID", false);
        dw_goods.SetColumnState(L"QuoteLineID", false);
        dw_list.SetColumnState(L"CreatorID", false);
        dw_list.SetColumnState(L"SOID", false);
        string groupname = publiccode::GetUser().groupname;
        if (groupname == L"采购小组")
        {
            dw_list.SetColumnState(L"USDAmount", false);
            dw_list.SetColumnState(L"RMBAmount", false);
            dw_goods.SetColumnState(L"UnitPrice", false);
            dw_goods.SetColumnState(L"Amount", false);
            dw_goods.SetColumnState(L"UnitCommPrice", false);
            dw_goods.SetColumnState(L"CommissionRate", false);
            dw_source.SetColumnState(L"UnitPrice", false);
            dw_source.SetColumnState(L"Amount", false);
            dw_source.SetColumnState(L"FOBAmount", false);
            dw_source.SetColumnState(L"BuyUnitPrice", false);
            dw_source.SetColumnState(L"BuyAmount", false);
            dw_source.SetColumnState(L"CostRate", false);
        }
        rows = L"500";
        myDataUrl = L"/sale/data/SaleOrder/folder/list";
        urlTree = L"/sale/data/SaleOrder/folder";
        tv_folder = GetControl(L"tv_folder");
        tv_folder.SetLineAtRoot(true);
        InitialFolder();
        return 1;
    }
    int onloaded()
    {
        listwin::onloaded();
        //attach my control event
        AttachListon();
        dw_list.SetColumnState(L"SOID", false);
        HTREEITEM hItem = tv_folder.GetRootItem();
        ExpandFolderItem(hItem, L"Category:Customer");
        tv_folder.ExpandItem(hItem);
        //tv_folder.ItemFocus(tv_folder.GetChildItem(hItem));
        tv_folder.ItemFocus(hItem);
        return -1;
    }
    int ProcessUsedArg(xaserverarg arg)
    {
        HTREEITEM hItem = tv_folder.GetCaretItem();
        if (hItem ) return 1;
        KXMLDOMElement e =  tv_folder.GetItemData(hItem);
        xstring  no = e.getAttribute(L"no");
        if (no.find(L"Customer:") >= 0)
        {
            arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
            xstring name = e.getAttribute(L"name");
            if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
            arg.AddArg(L"CustomerName", name);
        }
        return 1;
    }
};
jrj/project/business/SystemSettings/ProcessManagement_A.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,513 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
class __declspec(dllexport) SO3list : public listwin
{
public:
    string m_sType; //树选中的类型
    string m_sTypeTxt; //树选中的数据
    string urlTree;
    string myDataUrl;
    string rows;
    xcombobox ddlb_1;
    xcombobox cbx_datashow;
    int changeddlb;
    xtreeview tv_folder;
    xdwgrid dw_goods;
    xdwgrid dw_source;
public:
    SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
public:
    static SO3list* CreateInstance(void* implPtr, void* hWnd)
    {
        SO3list* pWin = new SO3list(implPtr, (HWND)hWnd);
        return pWin;
    }
    //process tree
    //查找当前树项的顶级目录
    HTREEITEM LookupTopFolder(HTREEITEM hItem)
    {
        HTREEITEM hRoot = tv_folder.GetRootItem();
        while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
        return hItem;
    }
    int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
    {
        KXMLDOMNodeList nlist = ele.selectNodes(L"item");
        int len = nlist.length();
        if (len > 0) tv_folder.SetItemChild(hItem, 1);
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int ExpandFolderItem(HTREEITEM hItem, string no)
    {
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    //树展开
    int OnTreeExpanding(TEvent* evt, int p)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        HTREEITEM hTopItem = LookupTopFolder(hItem);
        string name = tv_folder.GetItemLabel(hTopItem);
        HTREEITEM child = tv_folder.GetChildItem(hItem);
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
        return 1;
    }
    //展开子文件
    int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
    {
        KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute(L"name");
            xstring sImage = e.getAttribute(L"image");
            xstring child = e.getAttribute(L"child");
            int image = 15;
            if (sImage) image = sImage.toInt();
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
            if (child != L"no") tv_folder.SetItemChild(h, 1);
            //ExpandChildFolder(h, e);
        }
        return 1;
    }
    //初始化文件夹
    int  InitialFolder()
    {
        KXMLDOMElement xframeElement = GetElement();
        KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
        if (e)
            ExpandChildFolder(0, e);
        return 1;
    }
    int OnTreeSelChanged(TEvent* evt, LPARAM p)
    {
        if (changeddlb) return 1;
        return OnPreRetrieve();
    }
    int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
    {
        if (updateItem == L"del")
        {
            int DelRow = dw_list.GetRow();
            dw_list.DeleteRow(DelRow);
            return 1;
        }
        else if (updateItem == L"setstate")
        {
            int row = dw_list.GetRow();
            if (row < 1) return 1;
            KXMLDOMElement ele = dw_list.GetRowElement(row);
            string id = GetEntityIDName(1);
            string entity = ele.selectSingleNode(id).text();
            //trace(entity);
            SetAgent(L"list", entity);
            if (arg.GetArgString(L"state") != L"")
                //this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state"));
                dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
            if (arg.GetArgString(L"billstatus") != L"")
            {
                xstring billstatus = arg.GetArgString(L"billstatus");
                xstring statusName = GetBillStatusName(billstatus);
                dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
                dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
            }
            dw_list.Redraw();
        }
        return 1;
    }
    bool IsEmptyQueryStr(string queryStr)
    {
        if (queryStr == L"") return true;
        if (queryStr == L"<items join='and'/>") return true;
        if (queryStr == L"<items join=\"and\"/>") return true;
        //trace(queryStr);
        return false;
    }
    //检索
    int OnPreRetrieve()
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        if (!hItem) return 1;
        HCURSOR hCursor = xutil::SetCursorWait();
        KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
        string no = e1.getAttribute(L"no");
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
        if (x)
        {
            dw_list.Retrieve(x);
            dw_list.Redraw();
        }
        else
        {
            dw_list.Reset();
            dw_list.Redraw();
            dw_goods.Reset();
            dw_goods.Redraw();
        }
        dw_list.SetReadOnly(true);
        xutil::RestoreCursor(hCursor);
        return 1;
        /*
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //第几页
        arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //每页数量
        arg.AddArg(L"QueryTxt", m_QueryTxt,""); //查询条件
        arg.AddArg(L"sType",m_sType,"");
        arg.AddArg(L"sTypeTxt",m_sTypeTxt,"");
        xml x =  ViewObject::MakeXml();
        KXMLDOMElement   n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]");
        if(n)
        {
            KXMLDOMElement e = n;
            if(e.selectSingleNode(L"@dataUrl"))
            {
                string dataUrl = e.selectSingleNode(L"@dataUrl").text;
                if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl;
                getUrl(dataUrl, arg.GetString(), x);
                KXMLDOMElement ele=x.GetXmlDoc().documentElement;
                if(dw_pages.ptr_native_)
                {
                    if(ele.selectSingleNode(L"@TotalPage"))
                    {
                        string s=ele.selectSingleNode(L"@TotalPage").text; //总数量
                        dw_pages.SetMaxPage(s.toInt());
                    }
                }
                dw_list.Retrieve(x);
                dw_list.Redraw();
                dw_list.SetReadOnly(true);
            }
            else
            {
                SetEntityData(arg);
            }
        }
        else
        {
            SetEntityData(arg);
        }
        */
    }
    //历史数据
    int Onhistroydata()
    {
        int row = dw_list.GetNextSelectRow(1);
        if (row > 0)
        {
            KXMLDOMElement e = dw_list.GetRowElement(row);
            xaserverarg& arg = * new xaserverarg;
            string sCustomerID = e.selectSingleNode(L"CustomerID").text();
            arg.AddArg(L"CustomerID", sCustomerID, L"");
            string sCustomerName = e.selectSingleNode(L"CustomerName").text();
            arg.AddArg(L"CustomerName", sCustomerName, L"");
            arg.AddArg(L"EntityName", GetEntityName(1), L"");
            arg.AddArg(L"EntityID", GetEntityID(1), L"");
            openUrl(L"/sale/view/SO/xpage/histroydata", &arg);
        }
        return 1;
    }
    //xcombobox下拉
    int OnSelectDdlb(TEvent* evt, LPARAM p)
    {
        changeddlb = 1;
        HWND wid = ddlb_1.GetHWND();
        int CB_GETCURSEL = 0x0147;
        int nIndex =SendMessage(wid, CB_GETCURSEL, 0, 0);
        KXMLDOMElement e = ddlb_1.GetElement();
        KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
        string no = e2.selectSingleNode(L"@element").text();
        HTREEITEM hItem = tv_folder.GetRootItem();
        while (tv_folder.GetChildItem(hItem))
            tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
        ExpandFolderItem(hItem, no);
        changeddlb = 0;
        return 1;
    }
    int OnSelectDataShowDdlb(TEvent* evt, LPARAM p)
    {
        HWND wid = cbx_datashow.GetHWND();
        int CB_GETCURSEL = 0x0147;
        int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0);
        KXMLDOMElement e = cbx_datashow.GetElement();
        KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
        rows = e2.selectSingleNode(L"@rows").text();
        OnPreRetrieve();
        return 1;
    }
    int PreOnCmdDispatch(xstring comdid)
    {
        if (comdid == L"action:bill.new")
        {
            xstring s = publiccode::GetUser().id;
            xstring no = publiccode::GetUser().no;
            if (no != L"00303" && no != L"admin")
            {
                KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
                if (supplier_x)
                {
                    if ((xstring)supplier_x.text() != L"业务员")
                    {
                        alert(L"当前角色不是业务员不能新增单子,请重新选择角色");
                        return 0;
                    }
                }
            }
        }
        if (comdid == L"action:bill.annex")
        {
            xstring deptname = publiccode::GetUser().deptname;
            if (deptname == L"采购部")
            {
                return 1;
            }
            int row = dw_list.GetRow();
            if (row < 1) return 1;
            xstring guid = dw_list.GetItemString(row, L"SOID");
            xaserverarg& arg = * new xaserverarg();
            if (guid.length() <= 0)return 1;
            arg.AddArg(L"entityid", guid);
            arg.AddArg(L"Type", L"Y");
            OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg);
            return 0;
        }
        if (comdid == L"action:bill.histroydata") return Onhistroydata();
        else if (comdid == L"action:bill.refresh")
        {
            changeddlb = 1;
            HTREEITEM RItem = tv_folder.GetRootItem();
            while (tv_folder.GetChildItem(RItem))
                tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
            ExpandFolderItem(RItem, L"Category:Customer");
            tv_folder.ExpandItem(RItem);
            tv_folder.ItemFocus(RItem);
            changeddlb = 0;
            return OnPreRetrieve();
        }
        if (comdid == L"action:bill.saveas")
        {
            dw_list.SaveAs(L"");
            return 1;
        }
        if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
        return 1;
    }
    int OnSourceRemark()
    {
        xstring name = L"外销合同";
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
        KXMLDOMNodeList items = x.selectNodes(L"data/Item");
        KXMLDOMNode t = items.item(0);
        xstring Content = L"";
        if (t.selectSingleNode(L"Content"))
        {
            Content = t.selectSingleNode(L"Content").text();
        }
        xaserverarg& arg = *new xaserverarg;
        arg.AddArg(L"value", Content);
        OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg);
        return 1;
    }
    int OnRowChanged(TEvent* evt, LPARAM p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        if (row < 1) return 1;
        //fixed one event only one process
        listwin::OnRowChanged(evt, p);
        HCURSOR     hCursor = xutil::SetCursorWait();
        xstring SONo = dw_list.GetItemString(row, L"SONo");
        KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo);
        if (x)
            dw_goods.Retrieve(x);
        else
            dw_goods.Reset();
        dw_goods.Redraw();
        dw_goods.SetReadOnly(true);
        x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo);
        if (x)
            dw_source.Retrieve(x);
        else
            dw_source.Reset();
        dw_source.Redraw();
        dw_source.SetReadOnly(true);
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    int AttachListon()
    {
        AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //树选择
        AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//绑定行更改触发事件OnRowChanged
        //AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked);
        AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//绑定下拉框更改触发事件OnSelectDdlb
        AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//绑定选择数据显示下拉列表事件OnSelectDataShowDdlb
        return 1;
    }
    int onload()
    {
        changeddlb = 0;
        listwin::onload();
        ddlb_1 = GetControl(L"cbx_1");
        cbx_datashow = GetControl(L"cbx_datashow");
        dw_goods = GetControl(L"dw_goods");
        dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item");
        dw_source = GetControl(L"dw_source");
        dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem");
        dw_goods.SetColumnState(L"ItemID", false);
        dw_goods.SetColumnState(L"LineType", false);
        dw_goods.SetColumnState(L"Brand", false);
        dw_goods.SetColumnState(L"Assortment", false);
        dw_goods.SetColumnState(L"ClassifyID", false);
        dw_goods.SetColumnState(L"UnitFreight", false);
        //dw_goods.SetColumnState(L"CName",false);//隐藏列
        dw_goods.SetColumnState(L"Brand", false);
        dw_goods.SetColumnState(L"SKUNo", false);
        dw_goods.SetColumnState(L"SOLineNo", false);
        dw_goods.SetColumnState(L"CustomerPONo", false);
        dw_goods.SetColumnState(L"ScheduleShipDate", false);
        dw_goods.SetColumnState(L"PackTechNote", false);
        dw_goods.SetColumnState(L"EnquiryPriceListID", false);
        dw_goods.SetColumnState(L"Submitter", false);
        dw_goods.SetColumnState(L"POSupplierID", false);
        dw_goods.SetColumnState(L"QuoteLineID", false);
        dw_list.SetColumnState(L"CreatorID", false);
        dw_list.SetColumnState(L"SOID", false);
        string groupname = publiccode::GetUser().groupname;
        if (groupname == L"采购小组")
        {
            dw_list.SetColumnState(L"USDAmount", false);
            dw_list.SetColumnState(L"RMBAmount", false);
            dw_goods.SetColumnState(L"UnitPrice", false);
            dw_goods.SetColumnState(L"Amount", false);
            dw_goods.SetColumnState(L"UnitCommPrice", false);
            dw_goods.SetColumnState(L"CommissionRate", false);
            dw_source.SetColumnState(L"UnitPrice", false);
            dw_source.SetColumnState(L"Amount", false);
            dw_source.SetColumnState(L"FOBAmount", false);
            dw_source.SetColumnState(L"BuyUnitPrice", false);
            dw_source.SetColumnState(L"BuyAmount", false);
            dw_source.SetColumnState(L"CostRate", false);
        }
        rows = L"500";
        myDataUrl = L"/sale/data/SaleOrder/folder/list";
        urlTree = L"/sale/data/SaleOrder/folder";
        tv_folder = GetControl(L"tv_folder");
        tv_folder.SetLineAtRoot(true);
        InitialFolder();
        return 1;
    }
    int onloaded()
    {
        listwin::onloaded();
        //attach my control event
        AttachListon();
        dw_list.SetColumnState(L"SOID", false);
        HTREEITEM hItem = tv_folder.GetRootItem();
        ExpandFolderItem(hItem, L"Category:Customer");
        tv_folder.ExpandItem(hItem);
        //tv_folder.ItemFocus(tv_folder.GetChildItem(hItem));
        tv_folder.ItemFocus(hItem);
        return -1;
    }
    int ProcessUsedArg(xaserverarg arg)
    {
        HTREEITEM hItem = tv_folder.GetCaretItem();
        if (hItem ) return 1;
        KXMLDOMElement e =  tv_folder.GetItemData(hItem);
        xstring  no = e.getAttribute(L"no");
        if (no.find(L"Customer:") >= 0)
        {
            arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
            xstring name = e.getAttribute(L"name");
            if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
            arg.AddArg(L"CustomerName", name);
        }
        return 1;
    }
};
jrj/project/business/SystemSettings/Resource.select.data.config.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
use "dev:code[Data.resource.config.vx]"
unit vbusiness.vpage
[
    resourceselectRole is extend DataRConfig;
    about resourceselectRole
    [
        field:
        method:
        [
            int ForChild()
            {
                this.dw_list.SetReadOnly(true);
                return 0;
            }
            int OnSelectAll()
            {
                if(this.dw_list.GetRowCount() > 0 )
                    this.dw_list.SelectRow(1,true);
                this.dw_list.SelectRow(0,true);
                this.dw_list.Redraw();
                return 1;
            }
            int OnSelectNo()
            {
                this.dw_list.SelectRow(0,false);
                this.dw_list.Redraw();
                return 1;
            }
            int OnOk()
            {
                xdwgrid__ dw_param = this.GetParam();
                if (dw_param)
                {
                    int row = this.dw_list.GetNextSelectRow(1);
                    int dw_row = dw_param.GetRowCount();
                    while (row>0){
                        msxml::IXMLDOMElement e = this.dw_list.GetRowElement(row);
                        string scetegory = e.selectSingleNode("cetegory").text;
                        string sResource = e.selectSingleNode("resource").text;
                        string sName = e.selectSingleNode("name").text;
                        string sResConfigID = e.selectSingleNode("ResConfigID").text;
                        dw_row += 1;
                        dw_param.InsertRow(-1);
                        dw_param.SetItemString(dw_row,"cetegory",scetegory);
                        dw_param.SetItemString(dw_row,"resource",sResource);
                        dw_param.SetItemString(dw_row,"name",sName);
                        dw_param.SetItemString(dw_row,"ResConfigID",sResConfigID);
                        this.dw_list.SelectRow(row,false);
                        row = this.dw_list.GetNextSelectRow(row + 1);
                    }
                    this.dw_list.Redraw();
                }
                CloseWindow();
                return 1;
            }
            int OnCancel()
            {
                win__::CloseWindow();
                return 1;
            }
            int OnCmdDispatch(string comdid)
            {
                if (comdid=="SelectAll") OnSelectAll();
                else if (comdid=="SelectNo") OnSelectNo();
                else if (comdid=="Ok") OnOk();
                else if (comdid=="Cancel") OnCancel();
                return 0;
            }
            int OnXCommand(ref TXCommandEvent evt,int p)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int onload()
            {
                DataRConfig::onload();
                this.dw_list.SetSelectionMode(3);
                AttachEvent("WM_XCOMMAND",OnXCommand);
            }
        ]
    ]
]
jrj/project/business/SystemSettings/Role.config.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,548 @@
use "lang.vl"
use "win.vl"
use "treeview.vm"
use "dev:vm[xutil.vm]"
use "dev:vm[xdwtable.vm]"
use "dev:vm[xdwgrid.vm]"
use "sys.base.vl"
use "dev:vm[xcell.vm]"
unit vbusiness.vpage
[
    Roleconfig is extend TProject;
    about Roleconfig
    [
        field:
        method:
        [
            treeview__    tv_menu;
            xdwtable__ dw_list;
            xdwgrid__ dw_param;
            xdwgrid__ dw_role;
            string m_status;
            int SetAgent()
            {
                string xfNodeAgentArea  = "agentarea";
                xnode__ anode = new xnode__;
                anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
                var xframeElement =  win__::GetElement();
                var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]");
                if(agent)
                {
                    string s = agent.xml+"";
                    SetAgentNodeContent (anode,s);
                }
                return 1;
            }
            int createTree(string id, int parentItem)
            {
                if(treeview__::GetChildItem(tv_menu.GetId(), parentItem) > 0) return 0;
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("pid",id);
                //if(xaserver__::ExecXQuery(GetServerUrl(),"[leftFrame.xq]",arg.GetString(),x)!=1)
                //if(url::get(m_iface+"/pref/tree",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/tree",arg.GetString(),x)!=1)
                {
                    trace(x.GetXml());
                    return -1;
                }
                //trace(x.GetXml());
                var list=x.GetXmlDoc().selectNodes("items/item");
                int i=0,s=list.length;
                msxml::IXMLDOMElement xitem;
                for (i=0;i<s;i++)
                {
                    xitem= list.item(s - i - 1);
                    string id = xitem.selectSingleNode("ModuleID").text;
                    string Name="";
                    if(xitem.selectSingleNode("ModuleName")) Name=xitem.selectSingleNode("ModuleName").text;
                    string image = 15;
                    if(xitem.selectSingleNode("ModuelImage")) image=xitem.selectSingleNode("ModuelImage").text;
                    int curItem=treeview__::InsertItem(tv_menu.GetId(), parentItem,0,Name,id,image.toInt());
                    string child=xitem.selectSingleNode("@child").text;//item.getAttribute("HasChild");
                    if (child != "0")
                        treeview__::SetItemChild1(tv_menu.GetId(), curItem,1);
                }
            }
            int OnNew()
            {
                int i =1;
                while(dw_list.GetColumnName(i) != "")
                {
                    dw_list.SetItemString(1, i, "");
                    i++;
                }
                dw_list.ResetUpdateStatus();
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                x.LoadXml("<item><ModuelPage/><status _displaystring='启用'>Y</status><type _displaystring='菜单'>0</type><ModuelImage>17</ModuelImage><ModuelParam><args/></ModuelParam><roles/></item>");
                dw_list.Retrieve(x);
                dw_list.ResetUpdateStatus();
                dw_list.Redraw();
                dw_param.Retrieve(x.GetXmlDoc().selectSingleNode("item/ModuelParam/args"));
                dw_param.ResetUpdateStatus();
                dw_param.Redraw();
                dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("item/roles"));
                dw_role.ResetUpdateStatus();
                dw_role.Redraw();
                return 1;
            }
            int OnAddRow(xdwgrid__ dw)
            {
                dw.InsertRow(0);
                return 1;
            }
            int OnDelRow(xdwgrid__ dw)
            {
                int row = dw.GetRow();
                if(row<1 || row > dw.GetRowCount()) return -1;
                dw.DeleteRow(row);
                return 1;
            }
/*
            int openUrl(string aurl, param para)
            {
                int pos = aurl.find("/",0);
                if(pos<0) return "";
                string iface = aurl.left(pos);
                string root = aurl.mid(pos + 1,9999);
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                if( iface.find(".vface",0)<0 )
                {
                    return -1;
                }
                else
                {
                    string typ = iface.mid(iface.find(".",0) + 1,9999);
                    xaserver__::LoadUrl("","dev:"+typ+"["+iface+"]","",x);
                }
                var doc = x.GetXmlDoc();
                var n = doc.selectSingleNode("//resource[@url='" + root+"']/@src");
                if(n)
                {
                    string xq = n.text;
                    return OpenWindow(xq, para);
                }else
                {
                    n = doc.selectSingleNode("//group[@for='worknode']/resource[@url='" + root+"']");
                    if(n)
                    {
                        string vface  = n.selectSingleNode("@vface").text;
                        string view   = n.selectSingleNode("@view").text;
                        string config = n.selectSingleNode("@config").text;
                        if(config != "" )
                        {
                            xaserverarg__ arg = para;
                            arg.AddArg("config",config);
                        }
                        if(vface=="."|| vface=="")
                        {
                            var v = doc.selectSingleNode("//resource[@url='" + view+"']/@src");
                            if(v)
                            {
                                return OpenWindow(v.text, para);
                            }
                        }else
                            return openUrl(vface+"/"+view,para);
                    }
                }
                return -1;
            }
*/
            int OnAddRole()
            {
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                //OpenWindow("dev:xpage[selectRole.vx]", arg);
                //openUrl(m_vface+"/xpage/role/select/user", arg);
                openUrl("/sale/view/Role.config/xpage/role/select/user", arg);
                string str = arg.GetArgString("item");
                if(str == "") return -1;
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                x.LoadXml(str);
                var list=x.GetXmlDoc().selectNodes("items/item");
                int i=0,s=list.length;
                msxml::IXMLDOMElement xitem;
                int row = dw_role.GetRowCount() + 1;
                for (i=0;i<s;i++)
                {
                    xitem= list.item(i);
                    string id = ""+xitem.selectSingleNode("@id").text;
                    string name=""+xitem.selectSingleNode("@name").text;
                    string tpy=""+xitem.selectSingleNode("@type").text;
                    dw_role.InsertRow(0);
                    dw_role.SetItemString(row + i, "id", id);
                    dw_role.SetItemString(row + i, "name", name);
                    dw_role.SetItemString(row + i, "type", tpy);
                }
                return 1;
            }
            int OnDel()
            {
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                dw_list.DwUpdateAllTo(x.GetXmlDoc());
                msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
                string id = e.selectSingleNode("@guid").text;
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("id", id);
                //trace(id);
                //if(xaserver__::ExecXQuery(GetServerUrl(),"[deleteModule.xq]",arg.GetString(),x)!=1)
                //if(url::get(m_iface+"/pref/delete",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/delete",arg.GetString(),x)!=1)
                {
                    trace("error:"+x.GetXml());
                    alert("删除出错!");
                    return 0;
                }
                if(x.GetXmlDoc().selectSingleNode("error"))
                {
                    alert("请先删除子项!");
                    return 0;
                }
                int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
                treeview__::DeleteItem(tv_menu.GetId(), sitem);
                return 1;
            }
            int OnSave()
            {
                dw_param.AcceptText();
                dw_list.AcceptText();
                /*int aa=1,bb=1;
                xpoint p;
                dw_list.getNullCell(p);
                int xx = p.x;
                trace(xx);
                int yy = p.y;
                trace(yy);
                string zz = dw_list.GetColumnName(yy);
                trace(zz);*/
                int m = treeview__::GetSelectedItem(tv_menu.GetId());
                if(m == 0) return -1;
                int n = treeview__::GetRootItem(tv_menu.GetId());
                if(m == n)
                    if(m_status == "update.modify")
                    {
                        alert("根节点不能修改!");
                        return 1;
                    }
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                dw_list.DwUpdateAllTo(x.GetXmlDoc());
                msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
                e.SetAttribute(m_status, "1");
                //trace(e.xml);
                //return 1;
                xml__ x1 = new xml__;
                x1.setNativePointer(xml__ ::CreateInstance());
                dw_param.DwUpdateAllTo(x1.GetXmlDoc());
                msxml::IXMLDOMElement p = x1.GetXmlDoc().documentElement;
                e.AppendChild(p);
                xml__ x2 = new xml__;
                x2.setNativePointer(xml__ ::CreateInstance());
                dw_role.DwUpdateAllToEx(x2.GetXmlDoc());
                msxml::IXMLDOMElement r = x2.GetXmlDoc().documentElement;
                e.AppendChild(r);
                //trace(e.xml);
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("content", e.xml);
                arg.AddArg("dbmap", "Role.config.dbmap");
                //if(xaserver__::ExecXQuery(GetServerUrl(),"[saveModule.xq]",arg.GetString(),x)!=1)
                //if(url::get(m_iface+"/pref/save",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/save",arg.GetString(),x)!=1)
                {
                    trace("error:"+x.GetXml());
                    alert("保存出错!");
                    return 0;
                }
                //trace(x.GetXml());
                if(x.GetXmlDoc().selectSingleNode("error"))
                {
                    alert("保存出错2!");
                    return 0;
                }
                dw_list.ResetUpdateStatus();
                dw_param.ResetUpdateStatus();
                dw_role.ResetUpdateStatus();
                string id = e.selectSingleNode("@guid").text;
                string name = "";
                if(e.selectSingleNode("ModuleName"))
                    name = e.selectSingleNode("ModuleName").text;
                string image = 15;
                if(e.selectSingleNode("ModuelImage"))
                    image = e.selectSingleNode("ModuelImage").text;
                int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
                if(m_status == "update.new")
                    treeview__::InsertChildItem(tv_menu.GetId(), sitem, name, id, image.toInt());
                else if(m_status == "update.modify")
                    treeview__::SetItemLabel(tv_menu.GetId(), sitem, name);
                if(m_status == "update.new")
                {
                    OnNew();
                    int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
                    string xxid = treeview__::GetItemData(tv_menu.GetId(), sitem);
                    dw_list.SetItemString(1, "ModulePID", xxid);
                }
                alert("保存成功!");
                return 1;
            }
            int OnCmdDispatch(string comdid)
            {
                int hCursor = xutil__::SetCursorWait();
                if(comdid == "New")
                {
                    m_status = "update.new";
                    OnNew();
                    int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
                    string id = treeview__::GetItemData(tv_menu.GetId(), sitem);
                    dw_list.SetItemString(1, "ModulePID", id);
                }
                else if(comdid == "addparam")
                    OnAddRow(dw_param);
                else if(comdid == "delparam")
                    OnDelRow(dw_param);
                else if(comdid == "addrole")
                    OnAddRole();
                else if(comdid == "delrole")
                    OnDelRow(dw_role);
                else if(comdid == "Del")
                    OnDel();
                else if(comdid == "Save")
                    OnSave();
                xutil__::RestoreCursor(hCursor);
                return 0;
            }
            int OnTreeMoveNode(ref TNotifyEvent evt,int p)
            {
                ref TVNNMHDR nmtv = evt.pnmh;
                int xfrom = nmtv.FromItem;
                int xto = nmtv.ToItem;
                int ret = win__::MessageBox(this.GetHWND(), "确定移动节点!","提示:",1);
                //trace(ret);
                if(ret == 2)
                {
                    treeview__::DeleteItem(tv_menu.GetId(), xto);
                    return -1;
                }
                string fid = treeview__::GetItemData(tv_menu.GetId(), xfrom);
                int xpto = treeview__::GetParentItem(tv_menu.GetId(), xto);
                string tid = treeview__::GetItemData(tv_menu.GetId(), xpto);
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("from", fid);
                arg.AddArg("to", tid);
                trace(arg.GetString());
                //if(url::get(m_iface+"/pref/tree/move",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/tree/move",arg.GetString(),x)!=1)
                {
                    trace("error:"+x.GetXml());
                    alert("移动节点出错!");
                    treeview__::DeleteItem(tv_menu.GetId(), xto);
                    return 0;
                }
                treeview__::DeleteItem(tv_menu.GetId(), xfrom);
                return 1;
            }
            int OnTreeExpanding(ref TNotifyEvent evt,int p)
            {
                ref NMTREEVIEW nmtv = evt.pnmh;
                int sitem = nmtv.itemNew.hItem;
                string id = treeview__::GetItemData(tv_menu.GetId(), sitem);
                int hCursor = xutil__::SetCursorWait();
                createTree(id, sitem);
                xutil__::RestoreCursor(hCursor);
                return 1;
            }
            int OnTreeSelChanged(ref TNotifyEvent evt,int p)
            {
                ref NMTREEVIEW nmtv = evt.pnmh;
                int hItem = nmtv.itemNew.hItem;
                int hCursor = xutil__::SetCursorWait();
                string id = treeview__::GetItemData(tv_menu.GetId(), hItem);
                //trace(id);
                m_status = "update.modify";
                OnNew();
                int xItem = treeview__::GetRootItem(tv_menu.GetId());
                if(hItem == xItem)
                {
                    string label = treeview__::GetItemLabel(tv_menu.GetId(), xItem);
                    dw_list.SetItemString(1, "ModuleName", label);
                    dw_list.ResetUpdateStatus();
                    return 0;
                }
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                dw_list.Retrieve(x);
                dw_list.Redraw();
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("id",id);
                //if(xaserver__::ExecXQuery(GetServerUrl(),"[leftMenu.xq]",arg.GetString(),x)!=1)
                //if(url::get(m_iface+"/pref/maint",arg.GetString(),x)!=1)
                if(url::get("/sale/data/Role.config/pref/maint",arg.GetString(),x)!=1)
                {
                    trace(x.GetXml());
                    return -1;
                }
                dw_list.Retrieve(x);
                dw_list.ResetUpdateStatus();
                dw_list.Redraw();
                if(x.GetXmlDoc().selectSingleNode("item/ModuelParam/args"))
                {
                    dw_param.Retrieve(x.GetXmlDoc().selectSingleNode("item/ModuelParam/args"));
                    dw_param.ResetUpdateStatus();
                    dw_param.Redraw();
                }
                if(x.GetXmlDoc().selectSingleNode("item/roles"))
                {
                    dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("item/roles"));
                    dw_role.ResetUpdateStatus();
                    dw_role.SetReadOnly(true);
                    dw_role.Redraw();
                }
                //msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
                xutil__::RestoreCursor(hCursor);
                return 1;
            }
            int OnSetFocus(ref TEvent evt,int p)
            {
                SetAgent();
                return 1;
            }
            int OnXCommand(ref TXCommandEvent evt,int p)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int OnItemChanged(ref TNotifyEvent evt,int p)
            {
                ref DWNMHDR  hdr = evt.pnmh;
                string colname=hdr.colname;
                if(colname == "type")
                {
                    string value = hdr.data;
                    //trace(colname, value);
                    if(value == "0")
                        dw_list.SetItemString(1, "ModuelImage", "17");
                    else
                        dw_list.SetItemString(1, "ModuelImage", "16");
                }
                return 1;
            }
            int OnDBClick(ref TNotifyEvent evt,int p)
            {
                ref DWNMHDR  hdr = evt.pnmh;
                string colname=hdr.colname;
                if(colname == "type")
                {
                    string value = hdr.data;
                    //trace(colname, value);
                    if(value == "0")
                        dw_list.SetItemString(1, "ModuelImage", "17");
                    else
                        dw_list.SetItemString(1, "ModuelImage", "16");
                }
                return 1;
            }
            int OnItemError(ref TNotifyEvent evt,int p)
            {
                ref DWNMHDR  hdr = evt.pnmh;
                string colname=hdr.colname;
                trace(colname);
                int e = hdr.idFrom;
                trace(e);
                return 1;
            }
            int onload()
            {
                tv_menu = new treeview__;
                tv_menu.setNativePointer(GetControl("tv_folder"));
                int hItem = treeview__::InsertChildItem(tv_menu.GetId(), 0, "模块", "", 17);
                createTree("null", hItem);
                treeview__::ExpandItemEx(tv_menu.GetId(), hItem);
                dw_list = new xdwtable__;
                dw_list.setNativePointer(GetControl("dw_base"));
                //dw_list.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/module]");
                //dw_list.openUrl(m_vface+"/template/role/config/module");
                dw_list.openUrl("/sale/view/Role.config/template/role/config/module");
                dw_list.SetColHeaderHeight(0);
                dw_list.SetRowSelectorWidth(0);
                dw_list.SetScrollState(false);
                dw_param = new xdwgrid__;
                dw_param.setNativePointer(GetControl("dw_param"));
                //dw_param.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/param]");
                //dw_param.openUrl(m_vface+"/template/role/config/param");
                dw_param.openUrl("/sale/view/Role.config/template/role/config/param");
                dw_role = new xdwgrid__;
                dw_role.setNativePointer(GetControl("dw_role"));
                //dw_role.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/role]");
                //dw_role.openUrl(m_vface+"/template/role/config/role");
                dw_role.openUrl("/sale/view/Role.config/template/role/config/role");
                dw_role.SetReadOnly(false);
                AttachEvent("tv_folder", "TVN_ITEMEXPANDING",OnTreeExpanding);
                AttachEvent("tv_folder", "TVN_SELCHANGED",OnTreeSelChanged);
                AttachEvent("tv_folder", "TVN_ENDDRAG",OnTreeMoveNode);
                AttachEvent("WM_XCOMMAND",OnXCommand);
                AttachEvent("WM_SETFOCUS",OnSetFocus);
                AttachEvent("dw_base","DWV_ITEMCHANGED",OnItemChanged);
                AttachEvent("dw_base","DWV_DOUBLECLICKED",OnDBClick);
                AttachEvent("dw_base","DWV_ITEMERROR",OnItemError);
                SetAgent();
                return 1;
            }
        ]
    ]
]
jrj/project/business/SystemSettings/SysLoginRecord.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class __declspec(dllexport)  SysLoginRecord : public xframe
    {
    public:
        xdwgrid  dw_logrecord;
        xdwtable dw_arg;
    public:
        SysLoginRecord(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static SysLoginRecord* CreateInstance(void* implPtr, void* hWnd)
        {
            SysLoginRecord* pWin = new SysLoginRecord(implPtr, (HWND)hWnd);
            return pWin;
        }
        int OnRetrieve()
            {
                xcontrol xc_text =GetControl(L"QueryTxt");
                xcontrol xc_cbx = GetControl(L"cbx_type");
                xstring ls_querytxt;
                xstring ls_querytype;
                ls_querytxt =   xc_text.GetText();
                ls_querytype = xc_cbx.GetText();
                xml x ;
                xaserverarg arg ;
                arg.AddArg(L"sType",ls_querytype);
                arg.AddArg(L"QueryText",ls_querytxt);
                arg.AddArg(L"QueryArg",GetQueryArg());
                //alert(ls_querytxt);
                if (xurl::get(L"/sale/data/Total3/total/GDNTotal/Item/GetSysLoginLog",arg.GetString(),x) == 1)
                {
                    //trace(x.xml());
                    dw_logrecord.Retrieve(x);
                    dw_logrecord.Redraw();
                    dw_logrecord.SetSelectionMode(1);
                }
                else
                    alert(L"查不到");
                return 1;
            }
            //命令发布函数
            int OnCmdDispatch(xstring comdid)
            {
                HCURSOR hCursor = xutil::SetCursorWait();
                if(comdid==L"ContSearch")
                    OnRetrieve();
                return 0;
            }
            //命令处理事件
            int OnXCommand(TEvent* evt, LPARAM param)
            {
                return OnCmdDispatch(evt->xcommand.pStrID);
            }
                xstring GetQueryArg()
        {
            dw_arg.AcceptText();
            xml x ;
            dw_arg.DwUpdateAllTo(x);
            return x.xml();
        }
            int OnAttachEvent()
            {
                AttachEvent(L"WM_XCOMMAND", (FEvent)&SysLoginRecord::OnXCommand);
                return 1;
            }
        int onload()
        {
            dw_logrecord = GetControl(L"dw_logrecord");
            dw_logrecord.openUrl(L"/sale/view/SysUser/template/SysLoginRecord");
            dw_arg = GetControl(L"dw_arg");
            dw_arg.openUrl(L"/sale/view/AR/template/queryarg");
            dw_arg.SetColHeaderHeight(0);
            dw_arg.SetRowSelectorWidth(0);
            dw_arg.SetHScrollState(false);
            dw_arg.SetVScrollState(false);
            return 0;
        }
        int onloaded()
        {
                //alert(L"xxx");
                OnAttachEvent();
                //OnRetrieve();
                return 1;
            }
    };
jrj/project/business/SystemSettings/SysUser.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,330 @@
use "win.vl"
use "treeview.vm"
use "dev:vm[xdwgrid.vm]"
use "dev:vm[xdwtable.vm]"
use "pref.vl"
use "dev:vm[xml.vm]"
use "dev:vm[xaserverarg.vm]"
use "dev:vm[xaserver.vm]"
use "dev:vm[xutil.vm]"
use "dev:code[pa.tpp]"
use "list.vl"
unit vbusiness.xpage
[
    SysUser is extend list;
    about SysUser
    [
        method:
        [
            treeview__ tv_usergroup;
            xdwgrid__ dw_user;
            xnode__    m_agentNode;
            string strJobID;
            int SetAgent()
            {
                string xfNodeAgentArea  = "agentarea";
                xnode__ anode = new xnode__;
                anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
                var xframeElement =  GetElement();
                var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
                if(agent)
                {
                    string s = agent.xml;
                    SetAgentNodeContent (anode,s);
                }
                return 1;
            }
            //焦点激活处理函数
            int OnSetFocus(ref TEvent evt,int param)
            {
                SetAgent();
                //重置工具条
                return 1;
            }
            int SetEntityData(param p)
            {
                xml__ x=new xml__;
                x.setNativePointer(x.CreateInstance());
                xaserverarg__ arg = new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                string str = this.m_QueryTxt;
                //trace(ele.xml);
                //alert(str);
                arg.AddArg("guid",str);
                //trace(strJobID);
                if (xaserver__::ExecXQuery("","[list.SysUser.xq]",arg.GetString(),x) == 1)
                {
                    dw_user.AcceptText();
                    dw_user.Retrieve(x);
                    dw_user.Redraw();
                }
                return 1;
            }
            int OnTreeSelChanged(ref TNotifyEvent evt,int p)
            {
                ref NMTREEVIEW nmtv = evt.pnmh;
                int hItem = nmtv.itemNew.hItem;
                int wid = tv_usergroup.GetId();
                int hitem=treeview__::GetSelectedItem(wid);
                int rootItem = treeview__::GetRootItem(wid);
                //if (hItem <=0 || hItem == rootItem)
                //    return 0;
                msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
                //trace("ok");
                if (ele)
                {
                    xml__ x=new xml__;
                    x.setNativePointer(x.CreateInstance());
                    xaserverarg__ arg = new xaserverarg__;
                    arg.setNativePointer(arg.CreateInstance());
                    strJobID = ele.selectSingleNode("@JobID").text;
                    //trace(ele.xml);
                    //alert(strJobID);
                    arg.AddArg("guid",strJobID);
                    //trace(strJobID);
                    if (xaserver__::ExecXQuery("","[list.SysUser.xq]",arg.GetString(),x) == 1)
                    {
                        dw_user.AcceptText();
                        dw_user.Retrieve(x);
                        dw_user.Redraw();
                    }
                }
                return 1;
            }
            int xmImport()
            {
                int wid = tv_usergroup.GetId();
                int hitem=treeview__::GetSelectedItem(wid);
                if (!hitem)
                {
                    alert("请选择职位!");
                    return 0;
                }
                OpenWindow("dev:xpage[UserImport.vx]",this);
                //openUrl("系统用户.vface/xpage/SysUser/UserImport", this);
                return 1;
            }
            int OnSave()
            {
                xml__ x=new xml__;
                x.setNativePointer(x.CreateInstance());
                dw_user.DwUpdateAllToEx(x.GetXmlDoc());
                xaserverarg__ arg = new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("content",x.GetXml());
                arg.AddArg("dbmap","SysUser.dbmap");
                if(getUrl("/sale/data/SysUser/SysUser",arg.GetString(),x)!=1)
                {
                    //trace("error:"+x.GetXml());
                    alert("保存失败");
                }
                else{
                    if(x.GetXmlDoc().selectSingleNode("erroe"))
                    {
                        alert("保存出错2! ");
                        return 0;
                    }
                    //trace(x.GetXml());
                    dw_user.ResetUpdateStatus();
                    win__::MessageBox(GetHWND(),"保存成功!","提示",0);
                }
/*                    arg.AddArg("xdata",x.GetXml());
                //arg.AddArg("jobguid",strJobID);
                //trace(x.GetXml());
                //trace(strJobID);
                //if (getUrl("/sale/data/SysUser/SysUser",arg.GetString(),x) != 1)
                //trace(xaserver__::ExecXAction(GetServerUrl(),"[SysUser.xa]",arg.GetString(),x));
            if (xaserver__::ExecXAction(GetServerUrl(),"[SysUser.xa]",arg.GetString(),x)!=1)
                {
                    //trace("error:"+x.GetXml());
                    alert("保存失败");
                }
                else{
                    if(x.GetXmlDoc().selectSingleNode("ERROR"))
                    {
                        alert("保存出错2! ");
                        return 0;
                    }
                    win__::MessageBox(GetHWND(),"保存成功!","提示",0);
                }*/
                return 1;
            }
            int OnAddRow()
            {
                int wid = tv_usergroup.GetId();
                int hitem=treeview__::GetSelectedItem(wid);
                if(hitem==0)
                {
                    alert("请先选择职位类型!");
                }
                else
                {
                    int row = dw_user.InsertRow(0);
                    dw_user.SetItemString(row,"Status","Y");
                }
                return 1;
            }
            int OnInsertRow()
            {
                int wid = tv_usergroup.GetId();
                int hitem=treeview__::GetSelectedItem(wid);
                if(hitem==0)
                {
                    alert("请先选择职位类型!");
                }
                else
                {
                    int crow=dw_user.GetRow();
                    int row=dw_user.InsertRow(crow);
                    dw_user.SetItemString(row,"Status","Y");
                }
                return 1;
            }
            int OnDeleteRow()
            {
                int row=dw_user.GetRow();
                dw_user.DeleteRow(row);
                return 1;
            }
            int OnJobType()
            {
                openUrl("组织架构.vface/worknode/Hr/HrJob");
                return 1;
            }
            int OnClicked(ref TNotifyEvent evt,int p)
            {
                ref DWNMHDR  hdr = evt.pnmh;
                int row = hdr.row;
                int col=hdr.col ;
                string colname=dw_user.GetColumnName(col);
                msxml::IXMLDOMElement xrow = dw_user.GetRowElement(row);
                string BindComputer=xrow.selectSingleNode("BindComputer").text;
                xaserverarg__ arg = new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                if(BindComputer  != "" )
                {
                    arg.AddArg("BindComputer",BindComputer);
                }
                string comdid;
                if(colname=="BindComputer")
                {
                    openUrl("系统用户.vface/xpage/SysUser/BindComputer/dialog", arg);
                    comdid = arg.GetArgString("comdid");
                    if(comdid=="ok")
                    {
                        string strxml = arg.GetArgString("xml");
                        dw_user.SetItemDisplayString(row,colname,strxml);
                        dw_user.SetItemString(row,colname,strxml);
                        dw_user.Redraw();
                    }
                }
                return 1;
            }
            int OnResetPass()
            {
                xaserverarg__ arg = new xaserverarg__;
                int pt = arg.CreateInstance();
                arg.setNativePointer(pt);
                int row = dw_user.GetRow();
                if(row < 1) return 1;
                arg.AddArg("user", dw_user.GetItemString(row,"EmployeeNo"));
                OpenWindow("dev:xpage[ResetUserPassDlg.vx]",pt);
                return 1;
            }
            int Onlog()
            {
                openUrl("/sale/view/SysUser/xpage/SysUser/SysLoginRecord");
                return 1;
            }
            //命令发布函数
            int OnCmdDispatch(string comdid)
            {
                if (comdid =="Save")  OnSave();
                else if (comdid =="AddRow") OnAddRow();
                else if (comdid =="InsertRow") OnInsertRow();
                else if (comdid =="DeleteRow") OnDeleteRow();
                else if (comdid =="JobType") OnJobType();
                else if (comdid=="xmImport") xmImport();
                else if (comdid == "xmLog") Onlog();
                else if(comdid=="_cb_grid_search") return GridSearchEx();
                else if(comdid=="xmResetPass") return OnResetPass();
                else if(comdid=="xmResetPassEx") OpenWindow("dev:xpage[SysForcePassward.vx]");
                return 0;
            }
            //命令处理事件
            int OnXCommand(ref TXCommandEvent evt,int param)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int OnAttachEvent()
            {
                //绑定工具条点击事件
                AttachEvent("WM_XCOMMAND",OnXCommand);
                //获取焦点事件,用于重置工具条
                AttachEvent("WM_SETFOCUS",OnSetFocus);
                //获得树的选择事件
                AttachEvent("tv_usergroup", "TVN_SELCHANGED",OnTreeSelChanged);
                //AttachEvent("dw_user","DWV_ITEMBEINGEDIT",OnClicked);
                AttachEvent("dw_user","DWV_DOUBLECLICKED",OnClicked);
            }
            int OnInitial()
            {
                SetAgent();
                OnAttachEvent();
                return 1;
            }
            int onload()
            {
                m_agentNode = new xnode__;
                tv_usergroup =  new treeview__;
                tv_usergroup.setNativePointer(this.GetControl("tv_usergroup"));
                dw_user =  new xdwgrid__;
                dw_user.setNativePointer(this.GetControl("dw_user"));
                dw_user.SetDataObject(GetServerUrl(),"dev:sheet[SysUser.tpl/UserList]");
                dw_user.SetReadOnly(true);
                dw_user.SetSelectionMode(1);
                OnInitial();
                int wid = tv_usergroup.GetId();
                int root = treeview__::GetRootItem(wid);
                treeview__::ExpandItem(wid,root);
                xml__ x=new xml__;
                x.setNativePointer(xml__::CreateInstance());
                x.LoadXml("<Config/>");
                this.m_configDoc = x.GetXmlDoc();
                rowSearch("系统用户.vface/template/SysUser/list");
                GridSearchEx();
                return 1;
            }
        ]
    ]
]
jrj/project/business/SystemSettings/TestRetrieveing.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) TestRetrieveingWin:  public xframe
    {
    public:
        //xdwgrid    dw_list;
        xnode    m_agentNode;    //Agent Condition
    public:
        TestRetrieveingWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static TestRetrieveingWin* CreateInstance(void* implPtr, void* hWnd)
        {
            TestRetrieveingWin* pWin = new TestRetrieveingWin(implPtr, (HWND)hWnd);
            return pWin;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if(comdid==L"RetrieveFinished")
            {
                CloseWindow();
                return 1;
            }
            return 0;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&TestRetrieveingWin::OnXCommand);
            //获取焦点事件,用于重置工具条
            AttachEvent(L"WM_SETFOCUS", (FEvent)&TestRetrieveingWin::OnSetFocus);
            return 1;
        }
        int onload()
        {
            OnAttachEvent();
            return 1;
        }
    };
jrj/project/business/SystemSettings/UserImport.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,329 @@
use "win.vl"
use "treeview.vm"
use "dev:vm[xdwgrid.vm]"
use "dev:vm[xdwtable.vm]"
use "pref.vl"
use "dev:vm[xml.vm]"
use "dev:vm[xaserverarg.vm]"
use "dev:vm[xaserver.vm]"
use "dev:vm[xutil.vm]"
use "dev:code[SysUser.vx]"
use "frame.vl"
use "file.vl"
unit vbusiness.xpage
[
    UserImport is extend frame;
    about UserImport
    [
        field:
        [
            SysUser lw_obj;
            xdwgrid__    dw_list;
            treeview__        tv_org;
            xnode__    m_agentNode;    //Agent Condition
            string    m_agentCond;    //Agent Node
            string    m_sTxt;
            string        is_orgid;
        ]
        method:
        [
            int SetAgent()
            {
                string xfNodeAgentArea  = "agentarea";
                xnode__ anode = new xnode__;
                anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
                var xframeElement =  GetElement();
                var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
                if(agent)
                {
                    string s = agent.xml;
                    SetAgentNodeContent (anode,s);
                }
                return 1;
            }
            //焦点激活处理函数
            int OnSetFocus(ref TEvent evt,int param)
            {
                SetAgent();
                //重置工具条
                return 1;
            }
            int  OnRetrieve(string ls_orgid)
            {
                xml__ x=new xml__;
                x.setNativePointer(x.CreateInstance());
                xaserverarg__ arg = new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("OrgID",ls_orgid);
                //trace(ls_orgid);
                //if (xaserver__::ExecXQuery(GetServerUrl(),"[MSSqlHrEmployee.xq]",arg.GetString(),x) == 1)
                if (url::get("SysUser.config/UserSelect.xq",arg.GetString(),x) == 1)
                {
                    dw_list.Retrieve(x);
                    dw_list.Redraw();
                }
                //trace(x.GetXml());
                return 1;
            }
            int OnOK()
            {
                if (GetParam())
                {
                    lw_obj = new SysUser;
                    lw_obj.setNativePointer(GetParam());
                    lw_obj = GetParam();
                }
                else
                    return 0;
                int row = dw_list.GetNextSelectRow(1);
                trace(row);
                if (row<1)
                {
                    alert("请选择人员!");
                    return 1;
                }
                string sPositionID,sPositionName;
                string sOrgID,sOrgName;
                string sJobID,sJobName;
                int wid = lw_obj.tv_usergroup.GetId();
                int hitem=treeview__::GetSelectedItem(wid);
                msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
                while (row>0)
                {
                    trace(row);
                    msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
                    trace(e.xml);
                    string sEmployeeNo = e.selectSingleNode("EmployeeNo").text+"";
                    string sOldEmpNo = e.selectSingleNode("OldEmpNo").text+"";
                    string sPersonID = e.selectSingleNode("PersonID").text+"";
                    string sPersonName = e.selectSingleNode("Name").text+"";
                    string sPassWord = xutil__::MD5(sOldEmpNo);
                    /*
                    xml__ xx = new xml__;
                    xx.setNativePointer(xml__ ::CreateInstance());
                    xaserverarg__ arg=new xaserverarg__;
                    arg.setNativePointer(arg.CreateInstance());
                    arg.AddArg("userno",sOldEmpNo);
                    arg.AddArg("password",sPassWord);
                    if(url::get("/sale/data/SysUser/GetOldPassWord",arg.GetString(),xx)==1)
                    {
                        if(xx.GetXml()!="")
                        {
                            msxml::IXMLDOMElement ex = xx.GetXmlDoc().documentElement;
                            sPassWord = ""+ex.text;
                        }
                    }*/
                    int nRow = lw_obj.dw_user.InsertRow(0);
                    lw_obj.dw_user.SetItemString(nRow,"EmployeeNo",sEmployeeNo);
                    lw_obj.dw_user.SetItemString(nRow,"UserName",sOldEmpNo);
                    lw_obj.dw_user.SetItemString(nRow,"PassWord",sPassWord);
                    lw_obj.dw_user.SetItemString(nRow,"PersonID",sPersonID);
                    lw_obj.dw_user.SetItemDisplayString(nRow,"PersonID",sPersonName);
                    lw_obj.dw_user.SetItemString(nRow,"Status","Y");
                    lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效");
                    lw_obj.dw_user.SetItemString(nRow,"OldEmpNo",sOldEmpNo);
                /*
                    lw_obj.dw_user.SetItemString(nRow,"PositionID",sPositionID);
                    lw_obj.dw_user.SetItemDisplayString(nRow,"PositionID",sPositionName);
                    lw_obj.dw_user.SetItemString(nRow,"OrgID",sOrgID);
                    lw_obj.dw_user.SetItemDisplayString(nRow,"OrgID",sOrgName);
                    lw_obj.dw_user.SetItemString(nRow,"JobID",sJobID);
                    lw_obj.dw_user.SetItemDisplayString(nRow,"JobID",sJobName);
                    lw_obj.dw_user.SetItemString(nRow,"Status","Y");
                    lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效");
                    string sdate = TApp::GetCurDate()+"";
                    lw_obj.dw_user.SetItemString(nRow,"StartDate",sdate+"");
                    lw_obj.dw_user.SetItemString(nRow,"EndDate","2050-12-31");*/
                    row = dw_list.GetNextSelectRow(row + 1);
                    trace(row);
                }
                CloseWindow();
                return 1;
            }
            int OnSubTree(string id,int parentitem)
            {
                int wid = tv_org.GetId();
                if (treeview__::GetChildItem(wid,parentitem) >0) return 1;
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("sguid",id);
                if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
                {
                    trace(x.GetXml());
                    return -1;
                }
                //trace(x.GetXml());
                var list=x.GetXmlDoc().selectNodes("//item");
                int i=0,s=list.length;
                msxml::IXMLDOMElement xitem;
                string sName;
                string sguid;
                string stype;
                if (s >0)
                {
                    for (i=0;i<s;i++)
                    {
                        xitem= list.item(i);
                        sName = xitem.SelectSingleNode("name").text;
                        sguid = xitem.SelectSingleNode("id").text;
                        stype = xitem.SelectSingleNode("typ").text;
                        //int curItem = tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
                        int curItem=0;
                        if (stype =="Org")
                        {
                            curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
                            tv_org.SetItemChild1(wid,curItem,1);
                        }
                        else
                            {
                            curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,21,21);
                        }
                        //OnSubTree(sguid,curItem);
                    }
                }
                return 1;
            }
            int OnCreateTree(string id,int parentitem)
            {
                //while (tv_1.GetRootItem()>0)
                //    tv_1.DeleteItem(tv_1.GetRootItem());
                int wid = tv_org.GetId();
                xml__ x = new xml__;
                x.setNativePointer(xml__ ::CreateInstance());
                x.LoadXml("<item><id>"+id+"</id><no/><name>凤凰集团</name><typ>Org</typ></item>");
                //msxml::IXMLDOMDocument root = x.GetXmlDoc();
                //msxml::IXMLDOMElement RDoc = x.GetXmlDoc().documentElement;
                //msxml::IXMLDOMElement ele = RDoc.SelectSingleNode("//Org");
                msxml::IXMLDOMElement ele = x.GetXmlDoc().SelectSingleNode("//item");
                int hItem = treeview__::InsertChildItemEx(wid,0,"凤凰集团",ele,15,4);
                treeview__::SetItemChild1(wid,hItem,1);
                return 1;
                /*xaserverarg__ arg=new xaserverarg__;
                arg.setNativePointer(arg.CreateInstance());
                arg.AddArg("sguid",id);
                if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
                {
                    trace(x.GetXml());
                    return -1;
                }
                //trace(x.GetXml());
                var list=x.GetXmlDoc().selectNodes("//item");
                int i=0,s=list.length;
                msxml::IXMLDOMElement xitem;
                string sName;
                string sguid;
                if (s >0)
                {
                    for (i=0;i<s;i++)
                    {
                        xitem= list.item(i);
                        sName = xitem.SelectSingleNode("@name").text;
                        sguid = xitem.SelectSingleNode("@id").text;
                        int curItem = tv_org.InsertChildItemEx(wid,hItem,sName,xitem,15,4);
                        tv_org.SetItemChild1(wid,curItem,1);
                        //OnSubTree(sguid,curItem);
                    }
                }
                return 1;*/
            }
            int OnTreeExpanding(ref TNotifyEvent evt,int p)
            {
                ref NMTREEVIEW nmtv = evt.pnmh;
                int sitem = nmtv.itemNew.hItem;
                int hCursor = xutil__::SetCursorWait();
                //string id = treeview__::GetItemData(tv_org.GetId(), sitem);
                msxml::IXMLDOMElement ele = treeview__::GetItemData(tv_org.GetId(),sitem);
                string id = ele.SelectSingleNode("id").text;
                OnSubTree(id, sitem);
                xutil__::RestoreCursor(hCursor);
                return 1;
            }
            int OnTreeSelChanged(ref TXCommandEvent evt,int p)
            {
                int wid = tv_org.GetId();
                int hitem=treeview__::GetSelectedItem(wid);
                msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
                if (ele)
                {
                    string ls_orgid = ele.SelectSingleNode("id").text;
                    is_orgid = ls_orgid;
                    OnRetrieve(ls_orgid);
                }
                return 1;
            }
            //命令发布函数
            int OnCmdDispatch(string comdid)
            {
                if (comdid=="cb_import")
                    OnOK();
                else if (comdid=="cb_close")
                    CloseWindow();
                return 0;
            }
            //命令处理事件
            int OnXCommand(ref TXCommandEvent evt,int p)
            {
                return OnCmdDispatch(evt.pStrID);
            }
            int OnAttachEvent()
            {
                //绑定工具条点击事件
                AttachEvent("WM_XCOMMAND",OnXCommand);
                //获取焦点事件,用于重置工具条
                AttachEvent("WM_SETFOCUS",OnSetFocus);
                //获得树的选择事件
                AttachEvent("tv_org", "TVN_SELCHANGED",OnTreeSelChanged);
                AttachEvent("tv_org", "TVN_ITEMEXPANDING",OnTreeExpanding);
            }
            int OnInitial()
            {
                SetAgent();
                OnAttachEvent();
                return 1;
            }
            int onload()
            {
                tv_org = new treeview__ ;
                tv_org.setNativePointer(this.GetControl("tv_org"));
                dw_list =  new xdwgrid__;
                dw_list.setNativePointer(this.GetControl("dw_list"));
                dw_list.openUrl("系统用户.vface/template/SysUser/EmpSelect");
                dw_list.SetSelectionMode(3); //3
                dw_list.SetReadOnly(true);
                OnInitial();
                OnCreateTree("00000000-0000-0000-0000-000000000000", 0);
                int wid = tv_org.GetId();
                int root = treeview__::GetRootItem(wid);
                treeview__::ExpandItem(wid,root);
                OnRetrieve("00000000-0000-0000-0000-000000000000");
                return 1;
            }
        ]
    ]
]
jrj/project/business/SystemSettings/UserPassDlg.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,147 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) UserPassDlg :  public xframe
    {
    public:
        //xdwgrid    dw_list;
        xnode    m_agentNode;    //Agent Condition
        static xstring MD5(xstring) native from "XUtil.dll" alias "?MD5@IXFUtil@XFrame@Hxsoft@@SAPA_WPA_W@Z";
    public:
        UserPassDlg(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static UserPassDlg* CreateInstance(void* implPtr, void* hWnd)
        {
            UserPassDlg* pWin = new UserPassDlg(implPtr, (HWND)hWnd);
            return pWin;
        }
        int SetAgent()
        {
            xstring xfNodeAgentArea  = L"agentarea";
            xnode anode = GetAgentNode(xfNodeAgentArea);
            if(m_agentNode)
            {
                SetAgentNode (anode,m_agentNode);
            }
            else
            {
                KXMLDOMElement xframeElement =  GetElement();
                KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring s = agent.xml();
                    m_agentNode =  SetAgentNode (anode,s);
                }
            }
            return 1;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            SetAgent();
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if(comdid==L"xmCancel")
            {
                CloseWindow();
                return 1;
            }
            else if(comdid==L"xmOk")
            {
                if(xcontrol(GetControl(L"old_pass")).GetText()==L"")
                {
                    alert(L"请输入旧口令!");
                    SetFocus(xcontrol(GetControl(L"old_pass")).GetId());
                    return 1;
                }
                xstring ostr = xcontrol(GetControl(L"old_pass")).GetText();
                xstring str1 = xcontrol(GetControl(L"new_pass")).GetText();
                xstring str2 = xcontrol(GetControl(L"new_pass1")).GetText();
                if(str1 != str2)
                {
                    alert(L"两遍新口令不一致!");
                    SetFocus(xcontrol(GetControl(L"new_pass1")).GetId());
                    return 1;
                }
                xstring oldpass = MD5(ostr);
                xstring newpass = MD5(str1);
                xml x;
                xaserverarg arg ;
                ;
                arg.AddArg(L"old_password",oldpass);
                arg.AddArg(L"new_password",newpass);
                if(getUrl(L"/sale/data/SysUser/update/password",arg.GetString(),x)!=1)
                {
                    alert(L"修改失败");
                }
                else{
                    if(x.selectSingleNode(L"error"))
                    {
                        alert(x.selectSingleNode(L"error").text());
                        return 1;
                    }
                    MessageBox(GetHWND(),L"修改口令成功!",L"提示",0);
                    CloseWindow();
                }
                return 1;
            }
            return 0;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&UserPassDlg::OnXCommand);
            //获取焦点事件,用于重置工具条
            AttachEvent(L"WM_SETFOCUS", (FEvent)&UserPassDlg::OnSetFocus);
            return 1;
        }
        int onload()
        {
            //const int EM_SETPASSWORDCHAR =0x00CC;
            //win32::SendMessage(GetControl(L"old_pass").GetId(),EM_SETPASSWORDCHAR,42,0);
            //win32::SendMessage(GetControl(L"new_pass").GetId(),EM_SETPASSWORDCHAR,42,0);
            //win32::SendMessage(GetControl(L"new_pass1").GetId(),EM_SETPASSWORDCHAR,42,0);
            OnAttachEvent();
            return 1;
        }
        int onloaded()
        {
            SetAgent();
            return 1;
        }
    };
jrj/project/business/SystemSettings/level.Customer.v3.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,375 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
class  __declspec(dllexport) levelCustomerv3 : public listwin
{
public:
    xdwgrid dw_goods;
    xtreeview tv_1;
    xcombobox ddlb_1;
    int    changeddlb;
    xstring m_sType; //type
    xstring m_sTypeTxt; //选中树的data
//    xstring m_searchtxt;
    int PIndex;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
public:
    levelCustomerv3(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
public:
    static levelCustomerv3* CreateInstance(void* implPtr, void* hWnd)
    {
        levelCustomerv3* pWin = new levelCustomerv3(implPtr, (HWND)hWnd);
        return pWin;
    }
    int OnPreRetrieve()
    {
        xml x ;
        xaserverarg arg ;
        ;
        arg.AddArg(L"pageindex", xstring(PIndex)); //第几页
        arg.AddArg(L"pagenumber", xstring(m_pageNumber)); //每页数量
        arg.AddArg(L"QueryTxt",m_QueryTxt );
        arg.AddArg(L"sType", m_sType);//没有参数
        arg.AddArg(L"sTypeTxt", m_sTypeTxt);//没有参数
        if(getUrl(L"/sale/data/"+GetEntityName(1)+L"/entity/list",arg.GetString(),x)!=1)
        {
            alert(L"出现错误请联系管理员!");
            return 0;
        }else
        {
            KXMLDOMElement e=x.documentElement();
            if(listwin::dw_pages.ptr_native_ && e.selectSingleNode(L"@TotalPage"))
            {
                xstring s=e.selectSingleNode(L"@TotalPage").text(); //总数量
                listwin::dw_pages.SetMaxPage(s.toInt());
            }
            listwin::dw_list.Retrieve(x);
            listwin::dw_list.Redraw();
            listwin::dw_list.SetReadOnly(true);
        }
        return 1;
    }
    int OnChangePages(TEvent* evt, int p)
    {
        PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
        int c = h.cur;
        HCURSOR hCursor = xutil::SetCursorWait();
        OnRetrieve();
        PIndex=c;
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    int ViewUpdate(int pr,xstring updateItem,xaserverarg  arg)
    {
        if(updateItem == L"refresh")
        {
            xdwpages zz = GetControl(L"pages");
            int h = zz.SetCurPage(1);
            OnRetrieve();
        }
        return 1;
    }
    //树选择
    int OnTreeSelChanged(TEvent* evt, int p)
    {
        if (changeddlb != 1)
        {
            HTREEITEM h=tv_1.GetSelectedItem();
            KXMLDOMElement e = tv_1.GetItemData(h);
            xstring t = e.selectSingleNode(L"@type").text();
            m_sType=t+L"";
            xstring txt = e.selectSingleNode(L"@code").text();
            if (txt == L"")
                txt = e.selectSingleNode(L"@name").text();
            m_sTypeTxt= txt+L"";
            PIndex= 1;
            OnRetrieve();
        }
        return 1;
    }
    int  createSubTree(HTREEITEM h, KXMLDOMElement ele)
    {
        KXMLDOMNodeList nlist=ele.selectNodes(L"item");
        int i;
        int s=nlist.length();
        if (s>0)
            for (i=0; i<s; i++)
            {
                KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i));
                xstring name = e->selectSingleNode(L"@name").text();
                HTREEITEM hw = tv_1.InsertChildItem(h, name, (LPARAM)e, 15);
                createSubTree(hw, *e);
            }
        return 1;
    }
    int OnCreateTree(xstring sType)
    {
        while (tv_1.GetRootItem()>0)
            tv_1.DeleteItem(tv_1.GetRootItem());
        xml x ;
        xaserverarg arg ;
        ;
        arg.AddArg(L"sType",sType);
        if(getUrl(L"/sale/data/"+GetEntityName(1)+L"/pref/list/tree",arg.GetString(),x)!=1)
        {
            trace(x.text());
            return -1;
        }else
        {
            KXMLDOMNodeList nlist=x.selectNodes(L"root/item");
            int len = nlist.length();
            if (len >0)
            {
                int i;
                for (i=0;i <len; i++)
                {
                    KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i));
                    xstring name = e->selectSingleNode(L"@name").text();
                    HTREEITEM hw = tv_1.InsertChildItem(0, name, (LPARAM)e, 15);
                    createSubTree(hw, *e);
                    tv_1.ExpandItem(hw);
                }
                tv_1.ExpandItem(0);
            }
        }
        return 1;
    }
    //xcombobox下拉
    int OnSelectDdlb(TEvent* evt, int p)
    {
        changeddlb = 1;
        int CB_GETCURSEL = 0x0147;
        int nIndex = SendMessageW(ddlb_1.GetHWND(), CB_GETCURSEL, 0, 0);
        KXMLDOMElement e = ddlb_1.GetElement();//GetitemData(wid,nIndex);//ddlb_1.GetElement();
        KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring((nIndex + 1)) + L"]");
        xstring text = e2.selectSingleNode(L"@element").text();
        OnCreateTree(text);
        changeddlb = 0;
        return 1;
    }
    int OnDeleteRow()
    {
        int row = listwin::dw_list.GetNextSelectRow(1);
        if (row < 1){
            row = listwin::dw_list.GetRow();
            if (row < 1) {
                return -1;
            }
        }
        KXMLDOMElement e = listwin::dw_list.GetRowElement(row);
        xstring sguid = e.selectSingleNode(L"@guid").text();
        xstring sName = e.selectSingleNode(L"Name").text()+(xstring)L"";
        int  MB_YESNO = 0x00000004;
        int  IDYES =  6;
        if(MessageBox(GetHWND(),L"确认要删除客户 "+sName+L" çš„信息吗?",L"提示",MB_YESNO)!=IDYES) return 1;
        xml x ;
        xaserverarg arg ;
        ;
        arg.AddArg(L"guid",sguid);
        if (xurl::post(L"/sale/data/"+GetEntityName(1)+L"/entity/delete",arg.GetString(),x) != 1)
        {
            xstring error = x.text();
            trace(error);
        }
        else
        {
            listwin::dw_list.DeleteRow(row);
        }
        return 1;
    }
    int OnSelectAllRow()
    {
        int rows =  listwin::dw_list.GetRowCount();
        if(rows < 1) return -1;
         listwin::dw_list.SelectRow(1, rows, true);
         listwin::dw_list.Redraw();
        return 1;
    }
    int OnRClick(TEvent* evt, int p)
    {
        return 1;
    }
    int OnLogOff()
    {
        return 1;
    }
    //设置层级弹出窗与保存
    int OnLevelCustomer()
    {
        xaserverarg arg ;
        ;
        OpenWindow(L"dev:xpage[maint.Level.Customer3.vx]", arg);
        xml ux ;
        ux.loadXML(L"<Partys/>");
        KXMLDOMElement ele = ux.documentElement();
        if(arg.GetArgString(L"ok")==L"true")
        {
            xml x ;
            x.loadXML(arg.GetArgString(L"arg"));
            KXMLDOMElement uele = x.documentElement();
            xstring ParentPartyID = uele.selectSingleNode(L"//ParentPartyID").text();
            xstring ParentPartyName = L"";
            xstring GroupPartyID = uele.selectSingleNode(L"//GroupPartyID").text();
            xstring GroupPartyName = L"";
            if( uele.selectSingleNode(L"//ParentPartyID/@_displaystring"))
                ParentPartyName = uele.selectSingleNode(L"//ParentPartyID/@_displaystring").text();
            if(uele.selectSingleNode(L"//GroupPartyID/@_displaystring"))
                GroupPartyName = uele.selectSingleNode(L"//GroupPartyID/@_displaystring").text();
            int row =  dw_list.GetNextSelectRow(1);
            while(row > 0)
            {
                dw_list.SetItemString(row,L"ParentPartyID",ParentPartyID);
                dw_list.SetItemDisplayString(row,L"ParentPartyID",ParentPartyName);
                dw_list.SetItemString(row,L"GroupPartyID",GroupPartyID);
                dw_list.SetItemDisplayString(row,L"GroupPartyID",GroupPartyName);
                ele.appendChild(dw_list.GetRowElement(row).cloneNode(-1));
                row =  dw_list.GetNextSelectRow(row + 1);
            }
            dw_list.Redraw();
            arg.AddArg(L"content",ele.xml());
            if (getUrl(L"/sale/data/CustomerV3/level/update",arg.GetString(),x)!=1)
            {
                trace(x.text());
                 alert(L"设置错误!");
                return -1;
            }else
            {
                 alert(L"设置成功!");
            }
        }
        return 1;
    }
    int PreOnCmdDispatch(xstring comdid)
    {
        if(comdid.find(L"action:LogOff",0)>=0) return OnLogOff();
        if(comdid.find(L"action:bill.delete",0)>=0) return OnDeleteRow();
        //if(comdid==L"action:search1") return GridSearch();
        if(comdid==L"action:bill.refresh")
        {
            return OnRetrieve();
        }
        if(comdid==L"action:level.customer")
        {
            return OnLevelCustomer();
        }
        return 1;
    }
    int OnRowChangedEx(TEvent* evt, int p)
    {
        DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        KXMLDOMElement ele = listwin::dw_list.GetRowElement(row);
        xstring entity = ele.selectSingleNode(L"CustomerID").text();
        xml x ;
        xaserverarg arg ;
        ;
        arg.AddArg(L"EntityID",entity);
        if (getUrl(L"/sale/data/CustomerV3/entity/customeritem",arg.GetString(),x)!=1)
        {
            trace(x.text());
            return -1;
        }else
        {
            dw_goods.Retrieve(x);
            dw_goods.Redraw();
            dw_goods.SetReadOnly(true);
        }
        return 1;
    }
    int PostOnAttachEvent()
    {
        //获得树的选择事件
        AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&levelCustomerv3::OnTreeSelChanged);
        AttachEvent(L"cbx_1",L"CBN_SELCHANGE", (FEvent)&levelCustomerv3::OnSelectDdlb);
        AttachEvent(L"pages",L"PAGE_CLICK", (FEvent)&levelCustomerv3::OnChangePages);
        AttachEvent(L"dw_list",L"DWV_RCLICKED", (FEvent)&levelCustomerv3::OnRClick);//鼠标右键
        //AttachEvent(L"dw_list",L"DWV_CLICKED",OnClick);//鼠标右键
        AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED", (FEvent)&levelCustomerv3::OnRowChangedEx);
        return 1;
    }
    int onload()
    {
        PIndex=1;
        listwin::m_QueryTxt =L""; //查询条件
        m_sType=L""; //type
        m_sTypeTxt=L""; //选中树的data
        listwin::onload();
        tv_1 =  GetControl(L"tv_1");
        ddlb_1 = GetControl(L"cbx_1");
        changeddlb = 0;
        OnCreateTree(L"Source");
        dw_goods = GetControl(L"dw_goods");
        dw_goods.openUrl(L"/sale/view/CustomerV3/template/customer/customeritem");
        return 1;
    }
    int onloaded()
    {
        listwin::onloaded();
        xstring EntityID;
        int row =  dw_list.GetRow();
        if(row<0 || row>dw_list.GetRowCount()) return (xstring)L"";
        KXMLDOMElement ele = dw_list.GetRowElement(row);
        xstring id = listwin::m_configDoc.selectSingleNode(L"//entity/EntityID[1]").text();
        if(ele.selectSingleNode(id))
            EntityID = ele.selectSingleNode(id).text();
        return 1;
    }
};
jrj/project/business/SystemSettings/maint.Level.Customer3.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) MaintLevelCustomerWin :  public xframe
    {
    public:
        xdwtable dw_arg;
        xaserverarg  arg;
    public:
        MaintLevelCustomerWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static MaintLevelCustomerWin* CreateInstance(void* implPtr, void* hWnd)
        {
            MaintLevelCustomerWin* pWin = new MaintLevelCustomerWin(implPtr, (HWND)hWnd);
            return pWin;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if(comdid==L"xmOk")
            {
                xml x ;
                dw_arg.AcceptText();
                dw_arg.DwUpdateAllTo(x);
                if(arg)
                {
                    arg.AddArg(L"arg",x.xml());
                    arg.AddArg(L"ok",L"true");
                }
                CloseWindow();
                return 1;
            }
            else if(comdid==L"xmCancel")
            {
                if(arg)arg.AddArg(L"ok",L"false");
                CloseWindow();
                return 1;
            }
            return 0;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&MaintLevelCustomerWin::OnXCommand);
            return 1;
        }
        int onload()
        {
            SetArg();
            dw_arg = GetControl(L"dw_arg");
            if(GetWinParam())arg = GetArg();
            xstring dw = L"/sale/view/CustomerV3/template/customer/level.maint";
            dw_arg.openUrl(dw);
            dw_arg.SetColHeaderHeight(0);
            dw_arg.SetRowSelectorWidth(0);
            dw_arg.SetHScrollState(false);
            dw_arg.SetVScrollState(false);
            OnAttachEvent();
            return 1;
        }
    };
jrj/project/business/SystemSettings/view.assignadjust.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,278 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
    class  __declspec(dllexport) AssignAdjustWin :  public xframe
    {
    public:
        xdwgrid    dw_list;
        xnode    m_agentNode;    //Agent Condition
        KXMLDOMElement rptEle;
        xstring argStr;
        xstring    searchStr;
        int      hWndRetrieveTip;
        bool    dataretrieveing;
    public:
        AssignAdjustWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
    public:
        static AssignAdjustWin* CreateInstance(void* implPtr, void* hWnd)
        {
            AssignAdjustWin* pWin = new AssignAdjustWin(implPtr, (HWND)hWnd);
            return pWin;
        }
        int SetAgent()
        {
            xstring xfNodeAgentArea  = L"agentarea";
            xnode anode = GetAgentNode(xfNodeAgentArea);
            if(m_agentNode)
            {
                SetAgentNode (anode,m_agentNode);
            }
            else
            {
                KXMLDOMElement xframeElement =  GetElement();
                KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring s = agent.xml();
                    m_agentNode =  SetAgentNode (anode,s);
                }
            }
            return 1;
        }
        int OnSave()
        {
            xml x ;
            dw_list.AcceptText();
            dw_list.DwUpdateAllToEx(x);
            xaserverarg arg ;
            xml x0;
            x0.loadXML(L"<data/>");
            KXMLDOMNodeList t = x.selectNodes(L"data/node()[(@update.new='1') or (@update.modify='1') or (@update.delete='1') ]");
            KXMLDOMElement e1= x0.documentElement();
            xstring val0 = x.xml();
            for(int i=0; i < t.length(); i++)
            {
                KXMLDOMElement e= t.item(i);
                e1.appendChild(e);
            }
            x = ViewObject::RetrieveData(rptEle.getAttribute(L"update"),L"content",x0.xml());
            xstring str = x.documentElement().getAttribute(L"text");
            if(str == L"true")
            {
                dw_list.ResetUpdateStatus();
                alert(L"保存成功!");
            }else
            {
                alert(L"保存失败!");
            }
            return 1;
        }
        //焦点激活处理函数
        int OnSetFocus(TEvent* evt, LPARAM param)
        {
            //重置工具条
            SetAgent();
            return 1;
        }
            int  OnMultiDeal()
            {
                dw_list.AcceptText();
                int row = dw_list.GetNextSelectRow(1);
                xstring SalespersonID = dw_list.GetItemString(row, L"SalespersonID");
                xstring Sales = dw_list.GetItemDisplayString(row, L"SalespersonID");
                while(row > 0 && row <= dw_list.GetRowCount())
                {
                        row =  dw_list.GetNextSelectRow(row + 1);
                        dw_list.SetItemString(row, L"SalespersonID", SalespersonID);
                        dw_list.SetItemDisplayString(row, L"SalespersonID", Sales);
                }
                dw_list.Redraw();
            }
        int OnSearch()
        {
            xaserverarg arg;
            ;
            arg.AddArg(L"text", searchStr);
            OpenWindow(L"dev:xpage[search.dialog.vx]", arg);
            xstring str = arg.GetArgString(L"text");
            if(str != searchStr)
            {
                searchStr = str;
                dw_list.Filter(L"*",searchStr);
                return 1;
            }
            return 1;
        }
        //命令发布函数
        int OnCmdDispatch(xstring comdid)
        {
            if(comdid==L"xmSave")return OnSave();
            if(comdid==L"xmMultiDeal")return OnMultiDeal();
            if(comdid==L"xmSearch") return OnSearch();
             if(comdid==L"xmAnalysis")
            {
                //hCursor = xutil::SetCursorWait();
                xstring str = dw_list.DataAnalysis(L"");
                xaserverarg arg;
                ;
                arg.AddArg(L"html", str);
                OpenWindow(L"dev:xpage[data.vanalysis.vx]", arg);
                //xutil::RestoreCursor(hCursor);
                return 1;
             }
            if(comdid==L"xmQuery")
            {
                if(rptEle)
                {
                    xstring argUrl = rptEle.getAttribute(L"arg");
                    if(argUrl !=L"")
                    {
                        xaserverarg ar ;
                        ar.AddArg(L"argurl",argUrl);
                        if(argStr !=L"")
                            ar.AddArg(L"arg",argStr);
                        OpenWindow(L"dev:xpage[view.total.arg.vx]",ar);
                        xstring arstr = ar.GetArgString(L"arg");
                        if(arstr != L"" && ar.GetArgString(L"action")==L"ok")
                        {
                            argStr = arstr;
                            OnRetrieve(rptEle.getAttribute(L"data"),argStr);
                        }
                    }
                    else
                    {
                        argStr=L"";
                        OnRetrieve(rptEle.getAttribute(L"data"),argStr);
                    }
                }
                return 1;
             }
            return 0;
        }
        //命令处理事件
        int OnXCommand(TEvent* evt, LPARAM param)
        {
            return OnCmdDispatch(evt->xcommand.pStrID);
        }
        int OnAttachEvent()
        {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND", (FEvent)&AssignAdjustWin::OnXCommand);
            //获取焦点事件,用于重置工具条
            AttachEvent(L"WM_SETFOCUS", (FEvent)&AssignAdjustWin::OnSetFocus);
            AttachEvent(L"cb_report",L"CBN_SELCHANGE", (FEvent)&AssignAdjustWin::OnCombboChanged);
            return 1;
        }
        int OnCombboChanged(TEvent* evt, LPARAM lParam)
        {
            int h = xcombobox::GetCurSel(evt->command.hCtrl);
            if(h > -1) ShowList(h);
            return 1;
        }
        int SwitchReport(KXMLDOMElement e)
        {
            rptEle = e;
            xstring dwname = e.getAttribute(L"template");
            dw_list.openUrl(dwname);
            dw_list.Redraw();
            return 1;
        }
        int ShowList(int h)
        {
            KXMLDOMElement xframeElement =  GetElement();
            KXMLDOMElement e =  xframeElement.selectSingleNode(L"//xcombobox[@name='cb_report']/item["+(h+1).toString()+L"]");
            if(e)    SwitchReport(e);
            PostMessage(GetHWND(),0x401,(LPARAM)L"xmQuery",0);
            return 1;
        }
                int ShowRetrieveingTip()
        {
            dataretrieveing = true;
            xwin pwin = OpenWindow(L"dev:xpage[TestRetrieveing.vx]",0);
            hWndRetrieveTip =pwin.GetHWND();
            return 1;
        }
        int CloseRetrieveTip()
        {
            dataretrieveing = false;
            SendMessage(hWndRetrieveTip,0x401, (LPARAM)L"RetrieveFinished",0);
            hWndRetrieveTip = 0;
            return 1;
        }
        int  OnRetrieve(xstring dataurl, xstring argstr)
        {
            if(!rptEle) return 0;
            dw_list.Reset();
            xml x ;
            xaserverarg arg ;
            ;
            arg.AddArg(L"arg",argstr);
            if (xurl::get(dataurl,arg.GetString(),x)!=1)
            {
                trace(L"错误信息=L"+(xstring)x.text());
                dw_list.Redraw();
                return -1;
            }else
            {
                dw_list.Retrieve(x);
                dw_list.Redraw();
                dw_list.SetSelectionMode(4);
                //dw_list.SetReadOnly(true);
            }
            return 1;
        }
        int onload()
        {
            rptEle = 0;
            dw_list = GetControl(L"dw_list");
            OnAttachEvent();
            hWndRetrieveTip = 0;
            dataretrieveing = false;
            ShowList(0);
            return 1;
        }
        int onloaded()
        {
            SetAgent();
            return 1;
        }
    };