Exemplo n.º 1
0
        /// <summary>
        ///     Called when user clicks on the add-in menu
        /// </summary>
        /// <param name="e">The context of the VS tools and metadata</param>
        public override void OnClick(AddinDesignerEventArgs e)
        {
            try
            {
                var field = (BaseField)e.SelectedElement;

                var dialog = new CreateIndex();
                dialog.CreateIndexVm.IndexName = field.Name + "_Idx";
                dialog.ShowDialog();


                var axTable = (AxTable)field.Table.GetMetadataType();

                var index = new AxTableIndex();

                index.Name            = dialog.CreateIndexVm.IndexName;
                index.AllowDuplicates = dialog.CreateIndexVm.AllowDuplicates ? NoYes.Yes : NoYes.No;
                index.AlternateKey    = dialog.CreateIndexVm.AlternativeKey ? NoYes.Yes : NoYes.No;


                e.SelectedElements.OfType <BaseField>()
                .ToList().ForEach(f =>
                {
                    var fieldIndex = new AxTableIndexField
                    {
                        DataField = f.Name,
                        Name      = f.Name
                    };
                    index.AddField(fieldIndex);
                });

                // Add the method to the class
                axTable.AddIndex(index);

                var fieldNameCamelCase = field.Name.ToCamelCase();
                var tableNameCamelCase = axTable.Name.ToCamelCase();

                var source =
                    $@"public static {axTable.Name} findBy{field.Name} ({field.ExtendedDataType} _{fieldNameCamelCase}, boolean _forUpdate = false)
                {{
                    {axTable.Name} {tableNameCamelCase};

                    {tableNameCamelCase}.selectForUpdate(_forUpdate);

                    if(_{fieldNameCamelCase})
                    select firstonly {tableNameCamelCase} where {tableNameCamelCase}.{field
                        .Name} == _{fieldNameCamelCase};

                    return {tableNameCamelCase};
                }}";


                axTable.AddMethod(BuildMethod(field.Name, source));
                var metaModelProviders = ServiceLocator.GetService(typeof(IMetaModelProviders)) as IMetaModelProviders;
                var metaModelService   = metaModelProviders.CurrentMetaModelService;

                var model = DesignMetaModelService.Instance.CurrentMetadataProvider.Tables.GetModelInfo(axTable.Name)
                            .FirstOrDefault();

                // Update the file
                metaModelService.UpdateTable(axTable, new ModelSaveInfo(model));
            }
            catch (Exception ex)
            {
                CoreUtility.HandleExceptionWithErrorMessage(ex);
            }
        }
