2014-09-02 72 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);