public void Init() { _instanceState = InstanceState.Initializing; var targetSystemEventsTriggersList = _triggersResolver.ResolveSystemEventsTriggersList(KindOfSystemEventOfInlineTrigger.Init, Name, _localCodeExecutionContext, ResolverOptions.GetDefaultOptions()); #if DEBUG //Log($"targetSystemEventsTriggersList = {targetSystemEventsTriggersList.WriteListToString()}"); #endif if (targetSystemEventsTriggersList.Any()) { targetSystemEventsTriggersList.Reverse(); var processInitialInfoList = new List <ProcessInitialInfo>(); foreach (var targetTrigger in targetSystemEventsTriggersList) { var localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(_context, _storage); localCodeExecutionContext.Storage = new LocalStorage(localStorageSettings); localCodeExecutionContext.Holder = Name; var processInitialInfo = new ProcessInitialInfo(); processInitialInfo.CompiledFunctionBody = targetTrigger.ResultItem.CompiledFunctionBody; processInitialInfo.LocalContext = localCodeExecutionContext; processInitialInfo.Metadata = targetTrigger.ResultItem.CodeEntity; processInitialInfoList.Add(processInitialInfo); } #if DEBUG //Log($"processInitialInfoList = {processInitialInfoList.WriteListToString()}"); #endif var taskValue = _context.CodeExecutor.ExecuteBatchAsync(processInitialInfoList); #if DEBUG //Log($"taskValue = {taskValue}"); #endif } var targetLogicConditionalTriggersList = _triggersResolver.ResolveLogicConditionalTriggersList(Name, _localCodeExecutionContext, ResolverOptions.GetDefaultOptions()); #if DEBUG //Log($"targetLogicConditionalTriggersList = {targetLogicConditionalTriggersList.WriteListToString()}"); #endif if (targetLogicConditionalTriggersList.Any()) { foreach (var targetTrigger in targetLogicConditionalTriggersList) { #if DEBUG //Log($"targetTrigger = {targetTrigger}"); #endif var triggerInstanceInfo = new LogicConditionalTriggerInstanceInfo(targetTrigger.ResultItem, this, _context, _storage); _logicConditionalTriggersList.Add(triggerInstanceInfo); } } _instanceState = InstanceState.Initialized; }
private void DoSearch() { var searchOptions = new LogicalSearchOptions(); searchOptions.QueryExpression = _condition; searchOptions.LocalCodeExecutionContext = _localCodeExecutionContext; #if DEBUG //Log($"searchOptions = {searchOptions}"); #endif var searchResult = _searcher.Run(searchOptions); #if DEBUG //Log($"searchResult = {searchResult}"); //Log($"result = {DebugHelperForLogicalSearchResult.ToString(searchResult)}"); //foreach(var usedKey in searchResult.UsedKeysList) //{ // Log($"usedKey = {usedKey}"); // Log($"_context.Dictionary.GetName(usedKey) = {_context.Dictionary.GetName(usedKey)}"); //} #endif _usedKeysList = searchResult.UsedKeysList; #if DEBUG //Log($"_isOn = {_isOn}"); #endif if (_isOn) { if (!searchResult.IsSuccess) { _isOn = false; } } else { if (searchResult.IsSuccess) { _isOn = true; #if DEBUG //Log($"searchResult = {searchResult}"); //Log($"result = {DebugHelperForLogicalSearchResult.ToString(searchResult)}"); #endif var localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(_context, _storage); var storage = new LocalStorage(localStorageSettings); localCodeExecutionContext.Storage = storage; localCodeExecutionContext.Holder = _parent.Name; var varStorage = storage.VarStorage; var bindingVariables = _trigger.BindingVariables; if (bindingVariables.Any()) { var foundResultItem = searchResult.Items.FirstOrDefault(); if (foundResultItem == null) { throw new NotImplementedException(); } var resultVarsList = foundResultItem.ResultOfVarOfQueryToRelationList; #if DEBUG //Log($"resultVarsList.Count = {resultVarsList.Count}"); #endif if (bindingVariables.Count != resultVarsList.Count) { throw new NotImplementedException(); } foreach (var resultVar in resultVarsList) { #if DEBUG //Log($"resultVar = {resultVar}"); #endif Value value = null; var foundExpression = resultVar.FoundExpression; var kindOfFoundExpression = foundExpression.Kind; switch (kindOfFoundExpression) { case KindOfLogicalQueryNode.Entity: value = foundExpression.Name; break; case KindOfLogicalQueryNode.Value: value = foundExpression.Value; break; default: throw new ArgumentOutOfRangeException(nameof(kindOfFoundExpression), kindOfFoundExpression, null); } #if DEBUG //Log($"value = {value}"); #endif var destVar = bindingVariables.GetDest(resultVar.NameOfVar); #if DEBUG //Log($"destVar = {destVar}"); #endif varStorage.SetValue(destVar, value); } } var processInitialInfo = new ProcessInitialInfo(); processInitialInfo.CompiledFunctionBody = _trigger.CompiledFunctionBody; processInitialInfo.LocalContext = localCodeExecutionContext; processInitialInfo.Metadata = _trigger.CodeEntity; var task = _context.CodeExecutor.ExecuteAsync(processInitialInfo); } } #if DEBUG //Log($"_isOn (after) = {_isOn}"); #endif }