SeasarDI Container with AOP
 

Server Transactionの呼び出し

画面から、ServerのTransactionを呼び出す例を下記に示します。
private void jB_EnterActionPerformed(java.awt.event.ActionEvent evt) {                                         
    RequestData requestData = RequestDataFactory.createRequestData("vdri",null,formManager);
    requestData.setParam("_cat",cat);
    requestData.setParam("_mode", formManager.getMode());
    formManager.getSession().trxExecute(requestData, formManager);
}

RequestDataFactory#createRequestData(String transactionCode, String params, FormManager formManager) は、3つの
パラメーターを取ります。ServerのtransactionCodeで、この例では 「vdri」と入力していますので、現在の実装では、GolfRMIの
VdriTrxLogic#execute(RequestData requestData)が呼び出されます。paramsには、必要であれば、Parameterを”AA=BB,CC=DD"の
形式で渡すことができます。3番目は、当該画面の formManager変数を渡します。
この結果、RequestData Objectが作成され、画面にValidation設定時、HostNameが入っている Fieldの情報は、自動的にSetされます。
また、Tableの情報をSetしたい場合は、
TrxUtil#setTableDataToRequest(String tableHostName, RequestData requestData, FormManager formManager) または TrxUtil#setAllTableDataToRequest(RequestData requestData, FormManager formManager)を使用します。
追加のParameterは、RequestData#setParam()で指定します。
それでは、VdriTrxLogicを見てみましょう。
public class VdriTrxLogic implements TransactionInterface{
    private CompanyBhv bhv;
    private S2Container container;

    public VdriTrxLogic() {
    }

    public ResultData execute(RequestData requestData) {

        ResultData resultData = new ResultData();
        selectProcess(requestData, resultData);
        return resultData;
    }
    private void selectProcess(RequestData requestData, ResultData resultData) {
        resultData.getFormAction().setFormStack(FormAction.FormStack.RESULT);
        String sCcode = (String) requestData.getField("ccode");
        String mode = (String) requestData.getParam("_mode");
        String cat = (String) requestData.getParam("_cat");        
        if ((sCcode == null || sCcode.length()== 0) && !mode.equals("C")) {
        	resultData.getValidationResult().add(new SimpleValidationMessage(
            		"必須項目が入力されていません", Severity.ERROR, "ccode"));  
        	return;
        } else if (sCcode != null && sCcode.length() > 0 ){

        		BigDecimal ccode = null;
				try {
					ccode = new BigDecimal(sCcode);
				} catch (RuntimeException e) {
		        	resultData.getValidationResult().add(new SimpleValidationMessage(
			        		"該当Dataは見つかりません", Severity.ERROR, "ccode"));
		        	return;
				}

	        CompanyCB cb = new CompanyCB();
	        cb.query().setCat_Equal(cat);
	        cb.query().setCcode_Equal(ccode);
	        List <Company> compl = bhv.selectList(cb);
	        if (compl.size() == 0) {
	        	resultData.getValidationResult().add(new SimpleValidationMessage(
	        		"該当Dataは見つかりません", Severity.ERROR, "ccode"));
	        } else {      
	        	Company comp = compl.get(0);
    			resultData.getFormAction().setFormStack(FormStack.NEXT);
    			resultData.getFormAction().setForm("vdr");
    			resultData.setParam("_mode", mode);
    			resultData.setParam("_cat", cat);   
    			resultData.setParam("_action", "Result");   
    			if (!mode.equals("C")) {
    				resultData.setField("ccode",comp.getCcode().toString());
        			resultData.setField("version",comp.getVersionno().toString());	    				
    			}
    			resultData.setField("shortname",comp.getShortname());
    			resultData.setField("name",comp.getName());
    			resultData.setField("telephone",comp.getTelephone());
    			resultData.setField("cat",comp.getCat());
	        }
        } else {
			resultData.getFormAction().setFormStack(FormStack.NEXT);
			resultData.getFormAction().setForm("vdr");
			resultData.setParam("_mode", mode);
			resultData.setParam("_cat", cat);   
			resultData.setParam("_action", "Result"); 
			resultData.setField("cat",cat);
        }
    }

	public void setContainer(S2Container container) {
		this.container = container;
    	bhv = (CompanyBhv) container.getComponent("companyBhv");		
	}
}

resultData.getFormAction().setFormStack(FormAction.FormStack.RESULT)で、まず Defaultの次画面Modeを設定しています。
次画面Modeの詳細については、次画面指定方法の説明を参照して下さい。
resultData.getValidationResult().add(new SimpleValidationMessage("該当Dataは見つかりません", Severity.ERROR, "ccode"));
が、ErrorMessageの追加例です。この場合、HostNameが「ccode」のFieldにFocusが自動的に移ります。
resultData.getFormAction().setFormStack(FormStack.NEXT);以下が、新しい画面に移る例です。
この様に、必要なParameter等を設定すればあとはFrameworkが自動的に面倒な処理は行います。
下記がTableにDataを設定する例です。(VdrsTrxLogicより抜粋)
resultData.getFormAction().setFormStack(FormAction.FormStack.NEXT);
resultData.getFormAction().setForm("vdrsd");
resultData.setParam("_cat", requestData.getField("cat"));
TableData td = new TableData();
td.setColumnIdentifires(new Object[]{"ccode","shortname","name","telephone","cat","versionno" });
for(Company comp:compl) {
        		 ArrayList row = new ArrayList();
        		 row.add(comp.getCcode());
        		 row.add(comp.getShortname());
        		 row.add(comp.getName());
        		 row.add(comp.getTelephone());
        		 row.add(comp.getCat());        		 
        		 row.add(comp.getVersionno().intValue());        			 
        		 td.addRow(row);
}
resultData.getTables().put("CompanyTable",td);

FormAction.FormStack.NEXTの場合,下記の例の様にsetFormで指定した Formが作成されそのinitActionのParameterの_result
に ResultDataが渡されます。以下の例では、そのResultDataのTableDataをTableにSetしています。
TrxUtil.setTableDataFromResult( "CompanyTable", (ResultData)params.get("_resultData"), formManager);(VdrsdFrameの例)
また、FormAction.FormStack.RESULT等の場合で、resultData.getFormAction().setProcessAction(true);とすることにより、
そのformのprocessAction()が自動的に呼ばれます。

リンク

Golf 概要
GOLF HOMEへのリンク