public void GetFormActionsForConfigMode() { // Should fetch actions associated with person type (only workflow and document generation type actions are fetched in form actions) var personType = Entity.Get <Definition>("core:person"); var request = new ActionRequestExtended { EntityTypeId = personType.Id, FormId = personType.DefaultEditForm.Id, ActionDisplayContext = ActionContext.All }; var svc = new ActionService(); svc.FlushCaches(); var result = svc.GetFormActionsMenuState(request); result.Should().NotBeNull(); result.Actions.Should().NotBeNull().And.NotBeEmpty(); result.Actions.Count.Should().Be(2); result.Actions.Count(a => a.Name == "Assign Data to App").Should().Be(1); result.Actions.Count(a => a.Name == "Person Name Update").Should().Be(1); }
public void GetFormActionsForForm() { var personType = Entity.Get <Definition>("core:person"); var personForm = Entity.Get <CustomEditForm>(personType.DefaultEditForm.Id, true); // fetch action for the person type var request = new ActionRequestExtended { EntityTypeId = personType.Id, FormId = personType.DefaultEditForm.Id, ActionDisplayContext = ActionContext.All }; var actionSvc = new ActionService(); actionSvc.FlushCaches(); var result = actionSvc.GetFormActionsMenuState(request); result.Should().NotBeNull(); result.Actions.Should().NotBeNull().And.NotBeEmpty(); result.Actions.Count.Should().Be(2); result.Actions.Count(a => a.Name == "Assign Data to App").Should().Be(1); result.Actions.Count(a => a.Name == "Person Name Update").Should().Be(1); // create new action item and assign it to the form // form action var actionInfo = result.Actions.Find(a => a.Name == "Person Name Update"); var wf = Entity.Get <Workflow>(actionInfo.EntityId); // create workflow action item var wfActionMenuItem = new WorkflowActionMenuItem { Name = actionInfo.Name, MenuIconUrl = actionInfo.Icon, MenuOrder = actionInfo.Order, IsActionButton = actionInfo.IsButton, IsMenuSeparator = actionInfo.IsSeparator, IsContextMenu = actionInfo.IsContextMenu, IsActionItem = actionInfo.IsMenu, IsSystem = actionInfo.IsSystem, AppliesToSelection = true, AppliesToMultiSelection = false, HtmlActionMethod = actionInfo.HtmlActionMethod, HtmlActionState = actionInfo.HtmlActionState, ActionMenuItemToWorkflow = wf }; var cb = new ConsoleBehavior { Name = $"DeleteMe_PersonForm_rcb {DateTime.Now}", BehaviorActionMenu = new ActionMenu { Name = $"DeleteMe_PersonForm_rcb_menu {DateTime.Now}", IncludeActionsAsButtons = new EntityCollection <ActionMenuItem>() { (ActionMenuItem)wfActionMenuItem }, MenuItems = new EntityCollection <ActionMenuItem>() { (ActionMenuItem)wfActionMenuItem } } }; personForm.ResourceConsoleBehavior = cb; personForm.Save(); var formActionQuery = @"{ k:resourceConsoleBehavior } .k:behaviorActionMenu.{ { k:menuItems, k:suppressedActions, k:includeActionsAsButtons }.{ { name, description, k:menuIconUrl, htmlActionState, htmlActionMethod, k:isActionButton, k:appliesToSelection, k:isMenuSeparator, k:menuOrder, { isOfType }.{ alias,name }, { k:actionMenuItemToWorkflow }.{ name }, { k:actionMenuItemToReportTemplate }.{ name } } }, { k:includeTypesForNewButtons, k:suppressedTypesForNewMenu }.id }"; // fetch form actions and check there is only one action button assigned to the form var entitySvc = new EntityInfoService(); EntityMemberRequest req = EntityRequestHelper.BuildRequest(formActionQuery); var result2 = entitySvc.GetEntityData(personForm.Id, req); result2.Should().NotBeNull(); var rcb = result2.Relationships.Find(a => a.RelationshipTypeId.Alias == "resourceConsoleBehavior"); rcb.Should().NotBeNull(); var actionMenu = rcb.Entities.First().Relationships.Find(a => a.RelationshipTypeId.Alias == "behaviorActionMenu"); actionMenu.Should().NotBeNull(); var actionButtons = actionMenu.Entities.First().Relationships.Find(a => a.RelationshipTypeId.Alias == "includeActionsAsButtons"); actionButtons.Should().NotBeNull(); var nameValue = actionButtons.Entities.First().Fields.Find(f => f.FieldId.Alias == "name").Value.Value; nameValue.Should().Be("Person Name Update"); // delete console behavior Entity.Delete(cb.Id); }