Как избежать повторяющихся записей в сетке Acumatica как на экране, так и в сценарии импорта - PullRequest
0 голосов
/ 30 января 2020

У меня есть собственный экран формы и сетки, когда пользователь выбирает одно и то же значение в сетке, он позволяет сохранить запись, но в моем случае он не должен позволять вставлять одну и ту же запись в сетку также, когда пользователь вставляет / обновляет запись через сценарий импорта должна вести себя одинаково.

Например:

Screenshot

Ниже приведен код

 public class KWStoreTrafficEntityMaint : PXGraph<KWStoreTrafficEntityMaint, KWStoreTrafficEntity>
    {
        public PXSelect<KWStoreTrafficEntity> Document;

        [PXImport(typeof(KWStoreTrafficEntity))]
        public PXSelect<KWStoreTrafficEntityDetails, Where<KWStoreTrafficEntityDetails.entityNbr,
            Equal<Current<KWStoreTrafficEntity.entityNbr>>>, OrderBy<Asc<KWStoreTrafficEntityDetails.sortOrder>>> Transactions;

            #region Event Handlers

             protected virtual void KWStoreTrafficEntityDetails_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
        {
            KWStoreTrafficEntityDetails items = e.Row as KWStoreTrafficEntityDetails;

            if (items == null)
                return;

            if (items.Period == "9 AM")
                items.SortOrder = 1;
            else if (items.Period == "10 AM")
                items.SortOrder = 2;
            else if (items.Period == "11 AM")
                items.SortOrder = 3;
            else if (items.Period == "12 PM")
                items.SortOrder = 4;
            else if (items.Period == "1 PM")
                items.SortOrder = 5;
            else if (items.Period == "2 PM")
                items.SortOrder = 6;
            else if (items.Period == "3 PM")
                items.SortOrder = 7;
            else if (items.Period == "4 PM")
                items.SortOrder = 8;
            else if (items.Period == "5 PM")
                items.SortOrder = 9;
            else if (items.Period == "6 PM")
                items.SortOrder = 10;
            else if (items.Period == "7 PM")
                items.SortOrder = 11;
        }
        protected virtual void KWStoreTrafficEntity_RowPersisting(PXCache sender, PXRowPersistingEventArgs e)
        {
            KWStoreTrafficEntity row = e.Row as KWStoreTrafficEntity;

            if (row == null)
                return;

            if(this.IsImport)
            {
                if (row.EntityDate == null)
                    return;

                foreach(KWStoreTrafficEntityDetails items in this.Transactions.Cache.Cached)
                {
                    PXTrace.WriteInformation(items.Period);
                }
            }

            if ((this.Document.Cache.GetStatus(this.Document.Current) == PXEntryStatus.Inserted || this.Document.Cache.GetStatus(this.Document.Current) == PXEntryStatus.Updated))
            {
                decimal? total = default(decimal);

                foreach (KWStoreTrafficEntityDetails items in this.Transactions.Select())
                {
                    total = total + items.TotalVisitors;                    
                }

                row.TotalVisitors = total;
            }
        }

        #endregion

    }

1 Ответ

0 голосов
/ 30 января 2020

Для поля, которое должно быть уникальным (чтобы избежать дублирования), объявите его как ключевое поле в базе данных и в Acumatica DA C.

В базе данных убедитесь, что поле базы данных объявлено как поле уникального ключа: https://docs.microsoft.com/en-us/sql/relational-databases/tables/create-primary-keys?view=sql-server-ver15

В Acumatica DA C используйте свойство IsKey = True, чтобы указать, что это поле уникального ключа: https://help-2018r1.acumatica.com/Wiki/ShowWiki.aspx?pageid=cef47ebf-cb3f-41dd-a137-be0201c84140

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...