如何在表单上添加/保存临时表

时间:2012-10-25 21:25:58

标签: axapta

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

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

这个想法是为那些不一定能获得购买价格的用户提供高价的交易价格。理论上一切都很好,但是当用户无法访问PriceDiscTable打开新表单时,会显示错误“没有权利使用表'价格协议'”

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

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

3 个答案:

答案 0 :(得分:2)

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

如果您反对此方法的唯一原因是您无法使用data()将数据从一个表复制到另一个表,则可以使用buf2BufByName(),如下所述:{{3 }}

答案 1 :(得分:0)

您可以使用RunAs模仿其他用户......也许是系统用户。我并不完全遵循你想要做的事情,但听起来这个解决方案对你有用,如果你确切知道你的自定义代码正在做什么和能够做什么。

请参阅Classes\AifOutboundProcessingService\runAsWrapper查看示例。

答案 2 :(得分:0)

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

我同意10p你应该在哪里创建一个临时表,然后创建一个结合buf2bufbyname()buf2buf()的自定义方法处理程序。

另一个选项你可以搞砸,如果你真的想要使用.data()使用Common作为数据源。您可以使用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));
}