ZKによる前処理
【DHUS】DHtmlUpdateServlet
◆DHtmlUpdateServlet > HttpServlet > GenericServlet(I/F)Servlet,ServletConfig > Object
DHtmlUpdateSrvletクラスはZKのライブラリでorg.zkoss.zl.library>zk.jar>org.zkoss.zk.au.httpパッケージに含まれています。
サーバーから命令を受取り、クライアントに返すのに使用します。DHtmlUpdateSrvletと呼ばれていますが、HTTPベースで通信する全ての種類のクライアント(AjaxやMIL(Mobile Interactive Language,その他)で使用されます。
10:protected void doPost(HttpServletRequest request, HttpServletResponse response)
↓10-10:doGet(request,response) → 20
20:protected void doGet(HttpServletRequest request, HttpServletResponse response)
↓20-90:final Object old = I18Ns.setup(sess, request, response, "UTF-8")
↓20-94:porcess(sess, request, response, _compress) → 30
↓20-96:I18Ns.cleanup(request, old)
↑10-10に戻る。
30:public void process(Session sess, HttpServletRequest request, HttpServletResponse response, boolean compress)
↓30-30:Desktop desktop = getDesktop(sess, dtid)
↓30-90:final AuWriter out = AuWriters.newInstance()
out.setCompress(compress)
out.open(request, response)
↓30-91:wappc.getUiEngine().execUpdate(exec, aureqs, out) →【UEI】10
↓30-96:out.close(request, response) →【HAW】10
↑20-94に戻る
【HAW】HttpAuWriter
◆HttpAuWriter (I/F)AuWriter > Object
HeepAuWriterクラスはZKのライブラリでorg.zkoss.zl.library>zk.jar>org.zkoss.zk.au.httpパッケージに含まれています。このWriterはアウトプットをクライアントに返すのに使用します。
10:public void close(Object request, Object response)
↓10-10:flush(request, response, _compress) → 20
20:protected void flush(Object request, Object response, boolean bCompress)
↓20-30:final HttpServletResponse hres = (HttpServletResponse)response;
↓20-90:hres.flushBuffer()
↑10-10に戻る
【UEI】UiEngineImpl
◆UiEngineImpl (I/F)UiEngine > Object
UiEngineImplクラスはZKのライブラリでorg.zkoss.zl.library>zk.jar>org.zkoss.zk.ui.implパッケージに含まれている。UiEngineの実装クラスです。コンポーネントの作成及び更新を行います。
10:public void execUpdate(Execution exec, List<AuRequest> requests, AuWriter out)
↓10:execUpdate(Execution exec, jList<AuRequest> requests, AuWriter out):void
↓10-50:process(desktop, event) → 20
↓10-60:final List<AuResponse> responses = getResponses(exec, uv, errs, true);
↓out.writeResponseId(desktopCtrl.getResponseId(true))
↓out.write(responses);
↓final String seqId = ((ExecutionCtrl)exec).getRequestId()
↓desktopCtrl.responseSent(seqId, out.complete())
↓desktopCtrl.invokeExecutionCleanups(exec, null, errs)
↓config.invokeExecutionCleanups(exec, null, errs);
↓doDeactivate(exec);
↓meterAuServerComplete(pfmeter, doneReqIds, exec);
↑【DHUS】30-91に戻る
20:private void process(Desktop desktop, Event event)
↓20-30:processEvent(desktop, conp, event); → 30
↑10-50に戻る。
30:private void processEvent(Desktop desktop, Component comp, Event event)
↓30-30:EventProcessor proc = new EventProcessor(desktop, comp, event);
↓30-50:proc.process(); →【EP】10
↓30-60:EventProcessor.inEventListener(false);
↓30-70:cleanups = config.newEventThreadCleanups(comp, event, null, false);
↓30-80:config.invokeEventThreadCompletes(cleanups, comp, event, errs, false);
↑20-30に戻る。
【EP】 EventProcessor
◆EventProcessor > Object
EventProcessorクラスはZKのライブラリでorg.zkoss.zl.library>zk.jar>org.zkoss.zk.ui.implパッケージに含まれている。
public void process()
↓10-50:((ComponentCtrl)_comp).service(_event, scop) → 【A】10
↓10-51:((DesktopCtrl)_desktop).afterProcessEvent(_event)
↓10-60:final Execution exec = _desktop.getExecution()
↓10-70:((ExecutionCtrl)exec).setExecutionInfo(null);
↓10-90:Scopes.afterInterpret();
↑【UEI】30-50に戻る。
【A】A
◆A > AbstractTag > AbstractComponent > Object
aクラスはZKのライブラリでorg.zkoss.zl.library>zhtml.jar>org.zkoss.zhtmlパッケージに含まれている。
10:public void service(Event event, Scope scope)
↓10-10:service(event,scope,listeners,evthd,mtd,false) → 20
↑【EP】10-50に戻る。
20:void service(Event event, Scope scope, final List<EventListenerInfo> listeners, final EventHandler evthd, final Method mtd, boolean skipPageListener)
↓20-50:onEvent(li.listener,event) → 【AC】10
↓20-60:event.isPropagatable()
↑10-10に戻る。
【AC】AbstractComponent
◆AbstractComponent > Object
AbstractComponentクラスはZKのライブラリでorg.zkoss.zl.library>zk.jar>org.zkoss.zk.uiパッケージに含まれている。
10:private static void onEvent(EventListener listener, Event event)
↓10-10:listener.onEvent(event) →【DPF】10
↑【A】20-50に戻る。
お気に入りのメニューをクリックした処理
【DPF】DPFavourites
◆DPFavourites (I/F)EventListener > DashboardPanel (I/F) iDashboardPanel > Window > Window (I/F)Framable, IdSpace > XulElement > HtmlBasedComponent > AbstractComponent (I/F) Component, ComponentCtrl
DPFavouritesクラスはorg.adempiere.ui.zk>WEB-INF/src>org.adempiere.webui.dashboardパッケージに含まれている。
10:public void onEvent(Event event)
↓10-10:doOnClick(comp)→20
↑【AC】10-10に戻る。
20:private void doOnClick(Component comp)
↓20-10:SessionManager.getAppDesktop().onMenuSelected(menuId) →【DD】10
↑10-10に戻る。
【DD】DefaultDesktop
◆DefaultDesktop > TabbedDesktop > AbstractDesktop > AbstractUIPart
DPFavouritesクラスはorg.adempiere.ui.zk>WEB-INF/src>org.adempiere.webui.desktopパッケージに含まれている。
10:public void onMenuSelected(int menuId)
↓10-10:MMenu menu = new MMenu(Env.getCtx(), menuId, null);
↓10-30:openWindow(menu.getAD_Window_ID(),null) → 20
↑【DPE】20-10に戻る
20:public void openWindow(int windowId, Callback<ADWindow> callback)
↓20-10:openWindow(windowId, null, callback) → 30
↑10-30に戻る
30:public void openWindow(int windowId, MQuery query, Callback<ADWindow> callback)
↓30-10:final ADWindow adWindow = new ADWindow(Env.getCtx().windowId,query) →【ADW】10
↓30-20:final DesktopTabpanel tabPanel = new DesktopTabpanel();
↓30-30:final Tab tab = windowContainer.addWindow(tabPanel, adWindow.getTitle(), true);
↓30-60:final OpenWindowRunnable runnable = new OpenWindowRunnable(adWindow, tab, tabPanel, callback)
↓30-70:tabPanel.addEventListener("onOpenWindow", new EventListener<Event>()
{
@Overridepublic
void onEvent(Event event) throws Exception
{
runnable.run();
}
});
↓30-80:preOpenNewTab()
↓30-90:Events.echoEvent(new Event("onOpenWindow", tabPanel));
↑20-10に戻る。
【ADW】ADWindow
◆ADWindow > AbstractUIPart > UIPart
ADWindowクラスはorg.adempiere.ui.zk>WEB-INF/src>org.adempiere.webui.adwindowパッケージに含まれている。
10:public ADWindow(Properties ctx, int adWindowId, MQuery query)
↓10-50:init() → 20
↑【DD】30-10に戻る
20:private void init()
↓20-10:windowContent = new ADWindowContent(ctx, windowNo, adWindowId); →【ADWC】10
↑10-50に戻る。
【ADWC】ADWindowContent
◆ADWindowContent > AbstractADWindowContent > AbstractUIPart > UIpart
ADWindowContentクラスはorg.adempiere.ui.zk>WEB-INF/src>org.adempiere.webui.adwindowパッケージに含まれている。
10:public ADWindowContent(Properties ctx, int windowNo, int adWindowId)
↓10-10:super(ctx, windowNo, adWindowId) →【AADWC】 10
↑【ADW】20-10に戻る
【AADWC】AbstractADWindowContent
10:public AbstractADWindowContent(Properties ctx, int windowNo, int adWindowId)
↓10-10:initComponents(); → 20
↑【ADWC】10-10に戻る。
20:private void initComponents()
↓20-10:toolbar = new ADWindowToolbar(getWindowNo()) →【ADWT】
↓20-20:statusBar = new StatusBar() →【SB】
↓20-30:GridWindowVO gWindowVO = AEnv.getMWIndowVO(int,int.int) →【AE】10
↓20-40:new GridWindow(GridWindowVO, true) →【GW】10
↑10-10に戻る。
ツールバーの作成
ステータスバーの作成
GridWindowVOの作成
【AE】AEnv
10:public static GridWindowVO getMWindowVO (int WindowNo, int AD_Window_ID, int AD_Menu_ID)
↓10-40:mWindowVO = GridWindowVO.create (Env.getCtx(), WindowNo, AD_Window_ID, AD_Menu_ID);
↑【AADWC】20-30に戻る。
GridWindowの作成
【GW】GridWindow
10:public GridWindow (GridWindowVO vo, boolean virtual)
↓10-10:loadTabData() → 20
↓10-20:enableEvents() → 30
↑【AADWC】20-40に戻る。
20:private boolean loadTabData()
for(int t = 0; t < m_vo.Tabs.size(); t++)
{
↓20-20:GridTabVO mTabVO = (GridTabVO)m_vo.Tabs.get(t);
↓20-40:GridTab mTab = new GridTab(mTabVO, this, m_virtual);
↓20-41:m_tabs.add(mTab)
}
10-10に戻る。
30:private void enableEvents()
30-10:for (int i = 0; i < getTabCount(); i++)
getTab(i).enableEvents();
10-20に戻る。