В зависимости от того, как вы хотите обновить поле CD, я бы просто использовал PXDatabase.Update.Вызов PXDatabase.Update обновит таблицу, как только она будет вызвана, а не когда график сохранится.Вам нужно будет обновить представление, отображающее проект после выполнения вызова.
Вот рабочий пример, который можно использовать для любой таблицы ID / CD:
public static void ChangeCDValue<Dac, IDField, CDField>(int? id, string newCD)
where Dac : IBqlTable
where IDField : IBqlField
where CDField : IBqlField
{
if (id == null)
{
throw new ArgumentNullException(nameof(id));
}
if (string.IsNullOrWhiteSpace(newCD))
{
throw new ArgumentNullException(nameof(newCD));
}
PXDatabase.Update<Dac>(
new PXDataFieldAssign<CDField>(newCD),
new PXDataFieldRestrict<IDField>(PXDbType.Int, id));
}
Для обновления проектаCD вы можете использовать контрактный ЦАП следующим образом:
ChangeCDValue<PX.Objects.CT.Contract, PX.Objects.CT.Contract.contractID, PX.Objects.CT.Contract.contractCD>(3354, "TESTCHANGE");
Аналогичный призыв изменить значение инвентарного CD:
ChangeCDValue<PX.Objects.IN.InventoryItem, PX.Objects.IN.InventoryItem.inventoryID, PX.Objects.IN.InventoryItem.inventoryCD>(10, "NEWCD");
В качестве @ HB_Acumatica , упомянутого в комментарияхна ваш вопрос вы можете создать собственную версию класса ChangeProjectID
, удалив код диалога.Если у вас возникли проблемы с поиском класса по имени, он находится в следующем файле на вашем сайте Acumatica: App_Data \ CodeRepository \ PX.Objects \ PM \ ProjectEntry.cs
Использование кода из ChangeProjectID позволит вамобновите значение в кэше и подождите, пока изменения не будут сохранены.Визуально он должен показывать изменения без необходимости также делать свое собственное обновление.