@Override
  public String excute() throws ExedoException {

    DOBO bo = DOBO.getDOBOByName("do_bo");
    BOInstance instance = bo.getCorrInstance();
    if (instance == null) {
      this.setEchoValue(I18n.instance().get("没有数据!"));
      return NO_FORWARD;
    }

    String colName = this.actionForm.getValue("col_name");
    String dobouid = this.actionForm.getValue("bouid");
    String linktype = this.actionForm.getValue("linktype");

    if (colName == null && dobouid == null) {
      this.setEchoValue(I18n.instance().get("字段名称或者类型没有定义!"));
      return NO_FORWARD;
    }

    DOBO linkBO = DOBO.getDOBOByID(dobouid);
    //////////////////////////
    ////////////////////////// 先处理组合关系
    /////////////////////// 2 为组合
    if ("2".equals(linktype)) {
      GeneUIParentChild gpc =
          new GeneUIParentChild(linkBO.getSqlStr(), instance.getValue("sqlstr"), colName);
      gpc.geneConfig();
    }

    ///////////////////////// 再处理关联关系
    PropertyManager pm = new PropertyManager();
    pm.buildRelation(colName, linkBO);

    this.setEchoValue(I18n.instance().get("初始化成功!"));

    return DEFAULT_FORWARD;
  }
  /**
   * 获取动态列表形式的Select Form
   *
   * @param property TODO
   * @param db
   * @return
   */
  String getPopupForm(DOFormModel fm) {

    /** 可变动态下拉列表, 根据连接的FORMMODEL,一般静态staticlist 确定使用的服务 */
    boolean isDyn = false;

    if (fm.getLinkForms() != null && !fm.getLinkForms().isEmpty() && fm.getInputConfig() != null) {
      isDyn = true;
    }

    if (fm.getLinkService() == null && !isDyn) {
      return " ";
    }

    StringBuffer buffer = new StringBuffer();

    String theValue = fm.getValue();

    BOInstance data = null;

    if (fm.getL10n().equals("连接内容")) {

      System.out.println("isDyn:::::::::::" + isDyn);
      System.out.println("连接内容:::::::::::" + fm.getLinkForms());
      System.out.println("fm.getInputConfig():::::::::::" + fm.getInputConfig());
    }

    if (theValue != null && !"".equals(theValue.trim())) {

      DOBO corrBO = fm.getLinkBO();

      if (corrBO == null && fm.getLinkService() != null) {
        corrBO = fm.getLinkService().getBo();
      }

      /** 可变动态下拉列表, 根据连接的FORMMODEL,一般静态staticlist 确定使用的服务 */
      if (isDyn) {
        DOFormModel linkFm = (DOFormModel) fm.getLinkForms().get(0);
        String theLinkValue = fm.getData().getValue(linkFm.getColName());

        if (theLinkValue != null) {

          List list = StringUtil.getStaticList(fm.getInputConfig());

          for (Iterator it = list.iterator(); it.hasNext(); ) {
            String[] halfs = (String[]) it.next();

            if ((theLinkValue != null && theLinkValue.equals(halfs[0]))) {
              DOService theCorrService = DOService.getService(halfs[1]);
              if (theCorrService != null) {
                corrBO = theCorrService.getBo();
              }
              break;
            }
          }
        }
        data = DOValueResultList.getAInstance(null, corrBO, theValue);
      } else {
        data = DOValueResultList.getAInstance(fm, corrBO, theValue);
      }
    }

    //		if (default_data && data == null && fm.getLinkService() != null) {
    //			data = fm.getLinkService().getBo().getCorrInstance();
    //			if (data != null) {
    //				theValue = data.getUid();
    //			}
    //		}

    buffer
        .append("	<input type='hidden' class='resultlistpopup'  name='")
        .append(fm.getColName())
        .append("' id='")
        .append(fm.getFullColID())
        .append("' serviceName='")
        .append(fm.getLinkService().getName())
        .append("' ");
    if (theValue != null) {

      buffer.append(" value='").append(theValue).append("'");
    }

    buffer.append(this.appendValidateConfig(fm));
    buffer.append("/>");

    buffer
        .append(
            "<input  type='text' style='border:#B3B3B3 1px solid;margin-top:1px'  onchange=\"if(this.value==''){this.previousSibling.value='';}\"'")
        .append(
            " onclick=\"this.style.borderColor='#406B9B'\" onmouseover=\"this.style.borderColor='#99E300'\" onmouseout=\"this.style.borderColor='#A1BCA3'\" name='")
        .append(fm.getFullColID())
        .append("_show' id='")
        .append(fm.getFullColID())
        .append("_show' class='")
        .append(fm.getFullColID())
        .append("_show' ");
    buffer.append(getDecoration(fm));

    if (data != null) {
      buffer.append(" value='").append(data.getName()).append("'");
    }
    // else{
    // buffer.append(" value='").append(fm.getL10n())
    // .append("'");
    // }

    if (data != null) {
      buffer.append(" title='").append(data.getName()).append("'");
    } else {
      buffer.append(" title='").append(fm.getL10n()).append("'");
    }

    if (isReadOnly(fm)) {
      buffer.append(" readonly='readonly' ");
    }

    buffer.append(" size='").append(getInputSize(fm)).append("' ");

    /** 可变动态下拉列表, 根据连接的FORMMODEL,一般静态staticlist 确定使用的服务 */
    if (isDyn) {
      DOFormModel linkFm = (DOFormModel) fm.getLinkForms().get(0);
      buffer
          .append("linkformid='")
          .append(linkFm.getFullColID())
          .append("' inputconfig='")
          .append(fm.getInputConfig())
          .append("' ");
    }

    buffer.append("/>");

    // 若有连接面板,则可弹出面板
    if (fm.getLinkPaneModel() != null) {
      // 下拉列表
      buffer
          .append(
              "<IMG  style='CURSOR: pointer;padding-bottom:2px;margin-left:-41px;' onclick=\"invokePopup(this")
          .append(",'")
          .append(fm.getTargetForms())
          .append("','");
      buffer.append(fm.getLinkService().getBo().getValueCol()).append("',1,").append(max_pagesize);

      if (fm.getInputConstraint() != null) {
        buffer.append(",'").append(fm.getInputConstraint()).append("'");
      }
      buffer
          .append(")\"  src='")
          .append(DOGlobals.PRE_FULL_FOLDER)
          .append("images/darraw.gif' align=absMiddle ");
      buffer.append("/>");
      // 连接面板
      buffer
          .append("<IMG  style='CURSOR: pointer;padding-bottom:2px;margin-left:0px;' id=\"listpm_")
          .append(fm.getFullColID())
          .append("\"");
      buffer
          .append(")\"  src='")
          .append(DOGlobals.PRE_FULL_FOLDER)
          .append("images/darraw2.gif' align=absMiddle ");

      buffer.append("/>");

    } else {
      buffer
          .append(
              "<IMG  style='CURSOR: pointer;padding-bottom:2px;margin-left:-21px;' onclick=\"invokePopup(this")
          .append(",'")
          .append(fm.getTargetForms())
          .append("','");
      buffer.append(fm.getLinkService().getBo().getValueCol()).append("',1,").append(max_pagesize);

      if (fm.getInputConstraint() != null) {
        buffer.append(",'").append(fm.getInputConstraint()).append("'");
      }
      buffer
          .append(")\"  src='")
          .append(DOGlobals.PRE_FULL_FOLDER)
          .append("images/darraw.gif' align=absMiddle ");
      buffer.append("/>");
    }

    if (fm.getNote() != null && !"".equals(fm.getNote())) {
      buffer.append(fm.getNote());
    }

    if (fm.isNotNull()) {
      buffer.append("&nbsp;<font color='red'>*</font>");
    }

    if (fm.getOnChangeJs() != null && !"".equals(fm.getOnChangeJs())) {
      buffer.append("<script>");
      buffer
          .append("if($.browser.mozilla) $('#")
          .append(fm.getFullColID())
          .append("')[0].addEventListener('DOMAttrModified',function(){")
          .append(fm.getOnChangeJs())
          .append("},false);");
      buffer.append("</script>");
    }

    if (fm.getLinkPaneModel() != null) {
      buffer.append("<script>");
      buffer.append("$('#listpm_").append(fm.getFullColID()).append("').bind('click',function(){");

      // 点击执行(确认js),返回true,继续执行弹出面板,否则取消
      if (fm.getEchoJs() != null && !"".equals(fm.getEchoJs().trim())) {
        buffer.append("if(!").append(fm.getEchoJs()).append("){");
        buffer.append("return false;");
        buffer.append("}");
      }
      buffer.append("loadPml({");
      if (fm.getLinkPaneModel().getLinkType() == 5) {
        buffer
            .append("'pml':'")
            .append(fm.getLinkPaneModel().getResource().getResourcePath())
            .append("'");
      } else {
        buffer.append("'pml':'").append(fm.getLinkPaneModel().getName()).append("'");
        if (fm.getLinkPaneModel().getPaneWidth() != null) {
          buffer.append(",'pmlWidth':'").append(fm.getLinkPaneModel().getPaneWidth()).append("'");
        }
        if (fm.getLinkPaneModel().getPaneHeight() != null) {
          buffer.append(",'pmlHeight':'").append(fm.getLinkPaneModel().getPaneHeight()).append("'");
        }
      }
      if (fm.getLinkPaneModel().getTitle() != null) {
        buffer.append(",'title':'").append(fm.getLinkPaneModel().getTitle()).append("'");
      }
      if (fm.getGridModel() != null) {
        buffer.append(",'formName':'a").append(fm.getGridModel().getObjUid()).append("'");
      }
      if (fm.getTargetPaneModel() != null) {
        buffer.append(",'target':'").append(fm.getTargetPaneModel().getName()).append("'");
      }

      buffer.append("});");
      buffer.append("});");
      buffer.append("</script>");
    }

    return buffer.toString();
  }
  public String getHtmlCode(DOIModel iModel) {

    DOFormModel property = (DOFormModel) iModel;

    StringBuffer buffer = new StringBuffer();

    if (property.getLinkService() != null) {
      for (Iterator it = property.getLinkService().invokeSelect().iterator(); it.hasNext(); ) {

        BOInstance instance = (BOInstance) it.next();

        buffer.append("<input name=\"").append(property.getFullColName());

        buffer.append("\" value=\"").append(instance.getUid());

        buffer.append("\"  type=\"checkbox\"");

        buffer.append(getDecoration(property));

        if (DOStaticList.isChecked(instance.getUid(), property.getValue())) {
          buffer.append(" checked ");
        }
        if (isReadOnly(property)) {
          buffer.append(" DISABLED  ");
        }
        buffer.append("/>");
        buffer.append(instance.getThisLink());
        // buffer.append(instance.getName());

      }
    } else if (property.getInputConfig() != null) {

      List list = StringUtil.getStaticList(property.getInputConfig());
      for (Iterator it = list.iterator(); it.hasNext(); ) {
        String[] half = (String[]) it.next();
        if (!half[1].contains("其他")) {
          buffer.append("<input name=\"").append(property.getFullColName());

          buffer.append("\" value=\"").append(half[0]);

          buffer.append("\"  type=\"checkbox\"");
          buffer.append(getDecoration(property));

          if (isReadOnly(property)) {
            buffer.append(" onclick='return false;'  ");
            buffer.append("  DISABLED ");
          }
          if (DOStaticList.isChecked(half[0], property.getValue())) {
            buffer.append(" checked ");
          }
          // if (isReadOnly(property)) {
          // buffer.append(" disable ");
          // }
          buffer.append("/>");
          buffer.append(half[1]);
        } else {
          buffer.append("<input name=\"").append(property.getFullColName());

          buffer.append("\" value=\"").append(half[0]);

          buffer.append("\"  type=\"checkbox\"");
          buffer.append(getDecoration(property));

          if (isReadOnly(property)) {
            buffer.append(" onclick='return false;'  ");
            buffer.append(" DISABLED ");
          }

          if (DOStaticList.isChecked(half[0], property.getValue())) {
            buffer.append(" checked ");
          }
          // if (isReadOnly(property)) {
          // buffer.append(" disable ");
          // }
          buffer.append("/>");
          buffer.append(half[1]);

          if (isReadOnly(property)) {
            if (DOStaticList.isChecked(half[0], property.getValue())) {
              String[] strs = property.getValue().split(";");
              buffer.append(
                  "<span style='text-decoration:underline'>" + strs[strs.length - 1] + "</span>");
            }
          } else {

            buffer
                .append(
                    "<input  style='border:#B3B3B3 1px solid;'   onclick=\"this.style.borderColor='#406B9B'\" onmouseover=\"this.style.borderColor='#99E300'\" onmouseout=\"this.style.borderColor='#A1BCA3'\"  type='text' name='")
                .append(property.getFullColName())
                .append("'");
            buffer.append(" title='").append("其他").append("'");
            if (DOStaticList.isChecked(half[0], property.getValue())) {
              String[] strs = property.getValue().split(";");
              buffer.append(" value='" + strs[strs.length - 1] + "'");
            }
            buffer.append(" size=\"").append("13").append("\"/>");
          }
        }
      }
    }
    return buffer.toString();
  }