Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta 代码正在ax客户端上运行,但由于断言权限而不是批处理?_Axapta - Fatal编程技术网

Axapta 代码正在ax客户端上运行,但由于断言权限而不是批处理?

Axapta 代码正在ax客户端上运行,但由于断言权限而不是批处理?,axapta,Axapta,我有这种类型的代码,我想成批运行。 如果我在客户机上运行,它工作得很好,但在批处理中,它不工作。批处理作业已完成,但状态为错误,但没有日志 你能帮帮我吗 sNewLine=#新行 当您以批处理方式运行时,它将以AOS用户的身份运行,而在客户端,它最有可能以您的域用户帐户的身份运行(取决于设置) 我猜AOS用户没有适当的SQL权限。谢谢您的回复。我现在不知道AOS用户的许可是否属实。我对用于运行批处理作业的用户具有管理员权限,并且我可以使用同一用户运行其他批处理作业,这些作业将成功完成。在批处理中

我有这种类型的代码,我想成批运行。 如果我在客户机上运行,它工作得很好,但在批处理中,它不工作。批处理作业已完成,但状态为错误,但没有日志

你能帮帮我吗

sNewLine=#新行


当您以批处理方式运行时,它将以AOS用户的身份运行,而在客户端,它最有可能以您的域用户帐户的身份运行(取决于设置)


我猜AOS用户没有适当的SQL权限。

谢谢您的回复。我现在不知道AOS用户的许可是否属实。我对用于运行批处理作业的用户具有管理员权限,并且我可以使用同一用户运行其他批处理作业,这些作业将成功完成。在批处理中,写入
info(sqlStr)
,然后查看它试图运行的SQL命令。可能是
SysSQLSystemInfo::construct().getloginDatabase()在批处理中无法正常工作,或者需要断言权限。您好,我现在调试了有关此问题的更多信息。O我的类我有更多的方法使用这种代码连接=new connection();perm=新的SqlStatementExecutePermission(sqlStr);//检查是否允许使用该语句。perm.assert();statement=connection.createStatement();updatedRows=statement.executeUpdate(sqlStr);CodeAccessPermission::revertAssert();对于这个方法来说是可行的,但是对于类似的方法来说,UpdatedRows行崩溃了。Practice第一次尝试给予许可,但第二次尝试失败。在用户运行时,正在运行。我检查方法的代码是否完全相同。我尝试更改代码顺序,并且仅在第一次传递代码。您需要获得每个语句的权限,并且如果您使用嵌套SQL调用,则无法重用同一语句/连接,因为它们当前正在使用。
sqlStr = "Set Language British " + sNewLine;
sqlStr += "UPDATE p " + sNewLine;
sqlStr += "SET " + amountStr + " = ct.sumLA, " + qtyStr + " = ct.sumQ, ItemStatRecordType = " + int2str(DSDItemStatRecordType::Item) + " " + sNewLine;
sqlStr += "FROM ";
sqlStr += SysSQLSystemInfo::construct().getloginDatabase();
sqlStr += ".DBO.DSDITEMSALESSTATISTICS  AS p " + sNewLine;
sqlStr += "INNER JOIN ( " + sNewLine;
sqlStr += "  SELECT " + sNewLine;
sqlStr += "a.ItemId, " + sNewLine;
sqlStr += "SUM(a.LINEAMOUNTMST) sumLA, " + sNewLine;
sqlStr += "SUM(a.QTY) sumQ, " + sNewLine;
sqlStr += "cj.InvoiceAccount Customer, " + sNewLine;
sqlStr += "a.DATAAREAID    ctDataAreaId, " + sNewLine;
sqlStr += "a.PARTITION        ctPartitionId " + sNewLine;
sqlStr += "FROM ";
sqlStr += SysSQLSystemInfo::construct().getloginDatabase();
sqlStr += ".DBO.CUSTINVOICETRANS as a " + sNewLine;
sqlStr += "inner join ";
sqlStr += SysSQLSystemInfo::construct().getloginDatabase();
sqlStr += ".DBO.CUSTINVOICEJOUR as cj " + sNewLine;
sqlStr += "on cj.INVOICEID = a.INVOICEID " + sNewLine;
sqlStr += "and cj.INVOICEDATE = a.INVOICEDATE " + sNewLine;
sqlStr += "and cj.DATAAREAID = a.DATAAREAID " + sNewLine;
sqlStr += "and cj.PARTITION = a.PARTITION " + sNewLine;
sqlStr += "where a.INVOICEDATE ";
sqlStr += strFmt("between '%1' ", date2str(_fromDate, 123, 2, 3, 2, 3, 4) );
//sqlStr += "between '01-01-2011' ";
sqlStr += strFmt("and '%1' ",  date2str(_toDate, 123, 2, 3, 2, 3, 4));
sqlStr +=  sNewLine;
//sqlStr += "and '01-01-2012' ";
sqlStr += "GROUP BY ItemId, cj.INVOICEACCOUNT, cj.DATAAREAID, cj.PARTITION, a.DATAAREAID, a.PARTITION " + sNewLine;
sqlStr += ") as ct " + sNewLine;
sqlStr += "ON ct.ItemId = p.ItemId  " + sNewLine;
sqlStr += "and ct.Customer = p.CustAccount " + sNewLine;
sqlStr += "and p.DATAAREAID = ct.ctDataAreaId " + sNewLine;
sqlStr += "and p.PARTITION = ct.ctPartitionId " + sNewLine;


connection = new Connection();

perm = new SqlStatementExecutePermission(sqlStr);

// Check for permission to use the statement.
perm.assert();
statement = connection.createStatement();
updatedRows = statement.executeUpdate(sqlStr);

CodeAccessPermission::revertAssert();