2017-01-10 2 views
0

Я создал настраиваемое действие по контрактам, которое обновляет описание, а также атрибуты.Base.Actions.PressSave() не работает над атрибутами с массовыми действиями

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

Что нужно сделать, чтобы значения атрибутов правильно сохранялись во время массового действия?

 public PXSelect<CSAnswers, 
       Where<CSAnswers.refNoteID, Equal<Current<Contract.noteID>>>> CSAttr; 

     protected IEnumerable testAction(PXAdapter adapter) 
     { 
      //get the activation parameters 
      var a = CSAttr.Select(); 
      Contract mycontract = Base.CurrentContract.Select(); 
      foreach (CSAnswers item in a.ToList()) 
      {      
       if (item.AttributeID == "ACTA") 
       { 
        item.Value = "Won't Update1"; 
        CSAttr.Update(item); //shouldn't this update? 
       } 
       else if (item.AttributeID == "ACTB") //desired mode set by user 
       { 
        item.Value = "Won't Update2"; 
        CSAttr.Update(item); //shouldn't this update? 
       } 
      } 
      mycontract.Description = "This Works Fine"; 
      Base.CurrentContract.Update(mycontract); 
      Base.Actions.PressSave(); 

      return adapter.Get(); 
     } 
+0

@AcumaticGuy, не могли бы вы поделиться осуществлением вашего Mass Action? – RuslanDev

+0

Массовое действие генерируется из общего запроса с использованием таблиц PX.Objects.CS.Answers Слева Join PX.Objects.CT.Contract on noteId = refNoteID. Точка входа - это Финансы \ Дебиторская задолженность \ Область работы \ Управление \ Клиентские контракты. Затем включается «Включить массовые действия по записям». На вкладке «Массовые действия» добавьте действие «testAction». Действие отлично работает и обновляет атрибуты по отдельным клиентским контрактам. Мой вопрос - есть ли что-то другое, что мне нужно сделать, чтобы обновить атрибуты vs полей описания? – AcumaticaGuy

+0

Я бы предложил изменить ваш код следующим образом: foreach (CSAnswers item в CSAttr.Select (this)) –

ответ

0

Не нужно декларировать пользовательские данные данных CSAttr: ContractMaint уже содержит отображение данных ответов для работы с атрибутами.

TestAction реализован как ниже, успешно обновляет как Contract Описание и Значение атрибута на совершенно новый 6.00.1596 Acumatica ERP, например при запуске из GI создан в виде списка точки входа:

public class ContractMaintExt : PXGraphExtension<ContractMaint> 
{ 
    public override void Initialize() 
    { 
     TestAction.IsMass = true; 
    } 

    public PXAction<Contract> TestAction; 
    [PXButton] 
    [PXUIField(DisplayName = "Test Action")] 
    public void testAction() 
    { 
     Contract mycontract = Base.CurrentContract.Select(); 
     foreach (CSAnswers attr in Base.Answers.Select()) 
     { 
      if (attr.AttributeID == "CONFIGURAB") 
      { 
       attr.Value = "Updated"; 
       Base.Answers.Update(attr); //shouldn't this update? 
      } 
     } 
     mycontract.Description = "This Works Fine"; 
     Base.Contracts.Update(mycontract); 
     Base.Actions.PressSave(); 
    } 
} 

enter image description here

enter image description here

+0

Отлично работает. – AcumaticaGuy