
您有未提交的待处理工作.请在呼叫前提交或回滚
我调用getItems()来填充下拉列表,然后调用add函数来插入下拉列表中的所选项
public PageReference add() { insert technology; return null; }public List<Selectoption> getItems() { List<Selectoption> options = new List<Selectoption>(); List<Technology__c> AddedT=[SELECT name FROM Technology__c]; httpRequest req = new httpRequest(); req.setMethod('GET'); req.setEndpoint('http://submit.toolsBerry.com/sfdc/technologIEs'); http http = new http(); httpResponse res = http.send(req); String response=res.getbody(); XmlStreamReader reader = new XmlStreamReader(response); List<String> AllTech = new List<String>(); while(reader.hasNext()) { if (reader.getEventType() == XmlTag.START_ELEMENT) { if ('string' == reader.getLocalname()) { while(reader.hasNext()) { if (reader.getEventType() == XmlTag.END_ELEMENT) { break; } else if (reader.getEventType() == XmlTag.CHaraCTERS) { String tname = reader.getText(); AllTech.add(tname); } reader.next(); } } } reader.next(); }}解决方法 这是因为你需要在完成任何标注后完成所有DML,而不是之前.因此任何insert / update / upsert或delete语句都必须遵循任何http.send(req);调用. **看起来你的列表在调用add()方法后重新填充,因为你的列表存在于getter方法中**
这是特定于线程的,必须按照任何给定线程的顺序出现.因此,例如,当用户单击带有 *** 作方法的按钮时,该调用中的所有DML语句都必须遵循在同一线程中发生的任何调用.对于触发器或批处理Apex也是如此.
在某处以某种方式更新数据的getter / setter可能会导致这种情况.例如:
public String someProperty{ get { return [SELECT name FROM CustomObject__c WHERE ID = :this.someID]; } set(String s) { CustomObject__c c = [SELECT name FROM CustomObject__C WHERE ID = :this.someID] c.name = s; update c; }} 此外,永远不要在getter中添加标注.始终将callout放在一个只执行一次的显式方法中. Getter将多次被解雇,并且标注在Apex中有严格的限制.
总结以上是内存溢出为你收集整理的在调用Web服务api时出现Salesforce错误全部内容,希望文章能够帮你解决在调用Web服务api时出现Salesforce错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)