Вам нужно будет запустить обновление вручную. Существующие записи не будут обновляться автоматически при добавлении новых полей и записей.
Я вижу два варианта:
- Добавить плагин для настройки в ваш проект (предпочтительно)
- Добавление собственного сценария SQL в ваш проект
Вариант 1
Вы можете использовать плагин настройки, чтобы убедиться, что все нулевые значения имеют значения по умолчанию. Плагин настройки будет запускаться в конце каждой публикации на сайте.
Вы можете создать файл кода в своем проекте настройки для этого:
Метод 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, поэтому он должен работать для любой СУБД. Также имейте в виду, что вы, скорее всего, запустите сценарий для всех арендаторов (компаний), которые будут включать моментальные снимки.
Дополнительные ссылки:
Пользовательские процессы при публикации настройки
Добавление модуля настройки в проект
Сохранить данные в другой компании
Публикация настройки для сайта с несколькими арендаторами
Создание собственного сценария SQL
Написание пользовательских сценариев SQL для интерпретации