我有一个自定义图,在本例中称为MyGraph。该页包含一个表单选项卡,其方式类似于已存储的项页,其中标头是我的DAC (MyDAC)的几个字段,而第一个选项卡上的表单是我的附加字段的形式。为了便于讨论,这些观点是MyView和MyCurrentView。
在“已存储的项”页面上,我可以在ItemSettings视图(“常规设置”选项卡)中设置一个值,然后执行一个操作,该操作也恰好保存我的用户输入。在我的自定义页面中,当我执行一个操作时,类似的"MyCurrentView“选项卡的用户输入会丢失。我已经为T230的行动再次复习了培训材料,但我似乎无法克服这个问题。下面的代码示例展示了我如何执行操作"ConvertIt“的两个简化方法。在调试期间,myDAC和myDAC2都包含陈旧的数据,这表明在Button属性和DataSource回调命令中,每个CommitChanges都没有按预期更新视图。未保存的用户输入是通过仅在MyCurrentView中显示给UI的字段输入的。
T230培训指南指出,我应该在操作栏中设置AutoCallBack行为,这对于网格来说似乎是可能的,但对于表单则不可能。培训指南的例子是:
<ActionBar>
<CustomItems>
<px:PXToolBarButton Text="Complete">
<AutoCallBack Command="Complete" Target="ds">
<Behavior CommitChanges="True" ></Behavior>
</AutoCallBack>
</px:PXToolBarButton>
</CustomItems>
</ActionBar>由于我通过action.AddMenuAction(ConvertIt)将操作挂在“操作”菜单上;因此,我似乎没有一种方法来指定培训指南中描述的行为。
定义的视图
public PXSelect<MyDAC> MyView;
public PXSelect<MyDAC, Where<MyDAC.tagID, Equal<Current<MyDAC.tagID>>>> MyCurrentView;定义的行动-方法1
#region convertIt Action
public PXAction<MyDAC> convertIt;
[PXUIField(DisplayName = "My DAC Label", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select)]
[PXButton(CommitChanges = true)]
public virtual void ConvertIt()
{
this.Save.Press(); // Seems to make no difference in saving the unsaved user entry
MyDAC myDAC = MyView.Current;
MyDAC myDAC2 = MyCurrentView.Current;
** DO THE WORK OF THE ACTION HERE **
}
#endregion定义的行动-方法2
#region convertIt Action
public PXAction<MyDAC> convertIt;
[PXUIField(DisplayName = "My DAC Label", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select)]
[PXButton(CommitChanges = true)]
public virtual IEnumerable ConvertIt(PXAdapter adapter)
{
MyDAC myDAC = MyView.Current;
MyDAC myDAC2 = MyCurrentView.Current;
** DO THE WORK OF THE ACTION HERE **
return adapter.Get();
}
#endregionASPX数据资源定义
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%"
TypeName="MyGraph"
PrimaryView="MyView">
<CallbackCommands>
<px:PXDSCallbackCommand CommitChanges="True" Name="ConvertIt" ></px:PXDSCallbackCommand>
</CallbackCommands>
</px:PXDataSource>简而言之,当我完成操作时,用户输入就会丢失。我尝试在我的操作开始时包括this.Save.Press(),但是我已经在操作结束时保存了。无论如何,Debug不会在视图中显示我的用户输入的值,尽管我期望在执行操作之前,在按钮和数据源上提交这些更改。
在阻止应用UI更新的C#代码或ASPX页面定义中,我遗漏了什么?有趣的是,MyView视图中的UI更改是应用的,而不是MyCurrentView中的更改,除非我在从菜单中选择操作之前手动按下保存按钮。
发布于 2021-03-04 15:39:55
我最近也遇到了这个问题。在从操作中打开智能面板时,很容易强迫页面回发到服务器,但是如果没有面板打开,如何强制在不提交更新的字段中更改数据的发布?我发现实现这一目标的唯一方法是编辑ASPX并将StartNewGroup="true“和CommitChanges="true”添加到添加操作的操作文件夹的PXDSCallbackCommand中。
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%"
TypeName="MyGraph"
PrimaryView="MyView">
<CallbackCommands>
<px:PXDSCallbackCommand CommitChanges="True" Name="ActionFolder" StartNewGroup="True" />
</CallbackCommands>
</px:PXDataSource>对于操作,您应该使用第二种方法。
public PXAction<MyDAC> convertIt;
[PXUIField(DisplayName = "My DAC Label", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select)]
[PXButton(CommitChanges = true)]
public virtual IEnumerable ConvertIt(PXAdapter adapter)
{
MyDAC myDAC = MyView.Current;
MyDAC myDAC2 = MyCurrentView.Current;
**DO THE WORK OF THE ACTION HERE **
return adapter.Get();
}
public MyGraph()
{
actionFolder.AddMenuAction(convertIt);
}发布于 2021-03-23 15:24:23
无法保存聚焦字段值。值在控件失去焦点时保存。但是,当焦点从未提交字段转移到操作按钮(用户单击)时,当前字段值将丢失。这里不确定这是问题所在,但请记住,在单击操作按钮之前,用户必须从未提交值的控件编辑器中签出,否则该值将丢失。
https://stackoverflow.com/questions/66445343
复制相似问题