Параметры и пример использования функции FuncCurrentUser

FuncCurrentUser - функция из ExternalLangDef, служащая для того, чтобы в ограничении использовать имя текущего пользователя (FriendlyName).

Использование

Для применения данной функции в используемом сервисе данных SQLDataService необходимо означить свойство ICurrentUser CurrentUser, тогда при формировании ограничения будет использовано CurrentUser.FriendlyName.

if (value.FunctionDef.StringedView == "CurrentUser")
{
    if (CurrentUser != null)
    {
        return string.Format("'{0}'", CurrentUser.FriendlyName);
    }
    else
    {
        throw new InvalidOperationException("Property CurrentUser is not defined for this data service. Add initialization for this property.");
    }
}

Пример использования

Ниже представлен пример применения функции funcCurrentUser. Здесь среди записей типа Лес ищется та, где Лес.Название равно FriendlyName текущего пользователя.

SQLDataService ds = dataService as SQLDataService;
ExternalLangDef languageDef = new ExternalLangDef(ds);
LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), Лес.Views.ЛесE);

lcs.LimitFunction = languageDef.GetFunction(
	languageDef.funcEQ,
	new VariableDef(languageDef.StringType, nameof(Лес.Название)),
	languageDef.GetFunction(languageDef.funcCurrentUser)); // Задание ограничения.

ICurrentUser currentUser = new TestCurrentUser();
ds.CurrentUser = currentUser;
DataObject[] foundObjects = ds.LoadObjects(lcs);

В данном примере использован следующий класс.

private class TestCurrentUser : ICurrentUser
{
    public string Login { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

    public string Domain { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

    public string FriendlyName { get => "Great One"; set => throw new NotImplementedException(); }
}

В реальном примере требуется задание логики определения текущего пользователя.