Как получить подстановочный знак, добавленный к подстроке поля DAC? - PullRequest
0 голосов
/ 19 июня 2019

Экран, который я настраиваю, - это экран «Запросы» (RQ301000) - и я хочу изменить поиск поставщика в сетке, чтобы он основывался на классе запроса, выбранном в заголовке. Я уже знаю, как изменить селектор Vendor для включения фильтра, как я сделал это на экране Requisitions, но эта настройка включала добавление пользовательского поля для класса запросов (которого нет на экране Requisitions).

У меня есть код, который я получил ранее, который получает добавленное в поле шаблона значение поля. Проблема в том, что в этом коде использовалось поле пользователя, которое находилось в том же ЦАП, что и поле подстановочного знака. Код показан ниже:

public class RQRequisitionExt : PXCacheExtension<RQRequisition>
{
    #region UsrRequestClass
    [PXDBString(10, IsUnicode = true)]
    [PXUIField(DisplayName = "NSA Request Class", Visibility = PXUIVisibility.SelectorVisible)]
    [PXSelector(typeof(RQRequestClass.reqClassID), DescriptionField = typeof(RQRequestClass.descr))]
    public virtual string UsrRequestClass { get; set; }
    public abstract class usrRequestClass : IBqlField {}
    #endregion


    //This is a DAC field that creates / tacks on a wildcard to the end of the UsrRequestClass field above...
    public abstract class myFieldWildcard : IBqlField { };
    [PXString(30, IsUnicode = true)]
    public virtual string MyFieldWildcard
    {
        [PXDependsOnFields(typeof(usrRequestClass))]
        get
        {
            //return PXDatabase.Provider.SqlDialect.WildcardAnything + UsrRequestClass + PXDatabase.Provider.SqlDialect.WildcardAnything;
            if (UsrRequestClass != null)
                return PXDatabase.Provider.SqlDialect.WildcardAnything + UsrRequestClass.Substring(0, 2) + PXDatabase.Provider.SqlDialect.WildcardAnything;
            else
                return UsrRequestClass;
        }
    }


}

Для того, что я пытаюсь сделать на экране «Запросы», я не использую поле пользователя для этого - я использую поле «Класс запроса» уже на экране - но я понятия не имею, как получить значение этого поля для использования в процедуре подстановки 'get'.

По сути, я хочу получить значение класса запроса на экране и использовать его в этом поле с подстановочными знаками, чтобы вернуться к моему модифицированному селектору поставщиков (не показан, но выполнен с использованием события CacheAttached).

Любая помощь будет оценена. Благодаря.

1 Ответ

0 голосов
/ 02 июля 2019

Для меня решение состояло в том, чтобы переопределить поле «Класс запроса» в том же расширении ЦАП, которое содержало поле шаблона, следующим образом:

public class RQRequestExt : PXCacheExtension<RQRequest>
{

    //Redefine the Request Class in this DAC extension
    #region ReqClassID
    public abstract class reqClassID : IBqlField {}
    [PXDBString(10, IsUnicode = true)]
    [PXDefault(typeof(RQSetup.defaultReqClassID))]
    [PXUIField(DisplayName = "Request Class", Visibility = PXUIVisibility.SelectorVisible)]
    [PXSelector(typeof(RQRequestClass.reqClassID), DescriptionField = typeof(RQRequestClass.descr))]
    public virtual string ReqClassID { get; set; }
    #endregion

    //This is a DAC field that creates / tacks on a wildcard to the end of the UsrRequestClass field above...
    public abstract class rQRequestwildcard : IBqlField { };
    [PXString(30, IsUnicode = true)]
    public virtual string RQRequestwildcard
    {
        [PXDependsOnFields(typeof(RQRequest.reqClassID))]
        get
        {
            if (ReqClassID != null)
                return PXDatabase.Provider.SqlDialect.WildcardAnything + ReqClassID.Substring(0, 2) + PXDatabase.Provider.SqlDialect.WildcardAnything;
            else
                return PXDatabase.Provider.SqlDialect.WildcardAnything;
        }
    }
}

Таким образом, у меня есть ссылка на идентификатор класса запроса, используемый в полевой операции с подстановочными знаками ...

...