如何使用DI API添加和更新多个联系人?

2020-09-03 13:47发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我试图在一个请求中添加和更新多个...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我试图在一个请求中添加和更新多个联系人,但它抛出并出错,如下所示

无法更新客户:[OCPR.Name] [行:1],'[Microsoft] [SQL Server的ODBC驱动程序13] [SQL Server]无法将值NULL插入表" ZZZ_TEST_SBO_WineSource_20190719.dbo"的"名称"列中 .OCPR'; 列不允许为空。 插入失败。 -1

方案1.如果我像创建联系人1那样构造请求,则联系人2要更新,联系人3要更新意味着它可以正常工作。 联系人1是在SAP中创建的。

方案2。如果我像请求联系人1那样更新请求,请创建联系人2,请更新联系人3。 在内部,它创建一个行,其联系人代码为-1和-2,并且在-1中将Null和-2中的所有值都设置为该行中插入的联系人。 因此会引发类似"列不允许为空"的错误。

方案3。如果我将请求(例如联系1)更新,联系2(更新),联系3(创建),则构造了请求。 在内部,它创建一个行,其联系人代码为-1,-2和-3,在-1和-2中,所有值都为Null,而-3中的所有值也将插入该行中。 因此会引发类似"列不允许为空"的错误。

可以给我提供示例代码吗? 您能帮我解决这个问题吗?

2条回答
ZJXianG
2020-09-03 14:10
嗨,
 请找到我的示例Java代码。 如果有任何错误,请更正。
 NodeList contactNodeList =(NodeList)xpath.evaluate("//Fields/Field [@ type ='loop'and @ name ='contact']",
 mapDoc,XPathConstants.NODESET);
 int contactListLen = contactNodeList.getLength();
 slf4jLogger.info(" Input ContactNode" + contactListLen);


 int contactCount = ibp.getContactEmployees()。getCount();
 slf4jLogger.info(" Sap Contact Count" + contactCount);
 int contactCountCopy = contactCount;


 slf4jLogger.info(" sap联系人名称开始" + ibp.getContactEmployees()。getName());
 for(int cl = 1; cl <= contactListLen; cl ++){
 slf4jLogger.info(" contact Count each initial" + ibp.getContactEmployees()。getCount());
 布尔值contactMatched = false;
 如果(更新){
 而(contactCount> 0){


 slf4jLogger.info("之前的内部代码:" + ibp.getContactEmployees()。getInternalCode());
 ibp.getContactEmployees()。setCurrentLine(contactCount-1);
 slf4jLogger.info(" Contact setCurrentLine" +(contactCount-1));
 slf4jLogger.info("之后的内部代码:" + ibp.getContactEmployees()。getInternalCode());


 节点setNameNodeChk =(节点)xpath.evaluate("//Fields/Field [@ type ='loop'and @ name ='contact'] ["
 + cl +"]/chField [@ name ='setName']/@ value",mapDoc,XPathConstants.NODE);
 如果(setNameNodeChk!= null){
 字符串setNameChk = setNameNodeChk.getTextContent();
 slf4jLogger.info("联系人输入" + setNameChk +"树液中的联系人"
 + ibp.getContactEmployees()。getName());


 如果(ibp.getContactEmployees()。getName()。equalsIgnoreCase(setNameChk)){
 contactMatched = true;
 slf4jLogger.info("联系人姓名匹配" +(contactCount-1)+"" + setNameChk);
 打破;
 }其他{
 contactCount--;
 slf4jLogger.info(" Contact setCurrentLine decrement" + contactCount);


 }
 }
 }
 如果(cl!= contactListLen){
 contactCount = contactCountCopy;
 }
 如果(!contactMatched && contactCountCopy!= 1){


 slf4jLogger.info(" add contactMatched false首先添加方法");
 ibp.getContactEmployees()。add();
//ibp.getContactEmployees()。setCurrentLine(contactInsertNum-1);


 }否则,如果(contactCountCopy == 1 &&!contactMatched
 && ibp.getContactEmployees()。getName()。length()!= 0){
 slf4jLogger.info(" add contactMatched false和contactcount = 1");
 ibp.getContactEmployees()。add();
 }
 slf4jLogger.info(" ibp长度" + ibp.getContactEmployees()。getName()。length());


 }其他{
 contactMatched = true;
 }
 节点setCityOfBirthNode =(节点)xpath.evaluate("//Fields/Field [@ type ='loop'and @ name ='contact'] [" + cl
 +"]/chField [@ name ='setCityOfBirth']/@ value",mapDoc,XPathConstants.NODE);
 如果(setCityOfBirthNode!= null){
 字符串setCityOfBirth = setCityOfBirthNode.getTextContent();
 ibp.getContactEmployees()。setCityOfBirth(setCityOfBirth);
 }


//slf4jLogger.info(" ibp getContactEmployees" +
//ibp.getContactEmployees()。delete());
 如果(contactMatched || ibp.getContactEmployees()。getName()。length()== 0){
 slf4jLogger.info(" ibp getContactEmployees最后添加");
 ibp.getContactEmployees()。add();
 }
 

一周热门 更多>