/// <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); } }
/// <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); } }