Восстановление записей основных средств с настраиваемым полем и связанными записями таблицы - PullRequest
0 голосов
/ 07 марта 2020

В Фиксированных активах (FA303000) у меня есть настройка, которая содержит два пользовательских поля и одну пользовательскую таблицу, которая является дочерней таблицей, на которую ссылается столбец AssetID FixedAsset.

Теперь по какой-то причине мы должны удалить половину наших основных средств и снова вернуть их в Acumatica. Мы не создаем весь снимок, чтобы создать и восстановить процесс. Мы обрабатываем половину записей основных средств, удаляя их и возвращая обратно.

Сначала я думал, что мне просто нужно поместить эти записи во временную таблицу, используя (выберите * в duplicate_FixedAsset из FixedAsset.), Затем удалите те записи из FixedAsset и положить его обратно в FixedAsset.

Запись пользовательских полей из основных средств будет возвращена, и для моей пользовательской дочерней таблицы, которая связана через AssetID, я могу использовать AssetCD, чтобы получить AssetID и связать его обратно снова и все должно быть в порядке.

Но, я ошибся, когда вставка этой записи не появилась на странице Основные средства.

После проверки события Row_Deleting я обнаружил ниже фрагмент кода.

protected virtual void FixedAsset_RowDeleting(PXCache sender, PXRowDeletingEventArgs e)
        {
            FixedAsset asset = (FixedAsset)e.Row;
            if (asset == null) return;

            if (null != (FATran)PXSelect<FATran, Where<FATran.assetID, Equal<Current<FixedAsset.assetID>>, And<FATran.batchNbr, IsNotNull>>>.SelectSingleBound(this, new object[] { asset }))
            {
                throw new PXSetPropertyException(Messages.BalanceRecordCannotBeDeleted);
            }

            this.EnsureCachePersistence(typeof(FARegister));
            this.EnsureCachePersistence(typeof(FABookHistory));

            foreach (FARegister reg in PXSelectJoinGroupBy<FARegister,
                LeftJoin<FATran, On<FARegister.refNbr, Equal<FATran.refNbr>>>,
                Where<FATran.assetID, Equal<Required<FixedAsset.assetID>>>,
                Aggregate<GroupBy<FARegister.refNbr>>>.Select(this, asset.AssetID))
            {
                this.Caches<FARegister>().Delete(reg);
            }

            foreach (FABookHistory hist in PXSelect<FABookHistory, Where<FABookHistory.assetID, Equal<Required<FixedAsset.assetID>>>>.Select(this, asset.AssetID))
            {
                this.Caches<FABookHistory>().Delete(hist);
            }
        }

Итак, это не тот простой процесс, о котором я думал в начале. Это показывает, что FARegister и FABookHistory также связаны между собой.

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

...