2014-09-02 85 views
1

我正在使用GP2013上的Web服務創建應付賬款發票。或者,我的用戶可以提供訂單項分配。我可以創建發票,但除非我在動態安全控制檯中將CreatePayablesInvoice策略修改爲「Distributions Will Be Provided」,否則發票將獲得系統提供的分配以及我創建的分配線。我希望能夠在必要時提供分發,否則我希望系統處理它。動態GP Web服務:更改運行時的策略行爲

文檔建議我應該能夠更改代碼中的策略,但是當我從GetPolicyByOperation獲取策略對象時,行爲數組爲空。我曾嘗試在代碼中手動創建行爲,但它不會改變發票創建時發生的情況。唯一影響結果的是編輯安全控制檯中的屬性。

我對改變政策代碼如下:

payablesInvoiceCreatePolicy = wsDynamicsGP.GetPolicyByOperation("CreatePayablesInvoice", context); 

BehaviorKey bk = new BehaviorKey(); 
bk.Id = new Guid("e476a157-ecf0-4dae-8cef-317dd2cfbe41"); 

Behavior b = new Behavior(); 
b.Key = bk; 

BehaviorOption opt0 = new BehaviorOption(); 
opt0.Key = new BehaviorOptionKey(); 
opt0.Key.Id = 0; 
opt0.Name = "Distributions Will Be Provided"; 

BehaviorOption opt1 = new BehaviorOption(); 
opt1.Key = new BehaviorOptionKey(); 
opt1.Key.Id = 1; 
opt1.Name = "Automatically Create Distributions"; 

b.Options = new BehaviorOption[] { opt0, opt1 }; 
b.SelectedOption = b.Options[1]; 

payablesInvoiceCreatePolicy.Behaviors = new Behavior[]{b}; 

wsDynamicsGP.CreatePayablesInvoice(payablesInvoice, context, payablesInvoiceCreatePolicy); 

文檔似乎什麼應該或不應該在這裏工作稀疏。根據我的用戶是否決定提供訂單項分配,我必須假設我應該能夠根據我在運行時看到的適應性更新策略。

有人知道我失蹤了嗎?

回答

1

是的。我花了2天時間來解決這個問題。你選擇了在創建發票自動創建配電線路的行爲

wsDynamicsGP.UpdatePolicy(payablesInvoiceCreatePolicy, new RoleKey { Id = "00000000-0000-0000-0000-000000000000" }, context) 

wsDynamicsGP.CreatePayablesInvoice(payablesInvoice, context, payablesInvoiceCreatePolicy); 
2

注:調用創建發票如下之前添加行爲策略對象UpdatePolicy後。該行爲的內部屬性也必須設置爲true。

下面是一個工作示例還利用FlowerKing的回答是:

BehaviorKey bk = new BehaviorKey(); 
bk.Id = new Guid("e476a157-ecf0-4dae-8cef-317dd2cfbe41"); 
bk.PolicyKey = payablesInvoiceCreatePolicy.Key; 

Behavior b = new Behavior(); 
b.Key = bk; 
b.Internal = true; 

BehaviorOption opt0 = new BehaviorOption(); 
opt0.Key = new BehaviorOptionKey(); 
opt0.Key.Id = 0; 
opt0.Name = "Distributions Will Be Provided"; 

BehaviorOption opt1 = new BehaviorOption(); 
opt1.Key = new BehaviorOptionKey(); 
opt1.Key.Id = 1; 
opt1.Name = "Automatically Create Distributions"; 

b.Options = new BehaviorOption[] { opt0, opt1 }; 
b.SelectedOption = b.Options[0]; 
policy.Behaviors = new Behavior[] { b }; 

client.UpdatePolicy(payablesInvoiceCreatePolicy, new RoleKey { Id = "00000000-0000-0000-0000-000000000000" }, context); 
client.CreatePayablesInvoice(payablesInvoice, context, payablesInvoiceCreatePolicy);