SelectionRuleClientFunctions.cs
4.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Container.SelectionRule;
namespace DirRX.Container.Client
{
partial class SelectionRuleFunctions
{
/// <summary>
/// Отобразить диалог для выбора типа контейнера.
/// </summary>
public void SelectArchiveDocsTypeFunctionDialog()
{
// Создать диалог для выбора функции.
try
{
var dialog = Dialogs.CreateInputDialog(SelectionRules.Resources.SelectArchiveTypeTitle);
var typeList = PublicFunctions.Module.GetArchiveDocsTypes();
var selection = dialog.AddSelect(SelectionRules.Resources.ArchiveTypeLabel, true).From(typeList.ToArray());
if (dialog.Show() == DialogButtons.Ok)
{
_obj.ArchiveDocumentType = selection.Value;
_obj.ProcessingFunction = "Process" + selection.Value;
}
}
catch (Exception e)
{
Dialogs.ShowMessage(e.Message, MessageType.Error);
}
}
/// <summary>
/// Отобразить диалог для выбора функции фильтрации.
/// </summary>
public void SelectFilteringFunctionDialog()
{
// Получить функции всех модулей с параметром "Выборка официальных документов".
var functionList = new List<string>();
var allData = new Dictionary<string, List<string>>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies().Where(a => a.FullName.Contains(".Server,")))
{
var moduleName = assembly.GetName().Name;
moduleName = moduleName.Substring(0, moduleName.LastIndexOf(".Server"));
var functionType = string.Format("{0}.Functions.Module", moduleName);
var modulesFunctions = assembly.GetTypes().FirstOrDefault(a => a.FullName == functionType);
if (modulesFunctions != null)
{
var functionNames = modulesFunctions.GetMethods(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)
.Where(m => m.GetParameters().Any(p => p.ParameterType.FullName.Contains("IQueryable`1[[Sungero.Docflow.IOfficialDocument")))
.Select(f => f.Name.Trim())
.ToList();
if (functionNames.Any())
allData.Add(moduleName, functionNames);
}
}
// Создать диалог для выбора функции.
var dialog = Dialogs.CreateInputDialog(SelectionRules.Resources.SelectFilteringFunctionTitle);
var moduleSelection = dialog.AddSelect(SelectionRules.Resources.ModuleNameLabel, false).From(allData.Select(x => x.Key).Distinct().ToArray());
var functionSelection = dialog.AddSelect(SelectionRules.Resources.FunctionNameLabel, false).From(functionList.ToArray());
// При смене модуля переопределить список доступных функций.
moduleSelection.SetOnValueChanged((m) =>
{
if (m.NewValue != m.OldValue)
{
functionSelection.Value = null;
functionList.Clear();
if (m.NewValue != null)
{
functionList.AddRange(allData[m.NewValue]);
functionSelection.From(functionList.ToArray());
}
}
});
// Если функция единственная, сразу заполнить ее имя.
if (allData.Count == 1)
{
moduleSelection.Value = allData.Keys.First();
functionSelection.Value = allData.First().Value.First();
}
else if (_obj.FilteringModule != null)
{
if (allData.ContainsKey(_obj.FilteringModule))
{
moduleSelection.Value = _obj.FilteringModule;
if (allData[_obj.FilteringModule].Contains(_obj.FilteringFunction))
functionSelection.Value = _obj.FilteringFunction;
}
}
if (dialog.Show() == DialogButtons.Ok)
{
_obj.FilteringModule = moduleSelection.Value;
_obj.FilteringFunction = functionSelection.Value;
}
}
}
}