Exemplo n.º 1
0
        public Task <ServerCommandResult> Execute(RequestCommand cmd, ExpandoObject dataToExec)
        {
            // SYNC!
            if (String.IsNullOrEmpty(cmd.template))
            {
                throw new RequestModelException($"template must be specified for command '{cmd.command}'");
            }
            IDataModel dataModel = null;

            if (!String.IsNullOrEmpty(cmd.CurrentModel))
            {
                dataModel = _dbContext.LoadModel(cmd.CurrentSource, cmd.LoadProcedure, dataToExec, cmd.commandTimeout);
            }
            var ssi = new ServerScriptInfo
            {
                DataModel = dataModel,
                Path      = cmd.Path,
                Template  = cmd.template,
                Parameter = cmd.commandProp
            };
            var resultJson = _scriptProcessor.RunScript(ssi, "invoke");
            var result     = JsonConvert.DeserializeObject <ExpandoObject>(resultJson?.ToString(), new ExpandoObjectConverter());
            var status     = result.Get <String>("status");

            switch (status)
            {
            case "save":
            {
                var dataToSave = result.Get <ExpandoObject>("data");
                var savedDm    = _dbContext.SaveModel(cmd.CurrentSource, cmd.UpdateProcedure, dataToSave, dataToExec);
                return(Task.FromResult(new ServerCommandResult("{}")));
            }

            case "error":
                throw new RequestModelException(result.Get <String>("message"));
            }
            return(Task.FromResult(new ServerCommandResult("{}")));
        }