Пользовательские поля не показывают обновленное значение при обновлении в поле обновленного события. Почему? - PullRequest
1 голос
/ 28 марта 2020

Я добавил пользовательские поля в форму настройки, используя форму настройки, шаги, которые я добавил: 1) Go к форме отгрузки и выберите Сетка транзакций. 2) Выберите Добавить поля. 3) Выберите обычное и Добавить 4 поля и сохраните и опубликуйте sh. 4) Добавьте все 4 поля и выберите «Использовать и сохранить». 5) и снова публикуем sh и все 4 столбца видимы. 6) Я добавил имена пользовательских полей Aloow (PXDBBool), UsrPClocation (Location) и UsrPCwarehouse (Site), и я установил атрибут ниже в хранилище и местоположении. 7) Но для события SOSHipLine_InventotyID_FieldUpdate я задаю параметр Разрешить, расположение, складировать все 3 значения, но значения не отображаются в сетке. Что такое результат?

# регион UsrQCSiteID

    [PXUIField(DisplayName = "PC Warehouse")]      
    [SiteAvail(typeof(SOShipLine.inventoryID), typeof(SOShipLine.subItemID))]       
    [PXUIRequired(typeof(Where<usrAllow, Equal<True>>))]
    [PXUIEnabled(typeof(Where<usrAllow, Equal<True>>))]
    [PXDefault()]
    public virtual int? UsrPCSiteID {
        get; set;
    }
    public abstract class usrPCSiteID:PX.Data.BQL.BqlInt.Field<usrPCSiteID> {
    }

    #endregion UsrPCSiteID

    #region UsrPCLocationID

    [PXUIField(DisplayName = "PC Location")]       
    [SOLocationAvail(typeof(SOShipLine.inventoryID), typeof(SOShipLine.subItemID), typeof(SOShipLineExt.usrPCSiteID), typeof(SOLine.tranType), typeof(SOShipLine.invtMult))]

    [PXUIRequired(typeof(Where<usrQCRequired, Equal<True>>))]
    [PXUIEnabled(typeof(Where<usrQCRequired, Equal<True>>))]
    [PXDefault()]
    public virtual int? UsrPCLocationID {
        get; set;
    }
    public abstract class usrPCLocationID:PX.Data.BQL.BqlInt.Field<usrPCLocationID> {
    }

    #endregion UsrPCLocationID

#region Разрешить

    [PXDBBool]
    [PXUIField(DisplayName = "Allow")]

    public virtual bool? UsrAllow {
        get; set;
    }
    public abstract class usrAllow:PX.Data.BQL.BqlBool.Field<usrAllow> {
    }

    #endregion

Разрешает ли SOShipLine обновлять пользовательские значения?

1 Ответ

1 голос
/ 30 марта 2020

Шаги, которые вы описали, выглядят правильно.

Я воссоздал этот сценарий локально:

1 - мое расширение DA C выглядит следующим образом:

  public class SOShipLineExt : PXCacheExtension<PX.Objects.SO.SOShipLine>
  {
    #region UsrPCSiteID
    [PXUIField(DisplayName = "PC Warehouse")]      
    [SiteAvail(typeof(SOShipLine.inventoryID), typeof(SOShipLine.subItemID))]       
    public virtual int? UsrPCSiteID {
        get; set;
    }
    public abstract class usrPCSiteID:PX.Data.BQL.BqlInt.Field<usrPCSiteID> {
    }
    #endregion UsrPCSiteID

    #region UsrPCLocationID
    [PXUIField(DisplayName = "PC Location")]       
    [SOLocationAvail(typeof(SOShipLine.inventoryID), typeof(SOShipLine.subItemID), typeof(SOShipLineExt.usrPCSiteID), typeof(SOShipLine.tranType), typeof(SOShipLine.invtMult))]
    public virtual int? UsrPCLocationID {
        get; set;
    }
    public abstract class usrPCLocationID:PX.Data.BQL.BqlInt.Field<usrPCLocationID> {
    }
    #endregion UsrPCLocationID


#region Allow
    [PXDBBool]
    [PXUIField(DisplayName = "Allow")]
    public virtual bool? UsrAllow {
        get; set;
    }
    public abstract class usrAllow:PX.Data.BQL.BqlBool.Field<usrAllow> {
    }
    #endregion
  }

Замечания о расширении DA C:

  • Я удалил ссылки на PXUIEnabled и PXUIRequired. Если вы хотите отключить Site и Location на основе значения флажка, я рекомендую вам управлять этим логом c в событии RowSelected. (это возможно при вашем подходе, но я не использовал его раньше)
  • Ссылки PXDefault также были удалены, поскольку в большинстве случаев Отправка создается непосредственно со страницы Заказа на продажу. Как вы понимаете, поле является обязательным, но значение по умолчанию не присваивается, что приведет к ошибке. У вас есть 2 варианта: 1) указать значение в атрибуте PXDefault () или 2) установить свойство PXPersistingCheck.Nothing .
  • Обратите внимание, что ваш атрибут SOLocationAvail имеет ошибку в 4-м параметр. Вы должны использовать typeof (SOShipLine.tranType) вместо typeof (SOLine.tranType) . Это приводило к ошибке при создании отправки из SO.

2 - событие My FieldUpdated выглядит следующим образом:

  public class SOShipmentEntry_Extension : PXGraphExtension<SOShipmentEntry>
  {
    protected virtual void SOShipLine_InventoryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
  {
    if (e.Row == null) return;
    SOShipLine line = (SOShipLine)e.Row;
    SOShipLineExt lineExt = cache.GetExtension<SOShipLineExt>(line);

    if (lineExt != null)
    {
      lineExt.UsrAllow = true;
      lineExt.UsrPCSiteID=154;
      lineExt.UsrPCLocationID=155;        
    }
  }
  }

Примечания о расширении графика:

  • Я жестко запрограммировал значения «Склад» и «Местоположение». Я рекомендую вам сделать то же самое с самого конца во время тестирования, просто убедитесь, что идентификаторы существуют в вашей БД, или что вы запрашиваете значение CD, а затем используете соответствующее значение идентификатора.

Результаты:

Когда отправка создается из SO, значения назначаются правильно: enter image description here

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