This topic has not yet been rated Rate this topic

Web Form Converter

Dynamics AX 2009

The SysEPWebFomConverter class contains several methods that are used when you convert a Web form from an earlier version of Enterprise Portal to the components used with the ASP.NET-based framework. To use this class, save the text of the export file as an .xpo file. Import the .xpo file into the AOT. For details about how to use the methods in the class to convert Web Forms, see How to: Convert Web Forms.

This class is used to convert Web forms to components used for the ASP.NET-based framework for Enterprise Portal.

Exportfile for AOT version 1.0 or later
Formatversion: 1

***Element: CLS

; Microsoft Dynamics AX Class: SysEPWebFormConverter unloaded
; --------------------------------------------------------------------------------
  CLSVERSION 1
  
  CLASS #SysEPWebFormConverter
    Id 12711
    PROPERTIES
      Name                #SysEPWebFormConverter
      Extends             #
      RunOn               #Called from
    ENDPROPERTIES
    
    METHODS
      Version: 3
      SOURCE #classDeclaration
        #class SysEPWebFormConverter
        #{
        #    str _webFormName;
        #    str _dataSetName;
        #
        #    TextBuffer _markup;
        #    TextBuffer _code;
        #
        #    TreeNode _designNode;
        #
        #    int _inGridControl;
        #    boolean _inAxGroupControl;
        #    boolean _inAxFormControl;
        #    str _axFormViewName;
        #    str _axFormId;
        #
        #    boolean _inAxMultiSectionControl;
        #    boolean _inAxSectionControl;
        #
        #    int _uniqueId;
        #}
      ENDSOURCE
      SOURCE #findRootDataSource
        #// Find the root datasource for the view
        #private str findRootDataSource(str dataSourceName)
        #{
        #    str dataSourcesPath = '\\Web\\Web Forms\\' + _webFormName + '\\Data Sources\\';
        #    str currentDataSourcePath = dataSourcesPath + dataSourceName;
        #    TreeNode currentDataSourceNode = infolog.findNode(currentDataSourcePath);
        #    str parent = currentDataSourceNode.AOTgetProperty('JoinSource');
        #    str linkType = currentDataSourceNode.AOTgetProperty('LinkType');
        #
        #    // No parent or not an inner or active join
        #    if (parent == '' || (linkType != 'InnerJoin' && linkType != 'OuterJoin'))
        #    {
        #        return dataSourceName;
        #    }
        #
        #    return this.findRootDataSource(parent);
        #}
        #
        #
      ENDSOURCE
      SOURCE #generateAxGroupEndMarkup
        #void generateAxGroupEndMarkup()
        #{
        #    str groupMarkup = '        </dynamics:AxGroup>';
        #    str fieldsMarkup = '            </Fields>';
        #   if (!_inGridControl && _inAxGroupControl == true)
        #    {
        #        _inAxGroupControl = false;
        #        _markup.appendText(fieldsMarkup);
        #        _markup.appendText('\r\n');
        #        _markup.appendText(groupMarkup);
        #        _markup.appendText('\r\n');
        #    }
        #}
      ENDSOURCE
      SOURCE #generateAxGroupStartMarkup
        #void generateAxGroupStartMarkup(TreeNode controlNode)
        #{
        #    str groupMarkup = '        <dynamics:AxGroup ID="grp%1%2" runat="server" %3>';
        #    str fieldsMarkup = '            <Fields>';
        #    str label;
        #    str caption;
        #    str name;
        #
        #    // only generate a group if in a form and not already in a grid
        #    if (_inAxFormControl && !_inGridControl && !_inAxGroupControl)
        #    {
        #        if (controlNode)
        #        {
        #            name = controlNode.AOTname();
        #            label = controlNode.AOTgetProperty('Caption');
        #        }
        #
        #        if (label != '')
        #        {
        #            caption = 'Caption="' + this.generateLabelMarkup(label) + '"';
        #        }
        #
        #        _markup.appendText(strfmt(groupMarkup, name, this.getNextId(), caption));
        #        _markup.appendText('\r\n');
        #        _markup.appendText(fieldsMarkup);
        #        _markup.appendText('\r\n');
        #        _inAxGroupControl = true;
        #    }
        #}
      ENDSOURCE
      SOURCE #generateBoundControlMarkup
        #private void generateBoundControlMarkup(str viewName, TreeNode controlNode)
        #{
        #    str sortExpressionMarkup = 'SortExpression="%1"';
        #    str boundFieldMarkup = '        <dynamics:AxBoundField DataSet="%1" DataSetView="%2" DataField="%3" %4/>\r\n';
        #    str linkFieldMarkup = '        <dynamics:AxHyperLinkBoundField DataSet="%1" DataSetView="%2" DataField="%3" %4 MenuItem="%5" />\r\n';
        #    str templateFieldMarkup = '        <asp:TemplateField HeaderText="<\%$ AxLabel:%1 \%>"><itemtemplate>Todo(%2)</itemtemplate></asp:TemplateField>\r\n';
        #    str fieldGroupMarkup = '        <dynamics:AxBoundFieldGroup DataSet="%1" DataSetView="%2" FieldGroup="%3" />\r\n';
        #
        #    str label = findProperty(controlNode.AOTgetProperties(), 'Label');
        #    str name = findProperty(controlNode.AOTgetProperties(), 'Name');
        #    str dataField = findProperty(controlNode.AOTgetProperties(), 'DataField');
        #    str webMenuItemName = findProperty(controlNode.AOTgetProperties(), 'WebMenuItemName');
        #    str sortExpression;
        #
        #    TreeNode parentGroup;
        #
        #    if (this.IsAutoDataGroup(controlNode))
        #    {
        #        // auto data groups are always in their own markup. End the current group.
        #        this.generateAxGroupEndMarkup();
        #
        #        // generate the auto data group
        #        this.generateAxGroupStartMarkup(controlNode);
        #        _markup.appendText(strfmt(fieldGroupMarkup, _dataSetName, viewName, this.getBoundGroupName(viewName, controlNode)));
        #        this.generateAxGroupEndMarkup();
        #    }
        #    else
        #    {
        #        if (_inGridControl)
        #        {
        #            // Only add sort expressions inside grid controls
        #            sortExpression = strfmt(sortExpressionMarkup, dataField);
        #        }
        #        else
        #        {
        #            // add some extra indentation for a form
        #            _markup.appendText('        ');
        #        }
        #
        #        // If not currently in a group then start a group
        #        if (this.IsGroup(controlNode.AOTparent()))
        #        {
        #            parentGroup = controlNode.AOTparent();
        #        }
        #        this.generateAxGroupStartMarkup(parentGroup);
        #
        #        if (this.getBoundFieldName(viewName, controlNode) == '')
        #        {
        #            _markup.appendText(strfmt(templateFieldMarkup, label, name));
        #        }
        #        else if (webMenuItemName != '')
        #        {
        #            _markup.appendText(strfmt(linkFieldMarkup, _dataSetName, viewName, this.getBoundFieldName(viewName, controlNode), sortExpression, webMenuItemName));
        #        }
        #        else
        #        {
        #            _markup.appendText(strfmt(boundFieldMarkup, _dataSetName, viewName, this.getBoundFieldName(viewName, controlNode), sortExpression));
        #        }
        #    }
        #}
        #
      ENDSOURCE
      SOURCE #generateCode
        #void generateCode()
        #{
        #    TreeNode node;
        #    TreeNodeIterator nodeIter;
        #    str properties;
        #    int nodeType;
        #
        #    void GenerateMethods(TreeNode treeNode)
        #    {
        #        TreeNodeIterator subNodeIter;
        #        TreeNodeIterator treeNodeIter = treeNode.AOTiterator();
        #        TreeNode subNode = treeNodeIter.next();
        #        TreeNode methodNode;
        #        boolean inButtonClickMethod;
        #        ;
        #        while (subNode != null)
        #        {
        #            if (this.IsMethodsNode(subNode) && subNode.AOTchildNodeCount() > 0)
        #            {
        #                // Loop over and generate methods
        #                subNodeIter = subNode.AOTiterator();
        #                methodNode = subNodeIter.next();
        #                while(methodNode)
        #                {
        #                    if (this.IsButton(methodNode.AOTparent().AOTparent()) && methodNode.AOTname() == 'clicked')
        #                    {
        #                        _code.appendText(strfmt('protected void %1_Click(object sender, EventArgs e) {', subNode.AOTparent().AOTname()));
        #                        inButtonClickMethod = true;
        #                    }
        #
        #                    _code.appendText('\r\n\r\n/*\r\n');
        #                    _code.appendText(treeNode.treeNodePath());
        #                    _code.appendText('\r\n');
        #
        #                    _code.appendText(methodNode.AOTgetSource());
        #
        #                    _code.appendText('\r\n');
        #                    _code.appendText('*/');
        #                    _code.appendText('\r\n');
        #                    _code.appendText('\r\n');
        #
        #                    if (inButtonClickMethod)
        #                    {
        #                        _code.appendText('}');
        #                        inButtonClickMethod  = false;
        #                    }
        #                    methodNode = subNodeIter.next();
        #                }
        #            }
        #            else
        #            {
        #                GenerateMethods(subNode);
        #            }
        #            subNode = treeNodeIter.next();
        #        }
        #    }
        #
        #    _code.appendText('using System;\r\n');
        #    _code.appendText('using System.Data;\r\n');
        #    _code.appendText('using System.Configuration;\r\n');
        #    _code.appendText('using System.Collections;\r\n');
        #    _code.appendText('using System.Web;\r\n');
        #    _code.appendText('using System.Web.Security;\r\n');
        #    _code.appendText('using System.Web.UI;\r\n');
        #    _code.appendText('using System.Web.UI.WebControls;\r\n');
        #    _code.appendText('using System.Web.UI.WebControls.WebParts;\r\n');
        #    _code.appendText('using System.Web.UI.HtmlControls;\r\n');
        #    _code.appendText('using Microsoft.Dynamics.Framework.Portal.UI.WebControls.WebParts;\r\n');
        #    _code.appendText('using Microsoft.Dynamics.Framework.Portal.UI.WebControls;\r\n');
        #    _code.appendText('using Microsoft.Dynamics.Framework.Metadata.Ax;\r\n');
        #    _code.appendText('using Microsoft.Dynamics.Framework.Data.Ax;\r\n');
        #    _code.appendText('\r\n');
        #    _code.appendText(strfmt('public partial class %1 : System.Web.UI.UserControl\r\n', _webFormName));
        #    _code.appendText('{\r\n');
        #
        #    GenerateMethods(_designNode);
        #    _code.appendText('\r\n}\r\n');
        #}
      ENDSOURCE
      SOURCE #generateControlId
        #private str generateControlId(TreeNode controlNode)
        #{
        #    str name = controlNode.AOTname();
        #    ;
        #    name += this.getNextId();
        #
        #    return name;
        #}
      ENDSOURCE
      SOURCE #generateControlMarkup
        #private void generateControlMarkup(str dataSourceId, str viewName, TreeNode controlNode)
        #{
        #    if (this.IsMethodsNode(controlNode))
        #    {
        #        return;
        #    }
        #
        #    // Some weblets like Favorites, Documents, Category browser are not supported
        #    if (this.IsUnSupportedWeblet(controlNode))
        #    {
        #        return;
        #    }
        #
        #    if (this.IsGrid(controlNode))
        #    {
        #        this.generateGridMarkup(dataSourceId, controlNode);
        #    }
        #    else if (this.IsGroup(controlNode) && !this.IsAutoDataGroup(controlNode))
        #    {
        #        // only handles the expansion of manual data groups
        #        this.generateGroupMarkup(dataSourceId, viewName, controlNode);
        #    }
        #    else if (this.IsTab(controlNode))
        #    {
        #        this.generateMultiSectionMarkup(dataSourceId, viewName, controlNode);
        #    }
        #    else if (this.IsDataBound(controlNode))
        #    {
        #        // Generate a form tag if necessary
        #        viewName = this.generateFormStartMarkup(dataSourceId, viewName, controlNode);
        #
        #        this.generateBoundControlMarkup(viewName, controlNode);
        #    }
        #    else
        #    {
        #        this.generateUnBoundControlMarkup(viewName, controlNode);
        #    }
        #
        #}
      ENDSOURCE
      SOURCE #generateFormEndMarkup
        #private void generateFormEndMarkup()
        #{
        #    str formMarkup = '</dynamics:AxForm>';
        #
        #    // if not already in a form control then don't generate end tags
        #    if (!_inAxFormControl) return;
        #
        #    _inAxFormControl = false;
        #    _axFormViewName = '';
        #    _axFormId = '';
        #
        #    // End any open group tags
        #    this.generateAxGroupEndMarkup();
        #
        #    _markup.appendText(formMarkup);
        #    _markup.appendText('\r\n');
        #}
      ENDSOURCE
      SOURCE #generateFormStartMarkup
        #private str generateFormStartMarkup(str dataSourceId, str viewName, TreeNode controlNode)
        #{
        #    str formId = 'form' + _webFormName;
        #    str formMarkup = '<dynamics:AxForm runat="server" ID="%1%2" DataKeyNames="%3" DataMember="%4_Current" DataSourceID="%5" >';
        #    str tmpViewName = this.getControlView(controlNode);
        #
        #    // close the current form if viewname is different
        #    if (tmpViewName != _axFormViewName && _inAxFormControl)
        #    {
        #        this.generateFormEndMarkup();
        #    }
        #
        #    // if already in a form control then don't generate a new one
        #    // return the view name for the existing form
        #    if (_inAxFormControl) return _axFormViewName;
        #
        #    // Cannot generate a form in a grid
        #    if (_inGridControl) return viewName;
        #
        #    // if the control is not databound then don't generate a form
        #    if (!this.IsDataBound(controlNode)) return viewName;
        #
        #    _inAxFormControl = true;
        #
        #    if (viewName == '') viewName = this.getControlView(controlNode);
        #
        #    _markup.appendText(strfmt(formMarkup, formId, this.getNextId(), this.getDataKeyForView(viewName), viewName, dataSourceId));
        #    _markup.appendText('\r\n');
        #
        #    _axFormViewName = viewName;
        #    _axFormId = formId;
        #
        #    return viewName;
        #}
      ENDSOURCE
      SOURCE #generateGridMarkup
        #private void generateGridMarkup(str dataSourceId, TreeNode gridNode)
        #{
        #    str viewName = gridNode.AOTgetProperty('DataSource');
        #    str dataKey = this.getDataKeyForView(viewName);
        #    TreeNode node;
        #    TreeNodeIterator nodeIter;
        #
        #    str gridOpenTag = '<dynamics:AxGridView ID="grid%1" runat="server" DataKeyNames="%4" DataMember="%3" DataSourceID="%2" AllowPaging="true">\r\n\    <Columns>';
        #    str gridCloseTag = '    </Columns>\r\n</dynamics:AxGridView>';
        #
        #    // Close any open forms
        #    this.generateFormEndMarkup();
        #
        #    _inGridControl++;
        #
        #    _markup.appendText('\r\n');
        #    _markup.appendText(strfmt(gridOpenTag, _webFormName + this.getNextId(), dataSourceId, viewName, dataKey));
        #    _markup.appendText('\r\n');
        #
        #    nodeIter = gridNode.AOTiterator();
        #    node = nodeIter.next();
        #    while (node)
        #    {
        #        this.generateControlMarkup(dataSourceId, viewName, node);
        #        node = nodeITer.next();
        #    }
        #
        #    _markup.appendText(gridCloseTag);
        #    _markup.appendText('\r\n');
        #    _inGridControl--;
        #}
      ENDSOURCE
      SOURCE #generateGroupMarkup
        #private void generateGroupMarkup(str dataSourceId, str viewName, TreeNode controlNode)
        #{
        #    TreeNode node;
        #    TreeNodeIterator nodeIter;
        #    boolean generateAxGroup;
        #
        #    if (this.IsMethodsNode(controlNode))
        #    {
        #        // Skip methods. They are added to the code behind
        #        return;
        #    }
        #    else
        #    {
        #        generateAxGroup = controlNode.AOTgetProperty('Caption') != '';
        #
        #        if (generateAxGroup)
        #        {
        #            // end any groups that were started by the bound control generation
        #            this.generateAxGroupEndMarkup();
        #            // start the new group
        #            this.generateAxGroupStartMarkup(controlNode);
        #        }
        #
        #        nodeIter = controlNode.AOTiterator();
        #        node = nodeIter.next();
        #        while (node)
        #        {
        #            this.generateControlMarkup(dataSourceId, viewName, node);
        #            node = nodeIter.next();
        #        }
        #
        #        if (generateAxGroup)
        #            this.generateAxGroupEndMarkup();
        #    }
        #}
      ENDSOURCE
      SOURCE #generateLabelMarkup
        #private str generateLabelMarkup(str label)
        #{
        #    if (!SysLabel::isLabelId(label))
        #    {
        #        if (label == '') return '';
        #
        #        return '*' + label + '*';
        #    }
        #    return strfmt('<\%$ AxLabel:%1 \%>', label);
        #}
      ENDSOURCE
      SOURCE #generateMarkup
        #private void generateMarkup()
        #{
        #    str controlHeader = '<\%@ Control Language="C#" AutoEventWireup="true" CodeFile="%1.ascx.cs" Inherits="%1" \%>';
        #    str registerPortalHeader = '<\%@ Register Assembly="Microsoft.Dynamics.Framework.Portal, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ';
        #    str registerPortalHeader2 = 'Namespace="Microsoft.Dynamics.Framework.Portal.UI.WebControls" TagPrefix="dynamics" \%>';
        #    str datasourceMarkup = '<dynamics:AxDataSource ID="%2" runat="server" DataSetName="%1" />';
        #
        #    TreeNode node;
        #    TreeNodeIterator nodeIter;
        #    str properties;
        #    int nodeType;
        #    str dataSourceId = 'ds' + _webFormName;
        #
        #    _markup.appendText(strfmt(controlHeader, _webFormName));
        #    _markup.appendText('\r\n');
        #    _markup.appendText(registerPortalHeader);
        #    _markup.appendText(registerPortalHeader2);
        #    _markup.appendText('\r\n');
        #    _markup.appendText('\r\n');
        #    _markup.appendText(strfmt(dataSourceMarkup, _dataSetName, dataSourceId));
        #    _markup.appendText('\r\n');
        #
        #    // loop over form controls and generate AxForm or AxGrid
        #    nodeIter = _designNode.AOTiterator();
        #    node = nodeIter.next();
        #    while (node)
        #    {
        #        this.generateControlMarkup(dataSourceId, '', node);
        #        node = nodeIter.next();
        #    }
        #
        #    // End any open form tags
        #    this.generateFormEndMarkup();
        #}
      ENDSOURCE
      SOURCE #generateMultiSectionMarkup
        #private void generateMultiSectionMarkup(str dataSourceId, str viewName, TreeNode controlNode)
        #{
        #    TreeNode node;
        #    TreeNode pageNode;
        #    TreeNodeIterator pageNodeIter;
        #    TreeNodeIterator nodeIter;
        #
        #    str multiSectionMarkup = '<dynamics:AxMultiSection runat="server" ID="MS_%1">';
        #    str multiSectionEndMarkup = '</dynamics:AxMultiSection>';
        #
        #    boolean nestedInAxForm = _inAxFormControl;
        #
        #    // if already in a multi section control then don't generate a new one
        #    if (_inAxMultiSectionControl) return;
        #
        #    // Cannot generate a multisection in a grid
        #    if (_inGridControl) return;
        #
        #    _inAxMultiSectionControl = true;
        #
        #    _markup.appendText(strfmt(multiSectionMarkup, this.generateControlId(controlNode)));
        #    _markup.appendText('\r\n');
        #
        #    pageNodeIter = controlNode.AOTiterator();
        #    pageNode = pageNodeIter.next();
        #    while (pageNode)
        #    {
        #        if (!this.IsMethodsNode(pageNode))
        #        {
        #            this.generateSectionStartMarkup(pageNode);
        #            nodeIter = pageNode.AOTiterator();
        #            node = nodeIter.next();
        #
        #            while(node)
        #            {
        #                this.generateControlMarkup(dataSourceId, viewName, node);
        #                node = nodeIter.next();
        #            }
        #
        #            // if the outer multisection is NOT nested in a form then
        #            // close open form tags
        #            if (!nestedInAxForm)
        #            {
        #                this.generateFormEndMarkup();
        #            }
        #            this.generateSectionEndMarkup();
        #        }
        #
        #        pageNode = pageNodeIter.next();
        #    }
        #
        #    // close any open forms
        #    this.generateFormEndMarkup();
        #
        #    _markup.appendText(strfmt(multiSectionEndMarkup));
        #    _markup.appendText('\r\n');
        #
        #}
      ENDSOURCE
      SOURCE #generateSectionEndMarkup
        #private void generateSectionEndMarkup()
        #{
        #    str sectionMarkup = '</dynamics:AxSection>';
        #
        #    if (!_inAxSectionControl) return;
        #
        #    _inAxSectionControl = false;
        #
        #    _markup.appendText(sectionMarkup);
        #    _markup.appendText('\r\n');
        #}
      ENDSOURCE
      SOURCE #generateSectionStartMarkup
        #private void generateSectionStartMarkup(TreeNode controlNode)
        #{
        #    str sectionMarkup = '<dynamics:AxSection ID="%1" runat="server" %2 >';
        #    str label;
        #    str caption;
        #    str name;
        #
        #    if (!_inAxMultiSectionControl) return;
        #
        #    // No nested section
        #    if (_inAxSectionControl) return;
        #
        #    // Cannot generate a section in a grid
        #    if (_inGridControl) return;
        #
        #    // end any existing section
        #    this.generateSectionEndMarkup();
        #
        #    // write the new section
        #    _inAxSectionControl = true;
        #    name = controlNode.AOTname();
        #    label = controlNode.AOTgetProperty('Caption');
        #
        #    if (label != '')
        #        caption = 'Caption="' + this.generateLabelMarkup(label) + '"';
        #
        #    _markup.appendText(strfmt(sectionMarkup, name, caption));
        #    _markup.appendText('\r\n');
        #}
      ENDSOURCE
      SOURCE #generateUnBoundControlMarkup
        #private void generateUnBoundControlMarkup(str viewName, TreeNode controlNode)
        #{
        #    str imageURL = '/_layouts/EP/images/WebIcon_LookingGlas.gif';
        #    str linkFieldMarkup = '        <dynamics:AxHyperLinkBoundField DataSet="%1" DataSetView="%2" DataField="%3" MenuItem="%4" ImageUrl="%5" HeaderText="%6" />\r\n';
        #    str templateFieldMarkup = '        <asp:TemplateField HeaderText="%1"><itemtemplate>Todo(%2)</itemtemplate></asp:TemplateField>\r\n';
        #    str simpleControlMarkup = '<%-- Todo(%2) --%>\r\n';
        #    str buttonMarkup = '<asp:Button runat="server" ID="%1" Text="%2" OnClick="%1_Click" />';
        #    str label = findProperty(controlNode.AOTgetProperties(), 'Label');
        #    str name = findProperty(controlNode.AOTgetProperties(), 'Name');
        #    str menuItem;
        #
        #    if (_inGridControl)
        #    {
        #        if (this.IsButton(controlNode))
        #        {
        #            // A button control in a grid should be converted to a hyperlink bound field
        #            // with an image URL for the magnifying glass. Any field can be used, no data will be displayed
        #            label = findProperty(controlNode.AOTgetProperties(), 'Text');
        #            menuItem = findProperty(controlNode.AOTgetProperties(), 'WebMenuItemName');
        #            _markup.appendText(strfmt(linkFieldMarkup, _dataSetName, viewName, this.getTitleFieldForView(viewName), menuItem, imageURL, this.generateLabelMarkup(label)));
        #        }
        #        else
        #        {
        #            _markup.appendText(strfmt(templateFieldMarkup, label, name));
        #        }
        #    }
        #    else
        #    {
        #       if (this.IsButton(controlNode))
        #        {
        #            label = findProperty(controlNode.AOTgetProperties(), 'Text');
        #            _markup.appendText(strfmt(buttonMarkup, name, this.generateLabelMarkup(label)));
        #        }
        #        else
        #        {
        #            _markup.appendText(strfmt(simpleControlMarkup, this.generateLabelMarkup(label), name));
        #        }
        #    }
        #}
        #
      ENDSOURCE
      SOURCE #getBoundFieldName
        #private str getBoundFieldName(str viewName, TreeNode controlNode)
        #{
        #    str fieldPrefix;
        #    str dataField = findProperty(controlNode.AOTgetProperties(), 'DataField');
        #    str dataMethod = findProperty(controlNode.AOTgetProperties(), 'DataMethod');
        #    str dataSource = findProperty(controlNode.AOTgetProperties(), 'DataSource');
        #
        #    if (dataSource != '' && viewName != '' && dataSource != viewName)
        #    {
        #        fieldPrefix = dataSource + '!';
        #    }
        #    return fieldPrefix + ((dataMethod == '') ? dataField : dataMethod + '**');
        #}
      ENDSOURCE
      SOURCE #getBoundGroupName
        #private str getBoundGroupName(str viewName, TreeNode controlNode)
        #{
        #    str fieldPrefix;
        #    str dataGroup = findProperty(controlNode.AOTgetProperties(), 'DataGroup');
        #    str dataSource = findProperty(controlNode.AOTgetProperties(), 'DataSource');
        #
        #    if (dataSource != '' && viewName != '' && dataSource != viewName)
        #    {
        #        fieldPrefix = dataSource + '!';
        #    }
        #    return fieldPrefix + dataGroup;
        #}
      ENDSOURCE
      SOURCE #getCode
        #private TextBuffer getCode()
        #{
        #    return _code;
        #}
      ENDSOURCE
      SOURCE #getControlDataSource
        #private str getControlDataSource(TreeNode controlNode)
        #{
        #    str dataSource = findProperty(controlNode.AOTgetProperties(), 'DataSource');
        #    str dataSourcesPath = '\\Web\\Web Forms\\' + _webFormName + '\\Data Sources';
        #    TreeNode dataSourcesNode = infoLog.findNode(dataSourcesPath);
        #    TreeNodeIterator iter = dataSourcesNode.AOTiterator();
        #    TreeNode dataSourceNode = iter.next();
        #
        #    if (dataSource == '')
        #    {
        #        while(dataSourceNode)
        #        {
        #            // If no datasource is found return the first root datasource
        #            if (findProperty(dataSourceNode.AOTgetProperties(), 'JoinSource') == '')
        #            {
        #                return dataSourceNode.AOTname();
        #
        #            }
        #            dataSourceNode = iter.next();
        #        }
        #    }
        #
        #    return dataSource;
        #}
      ENDSOURCE
      SOURCE #getControlView
        #private str getControlView(TreeNode controlNode)
        #{
        #    str controlDataSource = this.getControlDataSource(controlNode);
        #    ;
        #    // Find the root datasource for the given datasource
        #    if (controlDataSource == '')
        #    {
        #        throw Error(funcname() + ': No datasource found');
        #    }
        #
        #    return this.findRootDataSource(controlDataSource);
        #}
      ENDSOURCE
      SOURCE #getDataKeyForView
        #str getDataKeyForView(str viewName)
        #{
        #    str dataSourcesPath = '\\Web\\Web Forms\\' + _webFormName + '\\Data Sources\\';
        #    str dataKey = '';
        #    str rootDataSourceName;
        #
        #    // Generate keys for the given datasource
        #    void GenerateKeys(str dataSourceName)
        #    {
        #        str dataSourcePath = dataSourcesPath + dataSourceName;
        #        TreeNode dataSourceNode = infoLog.findNode(dataSourcePath);
        #        str tableName = dataSourceNode.AOTgetProperty('Table');
        #        DictTable table = new DictTable(tableName2Id(tableName));
        #        DictIndex dictIndex = new DictIndex(table.id(), table.indexUnique());
        #        DictField field;
        #        int fieldCount = dictIndex.numberOfFields();
        #        int i;
        #
        #        for (i = 1; i <= fieldCount; i++)
        #        {
        #            field = table.fieldObject(dictIndex.field(i));
        #            if (field)
        #            {
        #                if (dataKey != '') dataKey += ',';
        #
        #                if (dataSourceName != rootDataSourceName)
        #                {
        #                    dataKey += dataSourceName + '!';
        #                }
        #                dataKey += field.name();
        #            }
        #        }
        #
        #    }
        #
        #    container GetChildDataSources(str parentDataSourceName)
        #    {
        #        TreeNode dataSourcesNode = infolog.findNode(dataSourcesPath);
        #        TreeNodeIterator iter = dataSourcesNode.AOTiterator();
        #        TreeNode dataSourceNode = iter.next();
        #        container childDataSources;
        #        str joinSource;
        #        str linkType;
        #
        #        while (dataSourceNode)
        #        {
        #            joinSource = dataSourceNode.AOTgetProperty('JoinSource');
        #            linkType = dataSourceNode.AOTgetProperty('LinkType');
        #
        #            if (joinSource == parentDataSourceName && (linkType == 'InnerJoin' || linkType == 'OuterJoin'))
        #            {
        #                childDataSources += dataSourceNode.AOTname();
        #            }
        #
        #            dataSourceNode = iter.next();
        #        }
        #        return childDataSources;
        #    }
        #
        #    void GenerateKeysRecursive(str dataSourceName)
        #    {
        #        str dataSourcePath = dataSourcesPath + dataSourceName;
        #        TreeNode dataSourceNode = infoLog.findNode(dataSourcePath);
        #        Container childDataSources;
        #        int childCount;
        #        int i;
        #        str childDataSourceName;
        #
        #        // Generate key for current datasource
        #        GenerateKeys(dataSourceName);
        #
        #        childDataSources = GetChildDataSources(dataSourceName);
        #        childCount = conlen(childDataSources);
        #
        #        // Generate keys for each child
        #        for(i = 1; i <= childCount; i++)
        #        {
        #            childDataSourceName = conpeek(childDataSources, i);
        #            GenerateKeysRecursive(childDataSourceName);
        #        }
        #    }
        #
        #    rootDataSourceName = this.findRootDataSource(viewName);
        #
        #    GenerateKeysRecursive(rootDataSourceName);
        #
        #    return dataKey;
        #}
      ENDSOURCE
      SOURCE #getMarkup
        #private TextBuffer getMarkup()
        #{
        #    return _markup;
        #}
      ENDSOURCE
      SOURCE #getNextId
        #private str getNextId()
        #{
        #;
        #
        #    _uniqueId++;
        #    return int2str(_uniqueId);
        #}
      ENDSOURCE
      SOURCE #getTitleFieldForView
        #str getTitleFieldForView(str viewName)
        #{
        #    str dataSourcePath = '\\Web\\Web Forms\\' + _webFormName + '\\Data Sources\\' + viewName;
        #    TreeNode dataSourceNode = infoLog.findNode(dataSourcePath);
        #    str tableName = dataSourceNode.AOTgetProperty('Table');
        #    DictTable table = new DictTable(tableName2Id(tableName));
        #
        #    return table.fieldName(table.titleField1());
        #}
      ENDSOURCE
      SOURCE #IsAutoDataGroup
        #private boolean IsAutoDataGroup(TreeNode controlNode)
        #{
        #    return findproperty(controlNode.AOTgetProperties(), 'AutoDataGroup') == 'Yes';
        #}
        #
      ENDSOURCE
      SOURCE #IsButton
        #private boolean IsButton(TreeNode controlNode)
        #{
        #    ;
        #    return '' != findProperty(controlNode.AOTgetProperties(), 'ButtonStyle');
        #}
      ENDSOURCE
      SOURCE #IsCatBrowseWeblet
        #private boolean IsCatBrowseWeblet(TreeNode controlNode)
        #{
        #    return findproperty(controlNode.AOTgetProperties(), 'Weblet') == 'WebCatBrowseWeblet';
        #}
      ENDSOURCE
      SOURCE #IsDataBound
        #private boolean IsDataBound(TreeNode controlNode)
        #{
        #    str dataField = findProperty(controlNode.AOTgetProperties(), 'DataField');
        #    str dataMethod = findProperty(controlNode.AOTgetProperties(), 'DataMethod');
        #    str dataSource = findProperty(controlNode.AOTgetProperties(), 'DataSource');
        #
        #    return (dataField != '' || dataMethod != '' || dataSource != '');
        #}
      ENDSOURCE
      SOURCE #IsGrid
        #private boolean IsGrid(TreeNode treeNode)
        #{
        #    ;
        #    return '' != findProperty(treeNode.AOTgetProperties(), 'MultiSelect');
        #}
      ENDSOURCE
      SOURCE #IsGroup
        #boolean IsGroup(TreeNode controlNode)
        #{
        #    return findproperty(controlNode.AOTgetProperties(), 'AutoDataGroup') != '';
        #}
      ENDSOURCE
      SOURCE #IsMethodsNode
        #boolean IsMethodsNode(TreeNode controlNode)
        #{
        #    return controlNode.AOTname() == 'Methods';
        #}
        #
        #
      ENDSOURCE
      SOURCE #IsTab
        #private boolean IsTab(TreeNode controlNode)
        #{;
        #    return findProperty(controlNode.AOTgetProperties(), 'Tab') != '';
        #}
      ENDSOURCE
      SOURCE #IsUnSupportedWeblet
        #private boolean IsUnSupportedWeblet(TreeNode controlNode)
        #{
        #    str webletName = findproperty(controlNode.AOTgetProperties(), 'Weblet');
        #
        #    switch (webletName)
        #    {
        #    case 'WebCatBrowseWeblet':
        #    case 'WebFavoriteRecordWeblet':
        #    case 'EPDocumentWebLet':
        #        return true;
        #    }
        #    return false;
        #}
      ENDSOURCE
      SOURCE #new
        #protected void new(str webFormName, str dataSetName)
        #{
        #    TreeNode        tnWebForm;
        #    ;
        #
        #    tnWebForm = infolog.findNode('\\Web\\Web Forms\\' + webFormName);
        #
        #    if ( tnWebForm )
        #    {
        #        //intialize global objects
        #        _designNode = tnWebForm.AOTfindChild('Designs').AOTfindChild('Design');
        #        _webFormName = webFormName;
        #        _dataSetName = dataSetName;
        #        _markup = new TextBuffer();
        #        _code = new TextBuffer();
        #
        #        _inGridControl = 0;
        #    }
        #    else
        #    {
        #        throw Error(_webFormName + ': Not Found.');
        #    }
        #}
      ENDSOURCE
      SOURCE #createProject
        #static void createProject(str projectName, container items)
        #{
        #    str itemPath;
        #    int i;
        #    int len = conlen(items);
        #    SysProjectFilterRunBase project;
        #    TreeNode treeNode;
        #    UtilElements utilElements;
        #
        #    ProjectNode upgradeNode;
        #
        #    upgradeNode = SysTreeNode::createProject(projectName);
        #    project = new SysProjectFilterRunBase();
        #    project.parmProjectNode(upgradeNode);
        #    project.grouping(SysProjectGrouping::AOT);
        #
        #    for (i = 1; i <= len; i++)
        #    {
        #        itemPath = conpeek(items, i);
        #        treeNode  = TreeNode::findNode(itemPath);
        #        utilElements = xUtilElements::findTreeNode(treeNode, false);
        #        project.doUtilElements(utilElements);
        #    }
        #    project.write();
        #}
      ENDSOURCE
      SOURCE #createToolbarMenu
        #public static str createToolbarMenu(str formName, boolean bRecreate = false)
        #{
        #    str menuParentNodePath = '\\Web\\Web Menus';
        #    str menuNodeName = substr(formName, 1, 40 - strlen('Toolbar')) + 'Toolbar';
        #    TreeNode menuParentNode = infolog.findNode(menuParentNodePath);
        #    WebMenu webMenu = menuParentNode.AOTfindChild(menuNodeName);
        #    WebMenu subMenu;
        #
        #    void AddSubMenu(str name, str label)
        #    {
        #    ;
        #        webMenu.addSubmenu(name);
        #
        #        subMenu = webMenu.AOTfindChild(name);
        #        subMenu.label(label);
        #    }
        #
        #    if (webMenu && bRecreate == true)
        #    {
        #        webMenu.AOTdelete();
        #        menuParentNode.AOTsave();
        #        webMenu = null;
        #
        #    }
        #
        #    if (!webMenu)
        #    {
        #        webMenu = menuParentNode.AOTadd(menuNodeName);
        #
        #        AddSubmenu('New', literalStr('@SYS2055'));
        #        AddSubmenu('Actions', literalStr('@SYS40422'));
        #        AddSubmenu('RelatedInformation', literalStr('@SYS111665'));
        #        AddSubmenu('Reports', literalStr('@SYS7800'));
        #
        #        webMenu.AOTsave();
        #    }
        #
        #    return webMenu.treeNodePath();
        #}
      ENDSOURCE
      SOURCE #getFormsToConvert
        #private static container getFormsToConvert()
        #{
        #    container webForms;
        #;
        #    // Add the Web Forms to be converted
        #    webForms += 'WebForm1';
        #    webForms += 'WebForm2';
        #
        #    return webForms;
        #}
      ENDSOURCE
      SOURCE #main
        #static void main(Args args)
        #{
        #    container webForms;
        #    container projectItems;
        #;
        #    // Retrieve the list of Web Forms to convert
        #    webForms = SysEPWebFormConverter::getFormsToConvert();
        #
        #    // Migrate the Web Forms
        #    projectItems = SysEPWebFormConverter::migrateWebForms(webForms);
        #
        #    // Create a project with the conversion results
        #    SysEPWebFormConverter::createProject('WebForm_Conversion', projectItems);
        #}
      ENDSOURCE
      SOURCE #migrateContentItems
        #public static container migrateContentItems(str formName)
        #{
        #    // find all the the web display content items that refer to the
        #    // web form and migrate them to managed content items
        #    str displayItemsPath = '\\Web\\Web Content\\Display';
        #    str managedItemsPath = '\\Web\\Web Content\\Managed';
        #    str managedItemPath;
        #    TreeNode displayItems = infolog.findNode(displayItemsPath);
        #    TreeNode managedItems = infolog.findNode(managedItemsPath);
        #    TreeNodeIterator displayIter = displayItems.AOTiterator();
        #    TreeNode displayItem = displayIter.next();
        #    TreeNode managedItem;
        #    str itemName;
        #    str target;
        #    container items;
        #
        #    void copyItemProperty(str propertyName)
        #    {
        #        managedItem.AOTsetProperty(propertyName, displayItem.AOTgetProperty(propertyName));
        #    }
        #
        #    while(displayItem)
        #    {
        #        itemName = displayItem.AOTname();
        #        target = findProperty(displayItem.AOTgetProperties(), 'Object');
        #        if (target == formName)
        #        {
        #            managedItemPath = managedItemsPath + '\\' + itemName;
        #            managedItem = infolog.findNode(managedItemPath);
        #            if (!managedItem)
        #            {
        #                managedItem = managedItems.AOTadd(itemName);
        #            }
        #
        #            copyItemProperty('Label');
        #            copyItemProperty('HelpText');
        #            copyItemProperty('Object');
        #            copyItemProperty('EnumTypeParameter');
        #            copyItemProperty('EnumParameter');
        #            copyItemProperty('ConfigurationKey');
        #            copyItemProperty('CountryConfigurationKey');
        #            copyItemProperty('WebConfigurationKey');
        #            copyItemProperty('SecurityKey');
        #            copyItemProperty('NeededAccessLevel');
        #
        #            managedItem.AOTsave();
        #
        #            items += managedItem.treeNodePath();
        #        }
        #        displayItem = displayIter.next();
        #    }
        #
        #    return items;
        #}
      ENDSOURCE
      SOURCE #migrateDataSet
        #static str migrateDataSet(str strWebFormName)
        #{
        #    //variables declaration
        #    TreeNode        tnWebForms;
        #    TreeNode        tnDataSets;
        #    TreeNode        tnWebFormCurrent;
        #    TreeNodeIterator tiWebformsIterator;
        #    TreeNode        tnWFCurrentDataSources;
        #    TreeNode        tnNewDataSet;
        #
        #    TreeNode        tnWFCurrentDS;
        #    TreeNode        tnDSCurrentDataSources;
        #
        #    TreeNode        tnWFCurrentDSMethod;
        #    TreeNode        tnDSCurrentDSMethod;
        #
        #    TreeNode        tnWFCurrentDSFields;
        #    TreeNode        tnDSCurrentDSFields;
        #
        #    TreeNode        tnWFCurrentDSField;
        #    TreeNode        tnDSCurrentDSField;
        #
        #    TreeNode        tnWFCurrentDSFieldMethods;
        #    TreeNode        tnDSCurrentDSFieldMethods;
        #
        #    TreeNode        tnWFCurrentDSFieldMethod;
        #    TreeNode        tnDSCurrentDSFieldMethod;
        #
        #    TreeNode        tnDSCurrentDSFieldMethodChild;
        #
        #    TreeNode        tnDSCurrentDS;
        #    TreeNode        tnDSCurrentDSMethodChild;
        #
        #
        #    TreeNode        tnWFMethods;
        #    TreeNode        tnWFCurrentMethod;
        #
        #    TreeNode        tnDSMethods;
        #    TreeNode        tnDSMethodsChild;
        #
        #    str             strAOTName;
        #    str             strSource;
        #    TextBuffer      txtSource = new TextBuffer();
        #    ;
        #
        #    //Exisiting Web forms node
        #    tnWebForms = infolog.findNode('\\Web\\Web Forms\\');
        #
        #    //Exisitng DataSet Nodes
        #    tnDataSets = infolog.findNode('\\Data Sets');
        #
        #    tnWebFormCurrent = infolog.findNode('\\Web\\Web Forms\\' + strWebFormName);
        #
        #    //restrict to one web form initially
        #    if(tnWebFormCurrent)
        #    {
        #        //intialize global objects
        #        tnWFCurrentDataSources = tnWebFormCurrent.AOTfindChild('Data Sources');
        #        tnNewDataSet = infolog.findNode('\\Data Sets\\' + tnWebFormCurrent.AOTname());
        #        if (tnNewDataSet)
        #        {
        #            tnNewDataSet.AOTdelete();
        #        }
        #        tnNewDataSet = tnDataSets.AOTadd(tnWebFormCurrent.AOTname());
        #
        #        tnWFMethods = tnWebFormCurrent.AOTfindChild('Methods');
        #        tnWFCurrentMethod = tnWFMethods.AOTfirstChild();
        #
        #        tnDSMethods = tnNewDataSet.AOTfindChild('Methods');
        #
        #        //iterate through each method node and copy the content
        #        while (tnWFCurrentMethod)
        #        {
        #            //Get the properties and names of the methods
        #            txtSource.setText(tnWFCurrentMethod.AOTgetSource());
        #            strAOTName      = tnWFCurrentMethod.AOTname();
        #
        #            //create new method and set the source
        #            if ( tnDSMethods.AOTfindChild(strAOTName) == null)
        #            {
        #                tnDSMethods.AOTadd(strAOTName);
        #            }
        #            tnDSMethodsChild   = tnDSMethods.AOTfindChild(strAOTName);
        #
        #            // Fix the base class WebFormRun
        #            txtSource.replace('FormWebRun', 'DataSetRun');
        #            tnDSMethodsChild.AOTsetSource(txtSource.getText(), false);
        #
        #            //move to next web form method
        #            tnWFCurrentMethod   = tnWFCurrentMethod.AOTnextSibling();
        #        }
        #
        #        // Copy Data source node
        #
        #       tnDSCurrentDataSources = tnNewDataSet.AOTfindChild('Data Sources');
        #       tnWFCurrentDS = tnWFCurrentDataSources.AOTfirstChild();
        #
        #       //iterating thru tables in the datasource of web form
        #       while (tnWFCurrentDS)
        #       {
        #
        #       //Get the properties and names of the Data source
        #        strSource           = tnWFCurrentDS.AOTgetProperties();
        #        strAOTName          = tnWFCurrentDS.AOTname();
        #
        #        //Add Web form data source to Data Set data source
        #        tnDSCurrentDataSources.AOTadd(strAOTName);
        #        tnDSCurrentDS       =  tnDSCurrentDataSources.AOTfindChild(strAOTName);
        #        tnDSCurrentDS.AOTsetProperties(strSource);
        #
        #        // If Data Source Name & the Table Name are not same then fill the Table
        #        // property of the Data Source from the Parent WebForm DataSource node.
        #        if (strAOTName != tnWFCurrentDS.AOTgetProperty("Table"))
        #        {
        #            tnDSCurrentDS.AOTsetProperty("Table", tnWFCurrentDS.AOTgetProperty("Table"));
        #        }
        #
        #        // copy datasource methods to new Data Set data source
        #        tnWFCurrentDSMethod = tnWFCurrentDS.AOTfindChild('Methods');
        #        tnWFCurrentDSMethod = tnWFCurrentDSMethod.AOTfirstChild();
        #        tnDSCurrentDSMethod = tnDSCurrentDS.AOTfindChild('Methods');
        #
        #        //iterate through each method and copy the content
        #        while (tnWFCurrentDSMethod)
        #        {
        #            //Get the properties and names of the Data source
        #            strSource       = tnWFCurrentDSMethod.AOTgetSource();
        #            strAOTName      = tnWFCurrentDSMethod.AOTname();
        #
        #            //create the
        #            tnDSCurrentDSMethod.AOTadd(strAOTName);
        #            tnDSCurrentDSMethodChild   = tnDSCurrentDSMethod.AOTfindChild(strAOTName);
        #            tnDSCurrentDSMethodChild.AOTsetSource(strSource, false);
        #
        #            //move to the next method
        #            tnWFCurrentDSMethod = tnWFCurrentDSMethod.AOTnextSibling();
        #        }
        #
        #
        #        // copy datasource field properties to the new form
        #        tnWFCurrentDSFields = tnWFCurrentDS.AOTfindChild('Fields');
        #        tnWFCurrentDSField  = tnWFCurrentDSFields.AOTfirstChild();
        #        tnDSCurrentDSFields = tnDSCurrentDS.AOTfindChild('Fields');
        #
        #        //loop through each field of web form data source
        #        while (tnWFCurrentDSField)
        #        {
        #            //check if the properties of the field exist to copy
        #            if (!tnWFCurrentDSField.AOTgetProperties())
        #            {
        #                tnWFCurrentDSField  = tnWFCurrentDSField.AOTnextSibling();
        #                continue;
        #            }
        #
        #            //get the name and properties
        #            strSource   = tnWFCurrentDSField.AOTgetProperties();
        #            strAOTName  = tnWFCurrentDSField.AOTname();
        #
        #            //create the field in Dataset data source
        #            if (tnDSCurrentDSFields.AOTfindChild(strAOTName) == null)
        #            {
        #                tnDSCurrentDSFields.AOTadd(strAOTName);
        #            }
        #
        #            tnDSCurrentDSField = tnDSCurrentDSFields.AOTfindChild(strAOTName);
        #            tnDSCurrentDSField.AOTsetProperties(strSource);
        #
        #            // copy datasource field methods to the new data source field methods
        #            if (tnWFCurrentDSField.AOTgetProperties())
        #            {
        #               tnWFCurrentDSFieldMethods = tnWFCurrentDSField.AOTfindChild('Methods');
        #               tnWFCurrentDSFieldMethod = tnWFCurrentDSFieldMethods.AOTfirstChild();
        #               tnDSCurrentDSFieldMethods = tnDSCurrentDSField.AOTfindChild('Methods');
        #
        #                while (tnWFCurrentDSFieldMethod)
        #                {
        #                    //get the name and properties
        #                    strSource      = tnWFCurrentDSFieldMethod.AOTgetSource();
        #                    strAOTName  = tnWFCurrentDSFieldMethod.AOTname();
        #
        #                    //create the method for the field
        #                    tnDSCurrentDSFieldMethods.AOTadd(strAOTName);
        #                    tnDSCurrentDSFieldMethodChild = tnDSCurrentDSFieldMethods.AOTfindChild(strAOTName);
        #                    tnDSCurrentDSFieldMethodChild.AOTsetSource(strSource, false);
        #
        #                    //go the field method
        #                    tnWFCurrentDSFieldMethod = tnWFCurrentDSFieldMethod.AOTnextSibling();
        #                }
        #            }
        #            //go to the next datasource field
        #            tnWFCurrentDSField  = tnWFCurrentDSField.AOTnextSibling();
        #        }
        #         //go to next data source
        #         tnWFCurrentDS = tnWFCurrentDS.AOTnextSibling();
        #        }
        #    }
        #    tnNewDataSet.AOTsave();
        #    tnNewDataSet.AOTcompile(1);
        #
        #    return tnNewDataSet.treeNodePath();
        #}
        #
      ENDSOURCE
      SOURCE #migrateDesign
        #public static str migrateDesign(str formName)
        #{
        #    str controlsNode = '\\Web\\Web Files\\Web Controls';
        #    str sourceName = formName + '_ascx_cs';
        #    str controlPath = controlsNode + '\\' + formName;
        #    str sourcePath = controlPath + '\\' + sourceName;
        #    str controlFileName = formName + '.ascx';
        #    str sourceFileName = formName + '.ascx.cs';
        #
        #    TreeNode webControlsNode = infolog.findNode(controlsNode);
        #    TreeNode webControlNode = infolog.findNode(controlPath);
        #    TreeNode webControlSourceNode = infolog.findNode(sourcePath);
        #
        #    SysEPWebFormConverter converter;
        #;
        #    // Migrate the form design
        #    converter = new SysEPWebFormConverter(formName, formName);
        #    converter.generateMarkup();
        #    converter.generateCode();
        #
        #    if (webControlNode == null)
        #    {
        #        webControlNode = webControlsNode.AOTadd(formName);
        #    }
        #    webControlNode.AOTsetProperty('Filename', controlFileName);
        #    webControlNode.AOTsetProperty('RelativePath', 'ep');
        #    webControlNode.AOTsetSource(converter.getMarkup().getText());
        #    webControlNode.AOTsave();
        #
        #    if (webControlSourceNode == null)
        #    {
        #        webControlSourceNode = webControlNode.AOTadd(sourceName);
        #    }
        #    webControlSourceNode.AOTsetProperty('Filename', sourceFileName);
        #    webControlSourceNode.AOTsetProperty('RelativePath', 'ep');
        #    webControlSourceNode.AOTsetSource(converter.getCode().getText());
        #    webControlSourceNode.AOTsave();
        #
        #    return webControlNode.treeNodePath();
        #}
      ENDSOURCE
      SOURCE #migrateWebForm
        #public static container migrateWebForm(str formName, boolean migrateDataSet=true)
        #{
        #    container items;
        #    ;
        #    if (migrateDataSet)
        #    {
        #        items += SysEPWebFormConverter::migrateDataSet(formName);
        #    }
        #
        #    items += SysEPWebFormConverter::migrateDesign(formName);
        #    items += SysEPWebFormConverter::migrateContentItems(formName);
        #    items += SysEPWebFormConverter::createToolbarMenu(formName);
        #
        #    return items;
        #}
        #
      ENDSOURCE
      SOURCE #migrateWebForms
        #public static container migrateWebForms(container webForms)
        #{
        #    container items;
        #    int i;
        #    int len = conlen(webForms);
        #    str formName;
        #
        #    for (i = 1; i <= len; i++)
        #    {
        #        formName = conpeek(webForms, i);
        #        items += SysEPWebFormConverter::migrateWebForm(formName);
        #    }
        #
        #    return items;
        #}
      ENDSOURCE
      SOURCE #migrateWebFormsAndCreateProject
        #public static void migrateWebFormsAndCreateProject(str projectName, container webForms)
        #{
        #    SysProjectFilterRunBase     upgradeProject;
        #    container                   items;
        #    TreeNode                    treeNode;
        #    UtilElements                utilElements;
        #
        #    void createProject(SysElementName   _projectName)
        #    {
        #        ProjectNode upgradeNode;
        #
        #        upgradeNode = SysTreeNode::createProject(_projectName);
        #        upgradeProject = new SysProjectFilterRunBase();
        #        upgradeProject.parmProjectNode(upgradeNode);
        #        upgradeProject.grouping(SysProjectGrouping::AOT);
        #    }
        #
        #    void migrateWebForms()
        #    {
        #        int i;
        #        int len = conlen(webForms);
        #        str formName;
        #
        #        for (i = 1; i <= len; i++)
        #        {
        #            formName = conpeek(webForms, i);
        #            items += SysEPWebFormConverter::migrateWebForm(formName);
        #        }
        #    }
        #
        #    void addItemsToProject()
        #    {
        #        str itemPath;
        #        int i;
        #        int len = conlen(items);
        #
        #        for (i = 1; i <= len; i++)
        #        {
        #            itemPath = conpeek(items, i);
        #            treeNode  = TreeNode::findNode(itemPath);
        #            utilElements = xUtilElements::findTreeNode(treeNode, false);
        #            upgradeProject.doUtilElements(utilElements);
        #        }
        #    }
        #    ;
        #
        #    createProject(projectName);
        #    migrateWebForms();
        #    addItemsToProject();
        #    upgradeProject.write();
        #}
      ENDSOURCE
    ENDMETHODS
  ENDCLASS

***Element: END
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