APEX: выполнение обновления после выноски - ошибка DML - PullRequest
0 голосов
/ 29 февраля 2020

Когда я делаю выноску, я хотел бы сохранить результат в объекте. Но я получаю следующее сообщение об ошибке:

DML в настоящее время не разрешен. Произошла непредвиденная ошибка. Ваша организация-разработчик получила уведомление.

Может кто-нибудь помочь, пожалуйста?

это код:

public with sharing class Tower_clientID
    {
        public String city{get;set;}
        public String temp{get;set;}
        public String Surname1{get;set;}


        public Tower_clientID(ApexPages.StandardController stdController)  
        {
            Account account=(Account)stdController.getRecord();
            account=[select Id,ShippingCity from Account where Id=:account.id];

            String AccountCity=account.ShippingCity;
            String reqBody='{"DocumentType":"ID","DocumentId":"'+AccountCity+'"}';
            Http http = new Http();
            HttpRequest request = new HttpRequest();

  request.setEndpoint('https://tow.turnkey.com/TOW30API/api/onboarding/get_clientByDocumentId');
    request.setMethod('POST');
    request.setHeader('Content-Type', 'application/json');
    request.setHeader('tow-domain', 'TR');
    request.setHeader('tow-language','en-GB');
    request.setHeader('tow-usercode', 'C32B3C53D238F6DCE44E34B');
    request.setHeader('tow-apikey', '1122334477889900');    

    request.setBody(ReqBody);

            if(response.getStatusCode()==200)
            {
            Map<String,Object> results=(Map<String,Object>)JSON.deserializeUntyped(response.getBody());
            city=String.valueOf(results.get('Id'));
            temp=String.valueOf(results.get('Name'));
            Surname1=String.valueOf(results.get('Surname'));

                account =[select Id,ShippingCity from Account where Id=:account.id];
            account.ShippingCity = 'New York';
            update account;
            } } }

1 Ответ

1 голос
/ 01 марта 2020

DML недопустим в конструкторах, в вашем случае проблема заключается в методе Tower_clientID.

Бесстыдный плагин, я свяжу свой 6-летний ответ для дополнительной информации: https://salesforce.stackexchange.com/questions/28833/why-is-dml-not-allowed-in-constructor

Переместите код (вызов и обновление) в другой метод. Или оставить выноску в конструкторе, вы можете отобразить результаты? Но обновление - это явное действие: человек нажимает кнопку, понимает, что он делает, принимает «побочные эффекты».

  • Если вы вызываете его из другого класса Apex - вызовите конструктор Сначала метод.
  • Если вы звоните из Visualforce (я имею в виду, что у вас есть StandardController там) - вы можете сделать кнопку или использовать <apex:page action="{!calloutHere}"> (хотя это не здорово, но если вы действительно хотите, чтобы это произошло как можно скорее при загрузке страницы вы понимаете риски ...
  • Похоже на ауру (используйте обработчик init) и компоненты веб-страниц молнии (используйте @wire? connectedCallback?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...