Exemplo n.º 2
0
        void DoTableCreate()
        {
            AxTable newTable = _axHelper.MetadataProvider.Tables.Read(TableName);

            if (newTable == null)
            {
                newTable                  = new AxTable();
                newTable.Name             = TableName;
                newTable.Label            = TableLabel;
                newTable.TitleField1      = KeyFieldName;
                newTable.CacheLookup      = RecordCacheLevel.Found;
                newTable.ClusteredIndex   = $"{KeyFieldName}Idx";
                newTable.PrimaryIndex     = newTable.ClusteredIndex;
                newTable.ReplacementKey   = newTable.ClusteredIndex;
                newTable.TableGroup       = TableGroup.Group;
                newTable.CreatedBy        = NoYes.Yes;
                newTable.CreatedDateTime  = NoYes.Yes;
                newTable.ModifiedBy       = NoYes.Yes;
                newTable.ModifiedDateTime = NoYes.Yes;

                AxTableField primaryField = new AxTableFieldString();
                primaryField.Name              = KeyFieldName;
                primaryField.ExtendedDataType  = PrimaryKeyEdtName;
                primaryField.IgnoreEDTRelation = NoYes.Yes;
                primaryField.AllowEdit         = NoYes.No;
                primaryField.Mandatory         = NoYes.Yes;
                newTable.AddField(primaryField);

                AxTableField descriptionField = new AxTableFieldString();
                descriptionField.Name             = "Description";
                descriptionField.ExtendedDataType = "Description";
                newTable.AddField(descriptionField);

                AxTableIndexField axTableIndexField = new AxTableIndexField();
                axTableIndexField.DataField = KeyFieldName;
                axTableIndexField.Name      = KeyFieldName;
                AxTableIndex axTableIndex = new AxTableIndex();
                axTableIndex.Name         = newTable.ClusteredIndex;
                axTableIndex.AlternateKey = NoYes.Yes;
                axTableIndex.AddField(axTableIndexField);
                newTable.AddIndex(axTableIndex);

                AxTableFieldGroup      axTableFieldGroup;
                AxTableFieldGroupField axTableFieldGroupField;

                axTableFieldGroup = new AxTableFieldGroup {
                    Name = "AutoReport", IsSystemGenerated = NoYes.Yes
                };
                axTableFieldGroupField = new AxTableFieldGroupField
                {
                    Name      = KeyFieldName,
                    DataField = KeyFieldName
                };
                axTableFieldGroup.AddField(axTableFieldGroupField);
                newTable.AddFieldGroup(axTableFieldGroup);

                axTableFieldGroup = new AxTableFieldGroup {
                    Name = "AutoLookup", IsSystemGenerated = NoYes.Yes
                };
                newTable.AddFieldGroup(axTableFieldGroup);

                axTableFieldGroup = new AxTableFieldGroup {
                    Name = "AutoIdentification", IsSystemGenerated = NoYes.Yes, AutoPopulate = NoYes.Yes
                };
                newTable.AddFieldGroup(axTableFieldGroup);

                axTableFieldGroup = new AxTableFieldGroup {
                    Name = "AutoSummary", IsSystemGenerated = NoYes.Yes
                };
                newTable.AddFieldGroup(axTableFieldGroup);

                axTableFieldGroup = new AxTableFieldGroup {
                    Name = "AutoBrowse", IsSystemGenerated = NoYes.Yes
                };
                newTable.AddFieldGroup(axTableFieldGroup);

                axTableFieldGroup = new AxTableFieldGroup {
                    Name = "Overview", Label = "Overview"
                };
                axTableFieldGroupField = new AxTableFieldGroupField
                {
                    Name = KeyFieldName, DataField = KeyFieldName
                };
                axTableFieldGroup.AddField(axTableFieldGroupField);
                if (descriptionField != null)
                {
                    axTableFieldGroupField = new AxTableFieldGroupField
                    {
                        Name      = descriptionField.Name,
                        DataField = descriptionField.Name
                    };
                    axTableFieldGroup.AddField(axTableFieldGroupField);
                }
                newTable.AddFieldGroup(axTableFieldGroup);

                AddTableFindMethodParms findMethodParms = new AddTableFindMethodParms();
                findMethodParms.IsCreateFind = true;
                findMethodParms.IsTestMode   = true;
                findMethodParms.TableName    = TableName;
                findMethodParms.VarName      = TableVarName;
                findMethodParms.Fields       = new List <AxTableFieldParm>
                {
                    new AxTableFieldParm
                    {
                        FieldName = KeyFieldName, FieldType = PrimaryKeyEdtName, IsMandatory = true
                    }
                };

                AxMethod axMethod = new AxMethod();
                axMethod.Name     = "find";
                axMethod.IsStatic = true;
                axMethod.Source   = findMethodParms.GenerateResult();
                newTable.AddMethod(axMethod);

                _axHelper.MetaModelService.CreateTable(newTable, _axHelper.ModelSaveInfo);
                _axHelper.AppendToActiveProject(newTable);

                AddLog($"Table: {newTable.Name}; ");

                AxEdt edtLocal = _axHelper.MetadataProvider.Edts.Read(PrimaryKeyEdtName);
                if (edtLocal != null)
                {
                    if (String.IsNullOrEmpty(edtLocal.ReferenceTable))                   //check for the existing EDT. Do not modify it
                    {
                        if (edtLocal.Relations == null || edtLocal.Relations.Count == 0) //no old style relations
                        {
                            edtLocal.ReferenceTable = TableName;
                            edtLocal.AddTableReference(TableName, KeyFieldName);

                            _axHelper.MetaModelService.UpdateExtendedDataType(edtLocal, _axHelper.ModelSaveInfo);
                            _axHelper.AppendToActiveProject(edtLocal);
                        }
                    }

                    //AddLog($"EDT: {edtLocal.Name}; ");
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        ///     Called when user clicks on the add-in menu
        /// </summary>
        /// <param name="e">The context of the VS tools and metadata</param>
        public override void OnClick(AddinDesignerEventArgs e)
        {
            try
            {
                var field = (BaseField)e.SelectedElement;

                var dialog = new CreateIndex();
                dialog.CreateIndexVm.IndexName = field.Name + "_Idx";
                dialog.ShowDialog();


                var axTable = (AxTable)field.Table.GetMetadataType();

                var index = new AxTableIndex();

                index.Name            = dialog.CreateIndexVm.IndexName;
                index.AllowDuplicates = dialog.CreateIndexVm.AllowDuplicates ? NoYes.Yes : NoYes.No;
                index.AlternateKey    = dialog.CreateIndexVm.AlternativeKey ? NoYes.Yes : NoYes.No;


                e.SelectedElements.OfType <BaseField>()
                .ToList().ForEach(f =>
                {
                    var fieldIndex = new AxTableIndexField
                    {
                        DataField = f.Name,
                        Name      = f.Name
                    };
                    index.AddField(fieldIndex);
                });

                // Add the method to the class
                axTable.AddIndex(index);

                var source =
                    $@"public static {axTable.Name} findBy{field.Name} ({field.ExtendedDataType} _{Kernel.LocalUtils
                        .toCamelCase(field.Name)}, boolean _forUpdate = false)
                {{
                    {axTable.Name} {Kernel.LocalUtils.toCamelCase(axTable.Name)};

                    {Kernel.LocalUtils.toCamelCase(axTable.Name)}.selectForUpdate(_forUpdate);

                    if(_{Kernel.LocalUtils.toCamelCase(field.Name)})
                    select firstonly {Kernel.LocalUtils.toCamelCase(axTable.Name)} where {Kernel.LocalUtils.toCamelCase(axTable.Name)}.{field
                        .Name} == _{Kernel.LocalUtils.toCamelCase(field.Name)};

                    return {Kernel.LocalUtils.toCamelCase(axTable.Name)};
                }}";


                // Add the method to the class
                axTable.AddMethod(BuildMethod(field.Name, source));

                // Prepare objects needed for saving
                var metaModelProviders = ServiceLocator.GetService(typeof(IMetaModelProviders)) as IMetaModelProviders;
                var metaModelService   = metaModelProviders.CurrentMetaModelService;
                // Getting the model will likely have to be more sophisticated, such as getting the model of the project and checking
                // if the object has the same model.
                // But this shold do for demonstration.
                var model =
                    DesignMetaModelService.Instance.CurrentMetadataProvider.Tables.GetModelInfo(axTable.Name)
                    .FirstOrDefault();

                // Update the file
                metaModelService.UpdateTable(axTable, new ModelSaveInfo(model));
            }
            catch (Exception ex)
            {
                CoreUtility.HandleExceptionWithErrorMessage(ex);
            }
        }