流程在流程屏幕上运行时运行正常但不在自动计划下运行

时间:2015-06-09 22:38:46

标签: acumatica

我有一个我正在尝试安排的流程。当计划运行时,我收到以下错误:

       Message: Error #199: You are not currently logged in.

Date/Time: 09/06/2015 10:20
Platform: 
Browser: 

Source: PX.Data
Target Site: Int32 GetCurrentCompany()
Stack Trace:    at PX.Data.PXDatabaseProviderBase.GetCurrentCompany()
   at PX.Data.PXDatabaseProviderBase.getCompanyID(String tableName, companySetting& setting)
   at PX.Data.PXDatabaseProviderBase.getRestriction(String table, String alias, Boolean mainRestriction, Boolean isRightJoin, Nullable`1 effectiveCid)
   at PX.Data.PXDatabaseProviderBase.alterText(String text, Int32 start, Int32 stop, Boolean isTopLevelQuery)
   at PX.Data.PXDatabaseProviderBase.alterText(String text, Int32 start, Int32 stop, Boolean isTopLevelQuery)
   at PX.Data.PXDatabaseProviderBase.Select(PXGraph graph, BqlCommand command, Int32 topCount, PXView view, PXDataValue[] pars)
   at PX.Data.PXGraph.ProviderSelect(BqlCommand command, Int32 topCount, PXView view, PXDataValue[] pars)
   at PX.Data.PXView.GetResult(Object[] parameters, PXFilterRow[] filters, Boolean reverseOrder, Int32 topCount, PXSearchColumn[] sorts, Boolean& overrideSort, Boolean& extFilter)
   at PX.Data.PXView.Select(Object[] currents, Object[] parameters, Object[] searches, String[] sortcolumns, Boolean[] descendings, PXFilterRow[] filters, Int32& startRow, Int32 maximumRows, Int32& totalRows)
   at PX.Data.PXSelectBase`1.selectBound[Resultset](BqlCommand command, Boolean readOnly, PXGraph graph, Int32 startRow, Int32 totalRows, Object[] currents, Object[] pars)
   at PX.Data.PXSelectBase`1.select[Resultset](BqlCommand command, Boolean readOnly, PXGraph graph, Int32 startRow, Int32 totalRows, Object[] pars)
   at PX.Data.PXSelectReadonly`2.SelectWindowed[Resultset](PXGraph graph, Int32 startRow, Int32 totalRows, Object[] pars)
   at PX.Data.PXSelectReadonly`2.Select[Resultset](PXGraph graph, Object[] pars)
   at Exosoft.MP.MikePero.Graphs.RexApiMaint.GetCustomerByCD(String id)

当我通过流程屏幕运行流程时,流程运行正常,但不是在自动计划下运行。

当我拨打以下内容时发生错误...

PXSelectReadonly<PX.Objects.AR.Customer, Where<PX.Objects.AR.Customer.acctCD, Equal<Required<PX.Objects.AR.Customer.acctCD>>>>.Select(this, id);

它调用进程的图形和图形是基于我创建的自定义表自定义的。我已将CompanyID和其他审核字段添加到自定义表中。这就是我的称呼方式

public class SyncRexApiProcess : PXGraph<SyncRexApiProcess>
{

    public PXCancel<RexApiLogin> Cancel;
    public PXProcessing<RexApiLogin> RexApiLogins;

    public SyncRexApiProcess()
    {
        RexApiLogins.SetProcessCaption("Sync From Rex Api Login");
        RexApiLogins.SetProcessAllCaption("Sync From All Rex Api Logins");
        RexApiLogins.SetProcessDelegate<RexApiMaint>(
            delegate(RexApiMaint graph, RexApiLogin login)
            {
                graph.Clear();
                Func<Task> task = async () =>
                {
                    await graph.SyncAPIDataAsync(login);
                };
                task().Wait();

            });
    }

}

1 个答案:

答案 0 :(得分:1)

通过使用async / await,您的代码将在不同的线程中运行,不能保证使用会话变量正确初始化。我不相信Acumatica可以保证图形或任何缓存的任何线程安全性,因此您应该将与其交互的任何代码与异步操作分开。

此外,我认为没有任何理由使用异步操作;在这种情况下,它只会让你的生活更加困难 - 只需从主线程运行你的API同步。如果要一次运行多个操作,并等待它们返回,则将这些操作与图形和缓存隔离。