#pragma once #include #include #include class xframe : public xwin { public: xframe(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) { this->SetArg(this->GetWinParam()); } static int getUrl(string url1, string para, KXMLDOMDocument x) { return xurl::get(xapp::GetServerUrl(), url1, para, x); } static int getUrl(string serverUrl,string url1, string para, KXMLDOMDocument x) { return xurl::get(serverUrl,url1, para, x); } int getSql( string para, KXMLDOMDocument x) { return xurl::getSql(GetServerUrl(), para, x); } int getSql( xaserverarg para, KXMLDOMDocument x) { return xurl::getSql(GetServerUrl(), para.GetString(), x); } virtual string GetBillStatusName(xstring billstatus) { if (billstatus == L"1") return L"н¨"; else if (billstatus == L"2") return L"´ýÅú"; else if (billstatus ==L"3") return L"ÒÑÅú×¼"; else if (billstatus ==L"4") return L"ÉêÇëÈ¡Ïû"; else if (billstatus ==L"5") return L"ÐÞ¸Ä"; else if (billstatus ==L"6") return L"ÒÑÉóºË"; else if (billstatus ==L"9") return L"ºÏ²¢"; else if (billstatus ==L"10") return L"¹éµµ"; else if (billstatus ==L"11") return L"×÷·Ï"; return L"#Error"; } virtual int ProcessUsedArg(xaserverarg& arg) { return 1; } virtual xstring GetEntityName(LPARAM pr) { //alert("frame£ºget entity name!"); return L""; } virtual xstring GetEntityIDName(LPARAM pr) { return L""; } virtual xstring GetEntityID(LPARAM pr) { return L""; } virtual xstring GetEntityData(LPARAM pr) { return L""; } virtual xstring GetEntityRowData(LPARAM pr) { return L""; } virtual xstring GetEntityTitle(LPARAM pr) { return L""; } virtual xstring GetEntityNo(LPARAM pr) { return L""; } virtual xstring GetEntityItemValue(LPARAM pr, xstring obj, xstring item) { return L""; } virtual int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg arg) { return 1; } virtual xstring GetEntityWorkNode(LPARAM pr, xstring what) { return L""; } virtual int CheckEntityValidity(LPARAM pr) { return 1; } virtual int ShowAll() { return 1; } virtual int GridSearchnew() { return 1; } virtual int CustomerModify() { return 1; } virtual xstring GetReason(LPARAM pr) { xaserverarg arg; //openUrl("/sale/view/view.dlg/xpage/memo/edit", arg); arg.AddArg(L"EntityID", GetEntityID(2)); openUrl(L"/sale/view/workflow.view/xpage/chkdlg_vd", &arg); xstring comdid = arg.GetArgString(L"comdid"); if (comdid ==L"xmOK") { string value = arg.GetArgString(L"content"); return value; } return L""; } virtual xstring GetParamValue(xstring name) { return L""; } virtual xstring GetSheetContent() { return L""; } int OnModifyRows() { xstring SheetStr = GetSheetContent(); if (SheetStr ==L"") return -1; xaserverarg arg; arg.AddArg(L"sheet", SheetStr); openUrl(L"/sale/view/view.dlg/xpage/grid/column/editex", &arg); 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 (MessageBoxW(GetHWND(),L"ÊÇ·ñÈ·¶¨É¾³ý¼Ç¼!",L"Ìáʾ", 1) == 2) return 1; } xaserverarg& arg = *(new xaserverarg); arg.AddArg(L"Action", action); KXMLDOMDocument x; xstring aurl =L"/workflow/query/actioninfo/" + action; if (xurl::get(GetServerUrl(),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)); //²ÎÊýÒªÇó 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:string"); else if (how ==L"Entity" || how ==L"EntityData") arg.AddArg(name, content,L"xs:string"); else if (how ==L"EntityRowData") arg.AddArg(name, GetEntityRowData(pr),L"xs:string"); else if (how ==L"Reason") { arg.AddArg(name, GetReason(1),L"xs:string"); } else if (how ==L"EntityNo") arg.AddArg(name, GetEntityNo(pr),L"xs:string"); else if (how ==L"EntityTitle") arg.AddArg(name, GetEntityTitle(pr),L"xs:string"); else if (how ==L"GetParam") arg.AddArg(name, GetParamValue(name),L"xs:string"); else if (how ==L"UserID") arg.AddArg(name, xaserver::GetUID(),L"xs:string"); if (how ==L"Reason" && arg.GetArgString(name) ==L"") return -1; //if(how=="EntityData" && arg.GetArgString(name)=="") 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(xstring(name) +L" ²ÎÊýÖµ²»ÄÜΪ¿Õ£¬Ê¼þÖÕÖ¹!"); return -1; } } } } arg.AddArg(L"action.entity", GetEntityName(pr),L"xs:string"); 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:string"); if (worknode !=L"") { if (worknode.find(L"dev:xpage") == 0) OpenWindow(worknode, (LPARAM) & arg); else openUrl(worknode, &arg); } else { alert(L"Warn: Please configure worknode for actionL" + xstring(name) +L"."); return -1; } } else { //url::post(GetEntityName(pr)+"/workflow/action",arg.GetString(),x); KXMLDOMDocument x1; xstring EntityNo = GetEntityName(pr); int retxx = xurl::post(GetServerUrl(), (xstring)(L"/workflow/action/") + EntityNo + L"/" + action, arg.GetString(), x1); //alert("/workflow/action/"+GetEntityName(pr)+"/"+action+"\r\n"+arg.GetString()+"\r\n"+x1.GetXml()); if (retxx != 1) execResult = false; if (x1.selectSingleNode(L"//process")) { KXMLDOMElement e1 = x1.selectSingleNode(L"//process"); string valid = e1.getAttribute(L"valid"); string 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"); string val = e2.getAttribute(L"process"); if (val ==L"ok") { alert("´¦Àí³É¹¦"); PostMessageW(GetHWND(), 0x401,(WPARAM)L"action:bill.refresh", 0); } else if (val ==L"part") { alert("Óв¿·ÖÊý¾Ý´¦Àíδ³É¹¦£¬Ìá½»³É¹¦µÄÒÑ´¦Àí¡£"); 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("Àí³É¹¦",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:string"); billstatus = x1.selectSingleNode(L"//msg[1]/@billstatus").text(); arg.AddArg(L"billstatus", billstatus,L"xs:string"); } } //¸üÐÂÒªÇó if (execResult & 0xf) { 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:string"); arg.AddArg(L"billstatus", billstatus,L"xs:string"); ViewUpdate(pr, how, arg); } } else ViewUpdate(pr, how, arg); } } return 1; } int OnItemError(TNotifyEvent* evt, int p) { DWNMHDR& hdr = *(DWNMHDR *)evt->notify.pnmh; xstring value = hdr.data; int e = hdr.idFrom; if (e == -1000) MessageBoxW(0,L"¡¾" + value +L"¡¿²»ÊÇÓÐЧµÄÊý×Ö!",L"OnItemError", 0); if (e == -1001) MessageBoxW(0,L"¡¾" + value +L"¡¿²»ÊÇÓÐЧµÄÊý×Ö!", L"OnItemError", 0); if (e == -1002) MessageBoxW(0,L"¡¾" + value +L"¡¿²»ÊÇÓÐЧµÄÈÕÆÚ!", L"OnItemError", 0); hdr.idFrom = 0; return 1; } virtual int SetObjectInfo(KXMLDOMElement e) { return 1; } virtual string GetTaskID() { return L""; } virtual int SetAgent(xstring scene, xstring EntityID) { xstring xfNodeAgentArea =L"agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); KXMLDOMElement xframeElement = GetElement(); KXMLDOMNode agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea +L"[1]/*"); KXMLDOMDocument x; xaserverarg arg; arg.AddArg(L"scene", scene,L"xs:string"); arg.AddArg(L"EntityID", EntityID,L"xs:string"); arg.AddArg(L"TaskID", GetTaskID(),L"xs:string"); arg.AddArg(L"EntityName", GetEntityName(1),L"xs:string"); xurl::get(GetServerUrl(),(xstring)L"/workflow/query/datarole/" + GetEntityName(1), arg.GetString(), x); //if(x.GetXmlDoc().selectSingleNode("datarole/rightes/right")) SetObjectInfo(x.documentElement()); xstring sNodes; sNodes =(xstring)L"datarole/actions/action[contains(@scene,'" + scene +L"')]"; KXMLDOMNodeList nlist = x.selectNodes(sNodes); int index; int nlen = nlist.length(); KXMLDOMElement ele; xstring tools =L""; if (scene ==L"list") tools +=L""; for (index = 0; index < nlen; index++) { ele = nlist.item(index); xstring name = ele.selectSingleNode(L"@id").text();//.getAttribute("id"); xstring label = ele.selectSingleNode(L"@caption").text();//ele.getAttribute("caption"); xstring image; xstring src =L""; if (ele.selectSingleNode(L"@image")) image = ele.selectSingleNode(L"@image").text(); else image =L"0 22"; if (ele.selectSingleNode(L"@src")) src = ele.selectSingleNode(L"@src").text(); xstring tool; if (src !=L"") tool =(xstring)L""; else tool =(xstring)L""; tools += tool; } if (agent) { nlist = agent.selectNodes(L".//xtoolbutton"); nlen = nlist.length(); for (index = 0; index < nlen; index++) { ele = nlist.item(index); xstring tmp = ele.xml(); tools += tmp; } } tools +=L""; SetAgentNode(anode, tools); return 1; } virtual int SetAgent(xstring scene) { return SetAgent(scene,L"*"); } virtual int SetAgent() { return SetAgent(L"list"); } virtual int DoUpdate(bool showSuccess) { return 0; } virtual bool NeedNotifyUpdate() { return false; return true; } virtual int BeforeCloseWindow() { if (!NeedNotifyUpdate()) return 1; xstring content = GetEntityData(1); if (content ==L"") return 1; if (content.find(L"update.modify", 0) > 0 || content.find(L"update.delete", 0) > 0) { int MB_YESNOCANCEL = 3; int IDYES = 6; int IDNO = 7; int IDCANCEL = 2; int re = MessageBoxW(GetHWND(),L"Êý¾ÝÒѾ­Ð޸ģ¬ÊÇ·ñ±£´æ?",L"Ìáʾ:", MB_YESNOCANCEL); if (re == IDCANCEL) return -1; if (re == IDNO) return 1; if (DoUpdate(false) == 1) return 1; return -1; } return 1; } int OnCloseOwnerWindow(TEvent* evt, LPARAM p) { if (BeforeCloseWindow() < 0) return 1; return 0; } int OnCloseFrameSheet(TEvent* evt, LPARAM p) { LYSNMHDR* nmtv = (LYSNMHDR*)evt->notify.pnmh; HWND h = (HWND)nmtv->idFrom; int canCLose = 1; if (h == GetHWND()) canCLose = BeforeCloseWindow(); if (canCLose < 0) nmtv->nSheet = canCLose; return 1; } int AttachCloseWindow() { xstring typ = GetElement().getAttribute(L"type"); if (typ ==L"sheet") { AttachEvent(L"frame:mdilayer",L"LYSN_CLOSESHEET", (FEvent)&xframe::OnCloseFrameSheet); } else { AttachEvent(L"WM_CLOSE", (FEvent)&xframe::OnCloseOwnerWindow); } return 1; } int OnCloseWindow() { //AttachEvent("frame:mdilayer",L"LYSN_CLOSESHEET",BeforeCloseWindow); return 1; } /* int AppendItem(xml x,msxml::IXMLDOMElement r,string name,string value) { msxml::IXMLDOMElement e = x.GetXmlDoc().createElement(name); e.text =L""+value; e.setAttribute("update.modify","1"); r.appendChild(e); return 1; } int OnSaveTemplate(xdwgrid dw_list, string aurl) { //alert("먦·Å..."); if(aurl ==L"") return -1; int i; int s = dw_list.GetColumnCount(); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); for(i=1; i<=s; i++) { string name = dw_list.GetColumnName(i); if(name ==L"guid") continue; string titlename = dw_list.GetTitleName(i - 1); int width = dw_list.GetColumnWidth(name); arg.AddArg(name, width.toString(), titlename); } xml x=new xml; x.setNativePointer(xml::CreateInstance()); x.LoadXml(""); msxml::IXMLDOMElement doc = x.GetXmlDoc().documentElement; msxml::IXMLDOMElement e = doc.selectSingleNode("*"); //string guid1 = publiccode::GetGuid(); //string gid = publiccode::GetCurrentDate(); //AppendItem(x, e,L"ID", publiccode::GetGuid()); AppendItem(x, e,L"TplType", aurl); AppendItem(x, e,L"Cols", arg.GetString()); AppendItem(x, e,L"Recorder", xaserver::GetUserId()); doc.appendChild(e); xaserverarg arg0 = new xaserverarg; arg0.setNativePointer(arg0.CreateInstance()); arg0.AddArg("content", doc.xml); if(url::get("/workflow/action/SysGridCols/bill.update",arg0.GetString(),x)!=1) { trace("error:"+x.GetXml()); alert("³ö´í!"); } return 1; } */ };