【问题标题】:LWC, set record to database soql from JavaScript with wire and Apex, errorLWC,使用wire和Apex从JavaScript设置记录到数据库soql,错误
【发布时间】:2021-07-01 08:10:23
【问题描述】:

我尝试在 JS 中向数据库 soql 写一些东西,但它不起作用。 当我单击“添加到购物车”按钮时,它被称为 handlePlaceOrder()。 这里称为 Apex 方法 placeOrder('hello'),参数为 String。 然后它崩溃了“内部服务器错误”。 当我在开发者控制台中仅执行 Apex 方法 placeOrder('Order01') 时,它可以工作,将 nameOfOrder 写入数据库。

代码如下:

html(正常):

<template>
  <div class="shopping-cart">
    <template if:true={messageFromMain}>
      <div class="container">
        <h1>Items in Cart</h1>
        <lightning-card title="Shopping cart">
          <lightning-button 
            class="slds-m-left_x-small"  
            label="Place order" 
            title="Place order"
            variant="success"
            onclick={handlePlaceOrder}>
          </lightning-button>
        </lightning-card>
      </div>
    </template>
    <template if:false={messageFromMain}>
      <h1>Select the shoes</h1>
    </template>
  </div>
</template>

JS(错误):

import { LightningElement, api, wire } from 'lwc';
import placeOrder from '@salesforce/apex/ProductMaster.placeOrder';

export default class ShoppingCart extends LightningElement {
  nameOfOrder;

  @api messageFromMain;

  @wire(placeOrder, { nameOfOrder: '$nameOfOrder'})


  // handle click to button Place order
  handlePlaceOrder() {
    console.log('It was pressed button \'Add to Cart\'.');

    placeOrder('hello');
  }
}

顶点(正常):

@AuraEnabled(cacheable=true)
public static void placeOrder(String nameOfOrder) {
  Shop_Order__c newOrder = new Shop_Order__c(
    Text__c = nameOfOrder
  );
  insert newOrder;
}

错误:

Error: An internal server error has occurred
Error ID: 185265246-97831 (-1502885840)
    at U.B.mk (https://static.lightning.force.com/eu40/auraFW/javascript/Q8onN6EmJyGRC51_NSPc2A/aura_prod.js:656:438)

这段 JavaScript 代码有什么不正确的地方? Here 是一个有类似问题的例子。

【问题讨论】:

    标签: salesforce apex soql lwc


    【解决方案1】:
    @wire(placeOrder, { nameOfOrder: '$nameOfOrder'})
    

    您可能必须删除该行。您的 handlePlaceOrder() 被视为该行的延续(忽略换行符),作为异步处理完成时要做什么(回调)的处理程序。在您链接的答案中,将您写的内容与“fetchedContact”进行比较

    handlePlaceOrder 中,我认为您需要将参数作为 JSON 对象传递,其中名称与顶点参数的名称匹配。试试

    顶点

    @AuraEnabled
    public static Id insertAccount(String n){
        Account a = new Account(Name = n);
        insert a;
        return a.Id;
    }
    

    组件的相关html

    <lightning-button label="test" onclick={handlePlaceOrder}>
    </lightning-button>
    

    组件的相关JS

    import insertAccount from '@salesforce/apex/SomeClass.insertAccount';
    export default class SomeComp extends LightningElement {
    handlePlaceOrder() {
            console.log('It was pressed button \'Add to Cart\'.');
            insertAccount({ n: 'hello' })
                .then(result => {
                    console.log(result);
                })
                .catch(error => {
                    debugger;
                });
        }
    
    }
    

    浏览器控制台

    它保存了名字OK

    【讨论】:

    • 我试过了。现在,它没有错误,但是数据库中没有写入任何内容。 Shop_Order__c 中的“你好”is not。 “你好”在哪里丢失了?如果我理解正确,fetchedContact 用于获取值,我想设置值。
    • 它只是一个字符串(而不是说一个帮助类对象)并且您传递的参数与顶点参数的名称完全相同?对我有用,请查看扩展示例。
    • Apex 中出现错误。 它不适用于(cacheable=true) 正确的 Apex 代码:@AuraEnabled public static Id placeOrder(String nameOfOrder) { Shop_Order__c newOrder = new Shop_Order__c(Text__c = nameOfOrder); insert newOrder; return newOrder.Id; } 错误的 Apex 代码:@AuraEnabled(cacheable=true) public static Id placeOrder(String nameOfOrder) { Shop_Order__c newOrder = new Shop_Order__c(Text__c = nameOfOrder); insert newOrder; return newOrder.Id; } 谢谢。 @eyescream 解决了它。
    • 我不明白这个stackoverflow。 cmets 中的代码格式不正确。我上一篇文章的代码太难辨认了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多