Dynamics GP Web服务:在运行时更改策略行为

时间:2014-09-02 20:19:47

标签: microsoft-dynamics

我正在使用GP2013上的Web服务创建应付帐款发票。或者,我的用户可以提供订单项分配。我可以创建发票,但除非我将CreatePayablesInvoice政策修改为"将提供分配"在动态安全控制台中,发票既可以获得系统提供的分配,也可以获取我正在创建的分配行。我希望能够在必要时提供发行版,否则我希望系统能够处理它。

文档建议我应该能够在代码中更改策略,但是当我从GetPolicyByOperation返回策略对象时,Behaviors数组为空。我尝试在代码中手动创建行为,并且它不会改变创建发票时发生的情况。唯一影响结果的是在安全控制台中编辑属性。

我改变政策的代码如下:

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

关于应该或不应该在这里工作的文件似乎很少。我必须假设我应该能够根据我的用户是否决定提供行项目分发来更新我认为适合的策略。

有谁知道我错过了什么?

2 个答案:

答案 0 :(得分:2)

是。我花了2天时间来解决这个问题。在调用创建发票之前将行为添加到策略对象UpdatePolicy,如下所示:

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

wsDynamicsGP.CreatePayablesInvoice(payablesInvoice, context, payablesInvoiceCreatePolicy);

答案 1 :(得分:2)

请注意,您选择了在创建发票时自动创建分配行的行为。行为的Internal属性也必须设置为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);