2012-10-25 40 views
1

我們創建了特殊表單來爲供應商創建採購價格。如何在表單上添加/保存臨時表

新形式,具有幾乎相同的字段原(所以我們用PriceDiscTable),但記錄/ datasoruce設定爲臨時表。用戶填寫必填字段後,單擊按鈕(後面的額外邏輯),並記錄數據庫(真實priceDiscTable)。

當時的想法是盛大獲得貿易的價格爲用戶認爲沒有必要訪問購買的價格。理論上一切正常,但當用戶無法訪問PriceDiscTable打開新窗體時,顯示錯誤「不能使用表的價格協議」「

我們嘗試在formDatasource中將AllowCheck設置爲false,但這隻允許我們打開表單,但用戶仍然無法添加或修改記錄。

有沒有什麼辦法來強制系統,讓用戶在臨時表中寫入數據?
禁用安全密鑰或對真實表的盛大訪問不是一個選項。
複製表並用相同的字段創建是滋擾(如果我們使用相同的表,我們可以使用data()方法來分配領域)

回答

0

您可以使用RunAs冒充其他用戶......也許一個系統用戶。我並不完全遵循你正在嘗試做的事情,但是如果你確切知道你的自定義代碼正在做什麼並且能夠做到這一點,那麼聽起來像這個解決方案對你很有用。

Classes\AifOutboundProcessingService\runAsWrapper看一個例子。

+0

RunAs始終在客戶端的服務器端...表單上運行。 我想要盛大訪問表,以便用戶可以將一些數據放在網格上(使用臨時表)。但是table有securityKey,因爲是普通表(我在'init'方法中用'.setTmp()'寫入臨時表) –

+0

Ahhh ...我明白你想要做什麼。因此,「AllowCheck」擺脫了安全錯誤,但網格不顯示。 –

0

您將無法顯示PriceDiscTable而不給用戶至少「查看」訪問或編輯Classes \ FormRun以某種方式繞過安全密鑰,這是內核級別,所以它也是不可能的。

我同意10p你應該創建一個臨時表,然後創建一個自定義方法處理程序結合buf2bufbyname()buf2buf()

另一個選項可以耍着,如果你真的想使用的.data()是採用公共的數據源。你可以在普通的網格中添加你想要的字段,然後你可以傳遞一個共同的來回。這有很好的表單設置來完成這個工作,但它可以產生最終我想要的。

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)); 
}