Acciones personalizadas
Note
Ten en cuenta que esta funcionalidad no está relacionada con la característica de Acciones personalizadas disponible para modelos multidimensionales.
Supón que has creado un script útil usando el objeto Selected y quieres poder ejecutarlo varias veces sobre distintos objetos del árbol del explorador. En lugar de pulsar el botón "Reproducir" cada vez que quieras ejecutar el script, Tabular Editor te permite guardarlo como una Acción personalizada:

Después de guardar la acción personalizada, verás que ya está disponible directamente en el menú contextual de clic derecho del árbol del explorador, lo que facilita mucho ejecutar el script sobre cualquier objeto seleccionado en el árbol. Puedes crear tantas acciones personalizadas como quieras. Usa barras invertidas (\) en los nombres para crear una estructura de submenús dentro del menú contextual.

Las acciones personalizadas se almacenan en el archivo CustomActions.json en %AppData%\Local\TabularEditor. En el ejemplo anterior, el contenido de este archivo se verá así:
{
"Actions": [
{
"Name": "Custom Formatting\\Number with 1 decimal",
"Enabled": "true",
"Execute": "Selected.Measures.ForEach(m => m.FormatString = \"0.0\";",
"Tooltip": "Sets the FormatString property to \"0.0\"",
"ValidContexts": "Measure, Column"
}
]
}
Como puedes ver, Name y Tooltip obtienen sus valores de lo que se haya especificado al guardar la acción. Execute es el script real que se ejecutará cuando se invoque la acción. Ten en cuenta que cualquier error de sintaxis en el archivo CustomActions.json hará que Tabular Editor omita por completo la carga de todas las acciones personalizadas; por tanto, asegúrate de que puedes ejecutar correctamente un script dentro del editor de scripts avanzado antes de guardarlo como acción personalizada.
La propiedad ValidContexts contiene una lista de tipos de objeto para los que la acción estará disponible. Al seleccionar objetos en el árbol, una selección que contenga cualquier objeto distinto de los tipos indicados en la propiedad ValidContexts ocultará la acción del menú contextual.
Control de la disponibilidad de la acción
Si necesitas aún más control sobre cuándo se puede invocar una acción desde el menú contextual, puedes establecer la propiedad Enabled en una expresión personalizada que debe devolver un valor booleano, indicando si la acción estará disponible para la selección dada. De forma predeterminada, la propiedad Enabled tiene el valor "true", lo que significa que la acción siempre estará habilitada dentro del contexto válido. Ten esto en cuenta cuando uses las referencias de objeto en singular del objeto Selected, como Selected.Measure o Selected.Table, ya que estas generarán un error si la selección actual no contiene exactamente uno de ese tipo de objeto. En ese caso, se recomienda usar la propiedad Enabled para comprobar que se ha seleccionado uno y solo uno de los objetos del tipo requerido:
{
"Actions": [
{
"Name": "Reset measure name",
"Enabled": "Selected.Measures.Count == 1",
"Execute": "Selected.Measure.Name == \"New Measure\"",
"ValidContexts": "Measure"
}
]
}
Esto deshabilitará la opción del menú contextual, a menos que se haya seleccionado exactamente una medida en el árbol.
Reutilizando acciones personalizadas
La versión 2,7 introduce un nuevo método de script CustomAction(...), que puede llamarse para invocar acciones personalizadas guardadas previamente. Puede usar este método como un método independiente (similar a Output(...)), o puede usarlo como un método de extensión en cualquier conjunto de objetos:
// Executes "My custom action" against the current selection:
CustomAction("My custom action");
// Executes "My custom action" against all tables in the model:
CustomAction(Model.Tables, "My custom action");
// Executes "My custom action" against every measure in the current selection whose name starts with "Sum":
Selected.Measures.Where(m => m.Name.StartsWith("Sum")).CustomAction("My custom action");
Tenga en cuenta que debe especificar el nombre completo de la acción personalizada, incluidos los nombres de las carpetas del menú contextual.
Si no se encuentra ninguna acción con el nombre indicado, se genera un error al ejecutar el script.