Ошибка в создании счета из заказа клиента в suitescript 2.0? - PullRequest
1 голос
/ 01 октября 2019

Я попытался включить кнопку (созданную из пользовательского события) в заказ на продажу. После нажатия будет сгенерирован счет. Как только кнопка нажата, появляется ошибка, и счет не генерируется. Может ли кто-нибудь помочь мне с этим?

    //Client script
  function pageInit() { 
  }

    function csForButton(ctx) {

        var rec = curr.get();
        var customer = rec.getValue({ "fieldId": "customer" });
        log.error({
          title: 'customer',
          details: customer
        });

        var scriptURL = url.resolveScript({
          "scriptId": "customscript_button_task_sl",
          "deploymentId": "customdeploy_button_task_sl"
        });
        console.log('scriptURL', scriptURL);
        window.onbeforeunload = null;
        window.open(scriptURL + '&id=' + rec.id);

      }

      return {
        pageInit: pageInit,
        csForButton: csForButton
      };

// Сценарий пользовательских событий

function beforeLoad(ctx) {
    //if (context.type == context.UserEventType.VIEW) {
    addbutton(ctx);
   // }
  }


  function addbutton(ctx) {
        try {
      var rec = ctx.newRecord;//record object, now we can get its properties through it(e.g. fields)
      var statusOfTrans = rec.getValue({ fieldId: 'status' });
      log.error('statusOfTrans', statusOfTrans);

      ctx.form.clientScriptFileId = "16474"

      if (ctx.type == "view" && statusOfTrans == 'Pending Fulfillment') {
        ctx.form.addButton({
          id: 'custpage_make_invoice',
          label: 'create invoice!',
          functionName: 'csForButton'
        });
      }

    }
        catch (error) {
            log.error('addbutton', error);
        }
    }
    return {
        beforeLoad: beforeLoad,
    }

// Сценарий Suitelet

  function onRequest(ctx) {
    try {
      var req = ctx.request;
      var res = ctx.response;

      if (req.method == 'GET') {

        var objRecord = rec.transform({
          fromType: rec.Type.SALES_ORDER,
          fromId: req.parameters.id,
          toType: rec.Type.INVOICE,
          isDynamic: true,
        });

        objRecord.save({
          ignoreMandatoryFields: true
        });

        res.write({output: 'Invoice created'});

      }
    } catch (error) {
      log.error('onRequest', error);
    }
  }
  return {
    'onRequest': onRequest
  }

ошибка (в комплекте):

{"type": "error.SuiteScriptError", "name": "USER_ERROR", "message": "Для этой транзакции необходимо ввести хотя бы один элемент строки.", "Stack":["анонимный (N / serverRecordService)", "onRequest (/ SuiteScripts / button SL.js: 39)"], "причина": {"тип": "внутренняя ошибка", "код": "USER_ERROR", "подробности":" Вы должны ввести хотя бы одну позицию для этой транзакции. "," UserEvent ": null," stackTrace ": [" anonymous (N / serverRecordService) "," onRequest (/ SuiteScripts / button SL.js: 39)"]," notifyOff ": false}," id ":" "," notifyOff ": false," userFacing ": false}

Как говорится в сообщении об ошибке, включить как минимум 1 строку, но я хотел этогогенерироваться автоматически. Я новичок в suitescript и получаю всю помощь из документации. Кто-нибудь может мне помочь, что я делаю не так? Спасибо

1 Ответ

1 голос
/ 01 октября 2019

Вам нужен статус SO, чтобы быть ожидающим выставление счета. Если статус SO - «Ожидает выполнения», то ни одна позиция не готова для выставления счета.

...