예제 #1
0
        public async Task <ActionResult> Execute(string tabId, int parentId, [FromBody] CustomActionQuery query)
        {
            CustomActionPrepareResult customActionToExecute = null;

            try
            {
                customActionToExecute = _service.PrepareForExecuting(tabId, parentId, query);
                Logger.Debug()
                .Message("Executing custom action url: {url}", customActionToExecute.CustomAction.FullUrl)
                .Write();

                if (!customActionToExecute.IsActionAccessable)
                {
                    throw new SecurityException(customActionToExecute.SecurityErrorMesage);
                }

                if (customActionToExecute.CustomAction.Action.IsInterface)
                {
                    var model = ExecuteCustomActionViewModel.Create(tabId, parentId, query.Ids, customActionToExecute.CustomAction);
                    return(await JsonHtml("ExecuteAction", model));
                }

                return(Json(new { Url = customActionToExecute.CustomAction.FullUrl, PreActionUrl = customActionToExecute.CustomAction.PreActionFullUrl }));
            }
            catch (Exception ex)
            {
                if (customActionToExecute?.CustomAction?.Action == null)
                {
                    throw;
                }

                if (customActionToExecute.CustomAction.Action.IsInterface)
                {
                    return(Json(new { success = false, message = ex.Message }));
                }

                return(Json(MessageResult.Error(ex.Message)));
            }
        }
예제 #2
0
        public CustomActionPrepareResult PrepareForExecuting(string hostId, int parentId, CustomActionQuery query)
        {
            var action  = CustomActionRepository.GetByCode(query.ActionCode);
            var session = _repository.GetCurrent();

            if (session == null)
            {
                throw new SecurityException("Session log record doesn't exist");
            }

            session.Sid = Guid.NewGuid().ToString();
            _repository.Update(session);

            action.SessionId = session.Sid;
            action.Ids       = query.Ids;
            action.ParentId  = parentId;

            return(SecurityCheck(new CustomActionPrepareResult {
                CustomAction = action
            }, action, query.Ids));
        }
예제 #3
0
        public ActionResult ExecutePreAction(string tabId, int parentId, [FromBody] CustomActionQuery query)
        {
            var msg = $"Action: {query.ActionCode}, ParentId: {parentId}, IDs: {string.Join(";", query.Ids)}";

            return(Json(MessageResult.Confirm(msg)));
        }