# Custom ## Definition This step is used to define a custom script that will be executed ## Steps Tabs ### Task details All the process types have the same Task details for the Custom step: - **Script**: allows you to define a Script this step allows you to add a script to be executed. ##### Example ```Java comments = executionContext.getToken().getComments(); selector = executionContext.getVariable("userSelector"); if (selector == null || selector.equals("")) { return ("The userName is mandatory"); } user = serviceLocator.getUserService().findUserByUserName(selector); if (user != null) { subject = "Soffid - Notification"; message = "Automated mail sent .............."; if (comments != null && !comments.isEmpty()) { for (comment : comments) { message += comment.message; } } serviceLocator.getUserService().sendHtmlMailToActors(new String[]{user.userName}, subject, message); } ``` ### Incoming transitions The Incoming transitions tab displays the previous steps where the flow comes from. When you create a process from a template or from scratch default incoming transitions are defined. It is allowed to customize the default setup, add new transitions, or delete transitions. - **From**: the previous step, where the flow comes. Allows you to select where the workflow comes from. - **Incoming transition**: brief name to identify the transition. That is the name of the action the form will show to the final user. - **To**: current step. - **Action**: allows creating a custom script to perform specific actions.
When you create an incoming transition, Soffid creates the proper outcoming transition.
##### Example Scroll through the list of roles and the list of grant hierarchies to execute some actions. ```Java userName = executionContext.getVariable("userName"); roleList = serviceLocator.getApplicationService().findRolesByUserName(userName); for (role:roleList) { //TO-DO } user = serviceLocator.getUserService().findUserByUserName(userName); roleGrantList = serviceLocator.getApplicationService().findRoleGrantHierarchyByUser(user.id); for (roleGrant:roleGrantList) { //TO-DO } ``` ### Outgoing transitions The Outcoming transition tab displays the next steps where the flow can go from the current step. When you create a process from a template or from scratch default outcoming transitions are defined. It is allowed to customize the default setup, add new transitions, or delete transitions. - **From**: current step. - **Incoming transition**: name of the transition. - **To**: the next step, where the flow goes. - **Action**: allows creating a custom script to perform specific actions. When you create an outcoming transition, Soffid creates the proper incoming transition. ##### Example Delete additional attribute ``` userName = executionContext.getVariable("userName"); attribute = serviceLocator.getUserService().findDataByUserAndCode(userName, "country"); if (attribute != null) { serviceLocator.getAdditionalDataService().delete(attribute); } ```