2020-08-18 06:13发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
当我尝试使用DI服务器更新服务呼叫时,出现故障:
无法修改未分配的服务呼叫。 [-5002]
但是,服务呼叫已分配给队列。
SAP B1"业务逻辑"以其无限的智慧指出,仅当服务调用被分配给一个人时才可以对其进行修改,而当该服务调用被分配给一个队列时就不能进行更新(即使它在技术上也得到了分配) ,没有人对此负责。
我发现的针对此问题的(简单且可能仅)解决方案是,您必须将服务调用分配给某人,对其进行更新,然后再将其分配回去。 在将活动添加到服务调用中时,这尤其令人讨厌,因为随后步骤变为
1。 给自己分配电话
2。 创建活动(通过服务调用链接)
3。 添加活动
4。 更新服务电话
5。 将其分配回队列
6。 更新服务电话。
假设您要以编程方式执行此操作(假设这是SDK论坛),则可以使用类似的代码(代码为PHP,但逻辑应该不言而喻)
[代码]
私有函数DISUpdate_basic(...){
//返回已更新或创建的呼叫的服务呼叫ID,或在发生错误时返回null
//此更新是之后与DI服务器的直接XML交互。
//创建必要的XML信封。
}
公共功能DISUpdate($ addNotUpdate = false){
//首先,仅在需要时将调用移至$ me而不是Queue
$ isInQueue = $ this-> inQueue;
$ queue = $ this-> queue;
$ prefs = SapTools mysettings();
$ myuid = $ prefs ['UserId'];
if($ isInQueue){
debug("呼叫处于队列中,在进行更改之前将其移至我自己($ myuid)");
$ this-> inQueue = false;
$ this-> assignedTo = $ myuid;
//***错误***如果传递了$ addNotUpdate,则将创建两个调用
//一个没有队列,另一个有。 在添加活动(监控)和通话时注意到
//解决方案:存储生成的callid,并在更新时重复使用。
if(!($ aucallid = $ this-> DISUpdate_basic($ addNotUpdate))){
debug("向我自己打电话并更新-失败!");
返回false;
//仅当呼叫保持打开状态时才将其放回队列中-封闭的呼叫必须为
//分配给一个人
if($ this-> status!= variable_get('SAP_DIS_ClosedStatus',null)){
debug("调用已更新,将其放回正确的队列...");
//我们真的不需要重新加载服务呼叫信息-我要做的就是
//设置callid,以便进行更新
$ this-> callId = $ aucallid;
$ this-> inQueue = true;
$ this-> queue = $ queue;
返回$ this-> DISUpdate_basic(); //此时总是UPDATE
}其他{
//呼叫已关闭,因此我无法将其移回队列
返回$ this-> callId;
//不在队列中,只需传递到DISUpdate_basic()
返回$ this-> DISUpdate_basic($ addNotUpdate);
[/code]
似乎不起作用...!
之后
如果(!String.IsNullOrEmpty(sc.Queue))
{
sc.AssigneeCode = XmlConvert.ToInt32(val);
sc.Queue = String.Empty;
sc.Update();
sc.Queue仍被设置,AssigneeCode已被丢弃...
有什么想法吗?
它仍然是SAP中的错误
最多设置5个标签!
SAP B1"业务逻辑"以其无限的智慧指出,仅当服务调用被分配给一个人时才可以对其进行修改,而当该服务调用被分配给一个队列时就不能进行更新(即使它在技术上也得到了分配) ,没有人对此负责。
我发现的针对此问题的(简单且可能仅)解决方案是,您必须将服务调用分配给某人,对其进行更新,然后再将其分配回去。 在将活动添加到服务调用中时,这尤其令人讨厌,因为随后步骤变为
1。 给自己分配电话
2。 创建活动(通过服务调用链接)
3。 添加活动
4。 更新服务电话
5。 将其分配回队列
6。 更新服务电话。
假设您要以编程方式执行此操作(假设这是SDK论坛),则可以使用类似的代码(代码为PHP,但逻辑应该不言而喻)
[代码]
私有函数DISUpdate_basic(...){
//返回已更新或创建的呼叫的服务呼叫ID,或在发生错误时返回null
//此更新是之后与DI服务器的直接XML交互。
//创建必要的XML信封。
}
公共功能DISUpdate($ addNotUpdate = false){
//首先,仅在需要时将调用移至$ me而不是Queue
$ isInQueue = $ this-> inQueue;
$ queue = $ this-> queue;
$ prefs = SapTools mysettings();
$ myuid = $ prefs ['UserId'];
if($ isInQueue){
debug("呼叫处于队列中,在进行更改之前将其移至我自己($ myuid)");
$ this-> inQueue = false;
$ this-> assignedTo = $ myuid;
//***错误***如果传递了$ addNotUpdate,则将创建两个调用
//一个没有队列,另一个有。 在添加活动(监控)和通话时注意到
//解决方案:存储生成的callid,并在更新时重复使用。
if(!($ aucallid = $ this-> DISUpdate_basic($ addNotUpdate))){
debug("向我自己打电话并更新-失败!");
返回false;
}
//仅当呼叫保持打开状态时才将其放回队列中-封闭的呼叫必须为
//分配给一个人
if($ this-> status!= variable_get('SAP_DIS_ClosedStatus',null)){
debug("调用已更新,将其放回正确的队列...");
//我们真的不需要重新加载服务呼叫信息-我要做的就是
//设置callid,以便进行更新
$ this-> callId = $ aucallid;
$ this-> inQueue = true;
$ this-> queue = $ queue;
返回$ this-> DISUpdate_basic(); //此时总是UPDATE
}其他{
//呼叫已关闭,因此我无法将其移回队列
返回$ this-> callId;
}
}其他{
//不在队列中,只需传递到DISUpdate_basic()
返回$ this-> DISUpdate_basic($ addNotUpdate);
}
}
[/code]
似乎不起作用...!
之后
如果(!String.IsNullOrEmpty(sc.Queue))
{
sc.AssigneeCode = XmlConvert.ToInt32(val);
sc.Queue = String.Empty;
sc.Update();
}
sc.Queue仍被设置,AssigneeCode已被丢弃...
有什么想法吗?
它仍然是SAP中的错误
一周热门 更多>