#include "xcontrol/xreport.hpp" 
 | 
#include "wobject/xwin.hpp" 
 | 
#include "wobject/xaserverarg.hpp" 
 | 
#include "wobject/xstring.hpp" 
 | 
#include "wobject/xurl.hpp" 
 | 
#include "xcontrol/xshtml.hpp" 
 | 
#include "vbusiness/vframe/frame.vframe.vbusiness.hpp" 
 | 
#include "viewobject/view.base.hpp" 
 | 
  
 | 
using xml = Hxsoft::XFrame::KXMLDOMDocument; 
 | 
  
 | 
class __declspec(dllexport) HomeWin : public xframe 
 | 
{ 
 | 
public: 
 | 
    xreport dw_list; 
 | 
public: 
 | 
    HomeWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} 
 | 
public: 
 | 
    static HomeWin* CreateInstance(void* implPtr, void* hWnd) 
 | 
    { 
 | 
        return new HomeWin(implPtr, (HWND)hWnd); 
 | 
    } 
 | 
  
 | 
    int init() 
 | 
    { 
 | 
        xaserverarg arg; 
 | 
        KXMLDOMDocument doc; 
 | 
        if (xurl::get(GetServerUrl(), L"/sale/data/vpage/vstart/list", arg.GetString(), doc) != 1) 
 | 
        { 
 | 
            alert(((xstring)L"error:" + doc.xml()).c_str()); 
 | 
            return 0; 
 | 
        } 
 | 
        if (!doc.xml()) return 0; 
 | 
  
 | 
        dw_list.Retrieve(doc); 
 | 
        dw_list.CreateTree((LPCWSTR)L"node()", 1, 15, 16); 
 | 
        dw_list.Redraw(); 
 | 
        /* 
 | 
        dw_list.Redraw(); 
 | 
        dw_list.SetReadOnly(true); 
 | 
        */ 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    xstring GetEntityIDName(LPARAM pr) 
 | 
    { 
 | 
        return L"@EntityID"; 
 | 
    } 
 | 
  
 | 
    xstring GetEntityName(LPARAM pr) 
 | 
    { 
 | 
        int nRow = dw_list.GetRow(); 
 | 
        if (nRow < 0) return L""; 
 | 
        KXMLDOMElement ele = dw_list.GetRowElement(nRow); 
 | 
        if (!ele) return L""; 
 | 
        return ele.getAttribute(L"category"); 
 | 
    } 
 | 
  
 | 
    xstring GetEntityID(LPARAM pr) 
 | 
    { 
 | 
        int row = dw_list.GetRow(); 
 | 
        if (row<1 || row>dw_list.GetRowCount()) return 0; 
 | 
        KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
        if (!ele) return L""; 
 | 
        xstring id = GetEntityIDName(pr); 
 | 
        if (!ele.selectSingleNode(id)) return L""; 
 | 
        xstring d = ele.selectSingleNode(id).text(); 
 | 
        return d; 
 | 
    } 
 | 
  
 | 
    xstring GetTaskID() 
 | 
    { 
 | 
        int row = dw_list.GetRow(); 
 | 
        if (row<1 || row>dw_list.GetRowCount()) return 0; 
 | 
        KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
        if (!ele) return L""; 
 | 
        xstring taskid = ele.getAttribute(L"taskid"); 
 | 
        return taskid; 
 | 
    } 
 | 
  
 | 
    xstring GetReason(LPARAM pr, xstring comd) 
 | 
    { 
 | 
        xaserverarg arg; 
 | 
  
 | 
        if (GetEntityName(pr) == L"DeliveryDelay") 
 | 
        { 
 | 
            xstring ls_cmdid = comd;//pr; 
 | 
            int row = dw_list.GetRow(); 
 | 
            if (row < 1) return 1; 
 | 
            KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
            xstring  ls_status = ele.selectSingleNode(L"@status").text(); 
 | 
            if (ls_status == L"»õÔ´²¿´ýÈ·ÈÏ" && ls_cmdid == L"action:bill.check.agree") 
 | 
            { 
 | 
                arg.AddArg(L"DDID", GetEntityID(2)); 
 | 
                arg.AddArg(L"_ModuelPage", L"dev:xpage[DeliveryDelay.supmancheck.vx]"); 
 | 
                OpenWindow(L"dev:xpage[vindexforold.vx]", arg); 
 | 
                //openUrl(L"/sale/view/DeliveryDelay/xpage/DeliveryDelay/supmancheck", arg); 
 | 
                if (arg.GetArgString(L"ret") == L"Sucess") 
 | 
                { 
 | 
                    return L"Auto..."; 
 | 
                } 
 | 
                return L""; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                //return frame::GetReason(pr);                 
 | 
                arg.AddArg(L"EntityID", GetEntityID(2)); 
 | 
                arg.AddArg(L"_ModuelPage", L"dev:xpage[workflow.chkdlg.vx]"); 
 | 
                OpenWindow(L"dev:xpage[vindexforold.vx]", arg); 
 | 
                //int newArg2 = arg.ptr_native_; 
 | 
                //openUrl(L"/sale/view/workflow.view/xpage/chkdlg_vd", newArg2);                                                     
 | 
                xstring comdid = arg.GetArgString(L"comdid"); 
 | 
                if (comdid == L"xmOK") 
 | 
                { 
 | 
                    xstring value = arg.GetArgString(L"content") + L" "; 
 | 
                    return value; 
 | 
                } 
 | 
                return L""; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            //return frame::GetReason(pr); 
 | 
            arg.AddArg(L"EntityID", GetEntityID(2)); 
 | 
            OpenWindow(L"dev:xpage[workflow.chkdlg.vx]", arg); 
 | 
            //openUrl(L"/sale/view/workflow.view/xpage/chkdlg", arg);                                     
 | 
            xstring comdid2 = arg.GetArgString(L"comdid"); 
 | 
            if (comdid2 == L"xmOK") 
 | 
            { 
 | 
                xstring value2 = arg.GetArgString(L"content") + L" "; 
 | 
                return value2; 
 | 
            } 
 | 
            return L""; 
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
    int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg) 
 | 
    { 
 | 
        init(); 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    xstring GetEntityWorkNode(LPARAM pr, xstring what) 
 | 
    { 
 | 
        if (what == L"open") 
 | 
        { 
 | 
            int row = dw_list.GetRow(); 
 | 
            if (row<0 || row>dw_list.GetRowCount()) return 0; 
 | 
            KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
            xstring aurl = ele.selectSingleNode(L"@url").text(); 
 | 
            return aurl; 
 | 
        } 
 | 
        return L""; 
 | 
    } 
 | 
  
 | 
  
 | 
    int SetAgent() 
 | 
    { 
 | 
        if (dw_list) 
 | 
        { 
 | 
            //init(); 
 | 
            xstring id = GetEntityID(1); 
 | 
            if (id != L"")    xframe::SetAgent((xstring)L"letter", id); 
 | 
        } 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
  
 | 
    int openUrl(xstring aurl, /*param */ LPARAM para) 
 | 
    { 
 | 
        //alert(aurl); 
 | 
        xml x; 
 | 
  
 | 
        xurl::get(aurl, L"", x); 
 | 
        KXMLDOMDocument doc = x; 
 | 
        KXMLDOMNode n = doc.selectSingleNode(L"//resource/@src"); 
 | 
        //alert(x.xml()); 
 | 
        if (n) 
 | 
        { 
 | 
            /* 
 | 
            xstring xq = n.text(); 
 | 
            OpenWindow(xq, para); 
 | 
            return 1; 
 | 
            */ 
 | 
  
 | 
            xstring xq = n.text(); 
 | 
            if (doc.selectSingleNode(L"//resource/@argnative")) 
 | 
            { 
 | 
                OpenWindow(xq, para); 
 | 
            } 
 | 
  
 | 
            //alert(xq); 
 | 
            else if (xq.find(L"upplier", 0) > 0 and xq != L"dev:xpage[Maint.SupplierStatusModify.vx]" and xq != L"dev:xpage[Maint.SupplierSubmit.vx]") 
 | 
                OpenWindow(xq, para); 
 | 
            else 
 | 
            { 
 | 
                xq = xq.replace(L"dev:xpage[", L""); 
 | 
                xq = xq.replace(L"]", L""); 
 | 
                xaserverarg& args = *(xaserverarg*)para; 
 | 
                args.AddArg(L"_ModuelPage", xq); 
 | 
                //alert(args.GetString()); 
 | 
                OpenWindow(L"dev:xpage[vindexforold.vx]", args); 
 | 
            } 
 | 
            return 1; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            xaserverarg& arg = *(xaserverarg*)para; 
 | 
            n = doc.selectSingleNode(L"//resource[@vface!='' and @view!='']"); 
 | 
            if (n) 
 | 
            { 
 | 
                xstring vface = n.selectSingleNode(L"@vface").text(); 
 | 
                xstring view = n.selectSingleNode(L"@view").text(); 
 | 
                xstring config = n.selectSingleNode(L"@config").text(); 
 | 
                if (config != L"") 
 | 
                { 
 | 
                    arg.AddArg(L"config", config, L"xs:xstring"); 
 | 
                } 
 | 
                if (vface == L"." || vface == L"") 
 | 
                { 
 | 
                    xstring v = n.selectSingleNode(L"@url").text(); 
 | 
                    xstring burl = aurl.mid(0, aurl.find(v, 0)); 
 | 
                    //alert(burl); 
 | 
                    return openUrl(burl + view, arg); 
 | 
                } 
 | 
                else 
 | 
                    return openUrl(vface + L"/" + view, arg); 
 | 
            } 
 | 
        } 
 | 
        return -1; 
 | 
    } 
 | 
  
 | 
    int SetTaskProcessed() 
 | 
    { 
 | 
        int row = dw_list.GetRow(); 
 | 
        if (row<0 || row>dw_list.GetRowCount()) return 1; 
 | 
        if (!dw_list.GetRowElement(row)) return 1; 
 | 
        KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
  
 | 
        xaserverarg arg; 
 | 
  
 | 
        xstring taskid = ele.getAttribute(L"taskid"); 
 | 
        arg.AddArg(L"TaskID", taskid); 
 | 
        xml x = ViewObject::RetrieveData(L"/sale/data/business/update/taskprocessed", L"TaskID", taskid); 
 | 
        if (x) alert(x.text()); 
 | 
        dw_list.DeleteRow(row); 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
    int ProcessFlowAction(xstring comdid, LPARAM pr1) 
 | 
    { 
 | 
        if (comdid == L"__ModifyRows") 
 | 
        { 
 | 
            OnModifyRows(); 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        LPARAM  pr = pr1; 
 | 
        xstring action = comdid.mid(comdid.find(L"action:", 0) + 7, 9999); 
 | 
        if (action == L"bill.delete" || action == L"bill.deleteEx") 
 | 
        { 
 | 
            if (MessageBox(GetHWND(), L"ÊÇ·ñÈ·¶¨É¾³ý¼Ç¼!", L"Ìáʾ", 1) == 2) 
 | 
                return 1; 
 | 
        } 
 | 
  
 | 
        if (action == L"bill.processed") 
 | 
        { 
 | 
            if (MessageBox(GetHWND(), L"ÊÇ·ñÈ·¶¨Ñ¡ÖеÄÈÎÎñתÒÑ´¦Àí?", L"Ìáʾ", 1) == 2) 
 | 
                return 1; 
 | 
            return  SetTaskProcessed(); 
 | 
        } 
 | 
  
 | 
        xaserverarg arg; 
 | 
  
 | 
        arg.AddArg(L"Action", action, L"xs:xstring"); 
 | 
        xml x; 
 | 
  
 | 
  
 | 
        xstring aurl = L"/workflow/query/actioninfo/" + action; 
 | 
  
 | 
        if (xurl::get(aurl, L"", x) != 1) 
 | 
            return -1; 
 | 
  
 | 
        int nlen; 
 | 
        int i = 0; 
 | 
        xstring name; 
 | 
        xstring worknode; 
 | 
        xstring how; 
 | 
        xstring state = L""; 
 | 
        xstring billstatus = L""; 
 | 
        KXMLDOMElement e; 
 | 
  
 | 
        arg.AddArg(L"EntityName", GetEntityName(pr), L"xs:xstring"); 
 | 
        //²ÎÊýÒªÇó 
 | 
        KXMLDOMNodeList nlist = x.selectNodes(L"//params/param"); 
 | 
        nlen = nlist.length(); 
 | 
  
 | 
        for (i = 0; i < nlen; i++) 
 | 
        { 
 | 
            e = nlist.item(i); 
 | 
            name = e.selectSingleNode(L"@name").text(); 
 | 
            how = e.selectSingleNode(L"@how").text(); 
 | 
  
 | 
            xstring content = L""; 
 | 
            if (how == L"Entity" || how == L"EntityData") 
 | 
            { 
 | 
                content = GetEntityData(pr); 
 | 
            } 
 | 
            if (e.selectSingleNode(L"@valid")) 
 | 
            { 
 | 
                if (content.find(L"update.modify", 0) > 0 || content.find(L"update.delete", 0) > 0) {} 
 | 
                else return 0; 
 | 
                if (CheckEntityValidity(pr) < 0) return -1; 
 | 
            } 
 | 
            if (how == L"EntityID") 
 | 
                arg.AddArg(name, GetEntityID(pr), L"xs:xstring"); 
 | 
            else if (how == L"Entity" || how == L"EntityData") 
 | 
                arg.AddArg(name, content, L"xs:xstring"); 
 | 
            else if (how == L"EntityRowData") 
 | 
                arg.AddArg(name, GetEntityRowData(pr), L"xs:xstring"); 
 | 
            else if (how == L"Reason") 
 | 
            { 
 | 
                arg.AddArg(name, GetReason(1, L""), L"xs:xstring"); 
 | 
            } 
 | 
            else if (how == L"EntityNo") 
 | 
                arg.AddArg(name, GetEntityNo(pr), L"xs:xstring"); 
 | 
            else if (how == L"EntityTitle") 
 | 
                arg.AddArg(name, GetEntityTitle(pr), L"xs:xstring"); 
 | 
            else if (how == L"GetParam") 
 | 
                arg.AddArg(name, GetParamValue(name), L"xs:xstring"); 
 | 
            else if (how == L"UserID") 
 | 
                arg.AddArg(name, xaserver::GetUserId(), L"xs:xstring"); 
 | 
            //"CHeckAskMsg" 
 | 
            //"CHeckMsg 
 | 
            if (how == L"Reason" && arg.GetArgString(name) == L"") return -1; 
 | 
            //if(how==L"EntityData" && arg.GetArgString(name)==L"") return -1; 
 | 
            if (e.selectSingleNode(L"@check")) 
 | 
            { 
 | 
  
 | 
                xstring doCheck = e.selectSingleNode(L"@check").text(); 
 | 
                if (doCheck == L"Y") 
 | 
                { 
 | 
                    xstring value = arg.GetArgString(name); 
 | 
                    if (value == L"") 
 | 
                    { 
 | 
                        alert(name + L" ²ÎÊýÖµ²»ÄÜΪ¿Õ£¬Ê¼þÖÕÖ¹!"); 
 | 
                        return -1; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        arg.AddArg(L"action.entity", GetEntityName(pr), L"xs:xstring"); 
 | 
        ProcessUsedArg(arg); 
 | 
        //¶¯×÷ 
 | 
        KXMLDOMNode n = x.selectSingleNode(L"//view.action[1]"); 
 | 
  
 | 
        bool execResult = true; //´¦Àí½á¹û 
 | 
        if (n) 
 | 
        { 
 | 
            name = n.selectSingleNode(L"@name").text(); 
 | 
            if (n.selectSingleNode(L"@worknode")) 
 | 
                worknode = n.selectSingleNode(L"@worknode").text(); 
 | 
            else 
 | 
                worknode = GetEntityWorkNode(pr, name); 
 | 
            arg.AddArg(L"do", name, L"xs:xstring"); 
 | 
            if (worknode != L"") 
 | 
            { 
 | 
                if (worknode.find(L"dev:xpage") == 0) 
 | 
                    OpenWindow(worknode, arg); 
 | 
                else 
 | 
                    openUrl(worknode, arg); //---openUrl(worknode,arg); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                alert(L"Warn: Please configure worknode for action " + name + L"."); 
 | 
                return -1; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            //url::post(GetEntityName(pr)+L"/workflow/action",arg.GetString(),x); 
 | 
            xml x1; 
 | 
            int retxx = xurl::post(L"/workflow/action/" + GetEntityName(pr) + L"/" + action, arg.GetString(), x1); 
 | 
  
 | 
            //alert(L"/workflow/action/"+GetEntityName(pr)+L"/"+action+L"\r\n"+arg.GetString()+L"\r\n"+x1.xml()); 
 | 
  
 | 
            if (retxx != 1) execResult = false; 
 | 
            if (x1.selectSingleNode(L"//process")) 
 | 
            { 
 | 
                KXMLDOMElement e1 = x1.selectSingleNode(L"//process"); 
 | 
                xstring valid = e1.getAttribute(L"valid"); 
 | 
                xstring finished = e1.getAttribute(L"finished"); 
 | 
                xstring errInfo = L""; 
 | 
                if (valid == L"0") 
 | 
                { 
 | 
                    errInfo = e1.getAttribute(L"errInfo"); 
 | 
                    alert(errInfo); 
 | 
                    execResult = false; 
 | 
                } 
 | 
                else if (finished == L"0") 
 | 
                { 
 | 
                    errInfo = e1.getAttribute(L"errInfo"); 
 | 
                    errInfo = L"´¦Àíʧ°Ü!\r\n" + errInfo; 
 | 
                    alert(errInfo); 
 | 
                    execResult = false; 
 | 
                } 
 | 
            } 
 | 
            else if (x1.selectSingleNode(L"//process-check-list")) 
 | 
            { 
 | 
                KXMLDOMElement e2 = x1.selectSingleNode(L"//process-check-list"); 
 | 
                xstring val = e2.getAttribute(L"process"); 
 | 
                if (val == L"ok") 
 | 
                { 
 | 
                    alert(L"´¦Àí³É¹¦"); 
 | 
                    PostMessage(GetHWND(), 0x401, (WPARAM)L"action:bill.refresh", 0); 
 | 
                } 
 | 
                else if (val == L"part") 
 | 
                { 
 | 
                    alert(L"Óв¿·ÖÊý¾Ý´¦Àíδ³É¹¦£¬Ìá½»³É¹¦µÄÒÑ´¦Àí¡£"); 
 | 
                    PostMessage(GetHWND(), 0x401, (WPARAM)L"action:bill.refresh", 0); 
 | 
                } 
 | 
                else 
 | 
                    alert((xstring)L"Êý¾Ý´¦Àí²»³É¹¦\r\n" + x1.xml()); 
 | 
                return 1; 
 | 
            } 
 | 
            else if (x1.selectSingleNode(L"//msg")) 
 | 
            { 
 | 
                xstring aStr = x1.selectSingleNode(L"//msg[1]").text(); 
 | 
                //if(aStr.find(L"Àí³É¹¦",0) < 0) 
 | 
                //    alert(aStr); 
 | 
                if (aStr.find(L"ʧ°Ü", 0) >= 0) 
 | 
                    execResult = false; 
 | 
                alert(aStr); 
 | 
            } 
 | 
            if (x1.selectSingleNode(L"//msg/@state")) 
 | 
            { 
 | 
                state = x1.selectSingleNode(L"//msg[1]/@state").text(); 
 | 
                arg.AddArg(L"state", state, L"xs:xstring"); 
 | 
                billstatus = x1.selectSingleNode(L"//msg[1]/@billstatus").text(); 
 | 
                arg.AddArg(L"billstatus", billstatus, L"xs:xstring"); 
 | 
            } 
 | 
        } 
 | 
        //¸üÐÂÒªÇó 
 | 
        if (execResult) 
 | 
        { 
 | 
            nlist = x.selectNodes(L"//view/update"); 
 | 
            nlen = nlist.length(); 
 | 
            for (i = 0; i < nlen; i++) 
 | 
            { 
 | 
                e = nlist.item(i); 
 | 
                how = e.selectSingleNode(L"@do").text(); 
 | 
                if (how == L"setstate") 
 | 
                { 
 | 
                    if (state != L"") 
 | 
                    { 
 | 
                        arg.AddArg(L"state", state, L"xs:xstring"); 
 | 
                        arg.AddArg(L"billstatus", billstatus, L"xs:xstring"); 
 | 
                        ViewUpdate(pr, how, arg); 
 | 
  
 | 
                    } 
 | 
                } 
 | 
                else 
 | 
                    ViewUpdate(pr, how, arg); 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
  
 | 
    /*int ProcessFlowAction(xstring comdid, int pr1) 
 | 
    { 
 | 
        //trace(L"comdid--->  %s\r\n", comdid); 
 | 
        if(comdid == L"__ModifyRows") 
 | 
        { 
 | 
            OnModifyRows(); 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        LPARAM  pr = pr1; 
 | 
        xstring action = comdid.mid(comdid.find(L"action:",0)+7,9999); 
 | 
        if(action == L"bill.delete" || action == L"bill.deleteEx") 
 | 
        { 
 | 
            if (MessageBox(GetHWND(),L"ÊÇ·ñÈ·¶¨É¾³ý¼Ç¼!",L"Ìáʾ1",1) == 2) 
 | 
                return 1; 
 | 
        } 
 | 
  
 | 
        xaserverarg arg = new xaserverarg ; 
 | 
  
 | 
        arg.AddArg(L"Action", action,L"xs:xstring"); 
 | 
        xml x ; 
 | 
        x.setNativePointer(xml ::CreateInstance()); 
 | 
  
 | 
        xstring aurl = L"/workflow/query/actioninfo/"+action; 
 | 
        //trace(L"abc---",aurl); 
 | 
  
 | 
        if(xurl::get(aurl, L"", x) != 1) 
 | 
            return -1; 
 | 
        //alert(x.xml()); 
 | 
        int nlen ; 
 | 
        int i = 0; 
 | 
        xstring name; 
 | 
        xstring worknode; 
 | 
        xstring how; 
 | 
        xstring state; 
 | 
        KXMLDOMElement e; 
 | 
  
 | 
        arg.AddArg(L"EntityName", GetEntityName(pr),L"xs:xstring"); 
 | 
        //²ÎÊýÒªÇó 
 | 
        KXMLDOMNodeList nlist = x.selectNodes(L"//params/param"); 
 | 
        nlen = nlist.length; 
 | 
  
 | 
        //trace(L"xxx"); 
 | 
        for(i=0;    i<nlen;    i++) 
 | 
        { 
 | 
            //trace(L"yyy"); 
 | 
            e = nlist.item(i); 
 | 
            //trace(e.xml); 
 | 
            name = e.selectSingleNode(L"@name").text(); 
 | 
            how = e.selectSingleNode(L"@how").text(); 
 | 
            //trace(how); 
 | 
            //trace(name); 
 | 
            xstring content = L""; 
 | 
            if(how==L"Entity" || how == L"EntityData") 
 | 
                content = GetEntityData(pr); 
 | 
            if(e.selectSingleNode(L"@valid")) 
 | 
            { 
 | 
                if(content.find(L"update.modify", 0) > 0 || content.find(L"update.delete",0) > 0) {} else return 0; 
 | 
                if(CheckEntityValidity(pr) < 0) return -1; 
 | 
            } 
 | 
            if(how==L"EntityID") 
 | 
                arg.AddArg(name, GetEntityID(pr),L"xs:xstring"); 
 | 
            else if(how==L"Entity" || how == L"EntityData") 
 | 
                arg.AddArg(name, content,L"xs:xstring"); 
 | 
            else if(how==L"EntityRowData") 
 | 
                arg.AddArg(name, GetEntityRowData(pr),L"xs:xstring"); 
 | 
            else if(how==L"Reason") 
 | 
                arg.AddArg(name, GetReason(pr, comdid),L"xs:xstring"); 
 | 
            else if(how==L"EntityNo") 
 | 
                arg.AddArg(name, GetEntityNo(pr),L"xs:xstring"); 
 | 
            else if(how==L"EntityTitle") 
 | 
                arg.AddArg(name, GetEntityTitle(pr),L"xs:xstring"); 
 | 
            else if(how==L"GetParam") 
 | 
                arg.AddArg(name, GetParamValue(name),L"xs:xstring"); 
 | 
            else if(how==L"UserID") 
 | 
                arg.AddArg(name, xaserver::GetUserId(),L"xs:xstring"); 
 | 
            //"CHeckAskMsg" 
 | 
            //"CHeckMsg 
 | 
            //trace(arg.GetString()); 
 | 
            //trace(arg.GetArgString(name)); 
 | 
            if(how==L"Reason" && arg.GetArgString(name)==L"") return -1; 
 | 
            //trace(L"cky1"); 
 | 
            //if(how==L"EntityData" && arg.GetArgString(name)==L"") return -1; 
 | 
            if(e.selectSingleNode(L"@check")) 
 | 
            { 
 | 
  
 | 
                xstring doCheck = e.selectSingleNode(L"@check").text(); 
 | 
                if(doCheck == L"Y") 
 | 
                { 
 | 
                    xstring value = arg.GetArgString(name); 
 | 
                    if(value == L"") 
 | 
                    { 
 | 
                        alert(name + L" ²ÎÊýÖµ²»ÄÜΪ¿Õ£¬Ê¼þÖÕÖ¹!"); 
 | 
                        return -1; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        arg.AddArg(L"action.entity",GetEntityName(pr),L"xs:xstring"); 
 | 
        //trace(L"zzz"); 
 | 
        //trace(arg.GetString()); 
 | 
        //¶¯×÷ 
 | 
        KXMLDOMNode n = x.selectSingleNode(L"//view.action[1]"); 
 | 
        //trace(x.xml()); 
 | 
        bool execResult = true; //´¦Àí½á¹û 
 | 
  
 | 
        if(n) 
 | 
        { 
 | 
            name = n.selectSingleNode(L"@name").text(); 
 | 
            if(n.selectSingleNode(L"@worknode")) 
 | 
                worknode = n.selectSingleNode(L"@worknode").text(); 
 | 
            else 
 | 
                worknode = GetEntityWorkNode(pr,name); 
 | 
            arg.AddArg(L"do",name,L"xs:xstring"); 
 | 
            if(worknode !=L"") 
 | 
            { 
 | 
                //trace(L"do:"+worknode); 
 | 
                int p = arg.ptr_native_; 
 | 
                openUrl(worknode,p); //---openUrl(worknode,arg); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                alert(L"Warn: Please configure worknode for action "+ name +L"."); 
 | 
                return -1; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            //url::post(GetEntityName(pr)+L"/workflow/action",arg.GetString(),x); 
 | 
            //trace(L"/workflow/action/"+GetEntityName(pr)+L"/"+action); 
 | 
            //trace(L"=====L"); 
 | 
            //trace(arg.GetString()); 
 | 
            xml x1 ; 
 | 
            x1.setNativePointer(xml::CreateInstance()); 
 | 
            int retxx = url::post(L"/workflow/action/"+GetEntityName(pr)+L"/"+action,arg.GetString(),x1); 
 | 
            if(retxx != 1) execResult = false; 
 | 
            //trace(x1.xml()); 
 | 
            if(x1.selectSingleNode(L"//msg")) 
 | 
            { 
 | 
                xstring aStr = L""+x1.selectSingleNode(L"//msg[1]").text(); 
 | 
                if(aStr.find(L"Àí³É¹¦",0) < 0) 
 | 
                    alert(aStr); 
 | 
                if(aStr.find(L"ʧ°Ü",0) >= 0) 
 | 
                    execResult = false; 
 | 
                trace(aStr); 
 | 
            } 
 | 
            if(x1.selectSingleNode(L"//msg/@state")) 
 | 
            { 
 | 
                state = x1.selectSingleNode(L"//msg[1]/@state").text(); 
 | 
                arg.AddArg(L"state",state,L"xs:xstring"); 
 | 
            } 
 | 
        } 
 | 
        //¸üÐÂÒªÇó 
 | 
        if(execResult) 
 | 
        { 
 | 
            nlist = x.selectNodes(L"//view/update"); 
 | 
            nlen = nlist.length; 
 | 
            for(i=0;    i<nlen;    i++) 
 | 
            { 
 | 
                 e = nlist.item(i); 
 | 
                how = e.selectSingleNode(L"@do").text(); 
 | 
                //trace(how+L"444"+state); 
 | 
                if(how==L"setstate") 
 | 
                { 
 | 
                    if(state != L"") 
 | 
                    { 
 | 
                        arg.AddArg(L"state",state,L"xs:xstring"); 
 | 
                        ViewUpdate(pr,how,arg); 
 | 
  
 | 
                    } 
 | 
                } 
 | 
                else 
 | 
                    ViewUpdate(pr,how,arg); 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        return 1; 
 | 
    }    */ 
 | 
  
 | 
    int BillPurchor() 
 | 
    { 
 | 
        int row1 = dw_list.GetRow(); 
 | 
        if (row1<0 || row1>dw_list.GetRowCount()) return 1; 
 | 
        if (!dw_list.GetRowElement(row1)) return 1; 
 | 
        KXMLDOMElement ele1 = dw_list.GetRowElement(row1); 
 | 
        xstring id1 = GetEntityIDName(1); 
 | 
        xstring d1 = ele1.selectSingleNode(id1).text(); 
 | 
        xstring name1 = GetEntityName(row1); 
 | 
  
 | 
        xaserverarg arg1; 
 | 
        xstring templ = ele1.getAttribute(L"content2"); 
 | 
        xstring taskid = ele1.getAttribute(L"taskid"); 
 | 
        arg1.AddArg(L"template", templ); 
 | 
        arg1.AddArg(L"TaskID", taskid); 
 | 
        arg1.AddArg(L"EntityID", d1); 
 | 
        arg1.AddArg(L"bill.purchor", L"1"); 
 | 
  
 | 
        OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1); 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    //ÃüÁî·¢²¼º¯Êý 
 | 
    int OnCmdDispatch(xstring comdid) 
 | 
    { 
 | 
        //alert(comdid); 
 | 
        xstring  userno = publiccode::GetUser().no; 
 | 
  
 | 
        if (comdid == L"action:bill.purchor") return BillPurchor(); 
 | 
        if (comdid == L"action:bill.check.agree") 
 | 
        { 
 | 
            int row3 = dw_list.GetRow(); 
 | 
            if (row3<0 || row3>dw_list.GetRowCount()) return 1; 
 | 
            if (!dw_list.GetRowElement(row3)) return 1; 
 | 
            KXMLDOMElement ele3 = dw_list.GetRowElement(row3); 
 | 
            xstring id3 = GetEntityIDName(1); 
 | 
            xstring d3 = ele3.selectSingleNode(id3).text(); 
 | 
            xstring name3 = GetEntityName(row3); 
 | 
  
 | 
            if (name3 == L"SaleItem3") 
 | 
            { 
 | 
                xml x3; 
 | 
                xaserverarg arg3; 
 | 
                arg3.AddArg(L"SOLineID", d3); 
 | 
                if (getUrl(L"/sale/data/SaleOrder/UpdateSOLineTypeExS", arg3.GetString(), x3) != 1) 
 | 
                { 
 | 
                    xstring error3 = x3.text(); 
 | 
                    alert(L"err:" + error3); 
 | 
                    return 1; 
 | 
                } 
 | 
                ProcessFlowAction(L"action:bill.check.agree", 1); 
 | 
                return 1; 
 | 
            } 
 | 
        } 
 | 
        if (userno == L"00601" || userno == L"00701" || userno == L"admin") 
 | 
        { 
 | 
            if (comdid == L"SourceRemark") 
 | 
            { 
 | 
                OnSourceRemark(); 
 | 
                return 1; 
 | 
            } 
 | 
        } 
 | 
        if (comdid == L"action:bill.check.agreeEx") 
 | 
        { 
 | 
            int row2 = dw_list.GetRow(); 
 | 
            if (row2<0 || row2>dw_list.GetRowCount()) return 1; 
 | 
            if (!dw_list.GetRowElement(row2)) return 1; 
 | 
            KXMLDOMElement ele2 = dw_list.GetRowElement(row2); 
 | 
            xstring id2 = GetEntityIDName(1); 
 | 
            xstring d2 = ele2.selectSingleNode(id2).text(); 
 | 
            xstring name2 = GetEntityName(row2); 
 | 
  
 | 
            if (name2 == L"SaleItem3") 
 | 
            { 
 | 
                if (MessageBox(GetHWND(), L"ÊÇ·ñÈ·ÈÏ ¹¤³§¸¶¿î£¿", L"Ìáʾ1", 1) == 2) 
 | 
                    return 1; 
 | 
  
 | 
                xml x5; 
 | 
                xaserverarg arg5; 
 | 
                arg5.AddArg(L"SOLineID", d2); 
 | 
                if (getUrl(L"/sale/data/SaleOrder/UpdateSOLineTypeEx", arg5.GetString(), x5) != 1) 
 | 
                { 
 | 
                    xstring error = x5.text(); 
 | 
                    alert(L"err:" + error); 
 | 
                    return 1; 
 | 
                } 
 | 
                alert(x5.text()); 
 | 
                ProcessFlowAction(L"action:bill.check.agree", 1); 
 | 
                return 1; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        if (comdid && comdid.find(L"hand!", 0) == 0) 
 | 
        { 
 | 
            if (comdid == L"hand!toleft") 
 | 
            { 
 | 
                ProcessFlowAction(L"action:bill.check.unagree", 1); 
 | 
                return 1; 
 | 
            } 
 | 
            if (comdid == L"hand!toright") 
 | 
            { 
 | 
                ProcessFlowAction(L"action:bill.check.agree", 1); 
 | 
                return 1; 
 | 
            } 
 | 
            if (comdid == L"hand!toupright") 
 | 
            { 
 | 
                int row = dw_list.GetRow(); 
 | 
                if (row<0 || row>dw_list.GetRowCount()) return 1; 
 | 
                if (!dw_list.GetRowElement(row)) return 1; 
 | 
                KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
                xstring id = GetEntityIDName(1); 
 | 
                xstring d = ele.selectSingleNode(id).text(); 
 | 
                if (d == L"") return 1; 
 | 
                ProcessFlowAction(L"action:bill.open", 1); 
 | 
                return 1; 
 | 
            } 
 | 
            if (comdid == L"hand!round") 
 | 
            { 
 | 
                ProcessFlowAction(L"action:bill.note", 1); 
 | 
                return 1; 
 | 
            } 
 | 
  
 | 
        } 
 | 
        if (comdid == L"xmIconNotifyClicked") 
 | 
        { 
 | 
            //OpenWindow(L"dev:xpage[/]",0); 
 | 
            init(); 
 | 
            return 1; 
 | 
        } 
 | 
        if (comdid == L"xmRefresh" || comdid == L"xmRefreshTask") 
 | 
        { 
 | 
            init(); 
 | 
            return 1; 
 | 
        } 
 | 
        if (ProcessFlowAction(comdid, 1) == 0) return 0; 
 | 
        if (comdid == L"action:bill.open") 
 | 
        { 
 | 
            int row1 = dw_list.GetRow(); 
 | 
            if (row1<0 || row1>dw_list.GetRowCount()) return 1; 
 | 
            if (!dw_list.GetRowElement(row1)) return 1; 
 | 
            KXMLDOMElement ele1 = dw_list.GetRowElement(row1); 
 | 
            xstring id1 = GetEntityIDName(1); 
 | 
            xstring d1 = ele1.selectSingleNode(id1).text(); 
 | 
            xstring name1 = GetEntityName(row1); 
 | 
  
 | 
            if (name1 == L"QuoteEnquiry") 
 | 
            { 
 | 
                xaserverarg arg1; 
 | 
                xstring templ = ele1.getAttribute(L"content2"); 
 | 
                xstring taskid = ele1.getAttribute(L"taskid"); 
 | 
                arg1.AddArg(L"template", templ); 
 | 
                arg1.AddArg(L"TaskID", taskid); 
 | 
                arg1.AddArg(L"EntityID", d1); 
 | 
  
 | 
                OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1); 
 | 
                return 1; 
 | 
            } 
 | 
            if (name1 == L"SampleFee") 
 | 
            { 
 | 
                xaserverarg arg; 
 | 
  
 | 
                arg.AddArg(L"SampleFeeID", d1); 
 | 
                //arg.AddArg(L"HWND",GetHWND().toString()); 
 | 
                OpenWindow(L"dev:xpage[maint.samplefee.vx]", arg); 
 | 
                return 1; 
 | 
            } 
 | 
        } 
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    int OnSourceRemark() 
 | 
    { 
 | 
        xstring name = L"ÊÂÎñ´¦Àí"; 
 | 
        xml x = ViewObject::RetrieveData(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 arg1; 
 | 
        arg1.AddArg(L"value", Content); 
 | 
        OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg1); 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    int OnDoubleClicked(TEvent* evt, LPARAM p) 
 | 
    { 
 | 
        DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; 
 | 
        int row = hdr.row; 
 | 
        if (row<0 || row>dw_list.GetRowCount()) return 1; 
 | 
        if (!dw_list.GetRowElement(row)) return 1; 
 | 
        KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
        xstring id = GetEntityIDName(1); 
 | 
        xstring d = ele.selectSingleNode(id).text(); 
 | 
        if (d == L"") return 1; 
 | 
  
 | 
        xstring name1 = GetEntityName(1); 
 | 
        if (name1 == L"QuoteEnquiry") 
 | 
        { 
 | 
            xaserverarg arg1; 
 | 
            xstring templ = ele.getAttribute(L"content2"); 
 | 
            xstring taskid = ele.getAttribute(L"taskid"); 
 | 
            //trace(templ); 
 | 
            arg1.AddArg(L"template", templ); 
 | 
            arg1.AddArg(L"TaskID", taskid); 
 | 
            arg1.AddArg(L"EntityID", d); 
 | 
  
 | 
            OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1); 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        ProcessFlowAction(L"action:bill.open", 1); 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    //½¹µã¼¤»î´¦Àíº¯Êý 
 | 
    int OnSetFocus(TEvent* evt, LPARAM param) 
 | 
    { 
 | 
        SetAgent(); 
 | 
        //ÖØÖù¤¾ßÌõ 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    //ÃüÁî´¦Àíʼþ 
 | 
    int OnXCommand(TEvent* evt, LPARAM p) 
 | 
    { 
 | 
        return OnCmdDispatch(evt->xcommand.pStrID); 
 | 
    } 
 | 
  
 | 
    int ShowDetail(int row) 
 | 
    { 
 | 
  
 | 
        if (row<0 || row>dw_list.GetRowCount()) return 1; 
 | 
  
 | 
        if (!dw_list.GetRowElement(row)) return 1; 
 | 
  
 | 
  
 | 
  
 | 
        KXMLDOMElement ele = dw_list.GetRowElement(row); 
 | 
        dw_list.SetRow(row); 
 | 
        if (GetEntityID(1) == L"") return -1; 
 | 
  
 | 
        //trace(ele.xml); 
 | 
        xaserverarg arg; 
 | 
  
 | 
        arg.AddArg(L"content", ele.xml()); 
 | 
        xml doc; 
 | 
  
 | 
        if (getUrl(L"/sale/data/vpage/vstart/taskex", arg.GetString(), doc) != 1) 
 | 
        { 
 | 
            trace((xstring)L"error->:" + doc.xml()); 
 | 
            return 0; 
 | 
        } 
 | 
        if ((xstring)doc.xml() == L"") 
 | 
            return -1; 
 | 
  
 | 
        xshtml ht = GetControl(L"taskinfo"); 
 | 
        ht.SetContent(doc.xml()); 
 | 
        ht.Redraw(); 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    int OnClicked(TEvent* evt, LPARAM p) 
 | 
    { 
 | 
        DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; 
 | 
        int row = hdr.row; 
 | 
  
 | 
        trace(L"count:" + (xstring)dw_list.GetRowCount()); 
 | 
        if (row<1 || row>dw_list.GetRowCount()) return 1; 
 | 
  
 | 
        trace(L"\r\n-------" + (xstring)row); 
 | 
  
 | 
        if (ShowDetail(row) != 1) 
 | 
        { 
 | 
            xstring xfNodeAgentArea = L"agentarea"; 
 | 
            xnode anode = GetAgentNode(xfNodeAgentArea); 
 | 
            this->SetAgentNode(anode, L"<vbox/>"); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            SetAgent(); 
 | 
            //ShowAgentInfo(); 
 | 
        } 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    /* 
 | 
    int ShowAgentInfo() 
 | 
    { 
 | 
        xstring taskID = GetTaskID(); 
 | 
        if (taskID != L"") 
 | 
        { 
 | 
            //KXMLDOMDocument x = ViewObject::RetrieveData(L"/sale/data/Agent/task", L"TaskID", taskID); 
 | 
            KXMLDOMDocument x = ViewObject::RetrieveData(L"/sale/data/Agent/entity", L"EntityID", GetEntityID(0)); 
 | 
            if (x) 
 | 
            { 
 | 
                xshtml xs = GetControl(L"frame:agentinfo"); 
 | 
                string content =  x.xml(); 
 | 
                xs.SetContent(content); 
 | 
                xs.Redraw(); 
 | 
            } 
 | 
        } 
 | 
        return 1; 
 | 
    }*/ 
 | 
  
 | 
    int OnRowChanged(TEvent* evt, LPARAM p) 
 | 
    { 
 | 
        DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; 
 | 
        int row = hdr.row; 
 | 
        if (row<0 || row>dw_list.GetRowCount()) return 0; 
 | 
        trace(L"\r\n-----222------"); 
 | 
        if (ShowDetail(row) != 1) 
 | 
        { 
 | 
            xstring xfNodeAgentArea = L"agentarea"; 
 | 
            xnode anode = GetAgentNode(xfNodeAgentArea); 
 | 
            this->SetAgentNode(anode, L"<vbox/>"); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            SetAgent(); 
 | 
            //ShowAgentInfo(); 
 | 
        } 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    int onload() 
 | 
    { 
 | 
        //alert(L"xxxxxxxxxxx"); 
 | 
        //SetAgent(); 
 | 
        //AttachEvent(L"WM_SETFOCUS", (FEvent)&startvframevbusiness::OnSetFocus); 
 | 
        //°ó¶¨¹¤¾ßÌõµã»÷ʼþ 
 | 
        AttachEvent(L"WM_XCOMMAND", (FEvent)&HomeWin::OnXCommand); 
 | 
        //AttachEvent(L"WM_TIMER",OnTimer); 
 | 
        AttachEvent(L"tasklist", L"DWV_ROWFOCUSCHANGED", (FEvent)&HomeWin::OnRowChanged); 
 | 
        AttachEvent(L"tasklist", L"DWV_DOUBLECLICKED", (FEvent)&HomeWin::OnDoubleClicked); 
 | 
        AttachEvent(L"tasklist", L"DWV_CLICKED", (FEvent)&HomeWin::OnClicked); 
 | 
  
 | 
        dw_list = GetControl(L"tasklist"); 
 | 
  
 | 
        init(); 
 | 
  
 | 
        SetAgent(); 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    int onloaded() 
 | 
    { 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
}; 
 |