首页 > 解决方案 > LWC,使用wire和Apex从JavaScript设置记录到数据库soql,错误

问题描述

我尝试在 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 代码有什么不正确的地方?是一个有类似问题的例子。

标签: salesforceapexsoqllwc

解决方案


@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

在此处输入图像描述


推荐阅读