2017-01-09 2 views
0

Я создал представление на странице «Элементы запасов», на котором отображаются все элементы с тем же классом предметов, что и просматриваемый элемент. Представление отображается правильно, но текущее свойство неверно. По какой-то причине запись relatedItems.Current всегда является элементом, находящимся на этой странице, а не элементом, выбранным в сетке.Текущее свойство настраиваемого представления не обновляется правильно

У меня есть функция обратного вызова на странице ASPX и InventoryCD LinkCommand, вызывающая эту функцию. Что странно, у меня такой же код на экране «Классы предметов», и он отлично работает.

Свойство Current моего пользовательского представления - это всегда запись, на которую была нажата кнопка. У меня установлен параметр SyncPosition, равный true для сетки. Может ли быть проблема, потому что я ссылаюсь на InventoryItem на InventoryItem? Благодаря

public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint> 
{ 

    #region Event Handlers 

    public PXSelectReadonly<InventoryItem, Where<InventoryItem.itemClassID, Equal<Current<InventoryItem.itemClassID>>, And<InventoryItem.inventoryID, NotEqual<Current<InventoryItem.inventoryID>>>>> relatedItems; 

    public PXAction<InventoryItem> ViewCurrentItem; 

    [PXButton] 
    protected virtual void viewCurrentItem() 
    { 

     InventoryItem row = relatedItems.Current; 

     // Create the instance of the destination graph 
     InventoryItemMaint graph = PXGraph.CreateInstance<InventoryItemMaint>(); 
     graph.Item.Current = row; 

     if (graph.Item.Current != null) 
     { 
      throw new PXRedirectRequiredException(graph, true, "Item"); 
     } 
    } 
} 

ответ

0

Пожалуйста, проверьте, если вы указали DependOnGrid свойство для действий в странице: -

<CallbackCommands> 
    ... 
    <px:PXDSCallbackCommand Name="ViewCurrentItem" Visible="true" DependOnGrid="RelatedGridID" /> 
</CallbackCommands> 

свойство объясняется в материале T200 Training

enter image description here

Альтернативный вариант будет использовать AllowEdit PXSelector - вам не понадобится Custom Action.

Пример

<px:PXGrid … > 
    <Levels> 
     <px:PXGridLevel …> 
     <Columns> 
     … 
     </Columns> 
     <RowTemplate> 
      <px:PXSegmentMask runat="server" ID="CstPXSegmentMask2" DataField="InventoryCD" AllowEdit="True" />            
     </RowTemplate> 
     </px:PXGridLevel> 
    </Levels> 
</px:PXGrid> 

Чтобы изменить элемент в одной и той же странице,

Каждый вид данных должен относиться к уникальному основному классу доступа к данным (DAC), если вы не хотите, чтобы отобразить ту же запись данных в несколько элементов управления контейнерами. При этом вам необходимо создать новый ЦАП для представления Связанного элемента, унаследованного от InventoryItem, с определением новых абстрактных классов для полей данных производного класса, используемых в операторах BQL.

[Serializable] 
public class RelatedInventoryItem : InventoryItem 
{ 
    public new abstract class inventoryID : IBqlField { }; 

    public new abstract class itemClassID : IBqlField { }; 
} 

И ваш DataView должен быть

public PXSelectReadonly<RelatedInventoryItem, 
         Where<RelatedInventoryItem.itemClassID, 
           Equal<Current<InventoryItem.itemClassID>>, 
          And<RelatedInventoryItem.inventoryID, 
          NotEqual<Current<InventoryItem.inventoryID>>>>> 
         relatedItems; 
0

@DChhapgar Да, у меня есть DependOnGrid правильно. Вот все соответствующего кода:

<px:PXDSCallbackCommand Name="ViewRelatedItems" Visible="true" DependOnGrid="relatedItemsGridID" /></CallbackCommands> 
.... 
    <px:PXTabItem Text="Related Items"> 
    <Template> 
     <px:PXGrid runat="server" ID="relatedItemsGridID" SkinID="DetailsInTab" Width="100%" SyncPosition="True" DataSourceID="ds" > 
      <Levels> 
       <px:PXGridLevel DataMember="relatedItems"> 
        <Columns> 
         <px:PXGridColumn DataField="InventoryCD" Width="100" LinkCommand="ViewRelatedItems"/> 
         <px:PXGridColumn DataField="InventoryID" Width="100" /> 
         <px:PXGridColumn DataField="ItemClassID" Width="100" /> 
         <px:PXGridColumn DataField="Descr" Width="200" /> 
         <px:PXGridColumn DataField="ItemStatus" Width="100" /> 
         <px:PXGridColumn DataField="ItemType" Width="100" /> 
         <px:PXGridColumn DataField="KitItem" Width="60" /></Columns> 
        </px:PXGridLevel></Levels> 
      <AutoSize Enabled="True" MinHeight="200" /> 
      <Mode AllowAddNew="False" AllowDelete="False" AllowUpdate="False" /></px:PXGrid></Template></px:PXTabItem> 
.... 

Используя AllowEdit из PXSelector работ, но я хотел бы изменить этот пункт на той же странице, так что в идеале пользователь должен нажать на пункт, инвентаризации ID/Inventory CD поле в заголовке будет заполнено щелчком элемента и изменения.

+0

Я обновил исходный ответ. – DChhapgar