Acumatica 安排一个动作
Acumatica scheduling an action
我正在尝试创建一个例程,将订单从我们的 EDI 服务导入到 Acumatica。我创建了骨架动作:
public PXAction<EDOrderReviewFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "Get Orders")]
protected virtual void getOrders()
{
EDOrderReview graph = PXGraph.CreateInstance<EDOrderReview>();
graph.Filter.Current.ReviewType = "A";
throw new PXRedirectRequiredException(graph, false, "Review");
}
我可以完成检索订单和插入销售订单的代码,但我无法安排它。订单审查图表显示不会包含在自动检索中。该计划似乎只允许安排 Process All,即使文档说它应该是图中操作的选择列表。谁能帮忙?有没有更好的方法来安排订单检索?目前的想法是每15分钟检查一次并导入所有新订单。
=============新信息============================ ==============
我现在无法让调用图在检索订单时显示旋转计时器。在下面的代码中,EDGetOrders.cs 是仅检索订单的新处理页面。这最终将被隐藏和安排。 EDOrderReview.cs 是允许查看和调整导入订单的原始图表,我希望有一个按钮可以启动订单检索并显示一些反馈,该过程是 运行,然后显示一些指示它完成了。使用 PressButton 方法同步处理检索,然后通过最后三行刷新屏幕。 LongOperation 方法异步启动进程并立即重绘屏幕。我是否正确使用了 LongOperation?
// EDGetOrders.cs Separate graph to simply retrieve the orders
// Action to retrieve orders
public PXAction<EDGetOrderFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "")]
protected virtual void getOrders()
{
getEDIOrders();
}
// This function performs all the work and works fine
public void getEDIOrders()
{
...
}
// This function is called on Process All and works fine and shows the spinning timer
public void ProcessOrder(List<EDIGetOrder> list, string type)
{
SOOrderEntry soOrderGraph = PXGraph.CreateInstance<SOOrderEntry>();
bool errorOccured = false;
string statusText = "";
foreach (EDIGetOrder ediOrder in list)
{
PXProcessing<EDIGetOrder>.SetCurrentItem(ediOrder);
getOrders();
statusText = "Orders Retrieved";
}
if (errorOccured)
throw new PXOperationCompletedWithErrorException(statusText);
else
throw new PXOperationCompletedException(statusText);
}
//EDOrderReview.cs Original graph I want to call getOrders from and show the spinning timer
//Action to create button
public PXAction<EDOrderReviewFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "Get Orders")]
protected virtual void getOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
//getOrders.GetOrders.PressButton();
PXLongOperation.StartOperation(this, delegate () { goGetOrders(); });
//Redraw the screen with the new orders
EDOrderReview graph = PXGraph.CreateInstance<EDOrderReview>();
graph.Filter.Current.ReviewType = "A";
throw new PXRedirectRequiredException(graph, false, "Review");
}
public static void goGetOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
getOrders.getEDIOrders();
}
遗憾的是,当前文档与“自动化计划”屏幕的实际行为不符。实际上,Action Name 字段始终处于禁用状态,只能显示 Process All 选项。希望这能解释为什么无法从您当前的处理页面安排订单检索。
另一种解决方案是创建一个独立的处理屏幕,仅用于从外部 EDI 服务检索订单,您可以安排 运行 每 15 分钟处理一次所有操作。您可以通过将其放置在 SiteMap 的隐藏文件夹中来向用户隐藏这个新的处理屏幕。
当然,您仍然可以将“获取订单”按钮保留在当前处理屏幕上,并且,如果您实现从外部 EDI 服务检索订单的静态方法,则应该可以从您的两个调用相同的方法当前和新的处理屏幕。
更新以回答新信息部分:
您应该抛出 PXRedirectRequiredException 以显示 EDOrderReview 在 GetEDIOrders 操作结束后:
public PXAction<EDOrderReviewFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "Get Orders")]
protected virtual void getOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
//getOrders.GetOrders.PressButton();
PXLongOperation.StartOperation(this, delegate ()
{
goGetOrders();
//Redraw the screen with the new orders
EDOrderReview graph = PXGraph.CreateInstance<EDOrderReview>();
graph.Filter.Current.ReviewType = "A";
throw new PXRedirectRequiredException(graph, false, "Review");
});
}
public static void goGetOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
getOrders.getEDIOrders();
}
我正在尝试创建一个例程,将订单从我们的 EDI 服务导入到 Acumatica。我创建了骨架动作:
public PXAction<EDOrderReviewFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "Get Orders")]
protected virtual void getOrders()
{
EDOrderReview graph = PXGraph.CreateInstance<EDOrderReview>();
graph.Filter.Current.ReviewType = "A";
throw new PXRedirectRequiredException(graph, false, "Review");
}
我可以完成检索订单和插入销售订单的代码,但我无法安排它。订单审查图表显示不会包含在自动检索中。该计划似乎只允许安排 Process All,即使文档说它应该是图中操作的选择列表。谁能帮忙?有没有更好的方法来安排订单检索?目前的想法是每15分钟检查一次并导入所有新订单。
=============新信息============================ ==============
我现在无法让调用图在检索订单时显示旋转计时器。在下面的代码中,EDGetOrders.cs 是仅检索订单的新处理页面。这最终将被隐藏和安排。 EDOrderReview.cs 是允许查看和调整导入订单的原始图表,我希望有一个按钮可以启动订单检索并显示一些反馈,该过程是 运行,然后显示一些指示它完成了。使用 PressButton 方法同步处理检索,然后通过最后三行刷新屏幕。 LongOperation 方法异步启动进程并立即重绘屏幕。我是否正确使用了 LongOperation?
// EDGetOrders.cs Separate graph to simply retrieve the orders
// Action to retrieve orders
public PXAction<EDGetOrderFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "")]
protected virtual void getOrders()
{
getEDIOrders();
}
// This function performs all the work and works fine
public void getEDIOrders()
{
...
}
// This function is called on Process All and works fine and shows the spinning timer
public void ProcessOrder(List<EDIGetOrder> list, string type)
{
SOOrderEntry soOrderGraph = PXGraph.CreateInstance<SOOrderEntry>();
bool errorOccured = false;
string statusText = "";
foreach (EDIGetOrder ediOrder in list)
{
PXProcessing<EDIGetOrder>.SetCurrentItem(ediOrder);
getOrders();
statusText = "Orders Retrieved";
}
if (errorOccured)
throw new PXOperationCompletedWithErrorException(statusText);
else
throw new PXOperationCompletedException(statusText);
}
//EDOrderReview.cs Original graph I want to call getOrders from and show the spinning timer
//Action to create button
public PXAction<EDOrderReviewFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "Get Orders")]
protected virtual void getOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
//getOrders.GetOrders.PressButton();
PXLongOperation.StartOperation(this, delegate () { goGetOrders(); });
//Redraw the screen with the new orders
EDOrderReview graph = PXGraph.CreateInstance<EDOrderReview>();
graph.Filter.Current.ReviewType = "A";
throw new PXRedirectRequiredException(graph, false, "Review");
}
public static void goGetOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
getOrders.getEDIOrders();
}
遗憾的是,当前文档与“自动化计划”屏幕的实际行为不符。实际上,Action Name 字段始终处于禁用状态,只能显示 Process All 选项。希望这能解释为什么无法从您当前的处理页面安排订单检索。
另一种解决方案是创建一个独立的处理屏幕,仅用于从外部 EDI 服务检索订单,您可以安排 运行 每 15 分钟处理一次所有操作。您可以通过将其放置在 SiteMap 的隐藏文件夹中来向用户隐藏这个新的处理屏幕。
当然,您仍然可以将“获取订单”按钮保留在当前处理屏幕上,并且,如果您实现从外部 EDI 服务检索订单的静态方法,则应该可以从您的两个调用相同的方法当前和新的处理屏幕。
更新以回答新信息部分:
您应该抛出 PXRedirectRequiredException 以显示 EDOrderReview 在 GetEDIOrders 操作结束后:
public PXAction<EDOrderReviewFilter> GetOrders;
[PXProcessButton()]
[PXUIField(DisplayName = "Get Orders")]
protected virtual void getOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
//getOrders.GetOrders.PressButton();
PXLongOperation.StartOperation(this, delegate ()
{
goGetOrders();
//Redraw the screen with the new orders
EDOrderReview graph = PXGraph.CreateInstance<EDOrderReview>();
graph.Filter.Current.ReviewType = "A";
throw new PXRedirectRequiredException(graph, false, "Review");
});
}
public static void goGetOrders()
{
EDGetOrders getOrders = PXGraph.CreateInstance<EDGetOrders>();
getOrders.getEDIOrders();
}