Hello everyone,
during the SAF bootcamp, a couple of questions regarding Transaction methods came up.
In the bootcamp, there is an example where we add two transaction methods calculate() and write_file(). This works without problems if implemented as instructed in the bootcamp documentation, that is, calling each of these transaction methods from within the page-callback. However, when I try to call one transaction method from within another transaction method, such as in the following screenshot:

then I get the following error:
The solution definition is invalid: invalid attribute 'write_file' in FourthstepStep.calculate. Please make sure that the field is declared in the step and in the transaction decorating the method. Traceback (most recent call last):
File "C:\ansysdev\initiatives\saf\training2025\my_solution\.venv\lib\site-packages\ansys\saf\glow\_executor\method_runner.py", line 179, in run_method result = self._run_method(
File "C:\ansysdev\initiatives\saf\training2025\my_solution\.venv\lib\site-packages\ansys\saf\glow\_executor\method_runner.py", line 242, in _run_method return transaction_step_method(
File "C:\ansysdev\initiatives\saf\training2025\my_solution\.venv\lib\site-packages\ansys\saf\glow\_core\transaction.py", line 327, in step_method_wrapper result = step_func(**args_for_step_func)
File "C:\ansysdev\initiatives\saf\training2025\my_solution\src\ansys\solutions\my_solution\solution\fourthstep.py", line 41, in calculate self.write_file()
File "C:\ansysdev\initiatives\saf\training2025\my_solution\.venv\lib\site-packages\ansys\saf\glow\_executor\transaction.py", line 280, in __getattr__ raise MalformedSolutionError(
ansys.saf.glow._server.exceptions.MalformedSolutionError: 500: The solution definition is invalid: invalid attribute 'write_file' in FourthstepStep.calculate. Please make sure that the field is declared in the step and in the transaction decorating the method.
Is there a reason why I cannot use a transaction method from within another transaction method? I assume this is by design?
My understanding is that the main purpose of transaction methods is to load data from the project space, (e.g. when opening an old/already solved project) or to transfer data between steps. Is that correct?
What about regular step methods? I successfully added a regular method and invoked it from a transaction method. My observation is that if the step and its fields have been properly instantiated, the regular method also has access to all the fields. But is that "allowed", or is this misuse? Could you comment on that?