1

我们创建了特殊的表格来为供应商创建采购价格。

新表单具有与原始表单几乎相同的字段(因此我们使用PriceDiscTable了 ),但记录/数据源设置为临时表。用户填写必填字段后,将单击按钮,(后面的额外逻辑)并记录将插入数据库(实际 priceDiscTable)。

这个想法是让不一定能获得购买价格的用户获得交易价格。理论上一切正常,但是当用户无权PriceDiscTable打开新表单时,会显示错误“Not enougt right to use table 'Price agreement'”

我们尝试在 formDatasource 中设置AllowCheckfalse,但这仅允许我们打开表单,但用户仍然无法添加或修改记录。

有没有办法强制系统允许用户在临时表中写入数据?
禁用安全密钥或对真实表的全面访问不是一种选择。
重复表并使用相同的字段创建很麻烦(如果我们使用相同的表,我们可以使用data()方法来分配字段)

4

3 回答 3

2

我认为用[几乎]相同的字段创建一个新的临时表将是最好的解决方案。

如果您反对这种方法的唯一原因是您无法使用data()将数据从一个表复制到另一个表,则可以buf2BufByName()按照此处所述使用:http: //mybhat.blogspot.co.uk/2012/07/动力学-ax-buf2buf-and-buf2bufbyname.html

于 2012-10-26T00:27:17.457 回答
0

您可以使用RunAs来模拟另一个用户……也许是系统用户。我并不完全遵循您正在尝试做的事情,但如果您确切地知道您的自定义代码正在做什么并且能够做什么,那么听起来这个解决方案对您有用。

Classes\AifOutboundProcessingService\runAsWrapper一个例子。

于 2012-10-25T23:36:00.640 回答
0

如果不给用户至少“查看”访问权限或编辑 Classes\FormRun 以某种方式绕过内核级别的安全密钥,您将无法显示 PriceDiscTable,因此它也是不可能的。

我同意 10p,您应该在其中创建一个临时表,然后创建一个与buf2bufbyname()or结合使用的自定义方法处理程序buf2buf()

如果您真的想使用 .data() ,您可以使用的另一个选项是使用 Common 作为数据源。你可以在网格上添加你想要的字段,然后你可以来回传递一个共同的。这有大量的表单设置来让它工作,但它最终可以产生你想要的东西,我认为。

static void Job8(Args _args)
{
    Common common;
    salesTable salesTable;
    ;

    common = new DictTable(366).makeRecord();

    select firstonly common where common.RecId == 5637145357;

    salesTable.data(common);

    info(strfmt("%1 - %2", salesTable.SalesId, salesTable.SalesName));
}
于 2012-10-26T02:52:13.577 回答