1

ベンダーの購入価格を作成するための特別なフォームを作成しました。

新しいフォームには元のフォームとほぼ同じフィールドがあります (したがって を使用PriceDiscTableしました) が、レコード/データソースは一時テーブルとして設定されています。ユーザーが必須フィールドに入力した後、ボタンをクリックすると (余分なロジックが背後にあります)、レコードがデータベースに挿入されます (実際の priceDiscTable)。

アイデアは、必ずしも購入価格にアクセスできないユーザーのために、取引価格へのアクセスを許可することでした。理論的にはすべて問題ありませんでしたが、ユーザーがPriceDiscTable新しいフォームを開くためのアクセス権を持たない場合、 「テーブル '価格契約' を使用する権利がありません」というエラーが表示されました。

AllowCheckformDatasource にtoを設定しようとfalseしましたが、これはフォームを開くことしか許可しませんが、ユーザーはまだレコードを追加または変更できません。

ユーザーが一時テーブルにデータを書き込むことをシステムに強制する方法はありますか?
セキュリティ キーまたは実際のテーブルへのグランド アクセスを無効にすることはできません。
テーブルを複製して同じフィールドを作成するのは面倒です(同じテーブルを使用する場合は、data()メソッドを使用してフィールドを割り当てることができます)

4

3 に答える 3

2

[ほぼ] 同じフィールドを持つ新しい一時テーブルを作成することが最善の解決策になると思います。

このアプローチに反対する唯一の理由が、data()あるテーブルから別のテーブルにデータをコピーするために使用できない場合buf2BufByName()は、ここで説明されているように使用できます: http://mybhat.blogspot.co.uk/2012/07/ dynamics-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 を表示することはできません。

一時テーブルを作成してから、buf2bufbyname()またはと組み合わせたカスタムメソッドハンドラーを作成する必要がある10pに同意します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 に答える