Здравсвуйте. В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться. Рекомендуют сделать custom button, что я думаю наиболее правилний вариант, но логика сделана таким образом, что вариант с кнопкой отпадает. Еще пробовал вариант с js(почепить нужний метод на onload), но снова проблема, получаеться что на страницу(сайт) должен заходить стороний сервис(как гость). Но когда стороний сервис переходит по силке, js не исполняеться. Пробовал даже вариан с get методом, создать какую нить переменую, и в гетере запустить мой метод, но в таком случае дание походу не комитяться в базу(после инсерта ид есть, никакиз ексепшенов, но дата в базе не появляеться) - не успел разобраться
Если ли у Вас какието идеи, как можно обойти сканера? (Еще думаю поизучать api, и написать sync, но хотелось более бистрий по реализации вариант).
Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.
Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
Проверил, есть в action DML.
хм.. странно, я думал(и думаю), что трабла именно потому, что я dml юзаю, вот например у когото похожые проблемы были: Cross-Site Request Forgery (CSRF) CWE
Alex Tsitsura стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя Значит вместо POST запроса GET запрос.
Спасибо, буду пробовать
Возможно я что-то не понимаю, но если делать GET, то все равно а headers нужно положить дополнительную инфу. Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.
Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.
// просто пример, оооочень упрощена версия боевого кода @RestResource(urlMapping='/myservice') global class MyService { @HttpGet global static String doGet() { try { String acctName = RestContext.request.params.get('name'); Account acc = new Account(name = acctName); insert acc;
Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.
Проблема в тому, что нужно открытый доступ и выполнять dml(к сожалению на стороннем сервисе нельзя сделать авторизацию).
Все же, решил по изучать api стороннего сервиса, и если есть возможность, то сделаю маленькую одностороннюю синхронизацию, если будет такая возможность.