По умолчанию пользовательские поля для записей, созданных до настройки - PullRequest
0 голосов
/ 09 января 2019

У меня есть расширение DAC, для которого установлен атрибут по умолчанию (см. Определение ниже). Я заметил, что для любых записей, которые существовали до существования расширений DAC, все еще будет иметь нулевое значение. Есть ли обычный способ инициализации всех записей?

Если нет, я, скорее всего, выполню проверку в обработчике события перед его использованием. Заранее спасибо!

    public abstract class usrCustOptInOut : IBqlField
    {
    }
    protected string _UsrCustOptInOut;
    [PXDBString(1, IsUnicode = true)]
    [PXDefault(OptInOut.Default, PersistingCheck = PXPersistingCheck.Nothing)]
    [PXUIField(DisplayName = "Click To Pay Opt In/Out")]
    [PXStringList(
        new[]
        {
            OptInOut.OptOut,
            OptInOut.OptIn,
            OptInOut.Default
        },
        new[]
        {
            "Customer Opt Out",
            "Customer Opt In",
            "Default"
        })]
    public virtual string UsrCustOptInOut
    {
        get
        {
            return _UsrCustOptInOut;
        }
        set
        {
            _UsrCustOptInOut = value;
        }
    }

1 Ответ

0 голосов
/ 09 января 2019

Вам нужно будет запустить обновление вручную. Существующие записи не будут обновляться автоматически при добавлении новых полей и записей.

Я вижу два варианта:

  1. Добавить плагин для настройки в ваш проект (предпочтительно)
  2. Добавление собственного сценария SQL в ваш проект

Вариант 1

Вы можете использовать плагин настройки, чтобы убедиться, что все нулевые значения имеют значения по умолчанию. Плагин настройки будет запускаться в конце каждой публикации на сайте.

Вы можете создать файл кода в своем проекте настройки для этого:

Creating a new customization plugin for a project

Метод UpdateDatabase() в CustomizationPlugin запускается после публикации настроек и перезапуска веб-сайта (будет применяться поле Usr).

Затем вы можете использовать PXDatabase.Update для запуска обновления, не требуя графика или каких-либо проверок / событий для запуска. Вам просто нужно массовое обновление SQL, и PXDatabase.Update выполнит эту работу. В приведенном ниже примере будет установлено значение по умолчанию только при наличии нулевого значения. Та же концепция может быть применена к любой добавленной таблице / полю, а не только к пользовательским полям. Например, если у вас есть пользовательская таблица, и вам нужно добавить новое поле и существующие записи содержат значение по умолчанию.

Недостатком (по сравнению с вариантом 2) является PXDatabase.Update, который будет запущен для текущего арендатора (компании), так как он добавляет текущий CompanyID в оператор SQL (что хорошо). Если у вас несколько арендаторов (компаний), вам нужно будет выполнить публикацию для нескольких арендаторов. В качестве альтернативы вы можете написать свой код, чтобы он зацикливался на каждой компании и выполнял ваше заявление, используя PXLoginScope (см. Ссылки).

Конечный результат с использованием плагина настройки будет выглядеть примерно так:

public class UsrFieldDefaults : CustomizationPlugin
{
    //This method executed after customization was published and website was restarted.  
    public override void UpdateDatabase()
    {
        PXDatabase.Update<MyDac>(
            new PXDataFieldAssign<MyDacExt.usrCustOptInOut>(PXDbType.NChar, 1, OptInOut.Default),
            new PXDataFieldRestrict<MyDacExt.usrCustOptInOut>(PXDbType.NChar, 1, null, PXComp.ISNULL)
            );
    }
}

Вариант 2 Вы можете написать собственный сценарий SQL, чтобы сделать то же самое, и поместить его в свой проект настройки. Имейте в виду, какую СУБД вы публикуете (MSSQL / MYSQL). Существует также способ использования общего синтаксиса SQL, поэтому он должен работать для любой СУБД. Также имейте в виду, что вы, скорее всего, запустите сценарий для всех арендаторов (компаний), которые будут включать моментальные снимки.

Adding a custom database script

Дополнительные ссылки:

Пользовательские процессы при публикации настройки

Добавление модуля настройки в проект

Сохранить данные в другой компании

Публикация настройки для сайта с несколькими арендаторами

Создание собственного сценария SQL

Написание пользовательских сценариев SQL для интерпретации

...