Acumatica 针灸术

Acumatica 针灸术,acumatica,schedule,Acumatica,Schedule,我正在尝试创建一个例程,将订单从我们的EDI服务导入Acumatica。我创建了一个骨架动作: public PXAction<EDOrderReviewFilter> GetOrders; [PXProcessButton()] [PXUIField(DisplayName = "Get Orders")] protected virtual void getOrders() { EDOrderReview graph = PXGra

我正在尝试创建一个例程,将订单从我们的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");
    }
public命令;
[PXProcessButton()]
[PXUIField(DisplayName=“获取订单”)]
受保护的虚拟void getOrders()
{
EDOrderReview graph=PXGraph.CreateInstance();
graph.Filter.Current.ReviewType=“A”;
抛出新的PXREQUIREDEXCEPTION(图,false,“Review”);
}
我可以完成代码来检索订单和插入销售订单,但我无法将其安排到计划中。自动检索中将不包括订单审核图显示。该计划似乎只允许所有进程的计划,即使文档中说它应该是图中操作的选择列表。有人能帮忙吗?有没有更好的方法来安排订单检索?目前的想法是每15分钟检查一次并导入所有新订单

================新信息============================================

我现在很难在检索订单时使调用图显示旋转计时器。在EdgeToOrders.cs下面的代码中,是新的处理页面,该页面仅检索订单。这最终将被隐藏和安排。EDOrderReview.cs是允许检查和调整导入订单的原始图形,我希望有一个按钮启动订单检索,并显示流程正在运行的一些反馈,然后显示流程已完成的一些指示。使用PressButton方法同步处理检索,然后通过最后三行刷新屏幕。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);
//EdgeToOrders.cs单独的图形,用于简单地检索订单
//检索订单的操作
公共行动命令;
[PXProcessButton()]
[PXUIField(DisplayName=”“)]
受保护的虚拟void getOrders()
{
getEDIOrders();
}
//此函数执行所有工作,工作正常
公共命令
{
...
}
//此函数在Process All上调用,工作正常,并显示旋转计时器
public void ProcessOrder(列表,字符串类型)
{
SOOrderEntry soOrderGraph=PXGraph.CreateInstance();
bool errorOccursed=false;
字符串statusText=“”;
foreach(EDIGetOrder ediOrder in列表)
{
PXProcessing.SetCurrentItem(ediOrder);
getOrders();
statusText=“已检索订单”;
}
如果(发生错误)
抛出新的PXOperationCompletedWithErrorException(状态文本);
其他的
抛出新的PXOperationCompletedException(statusText);
}
//EDOrderReview.cs我想从中调用getOrders并显示旋转计时器的原始图形
//创建按钮的操作
公共行动命令;
[PXProcessButton()]
[PXUIField(DisplayName=“获取订单”)]
受保护的虚拟void getOrders()
{
EdgeToOrders getOrders=PXGraph.CreateInstance();
//getOrders.getOrders.PressButton();
PXLongOperation.StartOperation(这是委托(){goGetOrders();});
//用新订单重新绘制屏幕
EDOrderReview graph=PXGraph.CreateInstance();
graph.Filter.Current.ReviewType=“A”;
抛出新的PXREQUIREDEXCEPTION(图,false,“Review”);
}
公共静态无效goGetOrders()
{
EdgeToOrders getOrders=PXGraph.CreateInstance();
getOrders.getEDIOrders();
}

不幸的是,当前文档与自动化计划屏幕的实际行为不匹配。实际上,“操作名称”字段始终处于禁用状态,并且只能显示“处理所有”选项。希望这能解释为什么无法从当前处理页面安排订单检索

另一种解决方案是创建一个独立的处理屏幕,仅用于从外部EDI服务检索订单,您可以将其计划为每15分钟运行一次处理所有操作。通过将此新处理屏幕放置在站点地图的隐藏文件夹中,可以对用户隐藏此屏幕

当然,您仍然可以在当前处理屏幕上保留“获取订单”按钮,如果您将从外部EDI服务检索订单的方法实现为静态,则应该可以从当前和新处理屏幕调用相同的方法

更新以回答新信息部分:

在GetEDIOrders操作结束后,您应该抛出PXRedirectRequiredException以显示eOrderView

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();
}
public命令;
[PXProcessButton()]
[PXUIField(DisplayName=“获取订单”)]
受保护的虚拟void getOrders()
{
EdgeToOrders getOrders=PXGraph.CreateInstance();
//getOrders.getOrders.PressButton();
PXLongOperation.StartOperation(此,委托()
{ 
goGetOrders();
//用新订单重新绘制屏幕
EDOrderReview graph=PXGraph.CreateInstance();
graph.Filter.Current.ReviewType=“A”;
抛出新的PXREQUIREDEXCEPTION(图,false,“Review”);
});
}
公共静态无效goGetOrders()
{
EdgeToOrders getOrders=PXGraph.CreateInstance();
getOrders.getEDIOrders();
}

如果您设置了处理页面,则默认情况下可以安排该页面,但您需要“处理”一些内容。因此,如果您希望在Acumatica中计划一个流程,只需每15分钟运行一次,那么我会将计划流程设置为根据需要处理某种类型的设置记录,然后在该流程中获取订单。这有用吗?正在文档中发布的处理页面示例。请澄清我是否偏离了这个问题。我有一个程序
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();
}