我在“销售订单”屏幕中添加了一个自定义保存按钮,而不是我当前的按钮。如何重新排序主工具栏以便新的保存按钮代替旧的?您可以轻松地为网格按钮执行此操作,但对于标题按钮,它不是那么明显。
答案 0 :(得分:0)
按钮的顺序基于图表中PXActions的顺序。
(1)在本例中,我的保存按钮是第一个,然后是第二个取消按钮。
public class MyGraph : PXGraph<MyGraph>
{
public PXSave<MyPrimaryDac> Save;
public PXCancel<MyPrimaryDac> Cancel;
}
(2)在这个例子中,我的取消按钮是第一个,然后是第二个保存按钮。
public class MyGraph : PXGraph<MyGraph>
{
public PXCancel<MyPrimaryDac> Cancel;
public PXSave<MyPrimaryDac> Save;
}
请注意,PXSave和PXCancel是PXActions。
编辑:如果您要扩展另一个图表,则可以从评论和问题编辑中使用从PXSave继承的新类,并将属性名称设置为相同(&#34; Save&#34 ;在销售订单的例子中)。这是应该用于覆盖保存按钮并向用户询问问题并将保存按钮保持在同一按钮位置的东西...
public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
public SalesPXSave<SOOrder> Save;
public class SalesPXSave<TNode> : PXSave<TNode> where TNode : class, IBqlTable, new()
{
public SalesPXSave(PXGraph graph, string name) : base(graph, name)
{
}
public SalesPXSave(PXGraph graph, Delegate handler) : base(graph, handler)
{
}
[PXSaveButton]
[PXUIField(DisplayName = "Save", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Update)]
protected override IEnumerable Handler(PXAdapter adapter)
{
bool someCondition = true;
if (someCondition)
{
if (adapter.View.Ask(adapter.View.Graph.Caches[typeof(TNode)].Current, "Hi User",
MessageButtons.YesNo) != WebDialogResult.Yes)
{
return adapter.Get();
}
}
return base.Handler(adapter);
}
}
}
编辑:这里有一些快速未经测试的示例,如果首选扩展RowPersisting或者扩展名中的Persist,则扩展按钮...
[PXOverride]
public virtual void Persist(Action del)
{
if (Base.Document.Ask(Base.Document.Current, "Question", "Continue?",
MessageButtons.YesNo) != WebDialogResult.Yes)
{
return;
}
del?.Invoke();
}
protected virtual void SOOrder_RowPersisting(PXCache cache, PXRowPersistingEventArgs e, PXRowPersisting del)
{
var row = (SOOrder)e.Row;
if (row == null)
{
return;
}
if ((e.Operation == PXDBOperation.Insert || e.Operation == PXDBOperation.Update || e.Operation == PXDBOperation.Delete) &&
Base.Document.Ask(row, "Question", "Continue ?", MessageButtons.YesNo, true) != WebDialogResult.Yes)
{
e.Cancel = true;
return;
}
del?.Invoke(cache, e);
}